今天被某大V不带名的反驳了一下,于是就想来讨论讨论学习计算机的方法,把我一直以来的想法动动笔,写下来交流交流。 首先,计算机分为两个发展方向:第一种是研究算法,第二是是研究软件工程。研究算法是什么意思?就是研究某一具体应用如何用程序求解,比如求最短路径,排序,这是偏学术的发展方向。研究软件是什么意思?软件工程是算法的集大成者,每一种软件,比如雪球,都是调用了我们研究的算法(比如调用推荐算法,调用排序算法)来实现功能的。这是偏向工程的研究,当然也能发表CCF A类期刊,不过国内这一块做的很不够,最好的还是卡内基梅隆大学的软件工程研究所。 举个实在点的例子,算法研究做的是砖头的研究,砖有很多种,不同的砖有不同的功能。软件工程则研究的是建筑草图,这个程序的框架是什么?这个程序这一部分该用什么砖?至于具体的完成建筑,就是程序员们在草图的指引下一块砖一块砖的堆了(所以叫程序员叫码农,因为真的很多程序员做的就是农民工做的事 ![]() 那么研究算法和研究软件工程各自该怎么玩呢?研究算法我没系统的学过,毕竟是软件工程毕业生,我连算法课都没上过(选修课,没选 ![]() ![]() ![]() ![]() 那么为什么我说学python呢?因为我是沿着第二条路来思考的——研究软件工程(毕竟软件工程毕业生)。在软件工程看来,算法只是一个个工具箱,我们拿来用就行了,不用去管工具箱里是什么。而python是最方便的语言,啥工具箱都有,就跳过了研究算法,可以专注于研究软件工程。回归正题,软件工程怎么研究呢?主要还是多去实践。举个例子,软件体系结构有5种设计原则,8种设计模式,21种设计风格(这个数字有不同看法),具体每一个项目用啥,光靠书上的东西不是纸上谈兵么?而且很多东西都理解不了,比如接口的作用,刚开始学java的时候我就觉得接口这玩意儿太多余了吧?啥用没有。结果自己做了一个项目下来,接口实在是太重要,最伟大的发明(真香 ![]() ![]() ![]() 我和谷子哥只不过是一块硬币的两面而已,各有所长 ![]() ![]() 最后,关于推荐书籍,如果真想走研究算法这条路,其实没啥特别有用的书,还是多读论文了解最新的学术动向。真要说书,建议去读一读《算法笔记》,这个是考研复试上机用的,实操和理论都兼顾了;严蔚敏版《数据结构》,这个是很经典的教材了,不过比较难懂,因此推荐王道论坛的数据结构考研复习辅导,这本书适合新手入手,然后再去看《数据结构》。想走研究软件工程这条路,除了多实践,最重要的还是多读教材,多读一读《软件工程概论》、《软件体系结构》这两本书,很有好处。软件工程概论就按我下面贴的书买就行了(顺便说一说这种黑皮风格的计算机翻译专业书都很经典,吊打国内教材),而软件工程概论各种教材差距都很大,建议多选几本综合来看。 @ice_招行谷子地 ![]() |
|