分享

今天被某大V不带名的反驳了一下,于是就想来讨论讨论学习计算机的方法,把我一直以来的想法动动笔,写下来...

 墨子语 2019-11-14
今天被某大V不带名的反驳了一下,于是就想来讨论讨论学习计算机的方法,把我一直以来的想法动动笔,写下来交流交流。
首先,计算机分为两个发展方向:第一种是研究算法,第二是是研究软件工程。研究算法是什么意思?就是研究某一具体应用如何用程序求解,比如求最短路径,排序,这是偏学术的发展方向。研究软件是什么意思?软件工程是算法的集大成者,每一种软件,比如雪球,都是调用了我们研究的算法(比如调用推荐算法,调用排序算法)来实现功能的。这是偏向工程的研究,当然也能发表CCF A类期刊,不过国内这一块做的很不够,最好的还是卡内基梅隆大学的软件工程研究所。
举个实在点的例子,算法研究做的是砖头的研究,砖有很多种,不同的砖有不同的功能。软件工程则研究的是建筑草图,这个程序的框架是什么?这个程序这一部分该用什么砖?至于具体的完成建筑,就是程序员们在草图的指引下一块砖一块砖的堆了(所以叫程序员叫码农,因为真的很多程序员做的就是农民工做的事[捂脸])。
那么研究算法和研究软件工程各自该怎么玩呢?研究算法我没系统的学过,毕竟是软件工程毕业生,我连算法课都没上过(选修课,没选[捂脸]),只学过离散数学和数据结构,不过我也和我们学校的导师搞过课题(做的是迁移学习),对研究算法也算有点体会。我们当时搞研究,数据结构这一块用的其实很少,因为基本用不上。现在都是学术界最先进的求解(不然发不出论文[捂脸][捂脸][捂脸])最优解了,谁还用啥最短路径?举个例子,我们当时碰到的一个问题就是两个城市做比较,来推出城市发展的规律。怎么比较呢?我们用的就是划分城市坐标,提取特征值,然后就当成两张图片进行图像识别处理。如果说二维数组算数据结构的话,勉强算用上了数据结构。所以我认为想学好研究算法,最重要的是多读论文多交流,交流新的思路比如这种图像识别来解决城市比较的思路。那么传统的数据结构有没有用呢?当然有用,但是只是启蒙作用,就好比目标是学会化学方程式,数据结构就是蜡烛 氧气=二氧化碳 水的方程式的作用。所以谷子地哥说学数据结构是很正确的。
那么为什么我说学python呢?因为我是沿着第二条路来思考的——研究软件工程(毕竟软件工程毕业生)。在软件工程看来,算法只是一个个工具箱,我们拿来用就行了,不用去管工具箱里是什么。而python是最方便的语言,啥工具箱都有,就跳过了研究算法,可以专注于研究软件工程。回归正题,软件工程怎么研究呢?主要还是多去实践。举个例子,软件体系结构有5种设计原则,8种设计模式,21种设计风格(这个数字有不同看法),具体每一个项目用啥,光靠书上的东西不是纸上谈兵么?而且很多东西都理解不了,比如接口的作用,刚开始学java的时候我就觉得接口这玩意儿太多余了吧?啥用没有。结果自己做了一个项目下来,接口实在是太重要,最伟大的发明(真香[捂脸][捂脸][捂脸])。比如早中晚问题(就是代码不一致问题,比如早上甲负责设计A代码,A代码使用了B代码,结果中午时候乙把B代码更新了,到了晚上A来测试代码,卧槽B包不能用了?我又要重写了,我XXXX),不去做一两个项目根本就体会不了。那么对于我们普通人没机会参与项目怎么取学习呢?还是要多看书。看书,虽然可能不能理解这个原则是什么意思,这个风格有什么用,但是会留下一个印象。带着这个印象去参与实践,也是很有好处的。因此我推荐学python,同时读一读软件工程相关书籍,跳过研究算法来专注于研究软件工程。
我和谷子哥只不过是一块硬币的两面而已,各有所长[笑哭]我呢一是想交流交流学习心得,二也是把自己一直以来的想法借这个机会写出来,仅此而已[笑哭]
最后,关于推荐书籍,如果真想走研究算法这条路,其实没啥特别有用的书,还是多读论文了解最新的学术动向。真要说书,建议去读一读《算法笔记》,这个是考研复试上机用的,实操和理论都兼顾了;严蔚敏版《数据结构》,这个是很经典的教材了,不过比较难懂,因此推荐王道论坛的数据结构考研复习辅导,这本书适合新手入手,然后再去看《数据结构》。想走研究软件工程这条路,除了多实践,最重要的还是多读教材,多读一读《软件工程概论》、《软件体系结构》这两本书,很有好处。软件工程概论就按我下面贴的书买就行了(顺便说一说这种黑皮风格的计算机翻译专业书都很经典,吊打国内教材),而软件工程概论各种教材差距都很大,建议多选几本综合来看。
@ice_招行谷子地

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多