忽视的差距
事实上发现很难去标签化软件编码高手的特征。资深软件工程师和新手似乎看起来没啥区别,区别他们是异常困难,尤其这个群体中很多的人不愿意展现自己,他们可能藏在一个领域默默奉献着,不显山不露水。
软件开发中很多例行却看是平淡的活动,大家似乎都能做到。以产品交付为中心的文化里,人人都是螺丝钉,往往忽然一个人的价值点,很少有人能愿意去了解甚至去分析新手与高手之间的差距。软件开发中专业性总容易被主管们忽视,也因此严重影响了软件工程师追求卓越的过程。曾经发生过可怕的高层观点:精英做架构,资深做设计,随便招个高中生编码就行了。试图把软件产品开发也做成像其它物理产品一样的流水线,这多么年来证明是错误的。
软件工程师中的高手,往往是“上善若水,水善利万物而不争”。他们的专业性看似冰山一角,藏锋敛锐,却在关键时,才会发现他绵绵不绝的力量。这种力量源自他们不断学习的程度,这也是区分高手与普通一种非显性的重要特征。他们大多是持续保持着谦虚,刻苦的学习新知识与技能,向更专业的方向不断地努力。
软件行业是一个知识更新非常快的行业,而软件高手又常常被现实工作中忽略。大多数人觉得看不到付出得到回报的希望,而是寻找30或35之后其它的出路。逃离似乎成了中国很多程序员的政治正确选择,因而国内少有出现软件界大神级的人物。运动员必须经常锻炼,来保持竞技状态;同样,资深的软件工程师也需要花费更多的时间来维持水平。逆水行舟,不进则退。很多工程师疲于996的工作方式,没有精力与动力去付出更多的时间去学习。
学习的能力
要想成为高手,就从学习开始。学习能使人进步,则更专业的学习就能使人更快速的成长。学习本身,当然也有高下之别。
带着思考学习
努力非常重要,正确地努力才能离高手更进一步。
对于擅于学习的人来说,书本本身所描述的知识并不重要。这些知识就在那里,每个人都能看到,但并不是每个人都有相同的收获。学习更多是一个思考的过程,面对知识是否有所启发。
软件方面的学习,不是因你看了多少本编程、工程、设计等方面的书籍;而是当你看到这些知识时,能否发现工作中的问题,思考如何利用他们来改进提升你解决实际问题的能力。学习过程是努力从中挖掘对自己有用的东西,并掌握它。而不是看到别人学习了我也要去学习,没有目的的学习也是走马观花,片叶不粘身。
沿着方向积累
不积跬步无以至千里,不积小流无以成江海。
知识是一个不断积累的过程,但无方向的积累,会杂草丛生。尤其是在百花齐放的软件界,眼花缭乱的语言、技术、框架等更会让人迷失了方向。沿着一个方向积累,是你成功高手必经之路。只有在某方面积累达到一定程度了,才更容易扩展到其它的方向。
选择一个方向可能不一定由你自主的选择,人就像软件一样有特定的工作场景与约束,没有万精油的软件,也没有什么都懂的工程师。不管是什么原因,一旦进入某一方向,就坚定选择的方向。放弃往往比坚持容易,高手一个更重要的特征就是坚持,尤其是百尺竿头更进一步,是十分困难,越到一个领域的顶尖,需要更多的付出。