你作为一名程序员,第一年的时光可能是最为让你困扰的一段时期。你从一个含糊不清的人际沟通世界来到了一个冰水般寒冷的正确之地。机器不知道如何与你妥协,它只会按照你的指令精确地执行任务,不多,也不少。

你将花费大量时间处理代码错误

你会花费很多时间检查你编写的代码,把它们与教程上的内容进行比对,有时候,你会瞅着这些代码,琢磨它们为什么无法有效运行。诸如此类的事情将会一次又一次地出现。这种事情的发生总量大约是你决定学习编程语言数量的一个乘数。

所有开发者都要经历这一过程。有时候,你在一个问题上投入几个小时也不得其解,然后睡了一觉,醒来之后几分钟之内就把它解决了。另外一些时候,你会发现,不管你做什么,你就是无法找到解决这个问题的办法。

在你亲身体验这些代码错误若干年后,你将能够在你同事的编辑器上快速定位这些错误。这种能力最终会成为你的第二本能。这些烦恼和困惑就是锻造你技术技艺的火焰。

你会收到相互矛盾的建议

你会从其他开发者那里得到很多建议,其中绝大多数相互冲突且自相矛盾。一位高级工程师可能会说,真正的软件开发者可以在命令行做任何事情。另一位开发者则会告诉你,那些死盯着命令行的家伙思想陈旧迂腐。你会在博客文章中了解到,测试驱动的面向对象开发为什么是神谕的产物。另外一些开发者可能更喜欢宣扬不变性和函数式编程的好处。

那些经验比你丰富的开发者会为你描绘完全不同的方向。究竟应该听取谁的建议呢?谁的建议是正确的?谁的建议是错误的?

当涉及实际编程时,没有绝对的对与错。一个开发者的技术观点来自他们各自的经历,他们阅读过的书籍,以及那些碰巧他们用过的技术。在他们公开支持一种特定的工具、应用程序或者方法论之前,没人做过完整的技术领域的调查。

推迟你的判断。当一位开发者告诉你,她认为 PostgreSQL 是一种比 MySQL 更好的数据库时,你应该询问她为什么。如果你运气不错,他们会逐一向你说明他们这一看法的真实原因,你也会借此学到一些东西。你应该学会从一个以上的开发者那里收集意见和想法。找出其中的共同点。必要的话,阅读原始资料,自己动手研究。不要把任何人的观点看作圣谕,相反,你应该努力形成你自己的思想。

你不知道应该学些什么

在视觉设计上,你应该投入多大精力呢?你是否应该精通 CSS 的全部属性?SQL 技能到哪种程度就足够了?这些看似流行的『面向对象』的概念到底是什么意思?你应该学习 Ruby、Python 或者 PHP 吗?DOM?AJAX?命令行技术掌握到什么地步就算合格了?如果非要学习全部这些技术,学习顺序应该是怎样的呢?

想要成为一名真正的 Web 开发者,你在第一天就应该混合学习上述这些知识与技能。但是在现实世界里,这是一种不切实际的想法。因此,你需要在工作中学习,围绕着你的技能盲点多下工夫。你所能期待的最好结果就是,罗列出你已知的未知知识和技能,把它们放入未来学习的清单中。

如果你非要从头学起。以下是我为了自主提高技能所要做的一些事情:

  1. 长期保留一份你认为应该学习或者有助于工作的技术清单。
  2. 按照你认为的重要性和不熟悉程度排序。
  3. 挑选一项在两类排名均最靠前的技能,认真研读两到三本相关主题书籍。如果你的经济能力有限,Zed Shaw 有一份免费图书清单,那上面的一些技术主题,你肯定有兴趣学习。
  4. 在下一项最重要的技能上,请重复步骤 1 -3,直至你对自己的综合技能感到满意。

求知若饥,虚心若愚

你很快就会发觉,你代码中任何一处失败就是你作为一名开发者的失败。如果有人在你的代码中发现了一处错误,你将会把这一行为看作是对你的人身攻击。

学习更好地编写代码就像学习如何写作:在你能够写出优质代码之前,你需要输出成千上万行糟糕的代码。对此你根本无法逃避。对你来说,最好的办法可能是坦然接受这一现实 - 你一定会写出很多很多垃圾代码。

那些极富经验的开发者始终与他们编写的代码保持一定的距离。他们已经编写了大量他们自认为非常可怕的代码。他们欢迎大家的批评,因为这是一个学习和提高的好机会。当你对自己的代码加以『保护』的时候,你剥夺了这项你应有的权利。

你发觉自己必须做到无所不知

你身边的每一个人都在使用一些你太不明白的专业术语进行技术讨论。他们抛出一个颇具启发意义的概念,但是从不对其加以解释。为了能够有所贡献,你觉得你有太多的知识有待学习。

坏消息是,你的确有很多东西需要学习。但是没人可以获知,一个开发者为了开发出优秀软件应该需要多少知识,就是说,一个普通人究竟能够处理多少信息。唯一的真正解决方案就是,按部就班地处理这些新的词汇。经过一段时间之后,当新的主题出现时,你就会更容易发现其中的一些规律和模式,但是在刚开始的时候,这的确是一份辛苦的差事。

你身边的绝大多数人并不完全理解他们轻松抛出的那些概念。为了你的个人成长与发展以及依靠你写出优秀软件的那些人,你应该对任何新主题新概念保持一颗谦卑之心。

如果你对某些主题上过于自信,而实际上你在这方面的知识却是匮乏的,你所编写的软件可能将会变得非常糟糕。那些真正知道他们正在说些什么的人很可能也会对你失去信任。如果你希望那些高级程序员认真对待你的建议,但你又发现自己正处于知识的边界时,请养成说『我不知道』的习惯。

关于如何学习编程,在主流媒体中有很多看似热门的话题。但是他们从未谈到过编程第一年就是一种困惑、卑微以及精神疲惫的体验。

你需要坚定的信念和决心,这一点比热情更为重要。如果你能够坚持不懈,投入足够的时间,你的技能一定会提高。学习如何编程不要求超过正常水平以上的智力。但是就像任何值得学习的东西一样,在你具备一定能力之前,你必须花费一定精力和时间。请拥抱这一过程,并且保持前进的动力,编程对你来说,就会变得越来越轻松。


作者:Najaf Ali,程序员,Happy Bear Software 创始人,生活在英国伦敦。

原文:Your first year as a programmer

感谢: Qingniu 帮助审阅并完成校对。