做40年程序员是一种什么体验?他给出了13条建议( 二 )


十年后,你会翻看这本日记,然后说,“哇,我做了一些很酷的事情”或者“嗯,我是个很有趣的人”,但我想你应该不会在日记上写“我非常擅长JAVA” 。
6、不要混淆工作和职业
不要把工作和职业混为一谈,它们不是一回事 。
对于我来说,编写软件是一项非常棒的工作,但只是一个还行或者可以更好的职业 。
在接受别人的建议时,也要注意对方提到的是关于工作的建议,还是关于这份职业的建议,如果你把两者混淆,这个建议就没有多大意义了 。
7、学习顺序并不重要
在刚入门的时候,你往往会得到关于首先学习什么语言或技术的不同建议,但这其实不重要 。
如果你没有按老规矩走,而是开创了自己的道路,那并不意味着你没有做好基础工作,也不意味着你就很糟糕 。
因为如果某件事真的很重要,你迟早都会发现,并重新去学它 。
8、你越优秀,就越和别人不一样
早期的程序员职业培训(例如博客文章、大学课程、书籍)就像流水线,试图培养你在每一个方面的基本能力 。
而且新手很容易误认为,一个首席工程师需要点满很多技能、每个技能水平也必须很高,但事实并非如此 。
你可以通过编写一段相当简单的代码并详细地描述它,就像Patrick McKenzie在《Bingo Card Creator》中做的那样,也可以通过写一些真正有利可图的东西来获得尊重 。
除了基本的能力之外,这些道路几乎没有任何共同之处 。
这也是为什么当你求职时问这样的问题是很蠢的:“我是一名有15年工作经验的软件工程师,通常的薪水是多少?”
15年是如此之久,以至于你应该形成了与其他人不同的优势之处 。你写过书吗?从事过赚钱的大型项目吗?整合过一个有趣的开源项目吗?这15年你做了什么?
当然,这也不仅仅是工资的问题 。你可以问:“我是一个有15年经验的软件工程师,这意味着我有能力领导这个项目,对吗?”答案当然是“可能” 。接下来的问题是“那在15年里你做了什么?”
9、从实践中学习
我不会建议人们一开始就去学习软件设计的深层原理,这是因为如果你试图把它们当作纯理论来学习,那么几乎肯定会做错 。
对于初学者来说,首先要学会用一些实际的语言构建一个可用的软件 。不管是哪一种语言,只有犯一些真正的错误,才能在错误中解决问题 。
然后就可以这样循环:实践,犯错,学习理论,修正错误 。
当然,这也并不意味着如果你先学习了理论,你就会永远变差,只不过是需要一段时间才能正确使用你所学的知识 。
10、使用什么技术很重要
如果你想在程序员这一行做上几十年,那么你不仅要学习各种各样的技术,还要学习各种各样的非技术技能 。
举个例子,“学习至少一种函数式编程语言”,就像钢琴家“学习演奏莫扎特的钢琴曲”一样是必须的,但同时,学习一些编程时所涉及的边缘技术,会为你培养额外的洞察力 。
11、向其他领域学习
如果我们的行业还很年轻,这意味着什么?这意味着我们还在研究基本原理 。
你可以从其他领域学到很多东西 。我曾经写了一本关于如何偷学艺术家练习方法的书,正是因为艺术和音乐都是古老的学科,它们已经领先计算机发展几千年了 。
所以,如果你遇到了一个问题,你可以考虑一下其他领域的人们会如何处理这个问题 。
例如,阿图尔·葛文德(Atul Gawande)的《清单宣言(Checklist Manifesto)》中就讲述了飞行员、摩天大楼建造者和医生处理问题的截然不同的方式,这些都是很好的方法 。
12、不要重复造轮子
众所周知,如果美术家重复画一个静物、音乐家反复练一首曲子,他们都会越来越熟练,但程序员不一样 。
在程序员中有一个说法是“不要重复造轮子”,我们的工作正是想办法让电脑完成所有的重复工作,这样我们就可以只做新的工作 。
你可以尝试重新发明轮子、可以故意用“糟糕”的方式编写代码,看看会发生什么 。总而言之,你需要真正擅长一些不同寻常的事情 。
13、只管去做
我一直在向大家推荐非技术领域的建议,而不是那些充斥着技术宅们的论坛,那些论坛里充斥着最近才转行为程序员的人那种偏执的热情 。
如果你写程序,你就是程序员,或者软件工程师,或者随便你怎么称呼它 。


推荐阅读