在论坛上看到同学院的学弟问的,就回答了一下。打的字挺多的,所以就发到博客上了。
原文是这样子的:
我上大一,西安二本里垫底的大学。在学校C语言学一学期感觉啥也没学到。想补补自己的编程技术,开始找培训机构。北大青鸟,西嵌,达内,欧朋兰博,尚学堂都去了。黑马和传智播客在西安木有的~
看了一圈更纠结了,本来只想着拓展一下知识面,把C学好点。现在是,被他们说了一堆后,我感觉在大学里学的东西以后工作根本不够用,计算机科学与技术专业学的东西本来又多又浅。所以我现在决定上培训班了。然后。。。
然后就是,各种复杂的培训项目,我看的头都大了。北大青鸟的学士后,JAVA,安卓,嵌入式,网络管理,虚拟化,Linux,c c++,操作系统。。。每个课程都还死贵!我瞬时无语了。
(补充一句,西安的二本不多了,西安的同学一看就知道了。)
学好C可能不会让你找到个好工作,不知道你们用的是什么书,如果是清华大学的那本就直接丢垃圾桶吧。图书馆负一层的好书(ps:我们学校的计算机书都在负一层,看的人少。。)多得是,还有C语言作者写的,首选国外的书,然后是国内的。C的重要就是指针+数据结构。有一本不错的书,如《C和指针》及《C专家编程》。不过,如果不是搞嵌入式的话,C可能会用得很少,多数都是Java的面向对象。图书馆有很多,很不错的书。。这是我们学校的一个不算是优点的优点,我不知道你们系的老师怎样,但是请相信多数情况下只有混得不好的才来当老师(ps:很一般的二本院校)。只是少部分老师也很优秀,至少在我们专业中——电子信息工程是这样的。在我们专业领域,C才是神器相比于汇编语言,只是这个时代汇编语言用于提升运行效率显得有点。。。(转载保留 Phodal's Blog Phodal's zenthink)
如果想学得全的话,建议不要在C上面花太多时间,学得精就需要在上面花费一定的时间,不过可以试着用阅读源码的方式来解决。C很重要,但是有时候不是很重要,就如同你对数学一样,重要的时候才会体现出来。以后,你会知道我们学校的考试是怎样的,不要按照老师的思维来学习,要有自己的学习习惯和方法。
面向对象,一个比较好的起点就是Java,这个印象中经常看到计算机系的孩子拿着这些的书,然后你可能需要《Head First设计模式》,接着是四人班GoF的经典之作《设计模式》,还有很多,如果觉得Java麻烦。可以试着用Ruby或者Python,Ruby有一本《Ruby设计模式》,学设计模式的优点是如果你面向对象的思维不是很强的时候可以用到。用Ruby可能会使学习快些,在学习设计模式的时候,问题是国内用这种语言可能会比较少。需要考虑一下,Python会比Ruby多一点,如果有所谓的爱国情节,就从Python开始,国外的孩子好像都是。
C++算是一门不错的语言,只是现在用得比较多的好像是在游戏领域。这门领域太复杂了,所以不要以为你的教科书上面的东西那么简单,请相信教科书是给考试准备的,而不是给实战准备的。所以,除非有好的发展(比如,有亲戚等在这方面工作,而且现在主要是在游戏中用得比较多),要不请暂时放弃C++。Java提炼了一些C++的精华,比较面向对象而且和专业课相关,算是一个很好的起点。简化面向对象的学习就是上面说的设计模式。
开始使用Linux。开始可以考虑用Ubuntu或者Mint,国内用得比较多。我比较喜欢使用openSUSE。如果你有台MAC 就再好不过了。试着从底层去了解一个程序是怎么运行的。从开机到一个程序的运行,其中你可能需要了解的是《Linux内核原理与实现》。以及你们专业自带的《操作系统原理》,如果用的还是国内的书的话,请换成图书馆的国外的书。Unix的有些东西和Linux上面是类似的,所以可以试着在上面写C程序,附上一本书《unix环境高级编程》。
Windows很好很强大,但是如果你想提高你的技术试着用Linux。 每个人的看法可能不同的,但是如果要学得相对全一点,请到Linux。当然也可以选择成为Windows的高手。Windows要成为高手有点难,Linux的学习曲线可能会有点陡。
所以有这样一本书《鸟哥的Linux私房菜:基础学习篇》,在我们实验室512(ps:很受程序员欢迎的数)中几个都是以此为基础学的。所以,请不要相信计算机学得好的都在计算机专业。鲁迅学的也不是中文,你说是吧?
学好你们专业的课,比如《数据结构与算法》、《操作系统原理》、《编译原理》之类的,这类的书首先考虑国外的,再考虑国内的。如果看不懂所谓的数学,可以考虑一下《具体数学》。
虽然我不是计算机专业的,但是我开始学计算机比较早,其中可能走过一些弯路。数学在有些时候也是很重要的,不过我觉得国内的教育太坑人了。所以可能需要一些国外的计算机数学方面的建议。
我可能是没写好本专业的课,但是我达到了本专业的要求,可以做出想要的东西。所以,要对自己的大学有一个好好的规划。
看别人写的代码。这是一个很省力的成长方式,有一本书叫做《代码阅读》。可以试着用这个当起点去学习,其中也提到了C的很多用法,所以那本书是一个很好的起点去学习。
更多的开源程序在Linux上面,所以这部分可能需要有Linux系统作为基础,所以尽快换成Linux,双系统切换。如果实在有Windows强迫症那就单Linux运行。
更多的编程+项目。试着用做一些东西来学编程,而不是按照书上说的一步步的来。国内的书可能更多的按步就班的来。所以,用实现功能来学习编程,再慢慢来。
私活有时候是一种很不错的成长方式,在大学中做了几个网站,成长得很快,也有收入。虽然大部分都是源自网站前端的,但是请相信前端也很复杂。可能你们上的课和现在的不一样了,现在的前端的位置比课堂上的那些老师说的重要得多。服务器的配置再高也会有个限制,但是将一些计算放在用户的浏览器里,是一种很划算的方式。
至于有些编程经验嘛,可以由比赛中获得,印象中计算机系会有很多比赛。
如果有一天你觉得自己写的代码不行的话,请试着用《重构》这本书来改善你的代码。
如果有一天你觉得面向对象的思想不够的话,请试着阅读《设计模式》来提升。
如果有一天你觉得没学好C语言的时候,请试着阅读《C和指针》。
。。。
所以,当你觉得不足的时候,请阅读。
(PS:大一到大四看了500左右的计算机书,因为想了解全一点,所以看得有点多,习惯于像福尔摩斯一样的作法。刚那些东西当成书库一样存储,以使自己找到更合理的解决方案,但是后来发现有时候是不可取的。现在的结果是编程经验远远不足,好在未来的东家看好我。)
至于为什么,请参考一下我写的上一篇文章。
《REWORK》启示录 招聘笔杆子——程序员为什么值得写博客