一位老碼農的編程簡史
話說前些日子在微博上看到一個“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行。大學期間我所編寫軟件當中,實際投入使用的為數不多,這個是其中主要之一。
可啟動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