[collect]学习编程的过程中的一些经验[bak]

之前在知乎上看到的一个讨论,对我来说启发很大,多希望能早点看到这种类型的文章(之前我都干嘛去了o(╯□╰)o),不过现在看到也不算晚,因为,想奋斗,什么时候都不晚。

学习编程的过程中可能会走哪些弯路,有哪些经验可以参考?

@Crossin
回头看学生时代,最大的弯路就是怕走弯路、想不走弯路。
纠结该学什么语言、该研究哪个方向、该做项目还是啃算法,生怕一失足成千古恨,踏上一条不归路。

很久之后才发现,与其纠结选择,不如找个点坚持下去。好比爬山,你在山脚下纠结该从哪条路上去,而实际上,每一条都能通往山顶,每一条都不会是笔直平坦的。你怕错过另一条路的风景踟蹰不前,却不知道只要登上山顶就可以一览众山小。

如果一定要说个经验教诲,那就是尽可能多地写代码、读源码、读文档。

有两个词,一个叫做功不唐捐,一个叫做殊途同归。


@Blueve
学习过程中的弯路是不得不走的,但是学习方法上的弯路还是可以绕的。

得到经验和浪费时间终归是两回事吗?

我是个完完全全自学入门的人,现在虽已经进入科班,但是我认为经验还是可以分享给想自学编程的大家

的。当然如果题主是想要为了信息学的竞赛学习,那我觉得这个答案就不适合你了,你应该选择更为系统,更为针对,强度也更大的训练方法。

1.
大多数人学习编程最早的懊恼就是不明所以的“烫烫烫烫烫烫烫烫”,虽然基本教育的节奏都是从伟
大的C语言开始,但是作为一个早早自学编程的人来看,C语言作为入门语言是很容易打击人的(教材本身的质量也是一个因素),所以如果是自学入门的话,不妨学一学的入门容易规则简单的语言培养语感和基本素养,例如PHP、VB这样的东西,可以很快做出一个可以看可以用的东西,是很有成就感的,有了自信就自然而然得会想深入的提升自己了。

2.
自己当年中学的时候做论坛,那时候流行的是Discuz!,为了做好玩的互动插件学的PHP。当时的感觉是,自学一门编程语言并不轻松,在会的人看来容易的概念其实不容易灌输给完全不会的人。最开始自己就是啃书本,上课都不记笔记的我把学习到的东西规规整整地记在本子上,直到把基础的语法和语言特性都了解了才停止。不一定像我这样,但是作为一个一清二白的菜鸟,一定要让自己有一个把基础的基础看下去的驱动力才可以。

3.
实践是检验真理的唯一标准。实践对于初学者而言非常重要,但是C语言课本上的实践大多是一些就事论事,针对知识的题目,面对一个控制台程序,其实做完了……过几天也不会觉得这个有什么意思,所以我认为一定要尽可能的尝试去做一个可以用的东西。学PHP做个登陆页面呀~学VB仿个Win计算器呀~学Java做个扫雷~总之做出能够对除你之外的人都能有一点点兴趣的东西,对自己是很鼓舞的。在这方面,C语言这种,对于初学者做图形界面比较不友好的语言……主要的问题就是不会让你产生那种真正解决问题的成就感。

4.
最开始的实践是一种拼凑,因为知识的不牢靠,但是需要解决的问题对自己又是如此的庞杂,所以那个时候的代码都是以能解决问题为主,而不是以好的方法解决问题为主。现在回过头来看当年写过的论坛家族,论坛宠物中心,从外观上讲确实是当时一流的,但是背后的代码着实惨不忍睹。不过对于初学的人而言,能够利用现有知识达成目标已经是竭尽全力了。那个时候的编程没有精雕细琢,就是为了实现而实现,也不管有多少if套着if,甚至变量名我都能起成$if。不过我必须承认的是,没有那段经历,我可能不会如此的喜欢编程。当有人使用了你的成果,不管是对他提出建议还是提出赞美,对于一个尚未破壳的菜鸟而言,都是很棒的感觉。说实话,作为初学者,敢写代码,就是个里程碑了。

5.
历史和人的感觉是很像的,当你的代码写得多了的时候,你自然就会觉得写得不好看。照现在的话讲,那些代码一点都不优雅。作为一个逼格满满的人,完成任务已经不再是一个追求,当Ctrl+C/V成了编程的必备步骤的时候,你自然而然的就会思考了:是不是可以不这样做?这是一个重要的过程,你会想要提升你代码的执行效率,你会想减少查询数据库的次数,你会想用轻便的代码实现想要的功能……当你步入这个阶段的时候,恭喜,菜鸟终于入门了。
这是三个大坑,算法优化、数据库查询优化、代码复用。
你得心甘情愿跳进去,再慢慢往外爬。

5.
看上去我好像在抬高PHP一样,其实不是这个意思。我只是觉得作为一个可以立竿见影的入门语言,它是很合适的。进入大学计算机专业后,我和同学一样,一起学习C语言,我没有接触过这门语言,但是我却比周围的初学者们更快更好地接受了它,即便是像内存、数据类型、指针等从没有接触过的概念,我也比别人更快的认识清楚。我觉得这一方面是因为编程所带来的学习能力的提升,另一方面也是因为我自认为我不是菜鸟所带给我的自信和动力。我当时做了很多出格的事情,当讲课、教科书都在用VC的时候,我执拗的使用VS2010,因为我觉得这个用户体验好。在课设说明书还在按照Turbo C说明图形界面的时候,我却找了个能在VS下使用的仿造的图形库EasyX。其实人都是追求美的,老师也不喜欢你开个DOSBOX滚动翔一样的Turbo C给他演示。擅用和检索现有的工具和资源,是这个时期我最大的收获。
当然,这里也挖了一个大坑,用户体验。
前几天知道,我的学弟学妹们都放弃Turbo C了。

6.
在学校的学习过程是这样的:C -> C++ -> Java。
C++和C截然不同,作为一个拥有面向对象特性的语言,它带给我们很多新鲜的概念。尽管初次见面的时候我们彼此都如此羞涩,谁都看不懂谁。在学习C++的时候,其实我并没有提起多大的劲头,只是觉得STL很好很方便,在OJ上刷题的时候能比C省事不少。不过之后看到一本国外的关于物理引擎的书,便又是提起了12分的兴趣看了看。那本书终归我是没有看完,不过只看一部分我便能感受到自己的肤浅——原来类是这么用的啊。
很久之后我才知道这是一个高级坑:设计模式。

7.
之后数据结构的课程设计,按照套路是要用Java做UI的,但是Java的IDE在我的电脑上一直表现不佳,加上调试时候的种种不顺畅,使得我我对Java做窗体程序好感不佳。于是我想起了初中的VB,随后又联想到了它的同门C#(求别问怎么联想的=。=),那种拖拽做界面的爽快感……经过我的推广,班里最后只有一人用Java做UI,还有另外一个人用的MFC。这个其实是想说,我这个人比较懒,所以喜欢找更好的解决方案,存在就有存在的价值,短短5天,所有人都可以用C#做出一个好看的界面,而Java搞得很麻烦又不好看。这不是在谈优劣或是投机取巧,而是在谈生产力、效率。我训练的人可以5天上岗,做得比你训练一个学期的人还要好,那这就是价值。

8.
其实一路走来,站的越高,自己就越容易被颠覆。
当PHP写代码觉得原始的时候,框架这样的东西就会跳在你眼前打脸。
当WinForm程序做起来感觉到代码混搭的怪异的时候,就发现其实还有个WPF。
当觉得Java臃肿性能堪忧的时候,高级的Web技术又会颠覆你对Java的偏见。
……

学习编程的人需要这样一个自我认知和自我提高的过程,老实说,我觉得这其实不算弯路,这可都是经验呀。这些所谓的弯路是你只要踏上这条路就必走不可的,就像是宜家的步道设计,人家设计好就是要你走遍全程。因为这是一个过程,学习过程上的弯路是宝贵的。
至于我之前所说的学习方法上的弯路,大多是指教材选择、训练方法上的弯路,这些弯路可以通过前辈的指导来避免,我觉得这种弯路走上了,就是浪费时间。现在时间这么宝贵,我们都要讲效率的。当大家都说谭老的书不好的时候,就不要选这本书了。当大家都说某些习题没有用的时候,就不要去做了。学会选择,学会甄别,学会找到适合自己的方法,这才是最重要的吗。


@vczh
尽管我觉得我从知识的掌握上是走了很多弯路,但是这些弯路都培养了我的debug能力和独立思考的能力,我觉得都是值得的。


@郭斯特
编程和任何其他事情都一样, 当你学会了Java/C/C++的顺序选择循环时,会觉得自己已经很牛X了,编程不过如此。后来你发现居然有那么多种没听过的语言,甚至既不是面向过程的,也不是面向对象的,看着各种诡异的语法,感觉自己其实还有些不知道的知识。再后来你发现数据结构和算法的水很深,各种不同的Map, List之间的差别迥异,不同的排序和搜索算法诡异漂亮,你觉得还真得好好学学。再后来你发现编程不只是累代码,还得学IDE的高级功能,写测试,学版本控制,编译系统,持续集成,UML, 数据库,云平台,Linux,web服务器等等一套环境,觉得自己以前有点傻X。再后来你发现面向对象编程要有好的设计,要用设计模式,实现可复用,可扩展,低耦合,高内聚的漂亮架构,这已经上升到艺术而不是科学的阶段了,这时候你诚惶诚恐,觉得自己过去十几年的书都白念了,出去都不好意思叫自己程序员。恭喜你,你已经踏入了程序员的门槛,可以称自己为入门级程序员了。

我承认以上说的其实都是我自己的经历和体会,但作为IT民工中的普通一员,我相信很多人和我又类似的学习轨迹。知识像个圆圈,圈内是你已经知道的知识,圈外是未知。当你知道的越多,就越会发现自己其实知道的很少。所以作为初学者, 多看看书,拓展一下知识面,把圆圈撑大是很有好处的,起码你要知道这个圈子里经常用到的技术有哪些,哪怕不清楚细节,也要知道它大概是做什么的。之后在工作中需要用到这个技术时,再去仔细钻研。但预先学习一下基础的知识,总是有好处的。


@hoterran
花很多时间比较语言的优劣。

有这些时间两门语言都入门啦。

怕吃亏是学习的一个大忌。

工业语言和新型现代语言都值得学习。


@林建入

写一个小程序都要考虑半天可扩展性;起个变量名都要想半天如何才能优雅;没有设计清楚不敢动手写;喜欢用各种“新兴技术”;满嘴技术名词装作高大上;凡事从轮子造起;钻研太多的技术细节却越来越脱离实际……幸好后来我听我女朋友的按时吃药,现在终于快要痊愈了。


@储晓颖
“走弯路也是累积经验的过程” —— 不能赞同更多。

但是从题主问这个问题来看,应该是抱有快速学习和成长的愿望,这个时候就不仅仅要考虑长远的成长和经验积累了,我相信题主更在乎的是性价比——我付出的学习成本是否能较快的看到回报。这个时候,确实是应该正视学习方法,避免少走弯路。

举个例子,我们团队是偏底层JAVA中间件,但免不了也要做一些web页面、前端程序,来展示数据、做后台管控。团队里都是算法好手、分布式精英,然而面对javascript、css时却步履维艰,margin、padding调的一头雾水,稍微难一点的交互、拖动功能就捉襟见肘。

此时可以很明显的看到团队里的同学有两种人,一种会各种google、百度,搜到demo,照葫芦画瓢,写出丑陋的代码完成任务交差;另一种会去买一本《Javascript权威指南》猛啃几个月,成为一代js大师。

这两种人,哪种走了弯路?长期来看,一代js大师肯定功德圆满,简历上可以自信的加上精通js一栏;而应付交差的同学则无甚亮点。但是短期来看,应付交差的同学快速完成了前端任务,把时间和精力都投入到中间件最精髓的分布式、高并发、性能优化上,对自身、对团队都提供了巨大的价值;而一代js大师这段啃书时间则耽误了他在项目上的贡献。

我大学的时候Spring正火的无法无天,按耐不住买了一本《J2EE without EJB》砖头宝典,啃的不亦乐乎,但现在已经记不起书里的任何内容。最终让我真正理解IOC、DI精髓的,还是在后来的一次J2ME小项目,当我new出几十个角色对象、把它们在各自的构造函数里传来传去、自己都理不清对象之间的依赖关系时,我才发现我需要的是Spring的理念。这段小经历,对后来各种工作都受益匪浅。

我抽象能力有限,没法总结出一套少走弯路的方法论,但我可以举出几个“走捷径”的例子,以供参考:

大二的时候做公交车线路查询软件,我有限的程序思维在遇到会出现环路的公交线路算法时完全崩塌,再也没有信心能凭着自己的能力做出这个软件。直到后来一门让人厌恶的离散数学课上,我无意翻到了图论的那一章……结果就是我不仅完成了半年前的这个软件,而且还得到了大学四年唯一的一门90分。

大三的时候做手机客户端,解决少数民族的文字输入法,当用户提出手写识别的需求时,一直在堆砌代码的我束手无策,直到在图书馆无意翻到一本神经网络的书的第九章——有监督的hebb学习……迄今为止,没有读研的我,依然还能拿神经网络的知识去面试刚毕业的硕士同学。

在IBM实习的时候,SOA火遍全世界,想学都不知道这是个啥玩意儿,打开几份IBM的SOA教学文档,把人看的三观尽毁、自我否认的情绪弥漫良久。直到进入支付宝,在测试环境想要测一个中游系统的功能时,各种在上游系统找入口、在下游系统找输出,才真正理解SOA是个什么玩意儿。

类似的事例很多很多,如果说学习真的有捷径,那我能想到的就是目标性很强的——实践出真知。
最近在学习erlang,我的学习方法很简单
1 找到一个对自己项目可能有益的应用场景(比如快速文件传输)
2 按网上教程手把手搭建环境
3 抄一段client-server交互的代码、一段文件I/O有关的代码
4 修改+尝试+google
这么浮躁的年代,确实没有心思去啃砖头书了。各位原谅我的急功近利……


@付强
以为这问题可以跳过,其实你根本跳不过。以为百度很厉害,其实google才最给力。以为英语根本没用,其实英语才是编程基础。以为自己很牛屄,其实渣渣都不如。以为编程需要强大的数学能力,其实根本没那么邪乎。

编程就像写作,画画,一开始都是阅读和临摹。

先设计再实现,有轮子就用,不怕bug,不怕别人的bug。

读懂别人的代码比自己会写要nb。

不用妄自菲薄,越厉害的大牛越找不到对象。


@刘炜
别纠结于选择,重要的是坚持。


@叶泽韬
走的弯路太多了,因为走这些弯路,浪费了我太多宝贵的时间和精力,我这里总结在下面,希望后人引以为戒吧!

1.讨论哪种语言好是完全没有意义的。某种语言之所以产生,是因为当前该领域没有很好的解决方案,人们需要更合适的语言来解决特定的需求。没有最好的语言,只有合适于解决某个需求的语言。

2.多看书,多看代码。有的人说关键点是多写代码,我倒觉得是多看书和开源代码。烂代码写一万遍还是烂代码,你的水平不会有提高,但是读了书和开源代码,你会发现对于某个问题的解决上,书里的和开源代码里面告诉你的解决方案比你自己的解决方案要优秀多了,下次你就可以写出高质量的代码出来。同时,书会系统的较完整地告诉你知识,看完一本书,你的能力会有显著的提高。

3.少看些没营养的科技/IT新闻。科技圈很热闹,从来不会有安静下来的时候,每天都有各种各样的新闻出现,但是事实上,大部分的新闻过几天大家都会慢慢的忘记掉,也不再关注,媒体的注意力又集中在新的东西上了。有时间刷这些无聊的科技新闻,不如好好的看一本编程书,提高一下自己的水平。

4.多和比你优秀的人同行。榜样的力量是强大的,从他们身上学到的东西和习惯,将使你受益匪浅。

5.多出去走走,多和亲人朋友联络。看看真实的世界,你会发现其实真实的世界要远比计算机的世界更丰富,更多彩,也更重要。


@齐鹏
大忌就是不肯学新东西。时刻记住“选择最适合任务的语言,而非最熟悉的语言”这句话,往往能事半功倍。


@RefuseBT
一开始不要为学哪种语言发愁,干到最后你会发现,所有流行的基本都得看一圈。很少有用一个东西用到头的。c、面向对象、脚本语言以及数据库都要了解一种,一上来太多可以不精,了解适用范围,使用特点。数据结构其实很重要,常用几种的特性一定要知道。设计模式什么的不用那么较真,重构多了,基本模式什么的都是打散了用的,以适应项目为主。设计模式只是告诉对于一些问题已经有比较好的解决方法。


@Gnix Feng
我学习编程最大的弯路就是入门用了潭浩强的书!

学好一门编程语言,首先就要学好基础,然后再循序渐进的深入学习。我上大学前对计算机一直只停留在开关机、打开浏览器、登录QQ的水平,大一学习C语言入门用的是潭浩强的,当我千辛万苦看完每一章节,做完里面的练习(包括混论坛提问)。上手写完里面的所有代码,自己又写了个千行代码的小程序后,以为可以,就想可以做点什么了,就在网上找做项目的书。但当我买了本《C++primer》看后,我发现我还差得远呢,而且深深的感受到,为什么入门时用的是潭浩强的那本入门书!!!
——————-以上只是吐嘈下—————
我觉得如何学好一门编程语言的方法,也许可以拿下面的代码来讲述:

大概就是这样吧!


@追逐pursuit
我的弯路就是不够努力。。。
其实都不难,只要努力,用心,都能学会成为高手


@ched
总而言之,「折腾」。

虽说在这条路上总得折腾几下,但是上瘾了就不好了,就我而言:
1. 折腾编辑器 vim, emacs 之类
2. 折腾各种工具的选择
3. 折腾 Linux 配置,美化之类
现在觉得把大把的时间花在这些上面真是太愚蠢了。自己和别人一样都把大把的时间投入进去,但是最终水平却远不如人,所以我觉得尽管折腾有积极意义,但是真的不值得去做。

建议把时间花在有计划的学习和有针对性的实践练习上,不要想做什么就做什么

参考这篇文章:The Most Valuable Lesson I Learned from Playing the Violin

====
想得太多,书看得太少

光熟语法,没认真学标准库及各种编程环境
太晚知道正则表达式
太晚知道版本控制软件,尤其是git
======
对某种技术(语言,平台)怀有宗教般的热情是有害的。

在学校非开源的东西瞧都不瞧,那时候觉得在 Windows 上用 IDE 学习编程太 LOW 了,非得在 Linux 下用 Vim , Emacs 才能称得上真正的程序员;Windows 这种操作系统根本就是给小白用户准备的,怎么能配得上我们高贵的程序员呢,程序员电脑上都应该跑自己 DIY 的 Linux。

工作一两年之后为自己当初的狭隘感到羞愧。Windows + IDE 确实有着很高的生产力;语言和平台也没有我以为的那么水火不容,掌握 C# 会对掌握Java 有极大帮助,熟练运用 SQL Server 别的 SQL 数据库也不是难事 … …

这段经历告诫自己做实事,多思考,不要停留在表面。
————
大神们已经说的非常深刻了,那么我跟楼主分享一下我大学这几年学编程的经历吧,当成自己的总结,也希望能给题主一点借鉴的作用。 1、我的大学环境及高中以前的教育背景。 大学之前我接触电脑的场景只是在网吧打dota,高三没怎么努力,考进了一个二流大学(但我还是爱这所大学,她给了我成长环境);进入大学之后调到了计算机专业。 2、大一,从井口中仰望世界。 现在想起大一的时候的一些想法啊,好可笑的,那个时候觉得上课老师好水,于是每次上课花十多分钟看完这节课的内容,然后就干自己的事情了,我真是无知啊!(题主上课千万要认真,别像我~~)自己的思维更多的是围绕自己的,而不能考虑更多的东西,这段时间是比较幼稚的。在编程方面,我在军训的时候用中午的时间看了大半本C语言教材(学校自编的教材你敢信!还有就是那个时候居然可以中午不睡觉,现在完全做不到了啊),这直接导致了我后来参加校ACM选拔考试的时候简直无压力了,当然,我的数学还是凑活的。大一一期基本在弄ACM了,各种算法,各种练习,到了二期,我对ACM的兴趣下降了,觉得ACM没意思,就放弃了(这不知道算不算个错误的决定)。大一就是这样了,一直投入ACM,弄各种算法,各种数据结构。所以这段时间基本还是不明白自己要干什么,学什么。 3、大二,受学长影响! 我有位很好的学长兼朋友他是学java的,所以我就学了java,看了《think in java》 《java 核心技术1》两遍,然后就开始啃jdk7 API (API是我读过的最无聊的东西),其实api现在很多也不记得,但是这个过程中培养了学习能力和阅读外国文档的能力(我认为这两个能力是核心竞争)。在第一个寒假我还把c++ primer plus 扫了一边,主要是考虑到有c++的课。大二的第二期,又学了java web的各种东西,具体的什么servlet啊,mysql数据库啊,http协议啊,MVC,REST。基本能写个小网站小论坛啥的,但是没有学习什么框架,因为基础不牢,框架用的太多会局限思维。这个阶段看过的资料有,mysql document ,网上的javaweb教学视频,tomcat源码(一部分吧,要读完就真NB),java核心技术2。这段时间做的不好的就是没把刷ACM题的习惯保持,导致现在都没能再次养成了。 4、大三,越学越弱的感觉 到了大三,差不多就是最后的一年大学生活了,大四都是各种找工作找实习了,要么考研。大三上学期呢,就是去年,偶然的机会知道了cuda和opencl,然后就去学了这个东东帮老师优化他的粒子群算法什么的,还好以前c和c++还是蛮认真,要不然真搞不定。这段经历让我接触到了高性能并行计算的知识。这个时候也开始用ubuntu了,开始很不适应,后来就彻底放弃windows了。用了ubuntu之后,开始了解开源,了解github。也开始接一些小的项目,一般1w一下的,四五个人搞,这里提个建议,大学里面项目其实不宜过多,有经历就好。这个时候我的编码能力和代码视野已经比周围的人强了(但是毕竟是个二流大学咩,外面大神多得是呢)。大三二学期呢,就是这一期了,打算学习一些框架了,就是java的ssh了,毕竟我也要找个实习了。开学到现在也在同步学习linux内核的源码。感觉比较有兴趣,操作系统真是很伟大的软件。随着学的多了,代码视野大了之后觉得自己真是很弱很弱。 5、总结一下吧 a、 大学一直还是有在玩游戏,我个人觉得这个不好的习惯。 b、 社交能力没有好好的培养,这是我最头痛的地方,望题主要多多注意这方面。 c、 没谈妹纸,估计大四也不会有了~~~唉。题主高富帅自然木有问题了。 d、 感觉自己比较属于有知识,没文化的那种,望楼主大学要多看书。 e、 苦B的大三党还不知道自己的这些个东西能找个啥工作。 6、最后的建议 大学真的不能浪费时间,我自己还是浪费好多时间,呜呜,学会时间管理很重要啊。别怕走弯路,多学,代码视野会大些。在生活中多思考思考,有什么好的想法就code出来,自己写的各种小工具能方便自己的学习和生活,还有就是相信付出才有回报的。 7、最最重要的 a、没有比coding更重要的了,代码写的多才能体会一些深层次的东西。 b、自学能力! 鄙人大学三年就是这么呼噜过了~~~~~~希望能给题主一些借鉴,另外感谢忍受我粗烂的文字一直读完了的人。


@Van Bruce
各种大神们说的都不错了,不才补充几句,权当来狗尾续貂罢。

走过最大的弯路,是对于“基础”的看轻,导致我工作三年后仍然在回头补课。

程序算是我自学的吧。当时自学的时候,把重点放在了“如何实现功能”,而非去摸透更深层的实现机制。那些被计算机系的学生睡过去的课,我没有意识到重要性。当然,再怎么不在乎基础,也还是把数据结构当回事看的,但我也仅仅做了这些而已。

我现在在补什么呢?

离散数学、编译原理、JVM、计算机结构……等等很多本该大学本科就该牢记的基础,现在成为了我自身提高的瓶颈

不要急躁于看到编译结果,做好基础知识的吸收和理解,否则,你将为此付出更多的代价去补课。

世上本没有弯路可言,有的只是宝贵的经验。

 

 

原文讨论地址:

学习编程的过程中可能会走哪些弯路,有哪些经验可以参考?

声明: 除非注明,CrazyOf.me文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://crazyof.me/blog/archives/1481.html

《[collect]学习编程的过程中的一些经验[bak]》上有8条评论

  1. 增进编程技能的万全之计
    http://www.infoq.com/cn/articles/one-sure-fire-way-to-improve-your-coding

    增进编程能力最明显的方式就是尽可能编写更多代码,除此之外,我们还可以通过另一种方式增进你的编程能力——阅读别人写的(好)代码。

    选择可供阅读的代码:
      阅读你所依赖的代码(首先可以读一读你目前正在使用的任何插件或库的代码)
      阅读让你印象深刻的代码(最近有什么东西让你印象深刻吗?是否是开源的?如果是,那么也许很值得一读,因为代码本身可能会像应用程序一样让你留下深刻的印象。)
      阅读你所敬重的人写的代码
      阅读你可以完全领会的代码

    最佳阅读“姿势”:
    从大局着眼
      在宏观层面了解自己要阅读的代码所实现的功能,全局了解整个项目的结构,注意文件结构。
    记录你的发现和结论
      代码的阅读不应该是一种被动行为。建议你能在阅读的同时添加自己的备注,随着对程序流程的理解逐渐深入,记录你的猜测和结论。随着理解的深入,也许可以陆续删除一开始留下的浅显的备注,并开始写一些更有意义、更权威,甚至能对整个项目产生真正回报的备注。
    如果可以,一定要测试
      阅读其他人写的代码时,测试是一种很好的起点,因为其中记录了不同代码本应实现的功能。
    执行,修改,执行
      谁说读代码就只是“读”代码?如果能将一切拆解又重新组装起来,才能获得真正的理解。

    周而复始的重复
      读完一个代码基后,挑选一个新的再次开始这一串过程吧。读的代码越多,阅读的收获就越多,获得这些收获所需付出的时间则会越少。我认为你会发现自己在时间方面的投资回报会飞速增加,并且整个学习过程会编程更愉悦的体验。

发表评论

电子邮件地址不会被公开。 必填项已用*标注