惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Attack and Defense Labs
Attack and Defense Labs
GbyAI
GbyAI
月光博客
月光博客
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
F
Full Disclosure
宝玉的分享
宝玉的分享
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
爱范儿
爱范儿
博客园 - Franky
V
V2EX
Recorded Future
Recorded Future
WordPress大学
WordPress大学
小众软件
小众软件
Webroot Blog
Webroot Blog
雷峰网
雷峰网
Vercel News
Vercel News
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
Cyberwarzone
Cyberwarzone
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
K
Kaspersky official blog
F
Fortinet All Blogs
Security Archives - TechRepublic
Security Archives - TechRepublic
Spread Privacy
Spread Privacy
博客园 - 叶小钗
罗磊的独立博客
D
Docker
Forbes - Security
Forbes - Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Register - Security
The Register - Security
A
About on SuperTechFans
B
Blog RSS Feed
I
InfoQ
T
Tailwind CSS Blog
G
Google Developers Blog
H
Help Net Security
V
Vulnerabilities – Threatpost
AWS News Blog
AWS News Blog
N
News and Events Feed by Topic
M
MIT News - Artificial intelligence
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Proofpoint News Feed
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
MyScale Blog
MyScale Blog
Latest news
Latest news

博客园 - Anders Liu

编程十年 (16):后记 编程十年 (15):宿命,程序员 编程十年 (14):毁人不倦2 编程十年 (13):毁人不倦1 编程十年 (12):阅尽天下.NET文章无数 编程十年 (11):与文字的不解之缘 编程十年 (10):我不是比尔•盖茨,我只是厌倦了 编程十年 (9):情系.NET 编程十年 (8):歪打正着C# 编程十年 (6):虚荣的C 编程十年 (5):站在网络边缘,却陷入信息孤岛 编程十年 (4):步入编程殿堂 编程十年 (3):初识计算机 编程十年 (2):前传2——哪有这么牛逼的游戏机? 编程十年 (1):前传1——记我家的电子产品 老刘连载:编程十年 关于《警惕常量陷阱》之补充 四世同堂!Anders Liu给您拜年了!(此文纯水,不喜勿入) .NET/CLI元数据中使用的压缩整数
编程十年 (7):科班?自学?
Anders Liu · 2011-04-25 · via 博客园 - Anders Liu

编程十年 (7):科班?自学?

既然我对计算机这么感兴趣,而在当年,计算机又是热得不能再热的学科,所以父母没有理由不让我选择计算机专业。但是,计算机专业又是各个大学录取分数最高的专业,所以,慎重考虑下,我选择北工大作为第一志愿。北工大不但有独立的计算机学院,还在这一年开设一个了“实验班”专供高分学生考虑。

谁知等开学的时候,“实验班”变成了两个,因为这一年有很多从清华北大“掉下来”的高分学生,他们是第二志愿报的北工大,虽然高考成绩比第一志愿报这里的学生高很多,但为了给那些给工大面子的学生些面子,还是把我们这帮人保留在实验班里,再单开一个实验班专门接清华北大的剩儿。当然,人家考那么多分还没上成清华北大,凭什么不回去重考非要在你这四大染缸之首鬼混啊?所以,为了再给足这帮家伙面子,他们的实验班编号是——0班。不愧是计算机学院,班级号都从0开始排。而我们——第一志愿报北工大的——原计划不变,1班。

记得刚开学不久,就开始和同宿舍的同学争论海盗分金币问题。那个时候是2001年,新千年刚刚开始,网络还不是特别发达,搜索引擎的概念也不是特别流行——所以,大家都是真刀真枪在草稿纸上演算,没人想过上网搜一把。

问题大致是这样的,有5个海盗A、B、C、D、E,偶然得到100枚金币,他们计划用这样一种方式分赃:首先由A提出分赃方案,然后大家一起投票,如果超过半数同意这种方式,则皆大欢喜;否则就把A扔到海里喂鱼,然后依此类推,由B推出方案。假设这些海盗都是极其聪明的——能够猜到其他人的想法,并且是自私的——不会牺牲自己的利益去“搅局”;问A应该提出怎样的方案才能既不被扔到海里,又能得到最多的金币。

大家都是北京各个学校的尖子生出身,所以都能确保A的活命,但在“最多”这个字眼上还是被难倒了不少。我最终以一枚之差输给了一个同学。后来聊天还得知,这个同学也在高中时候就学会了C语言。这给我上了一堂生动的“天外有天,人外有人”教育课。

于是我仔细研究了大学四年的课程(学校给每个学生发了两本小册子,上面列出了大学四年所有的科目),打算认认真真地学习计算机技术。但事实是,之后的三年多里基本上没怎么上过课。不过,通过课程设置,我终于知道了,计算机技术——或者说计算机编程技术——并不只包括编程语言,还包括算法、数据结构、编程思想等等很多内容。

这也是我在大学生活中为数不多的收获之一,虽然没有学到很多知识,但我知道了计算机领域都有哪些知识。后来我在做讲师的时候,不止一次地向学员提到,当你遇到瓶颈,不知道该学点什么的时候,就看看计算机专业的大学课程吧。

由于是计算机专业,所以第一个学期就有C语言课程,终于在课堂上,我知道了什么是Turbo C,也对开发环境和编译器有了大致的了解。接下来,因为在高中的时候纸上谈兵掌握了不少C语法和基本的结构化编程思想,所以这门课学得是顺风顺水。

最让我兴奋的是,很多课程在学期快结束时都有课程设计,跟毕业设计差不多,就是要实际地开发点什么东西。我打小儿就是个“动手能力很强”的孩子,就好上个“劳技课”什么的。后来学习编程,也是以“实践派”自居,以“理论派”为假想敌。至今也很少专门去学习一些编程思想,而设计模式也是很晚才开始学习,目的只是为了方便和同事交流。John Carmack的一句“show me the code”让我热血为之沸腾。以至于后来做讲师时,有同学提到希望讲一些设计模式,我不乏鄙夷地解释道,设计模式就是思维定式,你们不要急于学习,等自己有了丰富的经验和深厚的积累之后,再去随便看看,印证一下自己的想法即可。可谓毁人不倦。

第一个学期的课程设计题目是用Turbo C实现一个打字练习软件,从预设的一些文本文件中随机抽取一个,在屏幕上隔行显示出来,每行字符下面闪着光标,用来输入。输入正确的字符就用白色显示,错误的用红色。并在屏幕底部实时地显示出当前进度、正确率和输入速度。

这样的题目自然难不倒我,不光是我有一定的编程基础,更重要的是我有充足的时间去完成它。课设的时间是两周,但还有课要上。而临近期末的我已然堕落,根本不去上课,每天的生活就是,白天睡觉,下午起床玩吉他,晚饭后去喝酒,熄灯后去网吧刷夜,早上回宿舍睡觉。不过在做课设这一阶段,我只要戒掉吉他、酒和网吧,就能有充足的时间编程了,恰好我对音乐和游戏的兴致并不高(游戏的故事之前讲过了,而玩吉他,最初的目的和抽烟是一样的,只是为了耍酷而已),酒瘾也不大,所以这并不是什么难事。

大一一年混过来,背了一个试读,被实验班开除——别担心,不是被开除学籍——落入普通班。看来实验班还真是个保护伞,就跟某Party似的,犯了多大错误不必担心性命,只要开除Party籍就行了。(关于试读的故事,不知道是不是每个学校都有,大家可以参阅《草样年华》里北X大的试读政策。)我对此倒并不在意,因为课程压力一下轻了不少,不用学无聊之极的“数学分析”了,普通的“高数”就行了;也不用上英语口语课了,不用在众目睽睽之下为了一句“small, like a watch”而憋得满脸通红了——这句经典谚语来源于同宿舍一个哥们,口语老师让他描述一下未来的计算机时他如是说。

经过大一一年,我从一个新生蛋子彻底沦落成“老炮儿”,明白了虽然开学典礼上老师信誓旦旦地告诫我们,缺课多少多少给试读,再缺多少多少直接开除,但实际上,只要搞定任课老师、继而搞定考试,就没问题。我的试读也是因为考试不及格背上的,跟缺课无关。

得到这一结论后,我在之后的几年里就更加肆无忌惮地翘课了。不过好在,我除了计算机也没什么嗜好,所以能够把翘课得来的时间放到编程上,也算自学成才吧。但我还是要感谢我上过的为数不多的一些课,虽然当时觉得没用,现在确实也没用上,但的确让我视野更开阔了一些。比如《形式语言》和《编译原理》,虽然我一直没写出过一个像样的编译器,但后来学习工作流时,很快就掌握了“状态机”的概念。

可是对于讲课的老师,不敢恭维。我发现大学的老师大概就这么几种。

一是明显在外面有私活儿干的,来去匆匆,讲课潦草也不答疑;但这类老师的课是最好过的,否则学生追究起来他不好交代。

二是照本宣科的,这样的老师还分两小类。“二类上”老师的教材是自己写的,讲的和书上几乎一摸一样,回去自己看书就好了。但要过这类老师的科目是需要运气的,因为如果你某个知识点没掌握好,而这一点却又是他下了苦功努力展现在课本里的,就会使他觉得受到了侮辱或者至少是没得到应有的尊重,你必死无疑;而如果你恰好掌握了这样一些知识点,那么你就触到了他的G点,让他兴奋不已,即使其他地方学得跟屎一样,也有可能得到网开的一面,侥幸过关。“二类下”老师则没有写教材的实力,所以只能在黑板上抄别人写的东西——他自己都不一定理解,所以你就别指望在课上能学到东西了。这种老师往往比较低调,考前会划重点——就是他会的那些部分,所以只要注意临时抱佛脚就行了。

三是有思想有自己见解的老师,这种老师理论上是好老师,但对于以应试为目的的学生来说,是最恐怖的。他们上课的讲义和教材出入很大,出起考试题来也随心所欲。所以如果不是平时认真听讲、记笔记,还是有些难度的。不过这种老师大多不太会为难学生,只要平时表现好点,作业认真点、出勤足一点,还是很有机会通过考试的。但这类老师中,有不少是陷入另一极端的,就是太TMD有自己的见解了,讲课时天马行空不知所云,莘莘学子提起笔来竟不知这笔记何从下手,上课时一脸茫然,下课后大脑一片空白。

我后来做讲师的时候,也接受过一些职业训练,这不禁让我更加怀疑,这些大学老师当年在上大学的时候都干嘛去了?我不是想批判他们,他们里面有不少不错的人,有的是技术水平相当不错,有的是人品相当好,有的是两者都不错;但是作为传道、授业、解惑的“师”,他们可能并不称职。