我究竟为什么要每天埋头写代码?

640?wx_fmt=gif

作为程序员,你有想过每天的编程工作对自己有什么影响吗?本文的作者认为,正是编程,帮助他成长为了一名强大、自信的开发人员。

640?wx_fmt=jpeg

以下为译文:

在成为专业的软件开发人员之前,我曾在一家公司的技术部门工作,当时我只是Javascript爱好者,渴望成为一名真正的开发人员。

当时,我是一名大学刚毕业的学生,对业务组成的各种原型还抱有天真的想法,而让我感到震惊的是,程序员的做事态度与其他同事的态度截然不同。大多数时候,在我眼中那家公司的文化充斥着阿谀奉承,各种角色的职能也一塌糊涂,工作氛围总是让人倍感紧迫与压力。

为了表现努力工作,你需要表现得惶惶不可终日。尽管嘴上不说,但内心深处大家都知道说‘我不知道’是无能的表现,会令高层人士不满。

但是,程序员似乎不同。如果有人气势汹汹地冲到一个程序员的办公桌前,报告了一个bug,然后怒吼道:“为什么会发生这样的事?!”应该对此负责的程序员只是有气无力地坐在那里,然后说,“你去写票吧,我们会做调查。”

哇,我当时想——“我们会做调查”,他们没有费尽心机讨好权威,没有慌慌张张地做解释,而我想成为他们那样的人。

对我来说印象最为深刻的是,虽然当时我可能不敢说那样的话,但是技术部门对负责的工作信心满满。

这些人很聪明,所以有信心也是自然的,但是原因不仅如此。当时我有一种感觉,软件开发人员的工作与现实紧密相连,而其他岗位则没有。当然这样说可能对那些在其他职位的人来说并不公平,不过这些开发人员工作的成败有明确的定义标准,而且他们完全有能力达到这些标准

我不是指企业强加给人的那种不切实际的标准。我说的是:“我的单元测试通过了吗?”、“我的应用程序在加载的时候会崩溃吗?”、“我改好了每个人都担心的bug了吗?”这些标准完全是客观的、非政治性的。

相反的例子是,成功与否的标准定义模糊,通过贬低他人的成功来表现自己——这种情况下你需要把自己的信仰托付给有影响力的某个人,而无需对任何真实情况负责;强调做作和夸夸其谈,而不重视诚实和行动。而且在程序员的这边也没那么多扯淡的事儿。

尽管现在我已经意识到:

我上面描述的这些现象其实极其罕见,可能仅限于我曾经工作的那家公司;

这些信仰可能更多地表现了我对我当时的角色的不满,而不是任何“客观性”的真实情况;

如果其他专家能够定义出难以定义的“成功的标准”,那么这并不总意味着完全没有标准;

我也认识到,在软件开发领域,虽然理论上来讲不应该有任何扯淡的事儿,但实际中也并不是完全一尘不染的。

在我成功获得梦寐以求的转职之后(感谢一些人,直到今天我都心存感激),我发现了一些获得自信的技巧,而在以前我只有羡慕别人的份儿。

首先我意识到,如果程序员是公司里最冷静的人,那么这种生理激励就像是让你写好代码的氪石一样。充满压力会限制你的专注力,导致你无法思考抽象的事物。在任何紧急情况下,我都要学会在不提高我的心率的前提下提高思维水平——我需要学习不被他人的压力影响

我学到的第二件事就是假设测试相对于试错而言的重要性。假设你需要用一个值对一个变量进行初始化,而且你知道这个值应当是几个可能值中的一个。你可以在头脑中模拟系统,直到你知道哪个才是正确的值(假设),或者试验每个值,直到程序正常运行(试错)。

后者可能更快、更“容易”,但很明显前者才对你的掌控能力有帮助,更不用说长远来看前者能增强你以后解决类似问题的能力了。针对正确答案建立假设并验证需要一点“灵感”,相反,无意义地试验集中选项并随机选择一个则无需任何思考——你应该避免那种被代码孤立的感觉,开发者的工作是告诉机器该怎么做,而不是像个机器一样做事

相反,你的目标应该是发展你的思维模式,使得你认为写代码是一种表达的形式,就像奥威尔提倡的写散文时的观点一样。

不过这里的“灵感”和“孤立”这两个词我想多谈一点。

几年前我读过马斯洛的《Towards a Psychology of Being》一书,书中他提到了安全感和成长之间的根本的对立。他的理论认为,童年时期或以后任何重要时期的个性养成,都是基于“灵感”的积累。有时这可能是通过某种自发的行为,在不可能的情况下成功操纵了世界的某一小部分造成的结果。因此,成长是事业扩展的一部分,能够逐渐培养对成功的感觉。

但这个概念也与价值和天赋有关。例如,马斯洛的书中,可能“亲吻某个人能带来比亲吻其他人更多的灵感”,他继续描述这种“通过灵感获得成长”的结果:

这样,我们能学到我们擅长的东西,喜爱或不喜爱的东西,我们的口味、判别能力和接受程度。一言以蔽之,这就是我们发现自我并解答那个终极问题的方法:“我是谁?我是什么?”

关于孤立,马斯洛是这样说的:

当孩子能够意识到时,与主观灵感(信任自己)相反的,是他人的意见(爱,尊重,认可,仰慕,来自他人的奖励,相信他人而不相信自己)。对于无助的婴儿和孩童而言,他人极其重要,因此失去他人(即失去他人提供的安全感、食物、爱和尊重等)是极其可怕的危险。

因此,当孩必须在自我灵感和他人的认可中二选一时,他们必然会选择他人的认可,然后压抑自己的灵感,或者干脆消灭之,或无视,或者下意识地约束。一般来说,这会造成对自我灵感的否定,或者对其产生害羞或神秘感,最终造成无法表达这种灵感。

我认为这正是他人尊重(特别是来自权威的尊重)和个人信仰之间的对立,让我被技术圈的那些冷静自信的人所打动。自我的发展,包括自信,可以认为是一系列“自我灵感”的结合,每个灵感都在前一个的基础上发展,就像土壤不断增长成小山丘一样。而且这种发展出现在对世界的直接认知过程中,而不会被他人的认知和价值观所影响。

640?wx_fmt=jpeg

也许正是我的认知失败,使我选择了编程的路。我的能力不足以让我用自己的眼睛和耳朵去认识世界;我也“无法去表达”自我灵感。这让我想起了希伯来圣经中的一段:

异教徒的崇拜是金子和银子,以及人们双手的工作。

他们有嘴,但他们不说;有眼睛,但不看。

编程给我带来了一个方便、决定性的微观世界,在这个世界中我可以得到控制感、精通和对世界的直接认知,而这正是我的一生中失去的东西。新发现的“信任自己的判断”的能力,将我的世界的中心从他人的判断上(一种高度的“自我监视”状态)移动到自己身上。

我发现,在我实施“假设测试”方法之后,某些人认为的冰冷、抽象的原则,对于我来说却十分有意义。如果程序与之前做过的假设相关,那么理解程序(或者任何事物)的行为会更容易记忆,而且特点更明显,产生更多的“灵感”。这样,尽管操纵屏幕上的光标的艺术对于婴儿来说并没有“灵感”科研,但对于成人来说则是个人成长和自信的快车。这就是我的情况。

用自己的眼睛和大脑去决定何为“好的软件程序”,能够导致更少地依赖别人。自己对真实判断负责,能够让你对好的东西负责。我认为“生活方式设计”行动就是个很好的思维成长的例子。它能鼓励你忽视惯例,批判性地评估你的生活方式,并根据你对自己和你的偏好了解的内容进行调整,让这些学习影响你现在和将来的选择。

关于这个话题我还要说最后一件事。马斯洛理论的中心,也是他看到的主要增长障碍,就是对抛弃的恐惧。为了冒险进入操场,孩子需要确保母亲正在等待并且自己能随时返回。再次引用马斯洛的话:

如果维持自我的唯一方式就是失去他人,那么一般的孩子会选择放弃自我。

这段话表明,艾默生在编写《Self-Reliance》一书时头脑中想到的最终技巧,并不是让我们所有人都成为程序员。 这当然不是我想在这篇文章中传达的信息,尽管乔布斯这样推荐过。自信可以通过各种方式实现,而编程恰好是我的方式。更重要的是提醒自己这样一件事:

你永远是人类家族的一员,长期有效且不可撤销。

正是这种信念促使你无所畏惧地生活。它为你带来了探索未知的能力,并赋予你天生的自发性和自然而然的成长,同时保证你不会成为局外人,不会被驱逐。

有了这种信念,一个人才能安全地追随“头脑中的那道闪光”,才能在一群人之中维持“孤独的独立”。我还认为这种信念与人们所说的“自我接受”强烈相关,它可以帮助你摆脱最深刻和最原始的恐惧。

试试吧,结果会很有启发的。

原文:https://medium.com/the-polymath-project/programming-for-personal-growth-64052e407894

作者:Matt Oxley,程序员,专注于设计、音乐科技。

译者:弯月,责编:郭芮

 征稿啦!

CSDN 公众号秉持着「与千万技术人共成长」理念,不仅以「极客头条」、「畅言」栏目在第一时间以技术人的独特视角描述技术人关心的行业焦点事件,更有「技术头条」专栏,深度解读行业内的热门技术与场景应用,让所有的开发者紧跟技术潮流,保持警醒的技术嗅觉,对行业趋势、技术有更为全面的认知。
如果你有优质的文章,或是行业热点事件、技术趋势的真知灼见,或是深度的应用实践、场景方案等的新见解,欢迎联系 CSDN 投稿,联系方式:微信(guorui_1118,请备注投稿+姓名+公司职位),邮箱(guorui@csdn.net)。





————— 推荐阅读 —————






640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg640?wx_fmt=gif

640?wx_fmt=gif

展开阅读全文

如何做到每天代码

04-15

[img=https://img-bbs.csdn.net/upload/201404/15/1397533922_790691.jpg][/img]rnrn你是否曾为业余项目没有进展而惆怅过?想要有完整两天时间(没有任何的放松机会)来编程也不现实,时间的零乱往往让人不知所措。还有一个重要的问题就是你上个星期写的代码,隔一个星期后再接着写,你还能记得多少?rnrn为此,可汗学院计算机科学学院院长暨jQuery创始人John Resig撰文分享了自己的心得和体会。现在,让我们看看John Resig是如何做到每天都写代码的,首先他给自己定下了几条规则:rnrn 1. 每天必须写代码。可以写文档、博客或者其他的文章,但是必须要加进自己写的代码。 rn 2. 代码必须是有用的。不要格式化、重构的代码。 rn 3. 代码必须在午夜之前写好(为了避免不想熬夜而草率地写代码)。 rn 4. 代码必须是开源的,且要放到Github上(这样强迫自己小心写代码,并会考虑代码重用性及怎么创建项目前期的模块)。rnrn当然,以上这些规则是灵活的。John Resig之所以制定这么严格的规则,是想提高自己业余项目的开发效率。他已经在连续20周的时间里每天写代码,这给他带来了好的工作习惯。鉴于此,John Resig为大家分享了自己坚持每天做业余项目后的心得体会:rnrn[b]利用最小化的时间写好代码。[/b]我强迫自己每天花不少于半个小时来写代码(这真不是一件容易的事,尤其还得回忆前一天写了什么),在工作日期间一般不超过一个小时,但在周末我会花多一些时间做业余项目。rnrn[b]让写代码成为习惯。[/b]要知道我并不关心自己在Github上的排名,因为我觉得做业余项目是自己的事,不要为了取悦别人而做。减肥和锻炼也是同样的道理,如果你不在乎提升自己,你永远都不会取得成功。rnrn[b]与不良情绪作斗争。[/b]在开始实施每天写代码的计划前期,我时常焦虑项目没有很大的进展,毕竟业余项目没有时间限制。后来我意识到有这样的不良情绪对项目进展一点帮助都没有,反而会阻碍。所以要与不良情绪作斗争,现在我能心平气和地完成大量的工作,再也不会像以前那样为工作的事情忙得焦头烂额了。rnrn[b]安排、利用好周末时间。[/b]对大多数人来说,利用周末时间做业余项目是项目取得大进展的绝好机会。而对于我来说,如果直到周末业余项目才能做好我会对自己很失望。之前我很少能完成所有自己想做的工作,这也就强迫自己不参加诸如参观博物馆、游公园等自己喜欢的周末娱乐活动,把时间留给工作。然而现在我强烈地意识到尽管业余项目很重要,但是也不应该忽略个人生活,所以学会安排时间很重要。rnrn[b]潜意识思考。[/b]每天做业余项目写代码有一个有趣的副作用,那就是大脑会在潜意识里思考。因此,当我在散步、淋浴或从事其他非脑力活动时,我还在想着下一步代码该怎么写、出现问题了有什么解决的好方法,以前我每星期或者隔一个星期写一次代码从没出现过这样的情况。时间用来思考自然就不会再为业余项目取得的进展少而焦虑了。rnrn[b]每天写一点代码不易忘。[/b]当接头做业余项目时总要付出“上下文切换”的代价,然而不幸的是思考是很难接上头的。所以我每天都做一点业余项目,让自己不容易忘记。rnrn[b]管理好时间,平衡工作、生活、业余项目。[/b]现在的我已简单地学会了如何更好地维持工作、生活、业余项目的平衡,我知道自己每天都要做业余项目,所以我会更好地管理时间。如果我晚上有活动且很晚才能回家,那么我会在开始工作之前就做好当天的业余项目。假如当天的业余项目没有做完,那么不论多晚我都会完成,做到今日事今日毕。rnrn[b]要及时跟外界沟通。[/b]当自己养成了新的习惯后跟外界沟通这是很有好处的。我的伙伴们都知道我每天写代码这个习惯,因此有活动安排时我会跟他们说:“等我写完代码再去。”他们一点都不会介意也很理解我的行为。rnrn[b]代码积少成多。[/b]我很难相信自己在过去的几个月写了很多的代码。我新建了几个网站,重新写了框架并创建了大量节点模块。我已经写了这么多以至于有时我都忘记自己写了些什么,但是我真的很高兴我写了这么多的代码。rnrn好的习惯能带来巨大的成功,像每天写代码做业余项目这件事只要你坚持做下去,一定会有意想不到的效果。 论坛

这段代码为什么要这样

11-19

在网上看到的一个ASP.NET 2.0 数据库(access)访问的通用类,下面是其中的一段返回指定sql语句的OleDbDataReader对象的方法。rnrn[code] public static OleDbDataReader dataReader(string sqlstr)rn rn OleDbDataReader dr = null;rn tryrn rn openConnection();rn comm.CommandText = sqlstr;rn comm.CommandType = CommandType.Text;rnrn dr = comm.ExecuteReader(CommandBehavior.CloseConnection);rn rn catchrn rn tryrn rn dr.Close();rn closeConnection();rn rn catch rn rn return dr;rn //返回指定sql语句的OleDbDataReader对象,使用时请注意关闭这个对象。rn public static void dataReader(string sqlstr, ref OleDbDataReader dr)rn rn tryrn rn openConnection();rn comm.CommandText = sqlstr;rn comm.CommandType = CommandType.Text;rn dr = comm.ExecuteReader(CommandBehavior.CloseConnection);rn rn catchrn rn tryrn rn if (dr != null && !dr.IsClosed)rn dr.Close();rn rn catchrn rn rn finallyrn rn closeConnection();rn rn rn //返回指定sql语句的OleDbDataReader对象,使用时请注意关闭[/code]rnrn不明白为什么要这样写rnrnpublic static OleDbDataReader dataReader(string sqlstr)rnrn......rnrnpublic static void dataReader(string sqlstr, ref OleDbDataReader dr)rnrn......rnrnrn我会单独用OleDbDataReader,可是他这样写我就看不懂了,为什么要分两个?有什么区别?rn可以合并为一个吗?rnrn另外注释中还说“使用时请注意关闭”,我都不知道怎么使用这个方法,而且怎么关闭呢? 论坛

这些代码为什么要这样呢?

08-30

rnrn public static DataBase CreateData(string ConnectionString, string ProviderName)rn rn //以下判断数据库类型并创建相应的对象rn if (ProviderName.ToUpper().Contains("OLEDB"))rn rn OleDbDataAdapter oledbda = new OleDbDataAdapter();rn oledbda.SelectCommand = new OleDbCommand();rn oledbda.SelectCommand.Connection = new OleDbConnection(ConnectionString);rn return new [color=#33CCCC]DataBase[/color](oledbda);rn rn [color=#FF6600] return null;[/color]rn rnrnrn public class DataBasern rn private DbDataAdapter mDataAdapter; //指向传入的DbDataAdapter的引用rn private DbCommand mCommand; //指向传入的DbDataAdapter.SelectCommand的引用rn /// rn /// 构造函数rn /// rn /// 获得一个实例化了的DbDataAdapter的派生类rn public DataBase(DbDataAdapter DDA)rn rn rn [color=#FF6600]mDataAdapter = DDA;rn mCommand = DDA.SelectCommand[/color];rn rn rnrn---------------------------------------------------------------------------------------------------rn 我想请教的是:rn 1、第一个类的最后一句语句:return null; 是什么什么的,这样不会返回一个Null值吗,前面返回的DataBase不是没 用了?rn 2、我觉得这两个类就是生成一个带有初始连接属性(Connection)的DataBase类,为何要用DataAdapter呢?直接用Command和Connection不好吗??rn rn ============================================rn 我问的问题可能很蠢,请各位大哥帮忙。rn 论坛

这段为什么要这么?我晕倒!

04-28

[code=C#]rnusing System;rnusing System.Collections.Generic;rnusing System.Text;rnusing System.Reflection;rnrnnamespace fanshe2rnrn class Programrn rn static void Main(string[] args)rn rn CComand cmd = new CComand();rn Type ty = cmd.GetType();rn MethodInfo mi = ty.GetMethod("StartMenu");rn if (mi == null)rn rn Console.WriteLine("获取方法失败");rn Console.ReadKey();rn return;rn rn Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");rn //bool ret = (bool)mi.Invoke(cmd, new object[] "张三" ); //这里为什么要这么写?直接调用函数不可以吗? 如下面这行rn bool ret = cmd.StartMenu("张三");rn if (ret)rn Console.WriteLine("Main:启动成功");rn elsern Console.WriteLine("Main:启动失败");rn Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");rn ret = (bool)mi.Invoke(cmd, new object[] "李四" );rn if (ret)rn Console.WriteLine("Main:启动成功");rn elsern Console.WriteLine("Main:启动失败");rn Console.WriteLine("按任意键退出");rn Console.ReadKey();rn rn rnrn public class CComandrn rn private bool ccml = false;rn public bool StartMenu(string UserName)rn rn Console.WriteLine("操作员:0正在操作"+UserName);rn if (!ccml)rn rn ccml = true;rn Console.WriteLine("设备启动成功");rn return true;rn rn elsern rn Console.WriteLine("设备已经启动不能重复启动");rn return false;rn rn rn rnrnrn[/code]rnrnrn为什么用委托写? 我直接调用函数不就OK了吗? 为什么呢? 谁知道并且举出他的应用情况? 论坛

没有更多推荐了,返回首页