如何锻炼出最牛程序员的编码套路

爱盈利推荐:

 最近,我大量阅读了Steve Yegge的文章。其中有一篇叫“Practicing Programming”(练习编程),写成于2005年,读后令我惊讶不已:

  与你所相信的恰恰相反,单纯地每天埋头于工作并不能算是真正意义上的锻炼——参加会议并不能锻炼你的人际交往能力;回复邮件并不能提高你的打字水平。你必须定期留出时间,集中锻炼,这样才能把事情做得更好。

  我认识很多杰出的程序员——这是在亚马逊工作最好的额外“福利”之一。如果仔细观察他们,你会发现他们时时都在锻炼。他们已经很优秀了,但他们仍然不忘锻炼。他们锻炼的方法林林总总,而我在这篇文章中只会介绍其中的几种。

  据我了解,这些杰出程序员之所以如此成功,就是因为他们一直在锻炼。完美的身材要靠定期的锻炼才能获得,而且必须坚持锻炼才能保持,否则身材就会走形。对于编程和软件工程来说,道理是一样的。

  这是一个重要的区别——我每天都开车去上班,但我的驾驶水平远远不如专业车手;类似的情况,天天编程可能并不足以使你成为一名专业的程序员。那么,什么才能把一个普通人变成一名专业车手或者专业程序员呢?你需要锻炼什么呢?

  答案就在《科学美国人》的一篇名为“The Expert Mind”(专家思维)的文章里:

  爱立信提出,重要的并不是经验本身,而是“努力的学习”,也就是要不断地挑战自身能力之外的东西。一些狂热的爱好者花费了大量的时间去下棋、打高尔夫球或者玩乐器,但他们可能始终停留在业余水平上,而一个训练有素的学生却可以在相对较短的时间里超越他们,原因就在这里。值得注意的是,在提高水平方面,花费在下棋上的大量时间(即使参加各种比赛)似乎还是比不过专门的训练来得更为有效。训练的主要价值在于发现弱点,并有针对性地进行提高。

  “努力的学习”意味着,要常常去处理那些刚好在你能力极限上的问题,也就是那些对你来说有很大可能失败的事情。如果不经历一些失败的话,你可能就不会成长。你必须不断地挑战自我,超越自己的极限。

  那样的挑战有时会在工作中碰到,但也未必。将锻炼从职业工作中分离出来,这在编程领域常被人称为“编码套路”(Code Kata)。

  Code Kata的概念是由David Thomas提出的,他是《程序员修炼之道:从小工到专家》的作者之一。这个概念主要指的是,针对某一种特定技术或技能进行重复性的练习,从而将其熟练掌握。——译者注

  所谓套路,就是一系列的招式。这个概念借鉴于武术。

  如果你想要看一些编码套路的例子(也就是努力学习和磨练编程技能的方法),SteveYegge的文章里倒是提出了一些不错的建议。他把它们称作为“实践演练”:

  1. 写一份自己的简历。把自己所有的相关技能都罗列出来,然后把那些在100年后还用得到的标出来。给每个技能打分,满分为10分。

  2. 罗列出你所景仰的程序员。尽量包括那些与你一起工作的人,因为你会在工作中从他们身上获取一些技能。记录下他们身上的1 ~ 2个闪光点,也就是你希望自己有所提高的方面。

  3. 查看维基百科上的“计算机科学”栏目,找到“计算机领域先驱者”这个分类,从这个列表中挑选一个人,阅读他的事迹,并且在阅读时打开任何你感兴趣的链接。

  4. 花20分钟通读别人的代码。读出色的代码和读糟糕的代码都是有益的,两者都要读,轮流切换。如果你无法感觉出它们之间的区别,可以求助于一位你尊敬的程序员,让他给你展示一下什么是出色的代码、什么是糟糕的代码。把你读过的代码给别人也看看,问问他们的看法。

  5. 罗列出你最喜欢的10个编程工具——那些你觉得你用得最多、非有不行的工具。随机挑选其中的一个工具,花一个小时去阅读它的文档。在这一个小时里,努力去学习这个工具的某个你不曾意识到的新功能,或者发现某种新的使用方法。

  6. 想一想,除了编程之外你最擅长什么事情?再想一想,你是通过怎样的锻炼才变得如此熟练和专业的?这对于你的编程工作又有什么启发呢?(怎么把这些经验应用到编程方面?)

  7. 拿出一叠简历,并和一组面试官在同一个房间里待上一个小时。确保每份简历都至少被3个面试官看过,并且要给出1 ~ 3分的评分。针对那些不同面试官评判大相径庭的简历展开讨论。

  8. 参与一个电话面试。事后写下你的反馈,抛出你的观点,然后与主持电话面试的人聊一聊,看看你们是否达成了一致的结论。

  9. 进行一次技术面试,并且被面试的人应该是某个你不太了解的领域里的专家。让他假定听众在该领域里一无所知,因此请他从最基础的讲起。努力去理解他所说的,必要时问一些问题。

  10. 有机会参与别人的技术面试。期间,你只是认真地听、认真地学。在应聘者努力解决技术问题的同时,你也要在自己脑子里尝试解决这些问题。

  11. 找到一个能和你交换实际问题的人,每隔一周,相互交流编程问题。花10 ~ 15分钟来尝试解决这些问题,再用10 ~ 15分钟进行讨论(无论能否解决)。

  12. 当你听到任何你一时之间也无法解决的面试问题时,赶紧回到你的座位上,把这个问题用电子邮件发给自己,以留作日后的提醒。在那一周里找出点时间,用自己最喜欢的编程语言来解决它。

  我之所以喜欢Steve开出的这个清单,是因为它看上去很全面。有些程序员一想到“锻炼”,总认为就是一些编码上的难题。但在我看来,编程更在于人,而不是代码。因此,通过解决世上所有的、并且晦涩的编程面试题目,在提高你的个人能力方面,这种方法是有局限的。

  关于“努力的学习”,我也很喜欢Peter Norvig在“Teach Yourself Programming in TenYears”(花10年时间自学编程)一文中提出的诸多建议:

  1. 与别的程序员交流。读别人的代码。这比任何书籍或培训课程都更重要。

  2. 动手写程序!最好的学习方法就是边做边学。

  3. 在本科或研究生的课程中学习编程课程。

  4. 找一些项目来做,并且需要与其他程序员形成团队来合作。在项目的进行过程中,学会辨别最出色的程序员以及最糟糕的程序员。

  5. 在项目中跟随别的程序员一起工作,了解如何维护那些不是你写的代码,并且学习如何写出利于他人维护的代码。

  6. 学习多种不同的编程语言,特别是那些与你现在所熟悉的语言有着不同的世界观和编程模型的。

  7. 了解硬件对软件的影响。知道你的电脑执行一条指令需要多少时间,从内存中取出一个字(在有缓存或没缓存的情况下)需要多少时间,在以太网(或者因特网)上传输数据需要多少时间,从磁盘中读取连续的数据或者在磁盘上跳转到另一个位置需要多少时间,等等。

  你还可以从Dave Thomas的21种实用的编码套路中获取灵感(CodeKata.com),或者你更愿意加入一个你家当地的“编程武馆”(CodingDojo.org)。

  对于“努力的学习”,我无法像Steve,Peter或者Dave那样提供一个长长的建议列表。我远不如他们有耐心。实际上,在我看来,“编程套路”只需两个招式:

  1. 写博客。我在2004年初创办了CodingHorror.com博客,作为我自己努力学习的一种形式。它在一开始很不起眼,到后来成为我职业生涯中做过的最重要的一件事。所以,你也应该写博客。最后“闻达于天下”的人,往往就是那些能够有效书写和沟通的人。他们的声音最响亮,是他们在制定游戏规则,并且引领世界的潮流。

  2. 积极参与著名的开源项目。所有的高谈阔论听起来都很好,但是,你是一个大话王还是一名实干家呢?别光说不练,这个非常重要,因为人们会用你的行动来衡量你,而不是你的言论。努力在公众面前留下些实实在在有用的东西吧,到时候你就可以说,“我在那个项目中出过力。”

  当你能编写精彩的代码、并且能用精彩的言辞向世人解释那些代码时,到那时候,我会觉得你已经掌握了最牛的编码套路! 更多内容请看爱盈利

时间: 2024-11-09 00:57:11

如何锻炼出最牛程序员的编码套路的相关文章

怎么锻炼出顶尖程序员的编码套路

我每天都开车去上班,但我的驾驶水平远远不如专业车手;类似的情况,天天编程可能并不足以使你成为一名专业的程序员.那么,什么才能把一个普通人变成一名专业车手或者专业程序员呢?你需要锻炼什么呢? 答案就在<科学美国人>的一篇名为"The Expert Mind"(专家思维)的文章里: 爱立信提出,重要的并不是经验本身,而是"努力的学习",也就是要不断地挑战自身能力之外的东西.一些狂热的爱好者花费了大量的时间去下棋.打高尔夫球或者玩乐器,但他们可能始终停留在业余

最牛程序员最爱逛的10大编程网站,你知道几个?-卓帆网

今天我给大家推荐10个高级程序员经常逛的网站,你又去过几个呢?来跟着小编一起看看都有哪些牛逼的网站吧. 0.https://github.com/trending 全球最大的开源仓库网站,不过现在嫁给微软了. ) 1.http://stackoverflow.com/ 踩过坑的都不会不知道她,解救程序员于危难之间啊 2.https://segmentfault.com/ 感觉和楼上是两个×××妹啊 3.https://blog.csdn.net/mcuhome 中国x大程序员交友网站 4.htt

黑马程序员—字符编码

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! --- 常见的编码表: ASCII:美国标准信息交换码.用一个字节的7位可以表示. ISO8859-1:拉丁码表,欧洲码表.用一个字节的8位表示. GB2312:中国的中文编码表. GBK:中国的中文编码表升级版,融合了更多的中文文字符号. Unicode:国际标准码,融合了多种文字,所有文字都用两个字节表示,Java默认使用的就是Unicode码. UTF-8:最多用三个字节表示一个字符. UTf-8格式: 单字节

程序员,千万不要重写代码

如果你跳槽.或刚接手一个新项目,面对看上去异常混乱的旧代码,请冷静下来,忍住推倒重写的冲动. 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来.是的,他们决不会满足于简单的增量劳动. 或许这种微妙的心理定位可以解释:为什么程序员进入新项目组后宁愿丢掉旧代码重新写,也不愿意修修补补,他们认为旧代码简直一团糟. 但是,事实上真是这样吗?你之所以认为旧代码一团糟,其实是由编程的一个基本定律决定的,那就是:写代码容易,读代码难. 为什么你觉得旧代码异常混乱?因为读

程序员该当命归何处?

说起这个话题,我估计很多年轻程序员内心都觉得很沉重,最近两天工作不是很忙,博客园进进出出逛了几大圈. 看到的薪资问题,争了个翻天覆地,最终结论,如果想要在it界有所作为,有较为令人满意的收入,那你就挑灯夜战吧,努力给自己充电,让自己在专 业领域变的更强,做别人做不到的事情,要比别人变的更有价值,不要去做熟练工,要去做专家叫兽:确实,it界有很多令尔等屌丝程序员万众瞩目的公众人物例 如赵姐夫,蒋金楠等.蒋金楠出书的,不知道在园区创意产业园哪个公司呆过,听说新电还是新宇,就是没那么幸运能够遇到,我也

Java程序员注意了:奠定你发展的黄金五年,你准备如何把握好?

在Java业界流行着一种说法--黄金5年,就是从程序员入职时算起,前五年的工作选择直接影响整个职业生涯的职业发展和薪资走向.如何把握这五年,从一个刚入行的菜鸟蜕变成一个处事不惊的大佬,这是一个涉及到自身的专业知识储备和选择的难题,那么,一个Java程序员如何做才能完成从入行到大佬的晋升之路呢? 参加工作1-2年之间 在这段时间里,想必对Java已经有了一个深入的了解.首先,你要非常熟悉设计模式,看一些关于代码编写优化的书,提高你的代码能力,能够写出一手优雅的代码:其次,你在工作过程中肯定接触过并

这8种武器点亮程序员的个人品牌

(本文曾发表于<程序员>2015.10.B期) 提到段誉,我们就会想起凌波微步和六脉神剑.提到乔峰,我们会想起降龙十八掌.提到王语嫣,我们会想到她惊为天人的容貌和熟知各门派功夫的渊博知识.提到欧阳锋,我们会想起蛤蟆功.提到李寻欢,我们会想起小李飞刀.提到-- 提到Linus Torvalds,我们会想起Linux.提到雷军,我们会想起WPS和小米.提到Bill Gates,我们会想到微软和Windows.提到王江民,我们会想起江民杀毒.提到侯延堂,我们会想起网际快车.提到-- 每一个人,不管是

创业泡沫的「军功章」,高薪低能的程序员要分走一半

今年 9 月阿里校招规模缩减,薪水也较往年有所下降.甚至还出现了不仅仅是产品.运营这样的非技术岗位受到了波及,就连核心开发岗位也未能幸免.甚至出现了给了 Offer 再拒绝学生的情况,让应届生们体验了一把「拥抱变化」. 程序员云集的社区,如 v2ex.知乎立刻出现了对阿里巴巴的声讨.程序员们纷纷表示阿里巴巴在这件事情上的表现真是烂到极点,然后又惯例把阿里巴巴的 HR 制度批判一番,最后以「阿里药丸」收尾. 在一片声讨的声音中,我联想到了一些别的事情.回想 2008 年阿里巴巴在香港上市,风头正劲

老程序员的思想变迁

蓦然回首自己做软件开发这个行业已经十年了,这十年中我获得了很多,技术能力.培训.出国.大公司的经历,还有很多很好的朋友.但再仔细一想,这十年中我至少浪费了五年时间,这五年可以足够让自己成长为一个优秀的程序员,可惜我错过了,我用这五年时间和很多程序员一样在困惑和迷茫中找不到出路!路其实一直都在那里,只是我们看不到而已! 以前我一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了这个位置上.想想有多少人对于自己将来要从事的职业和技术类型进行过深入思考和比较呢?当我跳出编码后,我开始思考