一位老码农的编程简史

12年前
话说前些日子在微博上看到一个“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/

转自:http://blog.csdn.net/liuben/article/details/7340995