我的技术学习历程
一. 写在前面
由于某些历史原因,我只上一所很差学校的专科. 我意识到了上这样学校的后果,毕业后竞争力会很差. 我上的是非计算机专业, 但我从大一开始就准备以后走软件开发的道路. 我当时对软件开发非常地感兴趣,所以自然而然地把精力花在与之相关的知识了.
二. 大学三年: 从零开始
大一上学期一开始,我就开始学校C语言,用的是谭浩强那本书. 刚开始学C是最困难的时候, 学校机房的破机器上Turbo C都没有, 已经不记得是什么时候在屏幕上打出"hello world"了. 这个时候听说有"全国等级考试"这么个回事,于是了解了一下,准备考二级C语言. 看一段时间后, 感觉二级蛮简单的,于是买了一本三级B(软件)的教程, 同时到图书馆狂看与之相关的课程. 就这样在忙碌中度过了大学的第一个学期.
过完寒假, 大一的下学期很快就开始了. 这个学期继续"三级B", 发现三级编程题目都没有,直接四级算了. 在这期间, 还学了方言C++(当时还不知道有ISO C++98, 图书馆里的C++书都一些教程#include "iostream.h"), 继而学习Visual C++6.0, 还偿试书上的例子写一个简单用MFC通过ODBC访问Access. 写完后, 第一次编译产生了102个error, 后来终于编译过了, 运行起来就崩溃, 再后来就不了了之了, 呵呵.
五一很快到了, 在另外一个城市的女朋友说"全国计算机软件水平考试", 是一个计算机专业方面的考试. 于是不考什么四级, 报了"中级程序员". 当时穷, 没有买考试教程. 还是到图书馆找了一本"全国软件水平考试(中级)"这本书. 这本复习书其实与当时的考试大纲不一样的, 她还要求"CASL汇编语言". 我就在借了一本"IBM汇编语言"学习. 大一和暑假就在忙碌中很快过去了.
大二很快来临, 过了一个月就是10.1了. 10.1的时候, 狠下心, 买了一本"高级程序员"教程和系统分析员习题, 准备考完中程,就准备高程。10月底,考完中程。在整个大二期间,准备高程的同时,学习了UML&RUP,COM/ATL,还有Visual C++网络编程(其实是MFC CSocket方面的)。 当时觉得UML/RUP蛮有意思的;COM/ATL感觉很精深,我迷迷糊糊地看了那本潘爱民翻译的"ATL精析".
这里说一个小插曲, 在我写这些文字的几个月前, 我看了Booch写的"面向对象分析与设计", 看着看着觉得好熟悉, 看到最后, 忽然想起来了,这本书, 在大二的时候看过, 还做了一大本的笔记. 那个用云状图表示一个类, 给我的印象太深刻了, 只是后来觉得UML的类图更合理. 现在回家找那本笔记找不到了, 可能搬了好多次家,丢了.
另外说一件比较重要的事情, 我觉得自己的专业没意思, 上完大二上学期的课程后, 就辍学了. 后来幸运地去了另外一个城市的一家软件公司上班. 当时都走好长一段路上下班, 穷得要死, 晚上回家后, 在住的地方烧面吃. 当时觉得公司里提供的盒饭午餐,真TMD好吃. 上了一个月后,感觉自己只有高中毕业, 不行. 这个时候家里人知道我辍学了, 老爸叫我继续上学, 于是找一个台阶下. 跟老板说, 家里人要我继续上学. 当时也不准备拿工资了. 后来公司给了我1000块, 那个兴奋的. 走的时候, 有一个叫"李总"的, 对我说, 等你毕业了, 来我们公司, 公司是需要你的. 不知道是不是客套话,呵呵.
时间过得很快, 大三了. 10月份的时候, 就考高程. 这次准备得很充分, 非常有信心, 等考试这一天等了很久了. 但考完上午卷后, 我没有十足的把握, 下午卷我觉得很容易, 提前交卷了. 后来成绩出来了, 好像是54/50吧, 这样就算过了高程了. 后来知道02年的高程还挺难的, 通过率是10%, 幸运. 对于像我非计算机专业的学生,高程证书对找软件方面的工作是有帮助的.
大三下学期, 搞了一下毕业设计, 补考了N门课程. 4月份去另外一个城市找工作, 5月份确定了工作.
三. 工作四年: 渐渐地成长
刚参加工作, 非常地开心. 工作四年多了, 这期间一直在做自己喜欢的事情, 我觉得做软件相当快乐.
第一年主要心思在MFC/ATL, TCP/IP, 网络编程, 还有Linux什么的, 当时MFC/ATL比较熟悉, 能用socket API写Server和Client, 就觉得自己很NB了, 现在想起来真惭愧. 这个时候还接触了设计模式, 觉得挺简单的, 真自负啊.
第二年热衷于标准C++, 觉得设计模式挺难, 继续应用和学习. 感觉OS内核挺有意思, 又把大部分时间花内核上, 而且一直打算几月内搞一个microkernel出来, 一直很忙, 最终没有搞出来.
第三年热心于FreeBSD内核, TCP/IP协议栈, 同时对C++泛型技术很热衷, 经常整boost, ACE什么的.
最近一年多, 大部分心思花在系统设计有关的技术上, 其它时间在思考如何管理好一个团队.
好书很多, 人的精力有限, 下面是我在所有学习过的书觉得值得珍藏的书。
软件工程:
1. 人月神话
2. 软件工程(这样的书很多, 找一本介绍全面的看看)
3. Ivar Jacobson等 统一软件开发过程
4. 软件开发的边界---管理成功的项目
分析&设计
1. 编写有效用例
2. Booch 面向对象分析与设计
3. 设计模式
4. 敏捷软件开发:原则,模式与实践
5. 重构
C++
C++之父 C++程序设计语言
C++之父 C++设计与演化
Lippman C++对象模型
Andrei C++设计新思维
C++ Template Mateprogramming(目前只有英文电子版)
C++的好书太多了, 没必要看那么多, 关键在实践开发多思考, 如何用好C++.
TCP/IP 网络编程
Stevens的几本书全买了,就够了.
另外, Winsock网络编程也不错.
Win32/Unix/Linux
1. Windows核心编程
2. houjj译的 Win32多线程程序设计
3. Stevens Unix环境高级编程
四. 后话
7年多以来, 我在技术学习方面的目标一直都很明确:OS内核, TCP/IP, 分析&设计, C++. 现在我觉得应该算是一名合格的程序员和具备初步管理能力的项目经理了, 但要学习的东西还很多很多.