在西农-S7: 技术、论坛、博客、社交(中)

接上文,2010 年下半年(大三上),我在找各种技术相关的论坛,Tanky 正在卖力的推广他的论坛。我看到了他的推广帖子就去看了看,没什么人气,就是几个搞 ACM 的人在疯狂刷题,菜鸡互啄。

此处略过起初认识 Tanky 的点点滴滴,我忘了……

C++奋斗乐园

我注册了一个论坛的账号,每天没事的时候会去回答 C++ 的问题。没多久,论坛的以站长的身份,加了我的 QQ 聊了一下。当时我只知道 ID 为 TankyWoo 的人,是论坛的管理员、ACM 板块的版主、比较活跃,并不知道他就是站长。 推广的的时候开的小号,自己的论坛里他也有很多小号,没人知道哪个是哪个。

说实话,虽然论坛做的不咋地吧,但是站长找到我,心里还是有些小激动的。具体聊什么我忘了,现在只记得两件事情:

  1. 他故作老成,在很长一段时间以为那是一个三十几岁社会人
  2. 聊过之后,我成了 C++ 板块的版主

当了版主以后,头像下面多了好几个称号,菜鸡们见回帖都是版主版主的叫着,心里还是美滋滋的。出于版主的责任(虚荣心),我几乎把论坛当成了自己的家一样,每天都泡着。别人问问题,懂的回答,不懂的就自己研究搞明白然后回答。 之后,论坛开了几个板块,Windows 程序设计 、MFC、实战,我也成了那几个板块的版主。

两三年的时间里,论坛 90% 以上的 C++ 相关的问题都是我回答的。我的 C++ 的基础也是这么逼出来的,像什么 ,– 的问题、指针偏移、类型强转、内存对齐、虚函数表、多态……找一门 C 面试宝典,里面写的大部分问题,都回答过。

我基本上每天都和 Tanky 走两套流程,遇到不确定的问题,先自己研究,QQ 上两个人沟通直到有了共识,然后去论坛把帖子回答了。我记得有一次我刚上完课,他就打电话过来,babababa,我中午饭都没吃,直奔房子打开电脑回帖。

论坛板块很多,但实际上只有两个板块人比较多,一块是 ACM ,一块是 C/C++,C/C++板块 也是后来才慢慢有了人气。

也是那个时候我开始对搞 ACM 的人有成见的,一直延续到现在,我特么真是个执着的人。以 Tanky 为首的一帮人,每天都在疯狂的 A 题,然后晒代码、晒速度。贴出来的代码写的一塌糊涂、乱七八糟,我当时实在都不明白他们在嗨什么。之后,论坛就开始了 ACM 与 C++ 之间的论战。


大三上学期遇到了我大学的第二次迷茫与焦虑,迷茫点在于:我不知道自己需要学什么,不知道毕业以后会用到什么。体现在 接口 课上,我在下面和别人讨论 MFC,被老师都逮到了,让我上去随便讲点什么。我就上去讲了 “接口 这门课没什么用” 的论点: 很多老师都告诉我 组原重要、接口重要、信号重要…… 每一门都课都很重要,但是当我去问他们,你们毕业工作这么多年了,你们用到了吗?他们说没有……并告诉我反正很重要,你要好好学。 这怎么让我信服,我学好一门语言至少能在毕业的时候确保能找到一份工作,这些课又能帮我做什么?

语言重不重要?算法与数据结构重不重要?设计模式重不重要?操作系统重不重要?等等重要的话到底有多重要?我一直想不明白,你告诉我很重要,倒是证明为我看啊?那个时候我真的谁的话都不相信,自己也想不明白。

软工的李老师(lijianliang)是从互联网企业转到学校工作的,有 5 年多的工作经验,言谈举止上也可以看的出来和其他老师不一样。感觉他对我的印象不错,我就给他发了一封邮件,整理了几个问题,约了时间,聊了一个多小时吧。 那是我第一次对互联网企业中的技术有了一个认知,聊天过程整理下来有那么几点:

  1. 语言是基本功,必须要掌握
  2. 掌握常用的数据结构和算法即可,现学现用
  3. 他认为设计模式不必要深究,代码写的多了,看的多了,写出来的都是设计模式,乱用模式比如不用
  4. 工程的重要性

之后我就没那么迷茫了,我逐渐从语言扩展到工程,也就是从一个写代码的人观念逐渐向一个工程师观点转变,体现在下面几个方面:

  1. 学习面向对象,有本书叫:面向对象分析与设计(UML 2.0版),同时学习了 UML。
  2. 看了两本书:代码大全2、人月神话
  3. 在图书馆里找了一些软件工程方面的书,接触了一些不太懂的术语:敏捷、结对编程、重构、持续集成等等,

我对于软件工程的理解,离不开这些基础,也离不开我的第一家公司:风行,这些东西在风行逐渐的得到了验证。等到在北京系列文章,再探讨。

大三我很抵触学校的课,硬件的相关的课,基本上都挂了。到大四的时候,我才明白,这不是我的问题,是学校的教育制度和教学规划的问题。和一些老师聊过我的想法:

  1. 学校不应该有必修课,全部改成选修,选择自己喜欢的修够学分就行了
  2. 大量的开学科导论,在学生要学一门课之前,要先让他明白,这门课是干什么,学了之后能得到什么。

举个例子,如果我当时能明白 C语言、操作系统、汇编语言、编译原理 之前千丝万缕的关系,我不可能会逃这些课的,也就不需要等我明白这些道理之后再花大量的时间补上。我很气愤,为什么没人能告诉我?我一个一两年的新人都能明白的道理, 教学那么多年的老师不可能不懂这个道理,他为什么不讲给我听?至少也应该尝试一下吧?

我想过在这个行业干个 5 到 10 年,回高校教书。今年 10 月份,张老师回国经过上海,我问他像我这样的,以后有没有机会能回到高校教学。他说比较难了,基本上没什么可能了,现在的高校博士学历是硬指标,甚至需要海归,也没什么好办法。我心想, 这些博士、硕士 懂个JB。写代码水平可能还不如一个水平稍微好一点的大三学生。讲课,网上 down 一份 PPT,糊弄糊弄学生,混混日子,也只不过在完成自己的指标而已。我大学里见过那些讲课好的、责任心强的老师, 一般是两种人:一种是不做任何科研的讲师(蔚老师,带Java的那个老师,带数据库的老师,软工的几个年轻女老师讲课都不错的)、一种是特别有激情的年轻人(少数,蔡老师算一个、胡老师(hushaojun)算一个,还有一个数学系的马老师(maziwei),这些老师我都记得)。 硬件的那几个老师,我后面文章再慢慢说。在学校资历越老,级别越高,课讲的通常越扯淡,还 TM 架子大,倚老卖老。

回到论坛的 ACM 与 C++ 的论战,因为我对工程和编码等方面有了自己的理解,我站的角度不是语言,而是工程,我当然觉得自己的是对的。你算法学的再好,以后用不用的到不敢说,代码写成那样子,算法再精巧也没人敢要。 动不动就开一个上万大的数组,还有人告诉我这在做题的时候很正常,这样效率高…… 最后,不了了之了,我没能说服他们,他们也没能说服我。

现在我能理解他们为什么会疯狂的刷题,也不反对去搞 ACM,不过适可而止吧。可以研究算法,但不要为了比赛去刷题,为了刷题而刷题就没什么意思了。你说你把计算机编程艺术三卷读完了,你对算法有所研究,或者对算法领域有所贡献,我由衷的佩服; 但是你告诉我刷了多少多少道题,速度与效率有多高,多么多么牛逼,我保留意见。

技术和工具的终极目标都是为了改善人的生活质量,是为人类服务,抛开实际需求谈技术的难易都是扯淡。

周一没那么多时间,今天就写到这里吧。

张杰

2015/12/21