三十五年经验分享:程序员进阶八法
这八法十分可靠,可提高你写代码的技能,你可要收藏好了。时间到了,提高你的编程技能,认真+严肃,走起!如果你的目标仅仅是提高自己,那么很容易实现,但是如果你的目标是成为一个伟大的程序员,那么这就不简单了。很多人都愿意说,我想变得更好,但是更好是什么却很模糊,而且人们也不知道该怎么样去做。我在这里分享八法来帮助你顺利提高你的编程技能。这些小智慧来自三十年深耕该领域,许多都令你再熟悉不过了,你可能早就认知了它们。
1.要记得,你并非无所不知 在你前进的路上,有一只巨大的拦路虎,它的名字叫做“我无所不知”。那些计算机学科毕业的大学生们以及有经验的程序员都好犯这样的毛病。实际上,这是一个陷阱,掉进去就很难爬上来。但是,你仍然要克服它。只有才愿意认为自己无所不知,但是人类的特点是,能够认识到自己的不足,然后去学习新知。所以,你要明白,想要成为一个更好的程序员,第一步就是意识到自己总有新物要学,保持谦逊的态度,这才是学习的一贯正途。
2.停止去证明你有多正确吧 从经验中学习会令你伟大,而不仅仅是还凑合。但是要注意了,经验也会使我们不断重复错误的行为导致养成不好的习惯。如果你是有8年经验的程序员,你也有可能连着8年都在重复同样的错误。克服这一谬感的方法就是,时刻检视自己,并不断地发问:在这一点上,我是否还能做得更好一些。举个有趣儿的例子,一个经验丰富的软件开发者,他写出了令自己也艳羡不已的代码,于是他觉得这个代码简直太完美了,他不断写文章去证明自己有多么的正确,代码功能多么优秀。氮素呢?人们从来没有见到他去找一切办法来佐证自己的代码是错误的。其实呀,真正优秀的程序员,他们都喜欢去证反,就是去证明自己有多么的错误,因为他们知道,长久来看,用户一定会发现软件的问题和失误,而他们希望自己首先发现这些问题,而不是等待别人去发现。呐,你看到优秀和平庸之间的差距了吗?
3.代码没有死亡,它始终活着 没错,你第一步总是要写出高质量的代码来满足用户的特殊需求,但是优秀和平庸的区别体现在哪里?如果你只是匆匆忙忙地进入下一个任务中,那么你不可避免地成为了穷忙族。一段代码写出来以后,它并没有死亡,它始终活着。这说明什么?你写出代码并不意味着你的工作结束了,相反,一切都才刚刚开始,你不需要火急火燎地赶往下一个站点。停止,仅仅意味着阶段性的展示和赏析,但是伟大的程序员对一件事情心知肚明,那就是万事都可以更好,产品运行了,这很棒,但是你的工作没有结束,要依靠迭代让产品变得好上加好。 如何让产品变得更好?我们依据不同的应用,会提出不同的问题,比如,更快是不是对产品价值的增值?更容易记录是不是呢?更容易重复使用呢?更可靠呢?这些问题虽然不同,但是程序猿对产品不懈追求的动机是一致的。你懂了吗?你不断思考如何让产品变得更好,这一点是不变的,但是你的方法是提出一些与众不同的、内容不一的问题。
4.写三次吧 好的程序员认为写出的软件能运行就好了,伟大的程序员认为软件要运行得极其完美。但这很少在第一次就成功,最好的软件通常要写三次。首先,你写软件是为了向自己或者用户证明问题是可以解决的。其他人或许意识不到这是一个概念生成的时期,但是你自己很清楚。然后,你让软件生效。最后,你让它正确地运行。在那些最好的开发者身上,你并不会明显地看到这种级别的工作流程,他们做的一切都看起来聪明极了,但是在他们背后,即使是明星开发者,他们多少次将第一版和第二版扔进垃圾桶,你是不得而知的。你想做到更好,你就要将摒弃代码与重新开始这条给力的方法融进你自己的工作流程之中。如果没有什么特殊情况,“写三次”可以教你认识到:解决一个问题有很多种方法,它使你避免在一棵树上吊死。
5.尽可能地去读代码,越多越好 我在这里不能给出更多的建议了,我只能告诉你要提高编程技能,你就要去读别人的代码。这一点太重要了。你读别人的代码就能发现他们是怎样解决一个编程问题的。但是不要仅仅把它们当作参考文献,你要把它们当作一门课或者挑战,去学到技能,让自己的编码能力得到提高。你可以这样问自己:噢,看看我写的这堆代码,你的和我的有什么不同呢?你找到另一种解决方法了吗?我能学到什么呢?我怎么用到自己的代码中去呢?我以前可从来没想到还可以这样做呢!我能做什么来提高我的代码的质量呢? 既然这些资源都开放给你,你就可以有信心找到更好的解决办法,去做吧!用当作家的心态去写代码吧。这种练习会帮助你接触到最优秀的头脑,这样就会与他们产生共鸣。不要把过程想象得太松散。无论你是习惯于私人杂志、博客、代码审核程序,还是习惯于拥有众多开发者的社区平台,你都要分享出你思考的结果。比如向朋友去解释一个问题,这能帮助你理清思路,再比如你分享出你的分析,这能帮助你去搞明白你为什么会以固化的思路去反馈别人的代码。这就是我在前面所提到的自我反省中的全部。反省会帮助你平心静气地判断你自己的优势和劣势。 注意:阅读大量的代码并不能使你变成伟大的程序员,就好比一些想要超越伟大的文学家的人阅读了大量的优秀文学作品结果却并不一定提高自己的写作能力一样。大量的开发者只是为了简单地解决问题而去阅读,他们急于找到一个答案,所以大部分时候,他们只是复制和粘贴了别人的代码。你这样做的话,就会变成一个特别糟糕的程序员,因为你对他人的智慧视而不见。另外,如果你只是抄袭而不去花时间理解的话,你吃的就只是bug而不是夏日午餐。这样,你其实就成为了一个bug生产厂。
6.不要只为工作而写代码 接一个私人的编程项目有许多的好处。比如,你不仅有机会获得在目前的工作中很难学习到的工具和技术,而且还能够使你更具有市场眼光。无论你是否为开源项目做奉献,或者承担本地社区组织的一个无偿的项目,你都将获得技术能力和自信。另外,你的私人项目也向你潜在的雇主证明了你是一个不会停止主动学习的人。因为热爱而写代码的另一个好处就是你很容易依靠自己去解决许多问题。你不能把困难抛给别人,你会停止一遇到问题就立即向别人寻求帮助。提示:不要只选择你有把握的私人项目,你需要一些无把握的尝试。但是你的确可能在面临最终期限到来的时候不想失败。
7.尽可能与其他开发者亲密地合作 倾听他人是合作的基本原则。无论你是组队编程还是参加黑客马拉松,或者就是参加一个编程人联合会,比如Vermont编程人联合会。当你为一个开源项目无私贡献的时候,你要注意来自用户和其他开发者的反馈意见。你在这些评论中看到那些共性了吗?其实你这是很幸运地遇到了可以信任的私人顾问,他们能在你需要的代码技术和职业选择的一系列问题上给你指导。不要浪费这些机会。
8.你学的是技术,而不是工具 编程语言、工具和方法论千帆过境,数不胜数。这就是为什么你在语言、框架上的经验要尽可能地多。你必须集中精力在编程的基础上,因为基础基本不变;你还要把注意力放在构建而不是编写上。任何时候,你坚信只有一条正确的道路通向真理,那么你就该自我反省一下了。教条会阻碍你学习新的知识,使你变得不爱改变。道理怎么讲都讲不完,但是自我提升的核心要点就是你知道在哪里止步。
1.要记得,你并非无所不知 在你前进的路上,有一只巨大的拦路虎,它的名字叫做“我无所不知”。那些计算机学科毕业的大学生们以及有经验的程序员都好犯这样的毛病。实际上,这是一个陷阱,掉进去就很难爬上来。但是,你仍然要克服它。只有才愿意认为自己无所不知,但是人类的特点是,能够认识到自己的不足,然后去学习新知。所以,你要明白,想要成为一个更好的程序员,第一步就是意识到自己总有新物要学,保持谦逊的态度,这才是学习的一贯正途。
2.停止去证明你有多正确吧 从经验中学习会令你伟大,而不仅仅是还凑合。但是要注意了,经验也会使我们不断重复错误的行为导致养成不好的习惯。如果你是有8年经验的程序员,你也有可能连着8年都在重复同样的错误。克服这一谬感的方法就是,时刻检视自己,并不断地发问:在这一点上,我是否还能做得更好一些。举个有趣儿的例子,一个经验丰富的软件开发者,他写出了令自己也艳羡不已的代码,于是他觉得这个代码简直太完美了,他不断写文章去证明自己有多么的正确,代码功能多么优秀。氮素呢?人们从来没有见到他去找一切办法来佐证自己的代码是错误的。其实呀,真正优秀的程序员,他们都喜欢去证反,就是去证明自己有多么的错误,因为他们知道,长久来看,用户一定会发现软件的问题和失误,而他们希望自己首先发现这些问题,而不是等待别人去发现。呐,你看到优秀和平庸之间的差距了吗?
3.代码没有死亡,它始终活着 没错,你第一步总是要写出高质量的代码来满足用户的特殊需求,但是优秀和平庸的区别体现在哪里?如果你只是匆匆忙忙地进入下一个任务中,那么你不可避免地成为了穷忙族。一段代码写出来以后,它并没有死亡,它始终活着。这说明什么?你写出代码并不意味着你的工作结束了,相反,一切都才刚刚开始,你不需要火急火燎地赶往下一个站点。停止,仅仅意味着阶段性的展示和赏析,但是伟大的程序员对一件事情心知肚明,那就是万事都可以更好,产品运行了,这很棒,但是你的工作没有结束,要依靠迭代让产品变得好上加好。 如何让产品变得更好?我们依据不同的应用,会提出不同的问题,比如,更快是不是对产品价值的增值?更容易记录是不是呢?更容易重复使用呢?更可靠呢?这些问题虽然不同,但是程序猿对产品不懈追求的动机是一致的。你懂了吗?你不断思考如何让产品变得更好,这一点是不变的,但是你的方法是提出一些与众不同的、内容不一的问题。
4.写三次吧 好的程序员认为写出的软件能运行就好了,伟大的程序员认为软件要运行得极其完美。但这很少在第一次就成功,最好的软件通常要写三次。首先,你写软件是为了向自己或者用户证明问题是可以解决的。其他人或许意识不到这是一个概念生成的时期,但是你自己很清楚。然后,你让软件生效。最后,你让它正确地运行。在那些最好的开发者身上,你并不会明显地看到这种级别的工作流程,他们做的一切都看起来聪明极了,但是在他们背后,即使是明星开发者,他们多少次将第一版和第二版扔进垃圾桶,你是不得而知的。你想做到更好,你就要将摒弃代码与重新开始这条给力的方法融进你自己的工作流程之中。如果没有什么特殊情况,“写三次”可以教你认识到:解决一个问题有很多种方法,它使你避免在一棵树上吊死。
5.尽可能地去读代码,越多越好 我在这里不能给出更多的建议了,我只能告诉你要提高编程技能,你就要去读别人的代码。这一点太重要了。你读别人的代码就能发现他们是怎样解决一个编程问题的。但是不要仅仅把它们当作参考文献,你要把它们当作一门课或者挑战,去学到技能,让自己的编码能力得到提高。你可以这样问自己:噢,看看我写的这堆代码,你的和我的有什么不同呢?你找到另一种解决方法了吗?我能学到什么呢?我怎么用到自己的代码中去呢?我以前可从来没想到还可以这样做呢!我能做什么来提高我的代码的质量呢? 既然这些资源都开放给你,你就可以有信心找到更好的解决办法,去做吧!用当作家的心态去写代码吧。这种练习会帮助你接触到最优秀的头脑,这样就会与他们产生共鸣。不要把过程想象得太松散。无论你是习惯于私人杂志、博客、代码审核程序,还是习惯于拥有众多开发者的社区平台,你都要分享出你思考的结果。比如向朋友去解释一个问题,这能帮助你理清思路,再比如你分享出你的分析,这能帮助你去搞明白你为什么会以固化的思路去反馈别人的代码。这就是我在前面所提到的自我反省中的全部。反省会帮助你平心静气地判断你自己的优势和劣势。 注意:阅读大量的代码并不能使你变成伟大的程序员,就好比一些想要超越伟大的文学家的人阅读了大量的优秀文学作品结果却并不一定提高自己的写作能力一样。大量的开发者只是为了简单地解决问题而去阅读,他们急于找到一个答案,所以大部分时候,他们只是复制和粘贴了别人的代码。你这样做的话,就会变成一个特别糟糕的程序员,因为你对他人的智慧视而不见。另外,如果你只是抄袭而不去花时间理解的话,你吃的就只是bug而不是夏日午餐。这样,你其实就成为了一个bug生产厂。
6.不要只为工作而写代码 接一个私人的编程项目有许多的好处。比如,你不仅有机会获得在目前的工作中很难学习到的工具和技术,而且还能够使你更具有市场眼光。无论你是否为开源项目做奉献,或者承担本地社区组织的一个无偿的项目,你都将获得技术能力和自信。另外,你的私人项目也向你潜在的雇主证明了你是一个不会停止主动学习的人。因为热爱而写代码的另一个好处就是你很容易依靠自己去解决许多问题。你不能把困难抛给别人,你会停止一遇到问题就立即向别人寻求帮助。提示:不要只选择你有把握的私人项目,你需要一些无把握的尝试。但是你的确可能在面临最终期限到来的时候不想失败。
7.尽可能与其他开发者亲密地合作 倾听他人是合作的基本原则。无论你是组队编程还是参加黑客马拉松,或者就是参加一个编程人联合会,比如Vermont编程人联合会。当你为一个开源项目无私贡献的时候,你要注意来自用户和其他开发者的反馈意见。你在这些评论中看到那些共性了吗?其实你这是很幸运地遇到了可以信任的私人顾问,他们能在你需要的代码技术和职业选择的一系列问题上给你指导。不要浪费这些机会。
8.你学的是技术,而不是工具 编程语言、工具和方法论千帆过境,数不胜数。这就是为什么你在语言、框架上的经验要尽可能地多。你必须集中精力在编程的基础上,因为基础基本不变;你还要把注意力放在构建而不是编写上。任何时候,你坚信只有一条正确的道路通向真理,那么你就该自我反省一下了。教条会阻碍你学习新的知识,使你变得不爱改变。道理怎么讲都讲不完,但是自我提升的核心要点就是你知道在哪里止步。