如何提高编程能力

最近很迷茫,老感觉自己编程能力太虚(主要是项目经验太少),所以在网上就提高编程能力方面看了不少大牛的建议,觉得下面的这个贴吧(http://tieba.baidu.com/p/2083196617)写的挺好所以就粘贴过来分享一下。

提高编程能力,主要分成7步:
1.巩固C
2.提高面向对象编程能力
3.数据结构和算法理论 
4.设计模式
5.ACM
6.多学点其他的语言或者技术
7.做点project


1.巩固C(15-30天)
首先呢。。。为什么第一步是巩固C?大一小朋友总是喜欢弄flash,ps,当然这些是有用的。。。有大一小朋友吗?好的把手放下,但咱们在这是针对程序员聊,所以,从C开始咯。

第一步很简单,巩固C的目标主要在于加强对指针的运用。当然,首先对于循环、条件选择、函数等基本东西要运用自如。指针的概念不难懂,学过的人都知道,但是写起代码来的时候,内存管理却不简单。推荐几本书:
C入门经典(入门的哈,谭浩强的书已经被无数人吐槽了,所以入门就看这本)
C与指针(很好看,多写题目练习)
C好书很多,就推荐这两本,主要是自己写代码,看书并不太重要,把一本书上的代码都写会就很了不起了。
如果这两本都看过了,说明可以轻松跳过第一步。
如果没看过,但是又想自己选,怎么确定一本书适合自己呢?打开目录,看看内容是不是自己想要的,是的话,随便翻到里面看两页感觉一下就行了。
选书TIP:尽量选老外的。
并不是说中国人的书一定不如老外的好,这是个概率论的问题,就好比一个老师要给一群人随机发奖,一半是武大的,一半是华科的,老师谁都不认识,但老师想多给华科的人发,怎么办呢?老师只需多给男的发~~
然后说一下看书方法:
精读:首先得看明白,然后写明白。如果自己写费力,就参考别人怎么写。如果是新手或者没有专门看过编程规范的老手,都必须看一下编程规范,排版,命名啥的。
泛读:假设你决定精读C与指针,同时再泛读几本就更好不过了。泛读时候要快,不求甚解,看半天不懂的东西就过过过,几天翻完一本,知道大概内容。没准哪天你灵光一现,这个问题看到过!再回去查阅。别担心这样学不牢,学的牢靠是精读的任务,泛读的任务是见多识广。一开始的新手并没有泛读的能力,读快了就什么都理解不了,慢慢就好啦。

2.学习面向对象编程(30天--60天)
这步还是会顺便说点旁的。
选一门面向对象语言深入学习
我走的C++路线,所以只能推荐C++的书,JAVA的抱歉了,C#不建议现在学
C++程序语言设计,C++之父写的那本(迅速浏览,碰到感兴趣或重要的地方慢慢看)
C++编程思想 上卷(很多内部原理讲解,尽力而为)
C++primer(一些边角内容跳过就好)
effective C++(随便翻翻)
more effective C++(随便翻翻)
C++标准库(自选一本书,要熟悉常用的,非常熟悉)
这个书单要按照顺序哈。
前两本看完后,你的状态是:
对如下词汇有深刻领悟:封装,继承,组合,多态,抽象,重载
别人让你干这些事,秒杀。比如我说重载个!=,一分钟写出代码,你就成功了,再比如我说小猫叫喵喵,小狗叫旺旺,小猫会眯眼小狗不会,你用多态几分钟实现了,你就成功了,最后再比如,我问你什么时候用引用传递传递参数,什么时候用虚构析函数?你要立马回答正确。以后看完书进行这样的复习效果比较好,自己问自己,或者让别人问你。
看完第三本,你的状态是,这就不具体说了,简言之,提高了,哈哈
看完第四本、第五本,你觉得自己对面向对象的了解很细节,你的代码很高效
最后,C++ STL,虽然前三本都有讲,但还需要专门学习如何使用它们(学数据结构的时候,我会再来谈STL,这里仅仅是学会使用)。常用的东西,queue,stack,vector,map等等,多用这些东西写写代码。

3.数据结构与算法理论(40天-60天)
算法与数据结构,你怎么说他重要都不为过。
首先这个短语有歧义(*^__^*) 嘻嘻……“理论”只修饰“算法”。
关于数据结构,首先当然把理论学一遍,随便选一本,都差不多,如果懒得选,清华那本比较有名,就看它好了。
然后最重要的步骤是,自己实现C++ STL的数据结构。必须推荐一本书:
Data Structures and Algorithm Analysis in C++ ’ (3rd Edition) [Hardcover], Mark A. Weiss 
好消息是,这本书代码很好,理论很好。
坏消息是中文版就像中学生翻译的,要看必须看英文的,正好锻炼英语啦!
这是我这学期上课的教材,这本书真是。。特别好,虽然很多人抱怨很难懂。
list,vector,iterator,还有那几种树,必须自己实现。图的话现在不用实习,但是理论要弄很透彻。

然后,算法。算法导论当然最好,但是,那么厚,我同学好多都买过,貌似看完一半以上的都没几个=。= 
看不进去算法导论,就看:《数据结构与算法分析》
好消息:可以复习下数据结构
坏消息:此书比较难懂
还可以看《算法概论》
推荐看MIT公开课,算法。
这步仅仅学好算法理论就行。上面提到的三本书选一本就行了,公开课推荐吃饭时候看。

4.设计模式(5-10天)
设计模式之于面向对象,就好比算法之于面向过程,你说它重要不重要,当然重要!
仅推荐一本:
深入浅出设计模式,不知道有没有中文版,反正推荐英文版,看英文版好处很多,不信去百度“看英文版的好处”。
它很重要,但是。。。。。我们有更重要的事情要做,所以,看完这本书,把书上的代码稍加练习,就撤吧,当然有兴趣并且有时间可以继续研究设计模式。

5.ACM(20天-50天)
选作内容:算法竞赛入门经典;算法技术分析。
搞定这两本书(或者仅仅第一本),下一步的旅途会比较愉快
必做内容:在线ACM刷题。我是用的POJ,因为POJ解题报告很多,试题分类很多,别的online judge不知道好不好用,反正不是专门搞ACM,POJ就足够了。
各种类型都做做,不专门搞ACM,仅为娱乐,提高编程能力,我觉得AC个50-100题就可以撤退了~~

6.多学点其他的语言或者技术
每门语言或者技术,学一两周可以算是熟悉了。
前几步难免单调困难,可以同时学学别的休息休息哈。

推荐几门语言:
C#
没错,之前说过不推荐它,是指不推荐把它当成主业,主业是C++或者JAVA

PYTHON
解释型语言,值得一学

common LISP
面向函数语言,学了之后好处多多,挑战是有点难度,当然,你自己可能看不见=。=
面向函数语言有更时尚的,但是我觉得学面向函数语言纯粹是为了锻炼思维和编程能力,基本不会去找它当工作,所以学LISP还是其他啥的,不重要。

汇编
好多人说很重要,我没看出来,窃以为把这门课上好就足够了

smalltalk
纯面向对象语言,研究一下,对理解面向对象绝对有好处,我下学期就选了这门课

关于linux:
必会神奇没商量。“会”指的是会在linux下写代码。
学习内容:gcc,makefile
当然用codeblock最简单,但会上面的东西绝对无害。
至于命令,不用去背,甚至不用去学,当你想干什么事,发现不会干,再去谷歌此命令,慢慢就会啦。至于linux内核,大神可能会去研究~~我是没看过关于可视化程序:
一直在黑框框里搞不够有趣,想弄可视化乃人之常情,但是,
不推荐学:windows API和MFC
推荐:用VS2010 C#或者QT
我花了几周弄MFC,当然觉得挺不错,用了C#和QT后觉得,MFC真是过时且难用,谁还在用赶紧换了吧。

最后说说web那些东西。好吧,web有点杂,多说两句。
客户端:html,css,javascript,jquery
w3cschool里web学习很好,迅速入门。不然就看: web编程入门经典,巨好无比的书,虽然很简单。
想写mobile web的看此书:jquery mobile web up and running
服务器端:php或者jsp(学着玩就看看php就好,jsp我没学过,据说挺麻烦,不专门搞web别在这浪费时间了)。
来美国之后发现美国同学会一些很有意思的工具,一并推荐给大家:
parse:数据库,某种程度可以代替你自己做的服务器
phonegap:把mobile web轻松变成native app
各种goolge api,没事干可以看看哈,挺好玩

7.做点Project
有人建议从project中学习,我也觉得这样最好,所以可以再每学会一个东西的时候,就做个Project。最常规且无聊的当然是各种管理系统。此外,可以做些小游戏,贪食蛇,扫雷,数独,连连看,猜数字,黑白棋。然后,试着写计算机玩游戏的程序,比如你的计算机可以扫雷,填数独,这比单纯做游戏更有趣。或者把老师给的课设好好做做。还可以做一些更有针对性训练的project,这就得靠自己从网上找啦!Good luck~~我这学期上了一门课,project针对数据结构和C++的,质量靠谱,有想要的同学可以问我要哈。
说到这,谈谈实验室,我大三后是在实验室学习干活的,但我不推荐这么做,自己在寝室或者自习室是最好的。我运气不错,学挺多实用的东西,尽管如此,你必须学实验室认为重要的,而不是真正重要的。如果你运气不好,在实验室纯浪费时间打酱油。甚至也不要加入团队,如果你是热爱自由并且自控能力强的人。别担心自学会迷路,我这不告诉你7步了嘛~哈哈

这七步呢当然走完之后已经算是蜕变了,但是很多有用的东西,有趣的技术,限于我也不了解,没能力介绍了,图书馆溜达一圈,基本就知道了哪些重要啦!其他没用说到,但是特别特别重要的东西:
操作系统,数据库,网络,编译原理。
还有人说计算机组成原理,我是没发现哪重要,但顺便推荐一本书很有用倒是真的:
深入理解计算机系统。
为啥这四个东西很重要,我没具体说呢?答案很简单,我实在没学好=。=所以我决定在MS期间对再学一遍这些东西~~

看七送一活动:给出国人群的建议:
如果你读PHD,我就不敢乱说了,没读过=。=
如果你读MS,本科期间在计算机方面的努力主要放在coding上,当然保住加权和GT。
“保住”的第一个意思是,不能低,谁都知道。
第二个意思是,不用高。再高也没看出来有啥优势,反而耽误很多时间在考试上。
多高就够了?加权85,G1300(新G不知道),T100(我都没上100)。
对于专业来说,记住,你的精力在coding上而不是“研究”上。如果你听取我的建议,来了之后自然会感激我,嘿嘿。
所以你需要做的事情就是锻炼好编程,不要浪费时间去读文献,发论文,跟在师兄师姐屁股后面求挂名,你这么做的唯一好处是别人会夸你:哇你好牛啊本科就有论文。但一年后只有你知道,没毛用,来美帝上学、工作,就拼写代码,就算有要读论文的时候,只有智力正常就没问题。可惜当年没人跟我这么说,我自己尝试了一下,投入产出比严重不对等,虚名而已。


最后:关于编程的故事
看点关于编程的东西,了解一些人物的背景,是学习的一些乐趣。
比方说这本书《疯狂的程序员》,我看完这本书然后作者因写外挂被抓啦,悲剧
新图有个地方,讲历史上牛逼程序员的故事的,看了很有学习动力,可惜书名忘了,有兴趣的可以查查哈
推荐电影《社交网络》,都看过?!好吧。。。那再推荐个《硅谷海盗》,还看过么?!好吧,我就看过这两个,没的推荐了=。=
还有点面向找工作的书也不错,编程之美什么的。

题外话:代码宅要注重锻炼身体和人文修养哈!笔者不才,一千米3分钟,希望大家有实力鄙视我~~~野蛮体魄才好文明精神,写代码固然乐趣无穷,但别在椅子前坐久了!

全文终于写完了,看电影推迟到明天好了=。=错别字颇多懒得检查啦,大意应该挺清楚~~

祝大家学习之路好运,上面提到的很多东西我也没学好,与君共勉哈

你可能感兴趣的:(如何提高编程能力)