对于程序员来说,提高自己的编程能力,算是给自己定的职业发展目标之一,不过定一个成为编程大神的目标很容易,具体做起来可能就不是一件简单的事了。首先,既然决定“我要变得更好”,得先知道“更好”是什么样子的。另外,不能“想变得更好”,却没有任何具体可行的措施。
本文分享 8 个成为编程大神的可行经验,供读者参考。
1. 警惕“我了解”,“我知道”的学习态度
比如希望学习C语言,那第一步要意识到自己不懂 C语言,都懂的话,干嘛还学呢?这听起来像是一句废话,但是太多的计算机专业的学生毕业时,都会有一种傲慢的“我最了解”的虚张声势,并且迫切的希望向每一个同事证明这一点。然而又有太多的例子证明,持这种态度的程序员往往在技术上进步的都比较慢,所以,在深入学习中,“我了解它”,“我知道它”的态度会妨碍你学习任何新的东西。
现在想想,一般声称自己“精通xx语言”的都是菜鸟。
2. 不“自我欣赏”
若希望成为程序员大神,得从各个前辈的经验中学习。但是要小心,经验也有可能会让我们重复不良行为和养成不良习惯。我们都遇到过有八年“经验”的程序员……但是他的“经验”是:同一年的经验,重复了八次。为了避免这种情况,需要时刻反省自己做的每件事,问问自己,“我怎样才能使这个更好呢?“
新手程序员会欣赏自己写出的“优美”代码,并且编写出测试用例证明它们是可以正常工作。这一点,似乎很多“有经验”的老手程序员也常这么做。不过,优秀的程序员应该积极寻找自己写的代码中可能错误的地方,写出的各种测试用例的目的也在于查找错误,而不是欣赏自己的代码在自己的测试用例中的完美运行。因为他们知道最终用户会发现程序中的错误和漏洞的。
3. 程序运行起来不是停止,而是开始
的确,程序员的第一步工作应该编写出符合规范的高质量软件,不过一般的程序员一旦把功能实现就会退出,然后继续下一步。一旦“完成”就停止的这种做法,就像是随手拍一张快照,期待它成为一件艺术品。优秀的程序员把功能实现只是开始,还要继续对其精雕细琢,写出稳定性更强,性能更优的程序。
这个过程的一部分就是文章开头提到的“更好”的含义。加快速度有意义吗?是更容易记录?更可重复使用?还是更可靠?答案因每个应用程序而异,但是对待程序的态度却是一致的。
4. 写三次
一般的程序员编写可以正常工作的软件,优秀的程序员编写工作性能更好的软件。但是工作性能更好的软件通常都不是一次性就能完成的,从某种意义上来说,最好的软件一般都要写三次:
- 第一次,编写程序证明自己设计的解决方案是可行的,并在此基础上优化设计。
- 第二次,让程序正常工作了,但是可能还有性能的优化空间,以及可能还存在漏洞。
- 第三次,让程序不仅正常工作,而且可以高效的,稳定的工作。
一般我们看到优秀的程序项目,都会感觉大神写的代码行云流水,如此优秀,但是大神的优秀程序项目一般也是需要“写三次”的,只是这些工作都隐藏在背后。有些程序员开发程序会停留在第一或第二个版本,这其实是与希望“我要变得更好”的初衷相悖的。
5. 阅读优秀代码
可以说,阅读大神们的优秀代码是提高编程技能最常见,也是最有价值的建议。当阅读别人的代码时,会看到大神是如何解决编程问题的,不过不要只是“看看而已”,想要变得更好,需要问问自己:
- 要是我遇到相同的问题,我该怎么写这段代码呢?
- 我学到了什么?我如何将这种技术应用于我的程序?
- 如何改进此代码?如果这是一个开源项目,而且你有更好的解决方案,那么就去做!
- 尝试以作者的风格写程序。这样可以让自己从不同角度看待问题,相信是有好处的。
不能只是漫不经心的想这些问题,应该把自己的答案写下来,可以是以个人日志、博客、代码审查等各种形式,就像是向朋友解答一个问题一样,写下并分享自己的分析常常可以帮助自己加深理解。这其实是内省的一部分,可以帮助自己冷静的判断自己的长处和弱点。
不要只是漫不经心地想这些步骤。写下你的答案,无论是在个人日志、博客、代码审查过程中,还是与其他开发人员在社区论坛中。就像向朋友解释一个问题可以帮助你找出解决方案一样,写下并分享你的分析可以帮助你理解为什么你会以一种给定的方式对他人的代码做出反应。这都是我之前提到的内省的一部分,帮助你冷静地判断自己的长处和弱点。
许多开发人员通过查看开源软件或其他软件来“找到答案”,并且很有可能复制和粘贴似乎可以解决类似问题的代码。这样做实际上会使自己成为一个更糟糕的程序员,因为盲目的复制和粘贴缺乏自己的思考,别人的东西永远是别人的东西,变不成自己的。
6. 编写程序不全为了挣钱
在自己为研究某项工具或技术而进行一个新的编程项目时,很可能是不挣钱的,但这不能成为停止学习新技能的理由。首先,学习新技能肯定可以提升自己的能力,这些工具和技术可能在目前的工作中不可用,但会使自己在下一个工作中更具市场竞争力。
无论你是为开源项目做贡献,还是为当地社区组织从事公益性工作,都将获得技术技能和自信。另外,个人项目也可以向未来的雇主证明你是一个自学成才的人,从不停止学习。不要只选择自己十拿九稳的个人项目,在自己的个人项目中失败是可以接受的,这样才能激励自己不断的学习和研究,避免在工作的失败。
7. 不完全忽视他人意见
愿意听取别人的意见,对提升自己的编程技术也有所帮助。当进行一个开源项目时,应该注意从用户,或者其他开发人员那里得到反馈,分析这些反馈常常能够推断出自己的项目中存在的问题(用户反馈的使用体验问题,其他开发人员反馈的技术问题等)。
只有发现自己的不足,才有机会进步,达到让自己变得“更好”的目的。而且在这一过程中,幸运的话还会遇到同领域内的大神,不要浪费像大神学习的机会。
8. 学习的是技术,而不是工具
编程语言、工具和框架总是在不断发展,有的工具或者框架很火,但是可能过段时间就落寞了,已经有太多这样的例子。所以在学习某种工具或者框架时,不应该只停留在工具和框架本身,更应该深入它们了解背后的设计思想和经验这些基础知识,因为基础永远不会过时。
停留在工具和框架表层,会逐渐形成“教条式经验”,而它会阻碍你学习新技术、新框架的能力。另外还有一点要说明的是,我们的确应该深入了解工具和框架,但是自我提高还有一个关键是要知道深入到什么程度,什么时候应该停止。举个最极端的例子,作为程序员,学习某个技术一直深入到 cpu 怎么制作还不停下,就显得太钻牛角尖了。