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

本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/04/25/programming10years-07.html

作者:Anders Liu

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

谁知等开学的时候,“实验班”变成了两个,因为这一年有很多从清华北大“掉下来”的高分学生,他们是第二志愿报的北工大,虽然高考成绩比第一志愿报这里的学生高很多,但为了给那些给工大面子的学生些面子,还是把我们这帮人保留在实验班里,再单开一个实验班专门接清华北大的剩儿。当然,人家考那么多分还没上成清华北大,凭什么不回去重考非要在你这四大染缸之首鬼混啊?所以,为了再给足这帮家伙面子,他们的实验班编号是——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有自己的见解了,讲课时天马行空不知所云,莘莘学子提起笔来竟不知这笔记何从下手,上课时一脸茫然,下课后大脑一片空白。

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

  • 回到《老刘连载:编程十年》
  • 上一篇《虚荣的C》
  • 下一篇《歪打正着C#》

转载于:https://www.cnblogs.com/AndersLiu/archive/2011/04/25/programming10years-07.html

编程十年 (7):科班?自学?相关推荐

  1. 三十多岁学python来得及吗_三十岁宅男自学Python,以前没有编程经验|后院活动部...

    原标题:三十岁宅男自学Python,以前没有编程经验|后院活动部 小咖是一个三十岁的有志青年,自从几个月前开始在网上自学Python,在没有任何编程经验下进步神速. "第一周我平均每天看一章 ...

  2. 【校招分享】Java非科班自学指南

    作者:一星如月看多时 链接:[校招干货]Java非科班自学指南V1.0_招聘信息_牛客网 来源:牛客网 本文针对应届校招生,面向大厂面试学习,讲究打牢基础的同时追求速成,适合还有一年以上时间参加校招的 ...

  3. 游戏编程十年总结(下)(转)

    游戏编程十年总结(下)(转) 一.总结 一句话总结:看完作者的文章,我的感悟是:不到顶尖,终成废土,而且我要是不居安思危,不能够明确自己的处境和社会的竞争,必挂无疑. 这样的故事,真的需要多看. 作者 ...

  4. 游戏编程十年总结(上)(转)

    游戏编程十年总结(上)(转) 一.总结 一句话总结:感觉作者是对游戏的喜爱,对编程的一腔热情,在资料极度匮乏的情况下保持非常好的学习热情,非常值得学习,从这个角度上来说,比之,我是不如的. 这样的故事 ...

  5. 游戏编程十年总结(下)

    游戏编程十年总结的上篇总结了前五年初学编程的经历,下篇总结的是开始工作之后的经历,前面五年算是一帆风顺,而接下来的经历,则充满了挫折与失败. 第一份工作 由于学历不高,还没毕业,经验不足让我吃了不少闭 ...

  6. 编程十年 (15):宿命,程序员

    编程十年 (15):宿命,程序员 本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/05/04/programming10years-15.html ...

  7. 编程十年的十种武学境界

    首先非常感谢大家这么多阅读量,评论和推荐.针对大家评论中的问题,在这里做一下统一回复.首先对于要我介绍程序媛的女朋友问题.我周围有一些没结婚的程序媛.她们对男孩子的物质要求都不高.但是女孩子生性浪漫, ...

  8. 编程十年 (2):前传2——哪有这么牛逼的游戏机?

    编程十年 (2):前传2--哪有这么牛逼的游戏机? 本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/04/19/programming10year ...

  9. 编程十年 (4):步入编程殿堂

    编程十年 (4):步入编程殿堂 本文地址:http://www.cnblogs.com/AndersLiu/archive/2011/04/22/programming10years-04.html ...

最新文章

  1. js 使用filter过滤多重数组
  2. JS中IE与W3C不同的地方
  3. 数字信号处理中卷积的图形化动态解释
  4. 【洛谷P3369】普通平衡树(splay)
  5. JDBC的CRUD操作之PreparedStatement的修改操作
  6. 2021—2022学年面向中小学生的全国性竞赛活动名单
  7. Swift多线程:GCD进阶,单例、信号量、任务组
  8. mybatis 注解 占位符
  9. 读书笔记深入理解JVM01 关于OutOfMemoryError 堆空间的溢出
  10. Arcgis Javascript那些事儿(三)---arcgis sever服务器注册关于数据拷贝问题
  11. PHP/JS中获取当前页面的完整URL
  12. Unity C#代码小技巧
  13. HTML简单的网页代码编写
  14. vue3 ts 手动封装message消息组件
  15. USB总线-Linux内核USB3.0控制器初始化代码分析(三)
  16. 北洋 BTP-R380 打印机驱动
  17. 如何自学qt(5)——页面布局
  18. Linux学习之定时任务调度
  19. tensorflow--tf实现矩阵乘法和加法
  20. GBase 8a数据库加载流程介绍

热门文章

  1. 前端工程化、模块化、组件化
  2. 乙腈和水共沸_水在不同压力下的沸点及常见的共沸物
  3. 如何寄送一本武功秘籍
  4. 在vue项目中设置网站图标
  5. gitee仓库创建和git一些常见命令
  6. 华清远见嵌入式毕业总结
  7. spark 学习(二) RDD及共享变量
  8. python取值范围到无穷大_python的特殊数字类型(无穷大、无穷小等)
  9. 阅读笔记之《守破离》
  10. Python为什么这么火,它能做什么?——Python编程语言应用综述