[职场| 业界·前辈·经验谈] 如何提高编程能力(转自贴吧)

fe8ycr · 发布于 2014-05-31 23:52 · 3313 次阅读
2754
刚刚在百度贴吧看到的帖子,内容如题,是华科的CS大神写的,看了感觉写得不错,转到这里跟大家共享下。


目标读者:本科CS,觉得自己编程能力弱又想去努力提高,但是不知道努力方向的同学,跟大几没关系。


写在前面:写此文,本人不是编程大牛,很多编程大牛都很忙,或者没啥心思写这些初级文章。但起码本人算是过来人,热爱写代码,现读MS,一年后找工作目标也是程序员,所以比目标读者多点经验,可以奉献。最近寒假,不忙,而且有几个朋友都问我这个问题,就顺便总结一下,希望对目标读者有用。虽然以前基本没逛过吧,从华科毕业,就把文章放到这好了,希望学弟学妹学习有捷径,欢迎高手指正~~欢迎转载


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


其他:了解编程故事


每一步我会大约估计一下花费的时间,用天数表示。
第i步需要花费n天的意思是:如果你做好了0...i-1步,需要花费n整天时间来完成第i步,注意,是整天喔。但是你不需要把这步的任务全部完美完成,所以实际时间更短。
而且这样分步的好处是读者可以根据自己的能力看不同步骤~~正文开始了哈


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分钟,希望大家有实力鄙视我~~~野蛮体魄才好文明精神,写代码固然乐趣无穷,但别在椅子前坐久了!


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


评分

参与人数 1学分 +9 收起 理由
Eaton + 9 感谢您为软院筒子们提供有用信息!

查看全部评分

共收到 19 条回复
qinshisewu · #2 · 2014-6-1 00:02:53  回复 支持 反对
不错 不错  好贴  必须顶
dalu_luke · #3 · 2014-6-1 00:24:01  回复 支持 反对
好帖要顶 学习下
zj220223 · #6 · 2014-6-1 08:43:20  回复
好贴
xywhere · #7 · 2014-6-1 09:21:09  回复
这个好
YMC · #8 · 2014-6-1 09:32:16  回复
受教了。。。。
允霖 · #9 · 2014-6-1 09:55:06  回复 支持 反对
antty · #10 · 2014-6-1 10:09:28  回复
好帖
普洱 · #11 · 2014-6-1 10:32:54  回复
... ..
秋水麦芽糖 · #12 · 2014-6-1 11:28:34  回复 支持 反对
很好奇 搞嵌入式的要不要具备这么强的编程能力呢?
terry · #13 · 2014-6-1 11:44:12  回复
学习了
chizhiyiheng · #14 · 2014-6-1 12:20:31  回复 支持 反对
好贴,膜拜大神
AlexSucre · #15 · 2014-6-1 12:51:07  回复 支持 反对
好人一生平安
ayann204 · #16 · 2014-6-1 19:44:06  回复 支持 反对
我觉得提高编程能力没有什么步骤~~
对于大部分的大家伙来说,感兴趣,肯学习就行了 你如果很想做到那样 聪明的你就会知道怎么努力。。。

点评

话是这样说,我觉得这帖子可以做个不错的参考,对我们菜鸟比较有用  详情 回复 发表于 2014-6-1 20:53
fe8ycr · #17 · 2014-6-1 20:53:35  回复 支持 反对
ayann204 发表于 2014-6-1 19:44
我觉得提高编程能力没有什么步骤~~
对于大部分的大家伙来说,感兴趣,肯学习就行了 你如果很想做到那样  ...

话是这样说,我觉得这帖子可以做个不错的参考,对我们菜鸟比较有用
尽情de成长 · #18 · 2014-6-3 13:41:08  回复 支持 反对
奋斗ing,因为跨专业。。。难道真的要学那么多语音?

点评

我也跨专业,可以选一门语言深入,同时广度也要有  详情 回复 发表于 2014-6-7 21:31
fe8ycr · #19 · 2014-6-7 21:31:12  回复 支持 反对
尽情de成长 发表于 2014-6-3 13:41
奋斗ing,因为跨专业。。。难道真的要学那么多语音?

我也跨专业,可以选一门语言深入,同时广度也要有
学习一下,谢谢大神
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表