程序员的编程套路
程序员的编程套路
Table of Contents
与你所相信的恰恰相反,单纯地每天埋头于工作并不能算是真正意义上的锻炼:
参加会议并不能锻炼你的人际交往能力;回复邮件并不能提高你的打字水平。
你必须定期留出时间,集中锻炼,这样才能把事情做得更好。 – Steve Yegge
类似地,我们每天都开车去上班,但并不能使我们的驾驶水平达到专业车手的水平;我们天天编程可能也并不足以使我们成为一名专业的程序员。那么,什么才能把一个普通人变成一名专业车手或者专业程序员呢?你需要锻炼什么呢?
《万小时天才理论》早就给出了答案,现在应该也已经人尽皆知了,但并没有因此出现很多的天才。这个是有原因的,这个理论应该是正确的,但是,天才的炼成却需要两方面。一方面,是练习者的坚持,大家都知道最难坚持的就是坚持;另一方面,需要有好的教练者,能够看到练习者的缺点,能够有针对性地提出好的练习方法,这一点更加稀缺。
相对而言,练习者的坚持,或者叫自律,还是自己可以控制的。而有一个好的教练者,那真的叫可遇不可求。大多数,或者说绝大多数人都是不具备这样的条件的。
编程领域,是各种高智商的牛人聚集的地方,也有很多的天才。并且,他们乐于分享,写了很多很好的教程,可以让我们从小白,即使没有导师,按照他们的例子和方法,也可以慢慢地掌握基本的编程方法和技巧。甚至有些大牛也写出了一些“教练者”的方法,我们按照他们的套路可以取得更高的成绩,甚至成为大牛。
那么,我们就来看看他们给出的方法,最重要的是,要按照他们的套路来进行锻炼:
1 SteveYegge
- 写一份自己的简历。把自己所有相关技能都罗列出来,然后把那些在100年后还用得着的标出来,给每个技能打分,满分为10分。
- 罗列出你所景仰的程序员。尽量包括那些与你一起工作的人,因为你会在工作中从他们身上获得一些技能。记录下他们身上的1~2个闪光点,也就是你希望自己有所提高的方面。
- 查看维基百科上的“计算机科学”栏目,找到“计算机领域先驱者”这个分类,从这个列表中挑选一个人,阅读他的事迹,并在阅读时打开任何你感兴趣的链接。
- 花20分钟通读别人的代码。读出色的代码和读糟糕的代码都是有益的,两者都要读,轮流切换。如果你无法感觉出它们之间的区别,可以求助于一位你尊敬的程序员,让他给你展示一下什么事出色的代码、什么事糟糕的代码。把你读过的代码给别人也看看,问问他们的看法。
- 罗列出你最喜欢的10个编程工具–那些你觉得你用得最多、非有不行的工具。随机挑选其中的一个工具,花一个小时去阅读它的文档。在这一个小时里,努力去学习这个工具的某个你不曾意识到的新功能,或者发现某种新的使用方法。
- 想一想,除了编程之外你最擅长什么事情?再想一想,你是通过怎样的锻炼才变得如此熟练和专业的?这对于你的编程工作又有什么启发呢?
- 拿出一叠简历,并和一组面试官在同一个房间里待上一个小时。确保每份简历都至少被3个面试官看过,并且要给出1~3分的评分。针对那些不同面试官评判大相径庭的简历展开讨论。
- 参与一个电话面试。事后写下你的反馈,抛出你的观点,然后与主持电话面试的聊一聊,看看你吗是否达成了一致的结论。
- 进行一次技术面试,并且被面试的人应该是某个你不太了解的领域里面的专家。让他假定听众在改领域里一无所知,因此请他从最基础的讲起。努力去理解他所说的,必要时问一些问题。
- 有机会参与别人的技术面试。期间,你只是认真地听、认真地学。在应聘者努力解决技术问题的同时,你也要在自己脑子里尝试解决这些问题。
- 找到一个能与你交换实际问题的人,每隔一周,相互交流编程问题。花10~15分钟来尝试解决这些问题,再用10~15分钟进行讨论(无论能否解决)。
- 当你听到任何你一时之间也无法解决的面试问题时,赶紧回到你的座位上,把这个问题用电子邮件发给自己,以留作日后的提醒。在那一周里找出点时间,用自己最喜欢的编程语言来解决它。
2 Peter Novig 《Teach Yourself Programming in Ten Years》
- 与别的程序员交流。读别人的代码。这比任何书籍或者培训课程都要更重要。
- 动手写程序!最好的学习方法就是边做边学。
- 在本科或者研究生的课程中学习编程课程。
- 找一些项目来做,并且需要与其他程序员形成团队来合作。在项目的进行过程中,学会辨别最出色的程序员以及最糟糕的程序员。
- 在项目中跟随别的程序员一起工作,了解如何维护那些不是你写的代码,并且学习如何写出利于他人维护的代码。
- 学习多种不同的编程语言,特别是那些与你现在所熟悉的语言有着不同的世界观和编程模型的。
- 了解硬件对软件的影响。知道你的电脑执行一条指令需要多少时间,从内存中取出一个字(在有缓存或没缓存的情况下)需要多少时间,在以太网(或者因特网)上传输数据需要多少时间,从磁盘中读取连续的数据或者在磁盘上跳转到令一个位置需要多少时间,等等。
3 Others
- 写博客。很多牛人都坚持写博客,写作作为一项技能,在任何时候都是很重要的。一方面,可以记录和整理自己的思路,想法写出来,和在脑子里过一遍是懂非懂是有很大的不同的,另一方面,也可以锻炼自己的表达能力。
- 积极参与著名的开源项目。
- 在lintcode之类的OJ(online judge)上面刷题,也是一条不错的锻炼算法的方法。