计算机专业如何自学好以及职业规划?

我是一名北京211大学大二学生,我们学校计算机专业属于非优势学科,老师稂莠不齐,目前碰到的老师水平都很普通,就是存在连代码都很久没写但是来教我们数据结…
关注者
160
被浏览
43,944
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

1、你对算法的重要性毫无了解,所谓了解只是人云亦云,所以才会“学习起来没有什么成就感”。

学习计算机的第一步,是把自己想要的东西拆分开来、清清楚楚的“说”给计算机“听”。


举个例子,让你写个程序,从一个文本文件里读取你们班所有学生的学习成绩,要求按名次输出成绩——你会吗?先写出来。


现在,给你几十个文件,每个文件是你们年级某一个班的学生成绩;现在要求先按班输出名次,再输出排好序的全年级成绩表,怎么做效率最高?


事实上,在写第一个程序时,你应该自己琢磨出“冒泡算法”;写第二个程序时,你应该自己琢磨出“归并排序”来。


这两个算法的确非常简单。你要在《算法与数据结构》课堂上学它,那简直是在学习一篇初中水平的课文——只是最后用“奇怪的咒语”写了出来而已。

现在你们得背这个“咒语”,当然又烦又难又没成就感。


但如果在此之前,你自己实际写过这类程序(或者,虽然你已经从书上看过冒泡排序/归并排序的原理,但却不去背它的代码、更不去抄书上的实现),自然就会对“边界值”问题有多恶心、以及“如何从无到有的捣鼓出具体的实现逻辑”有多麻烦深有体会。

但这种“恶心”、“麻烦”是不可或缺的。你必须通过自己想办法解决这类麻烦的过程,使得自己的思维得到锻炼,打通现实空间-数码空间的窗户纸。一旦这层窗户纸捅破,算法之类书籍就会变成浅显直白的故事书;否则就会越学越迷茫,越学越神秘,越学越抓不住重点。


冒泡/归并排序是个难得的实验机会。因为它们足够简单。千万不要用背/抄实现毁掉这个机会。

讨论这些东西是有害无益的。实验,直到你彻底理解它,直到见到可行想法你就马上能写出代码。

会了,这就是初中知识,初中水平的东西有什么可讨论的?

不会的话,怎么折腾都只是一群学不会的人狂打嘴炮而已。


唯一正确的学法,就是自己在不去看现成实现的前提下,把它“重新发明出来”——只要踏踏实实有过几次上机练习(自己独立写程序),整本本科算法书就几乎不用学了,翻一遍就会。

“重新发明轮子”是程序员在学习阶段最大的美德,没有之一。


本科阶段的算法内容,都是让你学会思路然后活用到自己的程序里面的,书本内容本身反而没多大意义。因为现在的语言库都有现成的标准实现,不需要你写。


其它如软件工程、数据库等等课程,莫不如此:这是门工程学科,学了就得用;甚至,学之前就得先知道它能用到哪里、为什么要用它(要知道这个,就必须自己先写一些程序。只有先遇到几次难题之后,再学它才会事半功倍——不然经常整本书都是“背初中水平但却写成咒语的课文”,只能越学越倒退)。


2、用不着什么“职业规划”;或者说,“职业规划”不是这样来的。

简单说,首先,你得会写程序。起码水平得达到“你能用汉语说清楚,我就能写出来”的程度。

达不到这个要求,说什么都是白说。


然后,你得把基础打牢——基础包括计算机原理、操作系统原理等本专业方面的基础,也包括“快速准确理解其它行业/其它设备运行原理”这个基础。


“大数据”只是听起来B格满满;实际上,对做过多年技术的老程序员来说,这玩意儿并不比Photoshop难学(当然,这里只谈应用级实现)。

其它“新兴”的东西莫不如此。根子还在基础课上。基础扎实了,什么大数据云计算都是新瓶装旧酒,一帮之前从没听过这些词儿的老家伙能当场给你捣鼓一套出来(比如“云计算不就是虚拟机大乱斗嘛;虚拟机不就是玩那几个特权指令嘛”——你被新名词晃的眼瞎,老家伙们瞥一眼就能从界面接口到机器指令级别的实现一通到底:你猜哪个学起来更快?);基础不扎实,那就啥流行跟风啥等不流行了……抓瞎。


当然,了解一点是对的;但说实话,没哪个靠谱的公司会特别看重这个。