很多人认为要想成为一名优秀的程序员,那就需要一天24小时每天不断地编程——睁开眼睛要编程,闭上眼睛睡觉的时候还要梦到编程——我认为这是一种矫枉过正的方法。沿着这条路走,只会让你精疲力尽,犹如夸父逐日一般,死在半道上。
我觉得问题的关键是要想明白你为什么要编程。坦率地说,我编程是因为我喜欢别人用我的程序,这也是我之所以在读书的时候成绩不怎么优秀的原因(我并不热衷于参加编程竞赛以及类似事情)。因此,我也不喜欢参与纯研究的项目——只在论文上讨论各种点子,而不付诸于行动不去写代码(除非恰巧碰到的是研究项目和开源项目)。
我在编程上并不是一个唯美主义者。我的观点是能工作、有用的代码就可以被定义为优雅,即使它看上去是一团乱糟糟的GOTO语句。
我认为的“优秀的程序员”应该是这样的:
- 偷懒战略。优秀的程序员更倾向于灵活工作而非死工作,所以如果你想要将编程当作长期的职业规划,那么学习重用代码和自动化繁琐的任务是至关重要的。
- 在职业生涯早期,有机会就多多了解从需求分析到最终发布整个的软件流程,这样你才能学习从终端到终端的设计——还可以激发你的信心。
- 生活中除了编程以外,应该还要有某项能让你经常外出活动的业余爱好。这样才能改善你消耗在键盘上的健康。
- 如果你想要在编程这一行待个三五十年,那么最好学点拿手绝活,让别人在某个领域不敢小觑于你,密切关注这方面的技术进步,保持同步。
- 多了解几门编程语言——特别掌握你准备精通的编程语言。并且最好能从不同的编程范式(程序,设置,功能等)来了解语言。
- 相关的:不必过于担心你不知道的新的Zwizzle-Wiz算法。如果不需要实施细节的话,了解一些相关领域重点算法以及比较重要的通用算法(如排序和搜索)的特点和功能就可以了。没有必要囫囵吞枣、傻不拉几的试图想要记忆100种算法的实现(我看到有人曾经这么做过),你的小脑袋会爆掉的。
- 了解如何面试程序员。英雄总是惺惺相惜,作为一名优秀的程序员,建设优良的团队,也是你的部分责任。
- 了解公司业务的相关内容,以及你的代码需要如何与之匹配,这有助于你正确地作出相关的决策,避免走一些弯路。
- 问问相关人员的想法,看看他们对你的代码的评价,包括产品经理、QA、现场支持人员、专业的服务工程师和实际使用的客户等。
- 相关的:不要错过任何一个和客户交流的机会。但是一定要注意自己的行为举止:耐心聆听,哪怕客户的想法听上去非常可笑,这主要是因为他们不是程序员的缘故。但是,如果你能借此机会好好思考关于如何使用代码以及使用过程中的日常挑战,那么将有助于你提高你的产品。
- 对于我,我是Unix哲学——一系列通用设计原则的铁杆粉丝。虽然这些原则并不总是有效,但它是指点我如何连接优良代码—系统—设计的指南针。
所以,对于“想要成为一名真正优秀的程序员是不是真的非常难?”这一问题的答案,可能的确是非常艰难非常辛苦的,特别是要想成长为一名优秀的程序员是需要一段很长的时间。但是只要你愿意好好学习代码的系统知识和机制,那么我相信你一定可以长风破浪会有时,直挂云帆济沧海。