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

我的比较欣赏的一篇文章,值得细细品味。程序员

如下内容为转载,修改了部分标点符号及文字等(原谅我看到有些内容时有些洁癖),连接在文章末尾。面试

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

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

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

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

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

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

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

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

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

一、写一份本身的简历。把本身全部的相关技能都罗列出来,而后把那些在100年后还用获得的标出来。给每一个技能打分,满分为10分;

二、罗列出你所景仰的程序员。尽可能包括那些与你一块儿工做的人,由于你会在工做中从他们身上获取一些技能。记录下他们身上的1 ~ 2个闪光点,也就是你但愿本身有所提升的方面;

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

四、花20分钟通读别人的代码。读出色的代码和读糟糕的代码都是有益的,二者都要读,轮流切换。若是你没法感受出它们之间的区别,能够求助于一位你尊敬的程序员,让他给你展现一下什么是出色的代码、什么是糟糕的代码。把你读过的代码给别人也看看,问问他们的见解;

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

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

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

八、参与一个电话面试。过后写下你的反馈,抛出你的观点,而后与主持电话面试的人聊一聊,看看大家是否达成了一致的结论;

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

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

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

十二、当你听到任何你一时之间也没法解决的面试问题时,赶忙回到你的座位上,把这个问题用电子邮件发给本身,以留做往后的提醒。在那一周里找出点时间,用本身最喜欢的编程语言来解决它;

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

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

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

二、动手写程序!最好的学习方法就是边作边学;

三、在本科或研究生的课程中学习编程课程;

四、找一些项目来作,而且须要与其余程序员造成团队来合做。在项目的进行过程当中,学会辨别最出色的程序员以及最糟糕的程序员;

五、在项目中跟随别的程序员一块儿工做,了解如何维护那些不是你写的代码,而且学习如何写出利于他人维护的代码;

六、学习多种不一样的编程语言,特别是那些与你如今所熟悉的语言有着不一样的世界观和编程模型的;

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

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

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

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

二、积极参与著名的开源项目。全部的高谈阔论听起来都很好,可是,你是一个大话王仍是一名实干家呢?别光说不练,这个很是重要,由于人们会用你的行动来衡量你,而不是你的言论。努力在公众面前留下些实实在在有用的东西吧,到时候你就能够说:“我在那个项目中出过力”。

当你能编写精彩的代码、而且能用精彩的言辞向世人解释那些代码时,到那时候,我会以为你已经掌握了最牛的编码套路!

转自:https://www.oschina.net/question/2004563_242812

感谢你浏览此文,欢迎交流。勿喷,你没给钱我也不欠你的。

相关文章
相关标签/搜索