我每天都开车去上班,但我的驾驶水平远远不如专业车手;类似的情况,天天编程可能并不足以使你成为一名专业的程序员。那么,什么才能把一个普通人变成一名专业车手或者专业程序员呢?你需要锻炼什么呢?
答案就在《科学美国人》的一篇名为“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.积极参与著名的开源项目。所有的高谈阔论听起来都很好,但是,你是一个大话王还是一名实干家呢?别光说不练,这个非常重要,因为人们会用你的行动来衡量你,而不是你的言论。努力在公众面前留下些实实在在有用的东西吧,到时候你就可以说,“我在那个项目中出过力。”
当你能编写精彩的代码、并且能用精彩的言辞向世人解释那些代码时,到那时候,我会觉得你已经掌握了最牛的编码套路!
分享到:
相关推荐
编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码 。 如果你将源码作为产品发布,就需要确任它是否被很好的打包并且清晰无误,一如你已构建的其它任何产品 。 为了执行规范,每个软件开发...
编程是一项需要严谨和精确的工作,编码规范是程序员的基本素质之一,它不仅关乎代码的质量,也影响着团队协作的效率和项目的可维护性。华为作为全球知名的科技企业,其编码规范在业界具有一定的权威性和影响力。这份...
程序员编码助手,主要方便程序用以日常编码
SymbianOSC++程序员编码诀窍.jsp学习 好好学习天天向上
编码规范对程序员而言尤为重要,有以下几个原因: 一个软件的生命周期中80%花在维护上,几乎没有一个软件在其整个生命周期中,均由最初的开发人员来维护。编码规范可以改善软件的可读性,可以让程序员尽快而且彻底的...
程序员必须注重内功的修炼,有了内功,以后再多花招也能轻松应对。 这次上传书籍列表全部都是我看过的书。大部分我都完整地看完了,少部分需要大量记忆的还在看。这些书全部都是对我有很大的作用的书所以我把它们...
C++程序员编码诀窍pdf 本文的读者对象是:所有使用 C++语言为Symbian OS 6.x/7.0s开发应用的开发伙伴们。 有一个不成文的 80/20法则,说的是:需要用 80%的时间去纠正开发中产生的20%的问题。本文的 目的就是要...
"YaHei.Consolas.Hybrid.1.12"是一款专为程序员设计的编码字体,结合了YaHei(微软雅黑)和Consolas的优点,为中文和英文编程环境提供了理想的视觉体验。 YaHei(微软雅黑)是微软公司推出的一款无衬线字体,适用于...
程序员编程艺术pdf可编辑,教你如何将编程作为一门艺术
满足Java开发的国家电网各种编码规范。
4. 锻炼的方法:包括写一份自己的简历,罗列出你所景仰的程序员,去查看维基百科上“计算机科学”栏目,花 20 分钟通读别人的代码,罗列出你最喜欢的 10 个编程工具,想一想你最擅长什么事情等。 5. 实践演练的重要...
对于C++程序员来说,了解并熟练掌握编码测试实践至关重要。本文将深入探讨C++编程中的编码测试,包括单元测试、集成测试、代码审查以及调试技巧,旨在帮助程序员提升软件的稳定性和可靠性。 首先,单元测试是程序员...
2. **智能提示**:当用户输入部分代码时,输入法会根据上下文提供相关的代码补全建议,类似于IDE中的自动完成功能,帮助程序员更快地编写出正确的代码。 3. **特殊字符支持**:编程中常常需要输入一些特殊字符,如...
在编程世界中,程序员的编码实践是至关重要的。无论你是初入编程殿堂的新手,还是经验丰富的老手,持续磨炼编码技巧都是提升自身能力的关键。在这个“程序员:程序员编码实践”的主题中,我们将深入探讨Python语言的...
VC6源码,是程序员深入理解编码和数进制计算的好工具,帮你即时转换 Base64 Unicode/UTF8 任意进制数值编码,并计算 MD5 SHA1哈希值。