前不久,文摘菌曾报道过,“Python之父”Guido Van Rossum,一位荷兰程序员边看电视边撸代码,历时三个月开发出了现今广泛应用的Python语言,就有人在后台问了:“同样是程序员,我也喜欢宅在家里,为什么收获的只有身体的横向发展?”
那些号称“代码教科书”“程序不通过编译器都会道歉”的高级开发人员和在搬砖边缘苦苦挣扎的码农有什么不一样呢?难道真如学习一门乐器,管类乐器,老师会看你嘴唇薄厚,丝弦乐器,可能会看你指节长度一样,编程也需要有天赋吗?
开发人员的技能范围是很广的,不能仅根据工作年限来评价一个人的才能,五年、十年甚至十五年所谓的“工作经验”并不一定是有能力、高效率开发人员的佐证,有些人往往年龄大而能力低,那么是什么让有些人能在同类中脱颖而出呢?
文摘菌通过观察周围一些高级开发人员,发现他们身上都有相同的特质,到底是什么样的特质使得他们开发出来的代码复用性好,漏洞低呢?可能他们都具备如下品质吧。
编程模式
程序化面向对象、功能编程与面向对象设计、清晰编码技术的SOLID是编程模式的“三重奏”,它们很大程度上决定了代码创建背后的思维模式。
大多数初级开发人员在编码过程中并没有意识到编程是一种超越了语法规则的问题,可以把它看作可以多种方式完成的通信工具,好的编程模式有助于优化代码间的通信方式。
任何人都可以写代码,正如任何人都可以在豆瓣上发短息和写书评一样,当然这肯定不能与斯蒂芬金的小说比拟。编程模式作为高级开发人员代码背后的指导力量,就像小说结构对于其整体情节的反映一样,所有的语言都是有其内部架构的,高级开发人员可以在内部层面理解并应用,这是许多初级和中级开发人员做不到的。
创造力
当我们在for循环和if else语句中开始编程时,我们往往更喜欢用复制和粘贴的方式解决代码问题。然而,理解代码的方式决定了你是低级还是高级开发人员。
走一步,再走一步,更进一步,可能会发现另外一番风景,与其复制粘贴代码,倒不如整理好自己的思路,创造出有“灵魂”的代码。
高级开发人员之于普通开发者,是他们有创造力,而不只是依靠Google知识库的帮助。他们知道自己的代码要解决的问题,看得到风险,或者说至少预测得到代码运行时候的问题,能看得到代码中的潜在漏洞并想好如何改进它们。如果发现知识方面的盲点,他们不单单会看表面,而是对工具箱中的所有内容进行更深入的了解,总之,高级开发人员的眼中能看到一个更加深邃的代码世界。
保持客观
每个人是用自己已有的知识来看待现有的问题,这也是初中级开发人员的共同点,他们更倾向于根据个人经验而不是代码本身的问题来解决问题,他们的个人偏好、风格、命名惯例和思维方式是他们提供评估和建议的出发点。这是成长过程的一部分,没什么不对的,但是没有绝对正确的代码,只有适用于情境和场景合适的代码。
高级开发人员能意识到这一点,接受他们的代码可能不是最好的,永远还有改进的空间,面对不同的处理任务和问题时都能够保持乐观,整理和改进出不同的代码以解决不同的问题。同时他们也是有效的代码管理员,能指出同行所做架构中的弱点和逻辑思维混乱之处,能高瞻远瞩,不受任何一种编码或范式的束缚,从突发事件中看到问题,同时根据实际情况做出最优选择。他们着重点在于解决问题而不是选择工具。
追求卓越,优秀还是好用?
作为开发人员,写代码是本职工作,一些人写完即止,打卡下班,不会考虑代码复用性和简洁性,而高级开发人员则会追求完美。
多数老板只关注软件是否能正常运行,专业的开发人员知道优秀的软件和能用的软件之间的差别,在写代码时会考虑到重构问题,他们更关注技术和代码风格等隐性成本,能在项目的准时交付和与老板的洽谈这两者之间做平衡。
广博的知识面和对框架和语言的精准理解不仅使得他们知道如何创建优秀软件和能用软件,也使他们能够在必要时提出创造性的解决方案。
教的能力
“平庸的老师教导,一般的老师解释,优秀的老师展示,伟大的老师启发。”
—— 威廉亚瑟沃德
真正的高级开发人员对工作充满热情,乐于激励并帮助经验不足的同行。
编程本身就是一种思想,有经验的人能够化繁为简,根据实际需要在不同界面和媒介之间交流,就像任何教师都需要精通一定的领域一样,虽然“经验”能以简历上的项目数量和在不同公司的任职时间这些标准来量化,但会启发的高手属于那些真正了解编程内部艺术的人。
写在最后的话
上述特征存在于他们的个性和知识的深度中。使他们能比普通程序员更快地探索未知代码区域,通常能够顾及全局并以开明的心态审视代码。高级开发者提倡并引导同行养成“整理”和“反思”编码的习惯,旨在形成思维的正向反馈,是真正问题的解决者和思考者。
这些品质都是在平时开发过程中思考、积累得到的,诚如“哪有什么天赋异禀,谁不是在苦中作乐”这句话所描述的一样,程序开发是一门艺术设计,而不是单纯的敲代码,需要我们在开发过程中多做总结,思考是比单纯地复制粘贴要难的多,但是正如电影《三傻大闹宝莱坞》中的经典台词:“追求卓越,成功自然会追着你跑”,代码的编程习惯、编程风格、简洁性这些方面都是一名优秀的开发人员应该考虑的问题,在追求卓越的过程中,这些品质都会积累下来,成为后续开发的财富!