如何学习编程

第一阶段:我觉得我们应该了解一下几种常用语言(选一种你自己喜欢的了解就行)的基本语法和规则(比如:c,c++,c#,java,perl, Delphi,vb等等)。然后可以开始学学算法,在此之前当然得必须具备应有的数据基础了(数学分析,线性代数,离散数学,概率统计,组合数学)。学算 法,当然得了解它的主要思想,而不要过分得拘束于特定语言的技巧上。对一些基本的算法和数据结构应该做到了如指掌(最好能背诵),起码得熟悉以下这几种数 据结构和算法:队列、栈、压栈弹栈*作、建立逆续/顺序链表、快速排序、插入排序、归并排序、二分查找、二叉树、B树、深度优先、宽度优先、最小支撑树 (一些基本图算法)。算法(包括数据结构哦),我认为应该是你以后学学习的重要基础,这一步没走好的话,后面的路会比较难走哦!成为高手的梦想将会很难实 现哦。没有坚实的算法和数据结构基础,写出的一些代码常常被人认为是垃圾代码。(呵呵,可能有点言过其实!)。觉得这个阶段学的不错的话,可以去OJ做一 些题目,呵呵练练,据说很用。比较好的有acm.pku.edu.cn acm.tsinghua.edu.cn等等。总之,这个阶段学习很重要,关乎你以后学习中的方方面面。
提供一些书目和我对这些书的一些看法:
CLRS的《算法导论》(Introduction to Algorithms,Second Edition):这本书我想大家都听说过吧。很适合算法初学者体会算法的魅力,这本书讲解的很全面,算法都用伪码实现,对编程语言要求不高。书的前几章 是一些数学和概率基础和算法分析的一些说明,后面几章是一些算法的描述。对NP问题感兴趣的话,可以看看这本书的VII部分中的NP- Completeness。我觉得这本书比较好的一部分是它的附录部分,对前面的一些背景知识公式进行了详细的阐述和证明以及一些专有名词进行了索引方便 检索。这本书在国内目前只有英文版的,但南大有个中文版的(不过他们太无耻了居然说是他们自己编著)我看了那个版本的,其实是第一版的中文翻译叫《现代计 算机常用数据结构和算法》。其他的我想我不需要多说了,有兴趣的可以去体会一下;
Robert Sedgewick(Don Knuth的高徒,不会不知道Don Knuth吧!!!)的《算法I-IV(c++实现)基础、数据结构、排序和搜索》(Algorithms in C++ Parts 1-4 Fundamentals,Data Structures,Sorting,Searching)以及《Algorithms in C Part 5 Graph Algorithms》:他的书写的浅鲜易懂,所有的算法都用代码实现了,普林斯顿也在用。我只看了1-4的一部分,图那部分前几天刚买还没看。很不错, 里面的算法都是比较常用的一些算法。不过建议别看中文版的那本,我买了中文版的很是后悔,翻译的太太。。。次了(语言太晦涩了,翻译的那人好像没学过计算 机),英文版的可以买高教出的,很便宜好像30.00吧!电力的有一本C实现的英文版,不过要78.00大洋。
[沙特]M.H.Alsuwaiyel的《算法设计技巧与分析》(Algorithms Design Techniques and Analysis):这本书主要关注的是算法设计部分。分析了比较多的算法。对数据结构这不是很侧重,这本书比CLRS更具有专业气息,感觉更像教材。由 于我也没看完,所以不敢多做评价,只能说说我目前看的感觉。
Sartaj Sahni《数据结构、算法与应用》(Data Structures,Algorithms,and Application in C++):清华的那本C++数据结构就是抄这本书的,书对C++语言有一定的要求,呵呵所以对语言不是很熟悉的话,看起来有点痛苦哦!所以并不是很推荐 (如果C++不是学的很好)。书中除了对递归没有详细的阐述,可以说是个缺陷吧!其他的描述还是很不错的!翻译也相当不错。
Jon Bentley的《编程珠玑》(Programming Pearls,Second Edition):好书的说,没看完的说!最喜欢的是这本书每章的后面都提供了一些进阶阅读,很是欣赏这一部分。不是说书中其他部分就不好,这本书,确实 很不错,对一些算法的使用时机给了比较好的引导,什么时候用合并排序,什么时候用插入排序,二分查找的重要性。对算法在实际中的应用给予了很好的启发和评 价。有英文版的,推荐看英文版!中文版的翻译和一般。呵呵!!不好意思,偶还在看中,只能说到这啦!!!
就不把《计算机编程艺术》加进来了,我觉得在这个阶段没必要看那个书,太难了!!!容易打击学习的积极性。这本书确实是非常好,对算法的阐述鞭辟入里。曾经翻过第三卷排序部分,阐述确实有独到之处。呵呵,决定考上研究生后在好好瞻仰一下这传说中的牛书啦!
第二阶段:可以回过头来进一步深入学习某种语言的技巧,目的是更好的把算法融入其中。用更简洁漂亮的语言来实现算法。呵呵!!我认为这个阶段绝对必要,第 一阶段只是对语言做了初步了解,为了避免陷入对技巧的过分追求,而掩盖了算法的精髓,所以第一阶段我个人觉得没必要把语言搞的很那么精通。把精力留到这个 阶段来精通一种语言就可以了。学语言,我认为,千万不能浮躁,不要今天看人家学c++就学c++,明天看别人学JAVA也就跟着开始学java了,后天又 开始跟人家学C#。我想这样的话,你永远只能跟在别人家屁股后面跑,没必要看人家说什么语言好就学什么。术业有专攻嘛,不要浮躁,学技术就要吃得下那份 苦,熬得住!现在即将到来的是.NET时代,虽然它是.NET但我认为它的基础还是不变的,把一门学好了,再去领会.NET的精华,我觉得会更有效率吧! 这个阶段可以看一些大步头的“名著”程序。比如可以分析分析Linux的代码。个人认为学编程跟学写作是一样的,要想写出好文章,就得博览群书啊!!而我 们现在要博览的这些“书”就是代码,建议多看一些万行以上的代码。可能刚开始写程序有困难,但模仿是最好的入门手法,跟我们写作一样,刚开始用词造句都是 模仿别人,等自己“书”看多了,写文章就是水到渠成。建议自己多动手写一些程序,中途可能别人会告诉你更好的思路,但我觉得你应该坚持自己原先的思路把程 序写完,再去尝试一下更好的思路或者是方法。对自己写过的代码别随便就放一边,应该用挑剔的眼光来审视自己程序,比如查询部分的算法是不是可以更加优化, 能不能试试二分查询;排序部分,按输入的要求,是不是适合使用归并排序或者是插入排序等等。不断的优化自己的代码,不要轻易放过你自己哦!!
一些书目:
《C Primer Plus(第四版)》:不错的一本c书籍,不过书里有些一些小bug,可以说是我c的入门书籍。书中讲解比较深入,但浅鲜,而且对数据结构做了一些初步描 述,我应该说是从这本书才真正接触了c,虽然它不是我第一本的编程书籍。翻译的也不错,呵呵!!这本书对一些人来说可能浅了一点!
Stanley B.Lippman《C++Primer》:书很全面,描述深入,对一些问题的描述在其他的C++书中是无法得到明确答复。作者是个大师级的人物,书中对 C++的描述很有独到之处,而且字里行间都透出作者对C++语言的深厚功底,也包含了作者的一些经验。作者对问题不是一下子给出答案,而是一步步引导我 们,让我们明白为什么这样的解决方案不是最好的,最后给出最好的程序实现。书是在启发中教会我们知识的,是国内书籍一直缺乏的东东。书中的例子都是前后联 系,这样可以在不同章节来一步步深入问题。书后的问题也是很精彩,可惜我当时没有花时间去做。绝对是一本好书。这些评论仅仅限于英文版。而对于中文版来 说,我个人认为中文版绝对是一个败笔。一本多好的书就这样糟蹋了,痛心!书译者潘爱民,张丽。全书是张丽完稿,潘爱民只是审校,所以书的翻译水平可见一 斑。我个人觉得书的翻译太生硬了,很多地方我估计译者都不知道自己在说的是汉语还是英语。普普通通的一句汉语非得说成“英文版”的汉语格式。当年看这本书 的时候是捶胸顿足啊,差点没把书撕掉。后来弄了个英文版的看,果然是感觉不一样啊!!呜呼!!!一本好书!!
Stanley B.Lippman《Essential C++》:这本书是我的第一本的编程书籍,大一时候看的是中文版。当时可能由于第一次接触编程语言觉得比较新鲜,呵呵,很快就看完了,但什么感觉也没 有!!就想吃个好吃的东西吃的太快了,吞下去了,结果什么都没品味到!后来又翻过几次觉得书是不错,给初学者描绘了一个C++世界的蓝图。书中对一些晦涩 难懂的C++技术点到为止,这样不会给初学者带来太多恐惧,在相当一个层次上保护了读者的学习积极性。不过觉得侯捷翻译有点太做做了,文绉绉的词太多了, 有时候影响了对书本内容的理解。不过不失为一本好书。
Bjarne Stroustrup《The C++ Programming Language》:C++之父写的,大家认为怎么样呢?我是买了,当做查阅工具,其中对C++语言的描述我想不需要我细说了吧。只是想说的是,要温故而 知新哦!!!每次翻这本书都会有新收获,不信的话,试试看。高教出了这本书英文版,呵呵!!!很便宜的,看准“特别版”三个字哦!!!中文版的是机械出的 北大一个教授翻译的,翻译的很不错,推荐!!
Scott Meyers《Effective C++》:这本书,我一直认为是工程级别的好书啊!!书中作者提供的50个编程建议或者叫经验吧,对C++的编写有很大帮助。能帮我们更好的写出漂亮的代 码。书中不但给出了建议,而且对建议还进行了详细的阐述,“为什么这样用好”、“为什么那样不好”。不过这书我由于各种原因只能拜读一部分。真希望有机会 在次聆听一下大师的思想。
Scott Meyers《More Effective C++》:这是上面那本书的姐妹篇,我买了,一直没有看,怕打击自己的信心!!我听看过这本书哥们说这本书很精彩,不过难度上比上面一本有很大的提高。我 想可能是由于我们缺乏实际工程经验吧,所以对书中的一些建议很难真正体会到!希望有兴趣的可以拜读一下。
Stanley B.Lippman《Inside The C++ Object Model》:据说只有看过这本书之后才能说是不是真正领会了C++。我也一直没敢去买这本书,不过我想买这本书是一种必然的趋势啦!!
毛得*、胡希明《LINUX内核源代码情景分析》:这学期学校开了*作系统课,想玩玩*作系统,所以拿来读读,确实感觉很是不错,中国人自己写的一本好 书。大家可以从书中领略Linux代码的魅力,参考一下人家的程序,可以说是一本大步头“书籍”吧!通过通读这本书,不但可以了解*作系统的一些系统引 导、进程通讯、进程控制、存储管理等等,而且更主要的是瞻仰一些这些代码!!看看人家的程序模块,人家的结构,人家是如何处理这些问题的!!书是还没看 完,不过读了一半已经强烈感受到其魅力,语言组织的也很得当。不过看这本书得有一定的组成原理、*作系统以及接口技术的基础。呵呵!!!
还有一些C++的好书,我个人没看过,也不敢枉加评论。希望各位也能提供一些你们的对一些书的看法,大家一起交流交流!!!
第三阶段:我觉得应该是属于软件工程方面的。这个阶段我认为可以看看一些关于软件开发的书籍和一些软件工程的书籍。由于知识水平有限,这个方面知之甚少, 只是参阅过几本书籍,所以也不敢在这里大放厥词啦!!我想,这个阶段是使我们的代码升华到工程级别的阶段,也应该是比较重要的阶段。这个阶段写出的东东我 觉得都应该是个产品了。所以,这个阶段上对编程的要求不仅仅是代码质量上,在模式和结构上果更是有一个较高层次的要求。
有几本书推荐:
Roger S.Pressman《软件工程——实践者的研究方法》(Software Engineering A Practitioner's Approach):建议看清华的原版书,78.00大洋,看过该书的哥们这么说的!!
ERRJ的《设计模式——可复用面向对象软件的基础》(Design Patterns):牛书!!只是翻阅过,没细读,觉得确实像广告说的那么好,哈哈哈哈!!^_^!
Robert C.Martin《敏捷软件开发——原则、模式与实践》(Agile Software Development——Principles,Patterns,and Practices):2002年度Jolt震撼大奖,是Java版的,所以只是看了看大概,Java偶不会啊!!!
Marin Fowler《重构——改善既有代码的设计》(Refactoring:Improving the Design of Existing Code):与《设计模式》齐名!呵呵,没看过,估计自己水平还不够!!!哥们买了,看了,反映可以!!!
以上说了这么多只是自己的学习C&C++的一些体会以及计划和打算,希望起到抛砖引玉的作用吧!很多东西我不懂,我也说不明白,希望大家能补充指 正!对上面说的那些书,我个人认为:能找到英文原版的还是看英文原版的,中文翻译十有八九不满意的。现在国内那些搞翻译的都只求速度不求质量,搞臭了好多 本好书,《Tinking in C++》是其中的代表啊!!至于其他的一些比如C#、perl等等,我也买过一堆书,可是时间有限我未能拜读很是可惜那些书籍啊!至于VC、MFC,实话 不懂,不感说!!!!
个人观点不一定对,希望作为参考!!!
献给出学编程的朋友们
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值