• 如何学习编程


    如何学习编程

    目标读者:本科CS,觉得自己编程能力弱又想去努力提高,但是不知道努力方向的同学,跟大几没关系。 写在前面:写此文,本人不是编程大牛,很多编程大牛都很忙,或者没啥心思写这些初级文章。但起码本人算是过来人,热爱写代码,现读MS,一年后找工作目标也是程序员,所以比目标读者多点经验,可以奉献。最近寒假,不忙,而且有几个朋友都问我这个问题,就顺便总结一下,希望对目标读者有用。虽然以前基本没逛过吧,从华科毕业,就把文章放到这好了,希望学弟学妹学习有捷径,欢迎高手指正~~欢迎转载 提高编程能力,主要分成7步: 1.巩固C 2.提高面向对象编程能力 3.数据结构和算法理论  4.设计模式 5.ACM 6.多学点其他的语言或者技术 7.做点project 其他:了解编程故事 每一步我会大约估计一下花费的时间,用天数表示。 第i步需要花费n天的意思是:如果你做好了0...i-1步,需要花费n整天时间来完成第i步,注意,是整天喔。但是你不需要把这步的任务全部完美完成,所以实际时间更短。 而且这样分步的好处是读者可以根据自己的能力看不同步骤~~正文开始了哈 1.巩固C15-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.ACM20-50天) 选作内容:算法竞赛入门经典;算法技术分析。 搞定这两本书(或者仅仅第一本),下一步的旅途会比较愉快 必做内容:在线ACM刷题。我是用的POJ,因为POJ解题报告很多,试题分类很多,别的online judge不知道好不好用,反正不是专门搞ACMPOJ就足够了。 各种类型都做做,不专门搞ACM,仅为娱乐,提高编程能力,我觉得AC50-100题就可以撤退了~~ 6.多学点其他的语言或者技术 每门语言或者技术,学一两周可以算是熟悉了。 前几步难免单调困难,可以同时学学别的休息休息哈。 推荐几门语言: C# 没错,之前说过不推荐它,是指不推荐把它当成主业,主业是C++或者JAVA PYTHON 解释型语言,值得一学 common LISP 面向函数语言,学了之后好处多多,挑战是有点难度,当然,你自己可能看不见== 面向函数语言有更时尚的,但是我觉得学面向函数语言纯粹是为了锻炼思维和编程能力,基本不会去找它当工作,所以学LISP还是其他啥的,不重要。 汇编 好多人说很重要,我没看出来,窃以为把这门课上好就足够了 smalltalk 纯面向对象语言,研究一下,对理解面向对象绝对有好处,我下学期就选了这门课 关于linux: 必会神奇没商量。指的是会在linux下写代码。 学习内容:gcc,makefile 当然用codeblock最简单,但会上面的东西绝对无害。 至于命令,不用去背,甚至不用去学,当你想干什么事,发现不会干,再去谷歌此命令,慢慢就会啦。至于linux内核,大神可能会去研究~~我是没看过

    关于可视化程序: 一直在黑框框里搞不够有趣,想弄可视化乃人之常情,但是, 不推荐学:windows APIMFC 推荐:用VS2010 C#或者QT 我花了几周弄MFC,当然觉得挺不错,用了C#QT后觉得,MFC真是过时且难用,谁还在用赶紧换了吧。 最后说说web那些东西。好吧,web有点杂,多说两句。 客户端:html,css,javascript,jquery w3cschoolweb学习很好,迅速入门。不然就看: 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保住的第一个意思是,不能低,谁都知道。 第二个意思是,不用高。再高也没看出来有啥优势,反而耽误很多时间在考试上。 多高就够了?加权85G1300(新G不知道),T100(我都没上100)。 对于专业来说,记住,你的精力在coding上而不是研究上。如果你听取我的建议,来了之后自然会感激我,嘿嘿。 所以你需要做的事情就是锻炼好编程,不要浪费时间去读文献,发论文,跟在师兄师姐屁股后面求挂名,你这么做的唯一好处是别人会夸你:哇你好牛啊本科就有论文。但一年后只有你知道,没毛用,来美帝上学、工作,就拼写代码,就算有要读论文的时候,只有智力正常就没问题。可惜当年没人跟我这么说,我自己尝试了一下,投入产出比严重不对等,虚名而已。 最后:关于编程的故事 看点关于编程的东西,了解一些人物的背景,是学习的一些乐趣。 比方说这本书《疯狂的程序员》,我看完这本书然后作者因写外挂被抓啦,悲剧 新图有个地方,讲历史上牛逼程序员的故事的,看了很有学习动力,可惜书名忘了,有兴趣的可以查查哈 推荐电影《社交网络》,都看过?!好吧。。。那再推荐个《硅谷海盗》,还看过么?!好吧,我就看过这两个,没的推荐了== 还有点面向找工作的书也不错,编程之美什么的。 题外话:代码宅要注重锻炼身体和人文修养哈!笔者不才,一千米3分钟,希望大家有实力鄙视我~~~野蛮体魄才好文明精神,写代码固然乐趣无穷,但别在椅子前坐久了! 全文终于写完了,看电影推迟到明天好了==错别字颇多懒得检查啦,大意应该挺清楚~~ 祝大家学习之路好运,上面提到的很多东西我也没学好,与君共勉哈

  • 相关阅读:
    Swift协议+代理
    socket编程详解
    Sublime Text 3下 Emmet 使用小技巧
    sublime text3 针对于前端开发必备的插件
    Emmet使用手册
    使用Emmet(前身Zen Coding)加速Web前端开发
    Emmet的高级功能与使用技巧
    RSS订阅推荐
    UIView中常见的方法总结
    技术博客rss订阅源收集
  • 原文地址:https://www.cnblogs.com/hoobey/p/5196099.html
Copyright © 2020-2023  润新知