1提醒自己得学习
学习的第一步是要认识到,你不懂。因为不懂,所以才需要学习。这听上去很明显,但有经验的程序员肯定记得自己用了多长时间才能做好这个心理建设。太多的计算机科学学生带着一种傲慢毕业:“我懂得最多”,自以为是地认为他们知道一切,并且有一种想要证明给每一个新同事看的强烈欲望。换句话说:这样一种“我知道我懂我了解!”的态度会成为阻碍你学习新东西的拦路虎。
2不要竭力证明自己是对的
要成就伟大——而不只是优秀——你必须从经验中学习。但要小心,经验会让我们重复错误的行为,养成坏习惯。我们都遇到过有着8年经验的程序员……不断说自己的经验丰富,倚老卖老。为了避免一叶障目,你应该回顾自己所做的一切,问问自己,“怎样才能做得更好?”
新手软件开发人员(以及很多有经验的开发人员)观看他们自己的代码是为了欣赏它的精彩。他们编写测试是为了证明其代码可工作,而不是为了让它失败。真正伟大的程序员会积极寻找他们错误的地方——因为他们知道,最终用户必将会发现他们遗漏的缺陷。
3“代码可工作”不是你止步的标志;
是的,第一步是写出高质量的软件,满足规格说明。普通的程序员往往在这里就放弃了,直接跳到下一件事。
但是就此当作是“已经完成”而止步,就像是拍了张照片就希望它成为一件艺术品一样荒诞可笑。伟大的程序员知道第一次迭代就只是第一次迭代而已。可以工作——那么恭喜你!——但是这不是结束。你还需要让代码变得更好。
一些流程定义了何为“更好”。有没有价值使其更快?文档更简单?更可重用?更可靠?对于不同的应用程序,这些问题的答案也各不相同,但是这个流程是不变的。
4写三遍
好的程序员编写可工作的软件。而那些伟大的程序员编写的软件运行起来极为出色。这很少是能够一蹴而就的。
最好的软件通常要写三次:
首先,你写软件是为了证明给自己(或客户)看该解决方案是可能的。其他人可能不会意识到这仅仅是一个证明型的概念,但是你知道。
第二,让它工作起来。
第三,让它正确工作。
这种程度的工作可能并不明显,如果你去看那些最佳开发人员的工作的话。他们做的一切都显得如此才华横溢,但你没有看到的是,即使是明星开发者,在将自己的软件展示给别人看之前,可能也扔掉过第一次和第二次的版本。抛弃代码重新开始是一个能将“力求完美”纳入个人工作流程的好方法。
如果不出意外,“写三遍”会告诉你很多解决问题的方法。它可以避免你陷入困境。
5阅读代码,阅读很多代码
你可能已经听过这个建议,实际上这是提高编程技巧最常见也是最有价值的建议。但是很多人不知道阅读别人的代码之所以如此重要的原因。
当你阅读别人的代码时,你要去看别人是如何解决问题的。但不要把它当作文学来看;把它当做一个教训,一个挑战。
为了变得更好,你得问自己:
我会怎么写那样的代码块?在你看到另一种解决方法之后,你有什么不同的做法?
我学到了什么?怎么应用那个技术到我以前写的代码? (“我从来没有想过在那里使用递归下降……”)。
我要如何改进这个代码?如果它是一个开源项目,而且你相信自己有一个更好的解决方案,那么就去做!
用作者的风格写代码。练习这个可以帮助你了解写软件的那个人的思维。
不要光想不做。写下你的答案,无论是在个人日记,博客,代码审查过程中,还是在开发者社区论坛上。就像给朋友解释问题可以帮助你理清解决方案,写下并分享你的分析也可以帮助你了解为什么你对别人的代码会有这样一种既定方式的反应。这就是我前面提到的自省,自省可以帮助你冷静地判断自己的长处和短处。
警告:
阅读大量的代码很容易,但要凭此就成为一个伟大的程序员未免异想天开。许多开发人员会通过开源代码或其他软件来“找寻答案”,而大多数人的做法是,复制和粘贴恰巧出现的可解决类似问题的代码。这样做实际上是在让你变成一个更差的程序员,因为你只是盲目地接受别人的智慧,而没有消化吸收。
6写代码,而不仅仅是作为分配的任务
工作于个人编程项目有很多优势。首先,它提供了一个学习工具和技术的途径,而这些工具和技术在你当前的工作中是学不到的,但是这能让你在找下一份工作时更有竞争力。无论你是致力于开源项目,还是为当地的社区组织提供无偿的劳动,都可以让你增加技术技能和自信。
为了好玩而写代码的另一个优点是,它迫使你靠自己去搞清楚这些事情。你不能将难的那部分留给别人去做,所以它可以避免你太快地向别人寻求帮助。
小贴士:
不要选择那些你永远不会失败的个人项目。你需要失败!但你不会希望在工作中失败,或者当项目有时间期限的时候。
7尽可能一对一地和其他开发人员合作
这有助于仔细倾听别人的思路和想法。方法可以是结对编程,可以是去参加编程马拉松,也可以是加入一个编程用户群。当你致力于一个开源项目时,要注意你从用户和其他开发人员那里得到的反馈。在他们的批评建议中有没有什么共同点?
你或许会很幸运地找到一个可以信任的个人导师,他会指导你从编码技术到职业决定的所有东西。不要浪费这些机会。
8学习技术,而不是工具
编程语言、工具和方法变化不定。这就是为什么我们要积累尽可能多的经验,使用尽可能多的语言和框架。专注于编程基础,因为基础知识永远不会改变:要更注重结构,而不是编程。如果你觉得只有一种做事的正确方法,那么可能是时候实战检验了。教条会阻碍你学习新事物的能力,同时要试着让自己慢慢适应变化。