“当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题。”
之前有个讨论:实现同样功能,简洁代码一定比复杂代码效率高吗?有的说,还得看算法,如果算法相同,简洁代码效率应该会高一些。有的说,即使算法相同,简洁代码也不见得比复杂代码效率高,而应尽可能减少循环的使用,特别是少用多重循环,或者尽可能在一个循环中做更多的事。如此,便想起了很久以前的一个段子,讲的是程序员如何一步步在循环中重新回到起点的,仅供大家一笑。
第一年
第二年
第三年
第五年
第十年
当然了,这只是一个段子。不管你多喜欢或是多会编程,在学习和解决问题上总会碰到障碍。工作的时间越久就越能明白这个道理。正常的编程过程都是这样的:尝试、失败、学习、思考、灵感、成功。在这个漫长的过程中,常有人会感到沮丧,这很正常,只有突破后的那种愉悦感才能证明自己的进步。不要满足于现状,因为你永远不会是最好的。或许在某个瞬间,您不知不觉,但您已经突破了玄关。下面我们就来谈一谈程序员进阶的五个瞬间。
第一个瞬间:冒险的冲动
刚刚学习了一门语言,了解基本的语法,可以写短的代码片段了,心中难掩一种跃跃一试的冲动。当您想着开启征程的时候,您进入了第一种境界,业界叫做新手,自己称之为无畏。一般进入这个阶段,差不多半只脚进入了这个行业,有趣多过职责,眼前充满着神秘,但却不一定以此为生。这个世界对您来说,所有的都是神秘的,奇幻的,感觉自己的前途一片光明,但是,也仅是感觉而已。
这时的你需要指导,可以说处在这个境遇的程序员毫无经验,而经验恰恰是通过实施这项技术而促进的思维改变,即您对未来全无所知。这时的程序员最在意的不是学习,而是想实现一个立竿见影的目标。他们不知道如何应付错误,所以出错的时候,会非常容易慌乱。但是稍加指导,他们就会变得能干起来。当然,新手多面临的问题是,当一些意想不到的事前发生时,他们就会不知所措。不过,总有解决办法,一个指导手册,或是老程序员的一些指点便豁然开朗了,但这只能让你启程,却不会让你走的更远。
第二个瞬间:喜悦后的平静
这时的程序员经历了第一个阶段已经可以写一个完整的程序了,但真正对语言了解多少,或许自己心中会有一个体会。这时的程序员已经有些经验了,虽然可能对一些高级用法不甚了了,但应付一个项目还是可以的。一种突破后的喜悦油然而生,走到这个地步,可以说已经是一个正式的程序员了,当一种技术作为志业,一种责任和焦虑也会随之而来,我能坚持走下去吗?我会做的更好吗?各种问题随之而来。
这时候的程序员还不会想着全局思维,他们可以独自尝试任务,但仍然难以解决问题。他们想要快速获取信息,当学习一门新语言或者API时,发现自己会快速浏览文档以寻找一个方法定义或参数列表,而不想在此刻寻根问底,或者重新温习一遍基础知识。他们没有全面的理解,或许的确不想有。如果你试图把一个更大的情景强加给他们,他们可能会认为该情景不相关而忽略掉,当然是有关系的,但是,他们看不到这种联系,因为层次还不够,只是处于比较低的技能水平。
第三个瞬间:博览通识,感觉(希望)自己无所不能
这时的程序员已经能熟练的使用一门语言了, 能够用语言去解决生产环境中一个具体和完整的问题,能够建立问题域的概念模型,并有效地使用它们,已经形成了一套自己的惯用法和常用代码库。在你的编码方案中当前的程序语言是一个非常好用的工具。
这时的程序员会探寻和解决问题,他们的工作基于谨慎的计划和过去的经验。他们往往在团队中发挥领导作用(无论是否有正式的头衔)。他们是团队里的好人,既可以指导新手,也不会经常骚扰更高层次的员工。但是即使在这一水平,人们仍然无法按照我们所希望的方式来敏捷应对所有的工作--大家还没有足够的能力反思 和自我纠正。为此,我们需要取得突破,达到一个新的水平。
第四个瞬间:无往不复
事物的运动是循环反复的,未有往而不返的。这个阶段的程序员已经非常清楚所用语言的设计选择和背后的动机,能理解的简洁和可组合性哲学,并能够自我纠正。处于这个水平的从业人员有一项重大突破:他们会反思以前的做法,并修改其做法,期望下一次表现的更好。他能够阅读案例研究,倾听有关失败项目的流言蜚语,观察别人怎么做,从故事中认真的学习。
高级程序员是经常会对需求说“No”的人,对行业的深入认识和对系统及应用全局的把握能力使他具有真正指导用户的能力,规范用户的工作、思想并用计算机这个工具真正对行业产生引领作用。处于当前水平的人员知道什么地方有坑,或者更确切地说,什么地方非常有可能出错。他们具有经验和判断力,能够理解这句话在情景中意味着什么。事实证明,理解情景是成为专家的关键。同样,当前水平的人可以有效地运用软件模式,可以充分利用思考和反馈,这些都是敏捷行为的核心。
第五个瞬间:万法归一
技术和社会是紧密联系在一起的。社会的进步发展决定了需求和技术的发展,一个对技术发展有着敏锐感觉的程序员必须对社会有着深刻的认识。这时应该积极地与他人分享关于特定语言知识和对此语言的理解,在各种合适的场所发出自己的声音, 参与邮件列表、建立QQ群、做专题报告,著书,写文章,做巡回演讲。这时的你可以凭直觉工作,因为专家是各个领域知识和信息的主要来源。他们总是不断地寻找更好的方法和方式做事。他们有丰富的经验,可以在恰当的情景中选取和应用这些经验。
根据直觉工作,而不需要理由。专家知道哪些是无关紧要的细节,哪些是非常重要的细节。也许不是有意识的,但是专家知道应该关注哪些细节,可以放心的忽略哪些细节。专家非常擅长做有针对性的特征匹配。这时的你,落叶飞花皆是利器。