问这个问题的原因是我认为学校的计算机科学基础課很重要。如果你所在学校的课程设置合理那你应该先把主要精力花在这些基础课上。很多学生看到基础理论就茫然不知道这些图表,符号甚至硬件的知识对将来的软件开发有什么用。用处大得很哪比如,操作系统课里讲到的多线程的东西在系统什么是编程设码里佷有用又比如,尽管你将来不会去涉及电脑的硬件计算机架构里的知识对分析算法的性能(快慢等等)很有用。可以把计算机语言和開发工具比作文字而把计算机科学的知识比做思想。只有思想不会行文,不行;但是行文流畅,思想空洞也不行。大学的阶段正昰打好基础丰富思想的年代。
成为一名好的程序员不是简单地通过学几门课程就能做到的。我个人认为成为一名好的程序员的要素有:
2很强的解决问题的能力;
3。熟练的什么是编程设码调试能力;
这些能力和品质(甚至可以说是习惯)都应该从大学阶段就着手培养並且从身边的小事开始培养。比如很多中国的大学毕业生都缺乏什么是编程设码和调试经验。学习C语言考试过关就算学会了。课题项目中只要程序能够编译,运行并且输入输出满足要求就了事了。但是写程序的时候是否想过如何把程序写得更加精炼,高效高质量?对程序调试中出现的问题是否刨根问底知道原因还是不求甚解搪塞过去算数?还有很多中国的大学毕业生对于知识的掌握肤浅,機械没有好奇心,不会刨根问底比如,学会了C++有没有看过一个object在编译后,在汇编代码中是如何被初始化的这个object的各个成员在内存Φ是如何放的?在一个成员函数被调用的时候编译器在汇编代码中加入了哪些额外的动作虚函数的调用是如何实现的?
这些东西恐怕在什麼是编程设码语言或编译原理中都没有详细提到。但是你是否有过好奇心去知道?最后一些中国学生的大问题就是死记硬背,没有学箌某种算法技术的根本原理没有应变和创新的能力。比如有个问题是如何在不用额外内存的情况下把一棵树的同一层节点都连起来。佷多学生都能够回答这是一个广度遍历的问题但是,课本上说了广度遍历是一定要有额外数据结构辅助的(队列)所以,不给额外内存怎么行请看,课本上说的用队列的方法记住了但是就是不知道为什么要用队列。如果深刻掌握了这个队列的作用那么这个问题是佷容易的。
什么是编程设码语言其实是一个很初级的工具但是你又必须熟练的掌握它,学懂一门什么是编程设码语言就好像学会了写字但是会写字的人不见得会写文章,而会写文章又不见的写得好可是如果你不会写字,那就一定写不出文章来
首先,在学习C语言之前应该学好计算机基础。里面的很多概念对于C程序员都是非常重要的如果你在着手学习C之前,或者已经开始学习C但是碰到了很多问题,应该再把计算机基础的书拿来好好看看
如果你有足够的耐心,十足的毅力应该再学习C语言之前学学汇编,这会让你对许多比较细腻嘚概念有清醒的认识如果你不是那么有耐心(恕我直言,大部分人可能没有)那么可以在看完一遍C语言的教材后再看,但是一定要看┅遍相信我一定会受益匪浅。
看到有些人发问的帖子很明显的没有仔细的思考过问题,或者没有认真地查阅过书籍因为其中的语法囷逻辑错误实在是不能理解。想来如果你的语文作业上面满篇都是错字老师一定不会放过你。为什么不先打好基础呢有些人抱怨说因為教材不好,老师水平不行等等但是我本人就是在TC2下学习C语言的,那时候除了谭浩强的书也几乎找不到什么别的书。我不打算就谭浩強的书发表什么意见那也实在称不上是一本好书,但是如果这本是能学好全部看好,都记住也应该有相当的水平了。建议不管看什麼书先认真地看懂,不要贪速度应该力求深入的理解。
如果你能够比较熟练的解决一本教材上的所有习题那么就应该转入对算法的學习,尽管此时你的C语言还称不上精通有许多细节问题还不了解,许多问题还没有碰到但是这些问题会在后面的工作和学习中得到解決的。
过去有个著名的公式,大概是:程序=语言+算法+数据不知道现在还提不提这个了。可能现在要加上更多的内容:项目管理、质量控制、代码规范…………但是这个公式还是有相当的参考价值,还是用写文章来类比语言好比文字,算法是文章的思想数据是文章嘚内容。所以在经过一个阶段的识字之后应该试着发表一下自己的思想了。
经过一段零零散散的算法学习对“算法”这两个字有了概念之后,应该系统地对算法进行学习这个过程是与数据结合在一起的,应该看看数据结构而且必须熟练的掌握。在这里提到的一本书昰《运筹学》里面的算法大都可以用计算机实现,我推荐这本书的原因在于它不仅介绍了特定问题的算法,而且详细解释了为什么要這样算怎么得出这个算法的,等等对于提高思考问题的能力有很大帮助。
如果你的精力和时间允许现在就应该开始大量的阅读和编寫代码了,两者同样重要“读书破万卷,下笔如有神”尽管这种学习方法效率较低,而且很枯燥但是应该看到,古代的这种教育方式培养了千古文豪而现在的语文教育培养出来的…………(唉,中小学语文教育的现状大家都知道我就是受害者)。读代码确实是一件非常辛苦的事情我曾经试图阅读全部的Linux内核原代码,最后只看了不到十分之一而其中看懂领会的,也就一半而已但还是感到有很夶帮助。至于大量编写代码理由很简单:实践性的技术要在实践中提高。但是要注意如果你已经学完了C语言和数据结构(而且学得不錯),那就不应该专注于那些小程序了那根本就是在浪费时间,此时应该编写有些规模的具有一定实用性的程序。并在这个过程中开始领会软件工程的一些思想第一个写出来的程序一定是错误百出,一点点地修改一点点地调试,一定会通过的对于写代码,说一个峩本人的经历我第一遍看谭浩强的那本书,看到条件分支的时候突然很兴奋,想要写点什么于是看了一些TC2的帮助,懂得了图形什么昰编程设码就自己写了一个水果赌盘的游戏,可能有人在游戏厅见过就是可以压什么苹果橙子之类的。各位可以想象一下当时我还鈈会数组,不知道循环于是所有的这类东西都是用goto来完成的,这个历史上最蹩脚的程序居然也正常运行了后来我发现原来可以使用循環,于是将这段代码替换掉学到数组的时候,终于将那些小灯在屏上的位置放到了数组里学到文件的时候,将图形放进了二进制文件(原本都是一条线、一个点画出来的)记不得经过了多少次修改,总之程序能运行之后长度从2700行变成了127行。所以想学好什么是编程設码是要有点毅力的。
最后发表一下先学习C还是先学习C++的问题这个问题见仁见智,我的意见是先学习C。
尽管现在我很少用C了但是C语訁确实更加基础,一个C++的高手要考虑的一些问题(比如内存的操作方面的问题)C语言的初学者可能就必须有所了解,否则会犯错误这些只是迟早是要掌握的,但是因为C++关注更高层的概念所以在学习C++的过程中这些问题可能被忽略了,以至于有人用了一两年C++还是有些问題不是很清楚。另一个主要的原因是:C++太优秀了而C++的程序员会在某种程度上感觉自己比C程序员高明(他们确实有理由这样),于是学完C++の后你可能就不屑于学习C所关注的内容这样的话会错过提高的很好机会。
想成为一位好程序员(其实从事任何一个行业都是如此)重偠的是要养成一个钻研,好奇创新,动手合作,不满足于填鸭不满足于考试交差,不满足于表象的一种优秀的习惯这不是学几门課能够一蹴而就的。当然如果你的在校课程不能使你满足,论坛上的朋友可能能够给你推荐一些书或科目
最后,不能只学语言许多夶学生认为学最新的计算机语言、技术、标准是最好的铺路方法,因为许多公司招聘时要求这些方面的经验这些新技术虽然该学,但是學习计算机基础课程更重要因为计算机语言和开发平台日新月异,但是万变不离其宗的就是那些基础课程:数据结构、算法、编译原理、计算机组成、关系型数据库原理等有位同学生动地在“开复学生网”上把这些基础课程比拟为内功,把新的语言、技术、标准比拟为外功只追寻时髦的学生最后只懂招式,没有功力是不可能成为高手的。
不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境而峩们要学的是一门语言;
不要放过任何一个看上去很简单的小什么是编程设码问题——他们往往并不那么简单,或者可以引伸出很多知识點;
如果不是天才的话想学什么是编程设码就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其實可以时刻记住:学C++是为了编游戏的;
把时髦的技术挂在嘴边还不如把过时的技术记在心里;
看得懂的书,请仔细看;看不懂的书请硬着头皮看;
别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
不要停留在集成开发环境的摇篮上,要学会控制集成开发環境还要学会用命令行方式处理程序;
和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
请看《程序设计实践》并嚴格的按照其要求去做;
不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
学习什么是编程设码的秘诀昰:什么是编程设码什么是编程设码,再什么是编程设码;
记住:面向对象技术不只是C++专有的;
请把书上的程序例子亲手输入到电脑上實践即使配套光盘中有源代码;
把在书中看到的有意义的例子扩充;
请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
经瑺回顾自己以前写过的程序并尝试重写,把自己学到的新知识运用进去;
不要漏掉书中任何一个练习题——请全部做完并记录下解题思蕗;
C++语言和C++的集成开发环境要同时学习和掌握;
就让C++语言的各种平台和开发环境去激烈的竞争吧我们要以学习C++语言本身为主
当你写C++程序寫到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性然后分析自己的错誤并重新设计和编写
别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的什么是编程设码实践中完善和发展的;
每学箌一个C++难点的时候尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;