@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,因为我觉得它的用户体验很好。在课程设计手册还在按照TurboC讲解图形界面的时候,我发现了一个伪造的可以在VS下使用的图形库EasyX。其实人都是追求美的,老师不喜欢你给他看一个DOSBOX翻滚的TurboC。善用和调取已有的工具和资源是我这段时间最大的收获。当然这里也挖了一个大坑,用户体验。前几天发现学弟学妹都放弃了TurboC。6.在学校的学习过程是这样的:C->C++->Java。C++与C完全不同,作为一种面向对象的语言,它给我们带来了很多新鲜的概念。尽管我们第一次见面时彼此都很害羞,但没有人能理解对方。我在学C++的时候,其实并没有下太多的功夫。只是觉得STL很好很方便,在OJ上做题比C能省事不少。但是看到一本关于物理引擎的国外书后,我提出了12个兴趣点,看了起来。那本书毕竟没看完,只看了一部分就感觉到自己的肤浅了——类就是这么用的。看了很久才知道这是一个进阶坑:设计模式。7.后来数据结构的课程设计,按照套路用Java做UI,但是JavaIDE在我电脑上一直表现不佳,调试的时候各种困难让我不得不用Java来做表单程序不受欢迎。于是初中就想到了VB,然后又想到了它的老乡C#(请不要问怎么想的=.=),界面拖拽的清爽感。。。经过我的提升,班上只有一个人用Java做UI,另一个人用MFC。这其实就是在说我懒惰,所以我喜欢寻找更好的解决方案。存在就是有价值的。短短5天,人人都能用C#做出好看的界面,Java也能做到。它既麻烦又丑陋。这不是利弊或机会主义的问题,而是生产力和效率的问题。我培养出来的人5天就可以上班,比你培养一个学期的人干得更好,所以这就是价值所在。8、其实一路走来,站得越高,越容易被颠覆。当用PHP编写代码感觉很原始时,框架之类的东西会跳到你的眼前并打你的脸。当WinForm程序感受到代码混搭的诡异时,才发现居然还有WPF。当你觉得Java臃肿的性能堪忧时,先进的Web技术将颠覆你对Java的偏见。……学习编程的人需要这样一个自我认识和自我提升的过程。说实话,我觉得这其实不算走弯路,都是经验。这些所谓的弯路,就是只要踏上这条路就必须要走的路,就像宜家的步道设计,就是为了让你一路走下去而设计的。因为这是一个过程,学习曲线走弯路是宝贵的。至于我之前提到的学习方法上的弯路,大部分是指在教材选择和训练方法上走的弯路。通过前辈的指导,这些弯路是可以避免的。我认为这种绕路是浪费时间。现在时间这么宝贵,我们都得讲讲效率。大家都说谭老的书不好的时候,别选这本书。当每个人都说某些练习没有用时,不要做。学会选择,学会辨别,学会找到适合自己的方法。这是最重要的吗?
