编程学习初体验(5. 如何自学编程)(2)

这几天七七八八,也不知道本身在忙什么。彷佛就是没心情继续到这里写东西。打了几天游戏,用java写了一个网络仿真软件用来测试p2p设计的性能,改改小bug,时间就这么过去。 但愿没人在这里等个人下文,否则就惭愧死人了。 言 归正传,回来继续讲咱们的正题。 翻翻前面的帖子,对于数据结构和算法,我已经啰嗦了一堆他们的重要性。接下来改说哪本数据结构或者算法的书写得好把,看看网上这类的帖子文章已经论斤卖 了,再写也没多少意义了。何况本身不是算法狂人,所看过的算法书也就那么基本粗浅的而已,天然不敢出来挨砖。想一想能拿出来和你们分享的,依然是本身的一些 见解和认识而已。 数据结构和算法 算法这两字其实到今天我仍是稀里糊涂的,每次读算法书,前言或者序言第一句话确定就有定 义。反正本科看了一回,硕士的时候学算法又看了一回。至今好像也没再看过第三回。也不记得书上是怎么定义的,发展以为就是特经典,精辟的那种,可是过眼就 记不得。没事和朋友吹牛的,三句话不离本行,十句话确定是不离算法的:大部分口水是为“算法”喷的;码的代码大多数也是在解决算法问题。 可是对于算法究竟是啥,我却不肯意深究其定义,由于我知道揪出来也没意义,它能基本涵盖一个程序员全部的有用功——就好像你问人吃啥,他说吃饭, 你绝对不会去再问一句饭吃的啥了。 在这里,我有兴趣作的,却是如何把算法和数据结构来个“实用性”分类。所谓实用性就是我不在意分的对不对,靓不靓,只从合乎情理来分。从对算法和数据结构的逐步深刻理解来分,能够分为这么三类: (1)基本数据结构和基础算法:编程语言和数据结构,针对对编程语言的掌握 (2)通用算法:针对理论问题的探讨 (3)专用算法:金融,路由 这 也对应三个不一样学习和使用算法和数据结构的阶段。 虽然这分法有点老土,可是也是通过我也是仔细琢磨,以为最合情理的分法。 首先(1)明显区别与(2)(3):前者是“就事论事”,属于掌握编程语言的内容,换句“课堂用语”来讲就是为了解决编程实现域中知识技能;后二者是为了 解决实际应用问题,属于“应用域”。会了(1),你就基本掌握了啥是编程了,会了(2)(3)你才算是有点“生产力”,能挣公分了。(1)是大多数学计算 机的人所要关注的,而其余学科未必注重这个。(2)主要是计算机作理论方面的人在捣鼓 ,和一些职业的应用数学家(3)则是***到各个行业中了。 因此能掌握(3)的人是各行业里赚钱的;会(2)的人呢小康是有保障属于技术工种;。剩下的只会(1)的人,就是标榜为IT民工的各位了。这也就是为何 你们都说作IT都是打工的,只能给其余行业的人当枪使。事实也的确如此,大多数人从科班出身人,能把(1)能真正掌握作好就很少,(2)就须要去花不少的 时间去看什么《算法的艺术》 《算法导论》和有相对比较好的数学底子了。(3)就每每须要在计算机以外有数学的功力和行业的背景知识了。因此说,时下流行的:少壮不努力,老大作IT, 也是有必定道理的。 上面这堆废话对已经入行的朋友没有什么意义,你们就权且一笑;可是若是正准备开始学习编程,那仍是应该把这些记在内心的。不少时候,决定你之后发展的并非你学的是什么,而在于你对全局的把握。这也是我废话这么多的初衷。 言 归正传, 如何学好第一步。答案很简单,也很让人失望: 学好算法和数据结构的最好办法就是把所学的背下来,默写出来。这有点相似英语学习,基本功就是背单词和句型。之因此强调要背要默的缘由,第一是因为这是以 后的基础;第二是之后不再会有这样的机会让你来作这些基础功课。这点上每每是科班程序员和票友程序员之间的分水岭。科班程序员大多在入门的时候被老师逼 着去作这样那样的功课, 虽然不情愿可是这些基本功对之后的确意义重大;票友程序员每每没有这样的压力, 在学习中回避这些基本功,其结果也是人浮于事,以后的内容也学不进去。 这里说说我当时的学习。个人数据结构老师很不错,上课用的是南加州大学的老教程,我喜欢把里面的例程算法都仔细看透,琢磨是否能够优化。作做业的时候是我 最惨的时候。当时软盘都不多用, 程序都是本身写在做业本上交老师批改的。 女孩子们喜欢打草稿,反正他们的做业都干净要命。我是粗线条那种, 不喜欢作门面功夫,那就得力求一次性在做业上把程序从头至尾都一次写出来。这固然不可能了, 即使在计算机上编程,也不可能一次性把整个程序都写出来。因此个人本子老是涂涂改改的特别恶心。 成绩固然不高,即使程序是对的,老师也不肯意给如此恶心的做业打高分。 为了提升成绩,只能少涂改,那只能要求我本身在脑子里面进行“脑中做业”,由于上机的时间实在是很少,还得本身花钱买上机票。另一个办法就是背住所学的 算法, 背住的越多,脑中做业的脑力花费越少。因而这无形中极大强化了我对算法的掌握。后来我看其余同窗作做业都要翻书抄书上的例程再改就很不屑, 由于我作做业的时候历来不打开书的。 考试的时候是开卷,我就很牛逼的连书都不带哗哗哗的写完交卷,爽!后来在学算法设计,操做系统,编译原理和计算机图形学的时候,我基本都是把书上的伪代码 实现出来,写成完整的系统(如今回想当年花了3个星期实现一个pascal编译器,真是太痛苦了,后来知道有lex和yacc,真是郁闷了好久)。不过这 些东西到如今对我来言都是极大的资本。 其次,我还想在这个话题下多说一句: 不要为了算法去专业算法。不少年轻人老是在我面前炫耀本身读完了《算法导论》第几卷,里面某某算法设计多难,本身都看懂了。可是我绝对不建议任何年轻的程 序员去看这种书。缘由有二: 第一,这种书属于(2)的范畴,须要了解,可是不须要去啃懂每一个算法,比如是新华字典,对每一个中国人都很重要,可是那是工具书,没人会去把整本啃完,没有 意义;第二,作编程这行,变化太快,等印在纸上了,那些都已是过期的死东西了,等你啃完前人的骨头了,你也差很少该做古了。
相关文章
相关标签/搜索