话说前些日子在微博上看到一个“10年码龄的老码农”QQ群,掐指一算自己从95年接触计算机编程似乎也达到这个标准了,于是突然来了兴致就加入了这个群。这个群真可谓藏龙卧虎,从DOS时期的第一代程序员,到Windows时期的第二代程序员,再到目前互联网时期的第三代程序员,很多重量级的大牛都云集与此,比如简晶、蒋涛、周爱民,会员数在一周内已经达到250人以上,码龄最长的高达25年。看着一帮前辈和同道者们谈论人生、技术和职业,心中不禁感慨万千,回顾的念头油然而生,也算作是对自己编程人生一个中期小结。
1995, 第一次接触计算机,DOS操作系统,5/3.5寸软盘,WPS/CCED字处理和制表软件,练习五笔输入法,学习QBASIC编程语言。
1996,开始使用Novell无盘工作站系统,使用Foxbase/Foxpro数据库系统,并学习数据库应用程序设计。
1997,学习汇编语言,并热衷于编写短小的汇编语言小程序来破坏DOS系统。
1998,开始使用到Windows 3.x,抱着“Turbo C实现大全”自学C语言编程,常为实现一些炫的图形和文字而沾沾自喜。
1999,大学开始了,Win95出现了,学习Pascal语言,整天开始混机房。
2000,计算机专业课铺天盖地而来,C语言/数据结构/汇编语言/体系结构等等,开始有意识地编写小程序,如磁盘格式化工具、俄罗斯方块、扫雷。
2001,Windows me系统来了,算法分析/操作系统/编译原理重量级课程,自学Delphi/C++ Build/VC/HTML/ASP等,写了很多练习小程序,并开始网站开发。
2002,大三开始必修课少了,于是开始在外面作兼职,正式做项目,开发了学校招生网站和招生语音查询系统,还接了不少网站开发项目。
2003,windows 2000系统出现了,第一次接触Linux系统,这时也到毕业时间了,开始找工作和实习,结果最后上了研究生。
2004,全面开始学习Linux系统,深入学习文件系统,同时在Windows/Linux大量编写程序,编译和裁剪Linux内核,编写了BootU工具。
2005,研究课题正式开题,研究网格计算与分布式存储,Globus/AFS/NFS/Castor/HPSS/Lustre,写了一个五子棋程序。
2006,研究GridFTP/Cache/数据分析与挖掘,大量的算法设计和代码编写,编写了基于web service的WSIO,同时也在外面接些项目做。
2007,这一年时间里进行了大量代码编写、算法设计实现,以及实验和数据分析,然后就是最最痛苦的毕业论文撰写。
2008,终于毕业了,正式开始了第一份全职工作,走上Linux C的技术路线,有点迷惘并开始理性职业思考和规划。
2009-, 回归老本行存储行业,全面投入存储技术的研究与开发,文件系统、分布式文件系统、重复数据删除、云计算/云存储,撰写大量技术博客。
2012-,老码农的编程人生仍将继续...
附部分代码列表
[1] FAT16文件系统格式化工具 (汇编)
记得应该是上完汇编语言和操作系统课程后,纯粹是作为练习,实现对FAT16文件系统格式化功能,类似mkfs.fat,汇编代码量约1000行。自此以后,除了操作系统课程实验以外,基本很少使用汇编语言编写代码了。
[2] Tiny语言编译器 (Borland C++ Build)
Tiny语言编译器,实现了类Pascal语言tiny递归下降文法的词法、语法、语义分析和伪C、Pascal代码产生。本软件是学习编译原理的课程设计,C++核心代码量约1700行。 这个课程设计当时获得优秀,大学期间所有课程设计环节我好像都是优秀,嘿嘿。
[3] 南航招生语音查询系统 (VC6.0)
当时在南航学生处招生办作兼职,高考前后深受招生相关人工咨询之苦。后受招生办委托开发了这个南航招生语音查询系统,主要为考生及考生家长提供高效的招生相关政策咨询和高考分数及录取查询服务。这个后来作为本科毕业设计论文,其中事件驱动和自动状态机是系统关键实现技术,C/C++核心代码量约3500行。大学期间我所编写软件当中,实际投入使用的为数不多,这个是其中主要之一。
[4] BootU (VC6.0)
可启动U盘制作工具BootU,制作USB-LINUX时的副产品。BootU能在Win2000/XP下制作MSDOS启动U盘,启动方式有HDD、ZIP、FDD。大概2004年的时候,当时在研究Linux内核裁剪,并制作一个可基于USB启动的小Linux系统。Kernel和root文件系统制作完成后,需要Linux下使用syslinux/Lilo/Grub制作可启动USB,而大多数用户习惯使用Winodows系统。于是编写了BootU工具,制作MSDOS启动U盘,然后使用syslinux/Grub4dos启动Linux,这个C/C++核心代码量约2500行。
[5] 磁盘专家 (VC6.0)
磁盘物理分区分析软件,包括主引导记录MBR,系统引导记录OBR,文件分配表FAT,文件目录表FDT,当时可以支持FAT16/32文件系统,对NTFS和LINUX分区支持不好。由于种种原因软件许多功能没有完成,C/C++核心代码量约2000行。
[6] IHEP五子棋 (VC6.0)
IHEP版五子棋,学习算法分析设计时练手所写的。算法采用极大极小剪枝博弈算法,人工智能还凑和,但BUG多多,核心C代码量约2500行。
http://blog.csdn.net/liuben/article/details/2228050
[7] WSIO (Linux C)
WSIO是一个基于Web Service技术实现的、与POSIX标准兼容的文件I/O,实现了存储系统的远程文件I/O功能,主要解决异构环境下存储系统之间的互操作问题,方便存储资源的有效整合和扩展。WSIO在GNU LINUX下基于gSOAP、C/C++实现,它由服务器、客户端工具、文件系统、用户开发库等几个部分组成,支持GLOBUS GSI以及访问的授权和认证,实现了通用文件访问接口GFAI(General File Access Interface)来对不同存储系统的支持和扩展。2007年,我带WSIO参加了中科院第二届开源软件大赛,获得了一个三等奖作为鼓励,非常荣幸地于袁萌老师合了个影(如下图)。WSIO原型系统约5000行代码量,后面不断修改完善,代码量达到10000以上。
http://blog.csdn.net/liuben/article/details/5395831
[8] Deduputil (Linux C)
Deduputil是一款开源的轻量级文件打包工具,它基于块级的重复数据删除技术,可以有效缩减数据容量,节省存储空间。Deduputil的特性包括:支持文件追加和删除、零数据碰撞、支持压缩、支持定长/变长/滑动块去重算法。2009/2010年那会在研究重复数据删除技术,想分析对比不同去重算法的压缩率和性能消耗,于是就编写了这么去重小工具,后来作为一个开源小项目放到了Sourceforge上。这个工具经过几次较大的版本更新,目前最新版本是1.4.1,C核心代码量6000行左右。
http://blog.csdn.net/liuben/article/details/5641891
http://sourceforge.net/projects/deduputil/