寫過十年代碼是種怎樣的體驗?

發現組織內有不少寫了十年代碼的工程師,作為一個寫了5年代碼的碼農,想知道寫十年的代碼是一種什麼樣的體驗?


寫代碼20多年的工程師, 可以回答嗎?

0: 小學時期
設備:紅白遊戲機 Laser-310
語言:BASIC語言


## 在紅白機上寫BASIC ##
我最早的編程是在紅白遊戲機上, 我可不是寫FC遊戲,我沒那麼老:) 。 那是小學的時候買了一台紅白遊戲機,機電部46所研製的, 可以配一個鍵盤,就可以當電腦用了。
不記得了那時花了多少時間在這個玩具上, 主要是用BASIC寫各種小程序。那時這個東西沒有磁碟驅動器, 需要用錄音機把程序錄下來, (沒錯,就是磁帶錄音機)。 下次開機就可以用磁帶Load回來:)

從網上帖子(【私人博物館】遊戲機篇-01:當年的黑科技國產紅白機)找到到了這個遊戲機和鍵盤的照片:
遊戲機配的鍵盤(我當時那個是黑色的):

用來連接錄音機的介面:

能記得當時寫的程序有:
通訊錄, 輸入姓名縮寫, 查找電話號碼。 把老爸的通訊錄全部輸入進去了。
隨機產生音符,起名為胡編之歌
用ascii字元列印動畫, 比用_ - ^ 等字元列印出快速移動的蟲子等等。。。。
當時我的輔導書就是從圖書館借來的譚浩強的《Basic語言結構化編程》。借來的圖:

## Laser-310 ##
還要提的是小學學校里有計算機課,用的是Laser-310. (知乎上有問答說這個:LASER310 是什麼設備? - 科技)

計算機課上了幾次課之後就停課了,不過我還是經常找老師要鑰匙去玩。 Laser-310上主要就是Basic語言, 其他同學都不喜歡玩, 都圍著旁邊的那台中華學習機,因為可以打遊戲(挖金子)。

1:中學時期
設備PC/AT286
語言:DBASE3FoxBASE+

## 幫老爸fix bug ##
中學時期, 經常去老爸單位玩電腦, 那時操作系統都是DOS, 辦公軟體是WPS、CCED (可以理解為DOS上的國產EXCEL),這些不是寫代碼暫且不提。
那時的資料庫軟體主要是DBASE3,後來升級到FoxBASE+. 都是互動式的資料庫管理軟體, 和後來的微軟的ACCESS類似, 它不只是資料庫,還包含了交互界面的設計,報表的展示等功能。
寫代碼的過程主要還是學習、繼續用FoxBASE+完善我的通訊錄程序(為什麼想不出做別的好玩的。。。)。 值得一提的是, 老爸單位列印報表程序出了bug了,列印打錯了, 是我幫著修好的。

2:大學時期
設備: 奔騰處理器 PC
語言: C語言/C++語言/HTML/XML/VRML

## 一個繪圖程序帶來的慘案 ##
97年上了大學宿舍6個人合買了一台電腦,CPU:奔騰 mmx 166Mhz, 內存:16M, 硬碟:2.1G。當時6個人一起去攢電腦,花了7000。 打車運回來的時候,和司機師傅說,「師傅慢些開, 我們買了電腦,別顛壞了" ... 囧
6個人平均分配上機時間, 一人一天。 寫了一個簡單的VisualBasic程序,每天彈出來應該由誰來上機。
大學上來學的是C語言,用Turbo C:

一天,我剛剛用C寫了很酷一個圖形程序,興沖沖的跑回宿舍,和同學說, "來, 我給你演示一下我的程序", 說著把3.5寸盤插入電腦, 運行~~。 同學們都擠過來看,然後,就沒然後了, 屏幕黑掉了, 機器無法起動了。 拿到維修處被告知顯卡燒了(到現在我還不明白為啥我的程序會燒掉顯卡)。帶來的後果很嚴重的。 維修電腦花了一個星期, 為此我要償還因我而影響的其他同學的上機時間。 之後的一個月,我都沒能用宿舍的電腦 :(

## BBS用戶跟蹤系統 ##
從大二開始,結識了 GNU/Linux, 開始使用 GCC 編譯C代碼, 開始用VI寫代碼。 沒想到17年後,我依然在使用這些偉大的工具。
依然記得第一次打開VI, 完全不知道怎麼退出。 只能用 CTRL+Z 退到後台,然後再 kill 掉。

那時候學校里開始流行BBS, 宿舍還沒有通網路, 上BBS需要到圖書館機房。那時候上BBS使用TELNET協議的,現在的新水木也還是支持TELNET協議的,界面看起來是這樣的:

上BBS可以發文章, 閱讀文章,最重要的是可以找人灌水聊天 :P. 我猜各位應該沒用過BBS的聊天室功能, 也不知道//bearhug, //puke 是什麼意思。
那時候很喜歡和一個同校的網友mm聊天, 不過因為上機時間不同, 總是碰不到她上BBS. 我就用C寫了一個robot程序,登陸bbs, 每分鐘查詢一下她的在線狀態。 如果她上線了,就把她的IP地址發到我的摩托羅拉BP機上。 當然她下線了,也要發個消息到BB機,免得我跑到圖書館她已經離開了。
a) 為什麼要發IP地址?這樣的話,我能看出來她從哪裡上網,圖書館還是計算中心, 這樣我就可以偶遇她了:P
b) 為什麼要發到BP機,不用手機簡訊嗎? 那時候沒有手機 :( 不只是我沒有, 大家都沒有。有模擬信號的大哥大,買不起啊。 BP機是最方便的通信工具了。盜一個圖:

c) 為什麼用C寫, 不用其它腳本語言? 首先那時候C語言我最熟,其次Python還沒有流行呢,Python 2.0 是2000年才發布的。 Perl語言那時還是比較流行的, 可惜那時沒花時間好好學。
d) 程序跑在哪個機器上? 宿舍的機器不能上網的, 肯定不行。 答案是數學學院的一個老師,特別好,組織了一個Linux俱樂部, 我們有一台共享的Linux主機,可以telnet上去寫程序。
e) 程序怎麼發到BB機上呢? 這個問題問得好, 當時各地的電話局(那時還不叫聯通移動)會在自己的網站上提供給BB機發信息的功能, 我只是找到一些好用的發了一些HTTP請求而已。

故事還沒有完, 我寫了那個跟蹤程序其實不只是跟蹤一個人呢, 其實站上的所有人都跟蹤了,數據都保存下來了。 我當時想別只我自己一個人用啊, 就寫了一個網頁服務, 所有人都可以查看任何人的上BBS的時間,可以看到柱狀圖表,總結網友的上BBS的規律。

BBS站長看到我這個服務挺受歡迎的, 就聯繫我說, 你別用robot爬去bbs的數據了,直接把功能加到BBS系統里吧。 我很開心, 找了個晚上,去了計算中心BBS站長的辦公室, 當著他的面把程序改好了。 轉天早上,發現大事不好了, 所有登錄過BBS用戶的ID都變成大寫字母了, 都是因為我的程序的BUG - 為了比較字元串, 我把一個全局的用戶ID變數改為了大寫字母。 還好站長機智,及時的找到了備份恢復了數據。

* 2015年9月6日凌晨更新 *
感謝各位朋友的支持, 我會堅持寫下去。回答幾個朋友的問題吧:

  • 有沒有禿頂? 我的頭髮漸少了,但是還不禿頂。基因問題吧, 我有幾個同學已經禿頂了,感覺比我老10歲。。。
  • 現在在做啥? 我加入了一家創業公司,做Android相關。現在還在寫代碼, 寫Java、C/C++、Python, 之前沒有前端工程師的時候,也寫了PHP/Javascript/CSS.
  • 網友mm後來怎麼樣了? 發現大家都挺喜歡八卦的嘛。 後來和mm相處很好啊,也會經常見面聊天,一起去肯德基吃冰激凌,很開心的一段時光。是很好的朋友, 最後並沒有走到一起。
  • 從小編程家裡有人引嗎? 並沒有, 爸媽都是工人沒有計算機基礎。純粹是因為我喜歡打電子遊戲,進而想了解電子遊戲的原理。 那時候並沒有很多可以玩的東西,可以編程的遊戲機讓我鼓搗了整個暑假。
  • 是數學系的嗎? 恩,本科是數學系的,研究生讀了計算機。

## 「不喜歡」 ##
看來大家都挺喜歡聊八卦的, 我再多寫一些。 不過我會注意圍繞原問題「寫代碼的體驗」。
回來說大一的事兒, 剛剛上大學, 我開始追高中時暗戀的一個女生,打電話、送禮物不提了。列印排版了喜歡的網路小說《第一次的親密接觸》給她, 學習Photoshop, PS了照片做成卡片寄給她, 這些也不提了,和寫代碼沒關係。
大一暑假的時候, 我把宿舍的電腦搬回了家,用VB寫了個小程序。 邀請女生來家裡玩, 讓她試一下寫的程序。一開始是一些酷炫的動畫, 然後是一些智力選擇題, 最後一道題是「順便問下, 我喜歡你, 你喜歡我嗎?」 下面兩個按鈕, 「喜歡」, 「不喜歡」。 女生看到這裡, 停了一下,然後去點「不喜歡」, 滑鼠剛剛挪過去, 那個按鈕就跑開了, 她試了幾次都追不上。 這時我在想, 「放棄吧, 點另外一個按鈕吧」。 沒想到她說,「我不想選了,我要走了」。
這件事情教育我, 「做軟體的時候, 不要強迫用戶接受你的設計」。

## 刷榜 ##
從大二開始,一些門戶網站開始多了起來, 網上用戶也多了起來。 有一個門戶網站推出了在線交友網站,就是一個非常粗糙的facebook吧, 可以上傳照片, 寫簡介。每個用戶的profile頁面都有一個訪問計數器。 首頁默認按照訪問計數器排名。
那時的網站很基礎的, 沒有CAPTCHA的, 刷榜很簡單的。 我寫了一個C程序, 把自己刷成了第一名, 我又給自己傳了張布拉德皮特的照片, 引來了很多女網友的搭訕。 我舍友看到了,問我你怎麼搞的,幫我也刷下。結果排行榜前幾名都是我們宿舍的。我不會告訴你們的, 我真的見了一個女網友,她是外語學院的,她告訴我她們外院男生太少了。

## 做中國的HOTMAIL ##
在我大三的時候, 正值dot com創業火爆。 有一對海歸夫婦回國來創業,據說他們是學校老師的子女。 他們通過關係找到了學院的老師,求推薦一些學生幫忙。 老師就推薦了我們Linux俱樂部的4個小夥伴。

(值得一提的是, 老闆之前在美國一家公司打工, 有另外兩個同事和他一樣回國創業, 其中一個是藝龍,另一個是億唐。)

第一次見到老闆和老闆娘, 他們和我們講,「我們要做中國的Hotmail!」 聽完我們振奮了,決定加入。 四個人根據BBS ID的首字母,還自取名為BRAD小組。

CTO是從美國回來的, 我當時很崇拜他(現在也很崇拜)。 他是清華沒讀完就去美國讀書了, 在美國時搭建了http://bbs.mit.edu。他設計了整個Webmail系統的架構。

說到架構,可以提一下,不感興趣的可以跳過這一段。FreeBSD系統,前端用C寫FastCGI + Apache, 後端用C寫RPC server, 存儲用文件系統。 選擇FreeBSD因為當時Linux的性能還不太強, 選擇C開發,因為性能好, 省伺服器就是省錢。 用C開發Web Mail, 現在看來是不是難以相信? 在當時的硬體性能可不比現在, 價格還高的很。
所以當時就面對一個很難的問題:C語言很容易內存搞錯而崩潰, 而且FastCGI會要求服務進程一直保持運行, 這對代碼的可靠性和穩定性要求都很高,因為一旦出錯, 整個服務就會掛掉。

他當時向我們極力推薦Emacs,我現在少數的Emacs知識就是他教的。 可惜我看到他輸入Emacs命令時雞爪狀的手,決定還是堅持vim陣營。

還有一個我印象最深的,這個和寫代碼無關。 他特別喜歡在大家吃飯的時候講噁心笑話,以至於一段時間內,我都學壞了, 到處講噁心笑話。 感興趣的話,可以百度下「咬不斷 笑話」,就知道他講的多噁心了。

還在上課的時候, 我們就每天中午下課後,在團委活動室集合,叫上西南村的外賣,一定要點一份「鍋塌裡脊」, 一邊吃飯,一邊討論開發的細節, 下午沒有課的話,就一下午都在寫代碼。因為寫代碼, 我逃了幾次政治課,很不幸被點名了, 成為了我大學期間唯一一門掛了的課。

放寒假的時候,4個小夥伴都沒有回家,就10點多起來,直接打車到公司, 寫代碼寫到晚上12點。打車回學校睡覺。

至今我可以徒手敲telnet命令到smtp伺服器或者pop3伺服器,發送和接收郵件, 郵件協議記得太深了。

我還記的我當時藏了一個彩蛋在代碼中,郵件中搜索某些特殊字元,就會出現員工名單。後來被新來的一個哥們給移除了。

就這樣,4個大三的學生加上一個大四的師兄, 半年內服務上線, 4台伺服器支持用戶30w。

回想起來,那時的我們雖然還是學生,算是實習生, 但做的事情完全和現在創業做的是一樣的,甚至更加純粹, 覺得在做有趣的事情就夠了, 錢多錢少的沒關係,更沒有想過什麼股票期權。

這個公司後來怎麼樣了? 2000年的時候,互聯網泡沫破碎了。這家公司很快轉型, 做企業和校園郵件服務。我最近驚奇的發現,這家公司還存在呢。


* 2015年9月11日晚更新 *
## 黑客和假鈔的故事 ##
大四第二學期, 那時剛剛考完研,一個和我很熟的老師找到我,讓我幫他做個東西。

先說說這個老師, 這個老師在我心中就是那種真正的黑客, 記得大一剛剛買來Modem,幾個人都搞不定撥號上網, 我們找來這個老師幫我們看看, 只見他在鍵盤上運指如飛,啪啪啪啪幾下, Windows超級終端中快速閃過一些文字之後, 他已經已經連上了學校BBS,看了下十大熱門, 檢查了幾封郵件,回復其中一封,最後退出了,並斷開了連接。和我們說道, 「你們的貓沒有問題」。 這一切大概花了1分鐘, 其間沒碰過一下滑鼠。 其實當時我並沒有 看明白他在幹什麼, 這只是事後我有了經驗之後才理解到的。 那時這個老師長長的頭髮,不修邊幅的樣子, 就更符合心目中黑客的形象。
後來我們上了他講的課, 講的是數學軟體Mathematica, 他講的並不好,很多同學表示聽不明白。 但我能看出來,他懂得很多, 只是不能講出來,或者不屑講出來。 有一次他給大家留上機作業題, 我當時用了一個很特別的思路,很快做出那道題,給他留下了印象。

時間回到大四第二學期, 我去他在校外的一個辦公室找到他, 他換了個人似的, 穿著西服皮鞋, 頭髮也柔順飄柔起來。 老師和我寒暄了幾句之後,就從抽屜中拿出兩疊百元大鈔, 我眼睛一亮。
結果老師對我說:
「這錢不是給你花的, 是測試用的。我要請你做的是偽鈔識別演算法設計。 這個演算法會用到自動售貨機中的。 這裡還有一個感測器,可以掃描鈔票得到兩個信號:一個是光信號, 一個是磁信號。你要通過這兩組數字信號判斷這個鈔票是真鈔還是假鈔。」
「左邊這一疊是真鈔,你拿去花了也無妨。 右邊這一疊可千萬不能花掉或者丟掉!這個是多少錢都買不來的假鈔, 公安局已經登記過了,一定要還回來。 」

這個問題非常有趣, 我很容易找到了班上的另外一個數學大牛幫忙。 後面的兩個星期里,我們把學到的各種演算法都用上了,什麼神經網路、隨機過程、遺傳演算法。
可惜後來我因為個人的原因要去北京,沒法繼續研究了, 留下我的同學孤軍奮戰。 他在兩個月後給出了一個相對不錯的解決方案。 不過不清楚最後有沒有應用到自動售貨機上。

## TCP/IP ##
講過笑話吧, 大學快畢業前,開始找工作了。 一個同學去面試,人家問他, 「TCP/IP知道嗎?」。 這個同學答道:「TC用過, PIP沒用過」。


&<待續&>


【多圖預警】【20年碼農】
70後老人,來自皖南山區純的農村娃,大學之後才有的編程經歷
受前面一個兄弟的啟發,截點圖說說自己的這段歷程,後面有時間再補充文字:)

&<&<&<&<&<&<&<&<&<已接受大學同學的建議,加上了寫作的經歷&>&>&>&>&>&>&>&>

1995年第一次接觸到計算機編程,機械製造專業當然是FORTRAN了~~~依稀還記得第一次上課前天晚上對床對著一張鍵盤圖狂練指法的樣子。。。

講解FORTRAN的是一個香氣襲人的美女老師(晚上男生宿舍的話題常常是她),但FORTRAN這門課程確實噁心了我。。。如果要問那個時候的體驗恐怕也就是「枯燥」「心存恐懼」了吧?想想「預設」「回車」「控制台」這些陌生的術語,能不望而生畏才怪呢!那個時候每次上機之前,都會先在作業本上寫好代碼,然後帶著5寸軟盤或者3寸軟盤上機房。

現在這種軟盤早已絕跡了,上次還見知乎上有人問Windows里的盤符為什麼從C:而不是從A:開始,這提問的人肯定是80後了。。。

上機房的時候必須先停下來穿鞋套,機房裡最初是一些286機器,後來有了一些386,
每每想起機房,都是白色的燈光、白色的桌面、軟軟的鍵盤,以及那堆機器特有的氣味。。。

對了,editor.exe是那時候最帥的編輯器了(此前一直用的一個http://ed.com程序):

後來,我開始迷上了QBASIC,它可以畫圖,這是我感興趣的原因。另一個不經意的時間,畫法幾何老師辦了一期AutoCAD與C語言輔導班,抱著對C語言的神往,我報名了,並從此不可收拾的喜歡上了C。興趣是最大的老師,我要是一頭騾子,前面掛著胡蘿蔔,就算背負著再重的貨物,我也願意一往無前。C語言真的是太棒了,可以檢測到press any key,還可以settextcolor,甚至還可以initgraph哦~~~

我對交互型的東西比較感興趣,一開始模仿各種書籍上的代碼,嘗試著實現文本編輯器的一些功能(菜單、編輯、存取、游標),再後來直接跪拜在圖形編程,熟悉了滑鼠編程、中文編程、定時器編程。

能體會到在DOS的窗口裡出現滑鼠箭頭游標的欣喜么??
能體會到在DOS的窗口裡出現大中華的漢字的欣喜么??
能體會到在DOS的窗口裡拖曳十字架畫圖的欣喜么(沒錯!模仿的AutoCAD,因為我是機械專業嘛)??

那個時候,我已經是系計算機編程大賽的一名積極分子,有一次獲准用系辦公室的一台386(用來列印的)調試程序,當天晚上我直接拉上同學Y,一起編程弄了個通宵。。。

1997年接觸到面向對象編程,當時給自己定了一個任務,就是把原來實現的那一堆GUI組件,封裝成自己的Window、Text、Menu。。。也因此熟悉了OOP和Borland C++:

1997年那個暑假應該是我連續上機時間最長的時候,這都歸功於Y同學買了一台486的電腦,當時Y同學和C同學一起在學校外面租了個房子(我沒出去住哦!!我只是因為和Y關係很鐵,所以經常去用他的電腦)。

然後大家輪流用電腦,Y用電腦看片,接下來我編程,然後是C同學用電腦玩遊戲。注意這個順序「Y同學——我——C同學」,由於C同學經常排在我後面,所以從不熱愛學習的他後來都熟悉了Borland C++的修改狀態的標誌(好像是個類似於*的符號),一旦那個標誌消失了,他就覺得我已經保存了,可以輪到他玩遊戲了。。。

值得一提的是,我寫的那一坨GUI代碼,後來委託開電腦房的Y同學給我列印出來了,留著自己欣賞。Y同學當時特意給那一坨加了一頁封面,打上了一行標題:FakeWindows!

至於被模仿的對象,那自然是DOS下的Windows 3.1了:

1998年學習了微機原理,寫了一些彙編,現在都忘光了~~~

然後畢業設計用到了foxpro,然後外調我的C程序:

1999年,已經上了研究生,開始用上了vc5.0,後來一直用vc以及mfc很多年:

2000 開始接觸web編程,開始是寫html,後來關注一些動態的技術,除了vbscript和flash,後來我發現了asp以及interdev。為了快速掌握asp,我為自己又定了一個任務,為大學班級做了一個同學錄,甚至還做了一個聊天室。

那時候有很多免費的伺服器空間,但是也不穩定,好好的沒準哪天就不提供服務了。後來我直接將同學通訊錄放在大學母校的伺服器上,一直放了好多年~~~

2001年參加工作,開始接觸到java和jsp,那個時候沒有成形的MVC框架,所以很多類似框架的東東都是自己擼:

那個時候javascript控制項很少,一般自己擼個樹形控制項,就很開心了,然後各個項目里都搶著用,滿足感倍增!

剛參加工作的那幾年確實很開心,沒事就逛逛水木BBS、一塌糊塗、CSDN。在水木上也找到一些好碼友和mm ^_^

期間幫好友們做過同鄉會網站、蛋糕網站、電子元器件網站、采編髮網站,ASP/JSP哪個順手用哪個!

2002年女朋友畢業了,我正式結束了一個人擼代碼的時代,每個周末年輕的我們總是流竄在各大購物商場和小商品市場。。。GF負責挑東西買東西,我負責提包陪逛,那個時候的我,我常常說是「行屍走肉」,因為我腦子裡經常在想著那堆代碼、那些網頁、新的idea。。。等晚上一回到我們的那個溫馨小家,我馬上繼續將白天腦子裡面的東西序列化成代碼。。。

2005年左右,發現java也有IDE了!!!

2005-2010中間的5年,以做項目為主。基本是Java Web包打天下,自己擼過MVC、DBCP、ORM以及RPC框架,但都不怎麼深入,讓小夥伴們順利用上、少投訴就OK了。後來知道了Spring、jQuery、apache等開源項目,就基本上把那堆輪子扔掉了。。。

2014年搞spark轉道scala:

我想申明的是,我是一個感性的程序員,因此總是難免有點念舊,經常想起DOS時代的:

殺毒我們用KV:

更多的是這個:

依稀記得UCDOS:

老求的WPS(我不會告訴你我知道萬能密碼是^QIUBOJUN)

當然還有《仙劍》:

CC:

同志們,我想告訴你們,最初我是在電視機上接著操縱桿玩的,你們信么?真的是哦~~~~

以及98年左右的OICQ:

嗨!看帖的那位,說你呢!見到上古時期就著粗像素看H照片的前輩,咋能不點贊呢?!

++++++++++++++++++++++++++++++++++++++++++++
Y同學受邀看到我前面寫的,說我就知道講故事,沒提這十幾年來是個什麼體驗。那好吧,我表達一下近二十年編程經歷之後的體驗,各位看官記得鼓掌(點贊):

其一呢,現在總感覺某種編程語言沒那麼重要了,把功能實現了更重要;編程也沒那麼重要了,事情做成了更重要。很多小白總是吵著哪門語言好,這個確實很奶義務~~~要改!拿起YACC、Antlr,咱自己發明一門語言好不好?再不濟,咱們寫個XML編碼的語言好不好?總之,感覺興奮多了,一切就那麼回事了~~

第二呢,覺得編程本身確確實實給我帶來了很大的樂趣(反之,如果你覺得編程很無聊,建議就別干這行了)。我總結了一下,編程為什麼會給我帶來快樂呢?一在於其創造性,編個程序就像構建一個虛擬世界,有點小孩子搭積木的意思,和寫作一樣,好玩;二在於回報及時,有個新想法,編個程序就看到結果了,能哄妹子,還能賺錢,這點有點像嗑瓜子,嗑了就吃到了(沒人全部嗑完了再一起吃吧?),很開心,所以會停不下來。。。

第三呢,覺得自己其實挺笨的。原來覺得自己很聰明,班級里編程我玩得最好,後來發現其實都是自己熬夜刻苦練出經驗值來的,和天賦無關。。。坐著那練碼,列印出來看著碼(自我欣賞),陪老婆逛街還是腦子裡練著碼,到頭來寫碼也不夠快,年紀大了,記性不如從前了,連import都靠IDE自動補齊了,往往越簡單的功能寫得越慢,當然了,寫大程序,可能才有點優勢;

第四,寫碼之外的世界更精彩。回顧十幾年的生活,自己常以工作為重心,而現在回過頭來發現收穫最大的、最穩定的卻是家庭,是老婆孩子;其次的收穫是朋友,來自於一堆不寫碼的人。

朋友們估計也注意到了,我在上面不止一次提到Y同學,每個人一生中都有幾個最好的朋友,我大學階段的摯友是Y同學。在我很多的作品(軟體、稿件、圖書)中,我都提到了他。他是一個比爾蓋茨式的人物,之所以這麼說,是因為他酷愛電腦,並且中途輟學,一時傳為佳話。不同的是結局,比爾發財了,他沒有。當時在班上,我是追求上進的優等生,他是常常缺課掛考的混混,但我們常常在一起討論理想,包括我不懂的無線電,包括他不懂的C語言,以及比爾和艾倫。大二的時候,來自蘇北農村的他花了1萬元錢買了台486,這台電腦先後陪伴了我的QBASIC、C和C++,當然也包括西木頭的《C C》和大宇的《仙劍》。楊同學是個愛咬文嚼字的人,也是個多情的人。我們那時候很少想到如何去追女生,但是對《仙劍》的愛情演繹能夠評論得頭頭是道。98年畢業的時候,楊同學一次去南京,給我帶回來一本老外寫的3D遊戲設計,其中講解了一些3D原理以及編程要點,可惜我並沒有深入的看下去。

這裡也給年輕人提個醒,要做熱愛生活的人,該找妹子找妹子,該喝酒的喝酒,該耍流氓耍流氓,不要一直泡在實驗室。那樣會得痔瘡的!!!

第五條,深深感到計算機科班出身還是很重要的!我不是科班出身的,按專業來說我應該現在是個八級鉗工什麼的,但我十幾年前選擇了計算機!編程看起來很容易入門,很容易得到滿足,但是很多基礎知識前面沒學,後面遲早得補上。隨著編程的深入,就需要了解到硬碟IO比內存慢的道理,就需要了解SQL解析和執行的流程,就需要了解外部排序的原理,就需要了解分散式協調的理論。你開始越想躲避的,那些知識點就會像怪獸一樣越長越大,某一天冷不丁擋在你前面,好吧,咬緊牙關把它幹掉再繼續吧!

先寫這麼多吧!後面再補~~~快十點了,腦子開始犯困了。。。

++++++++++++++++++++++++++++++++

大學同學看到我的帖子,說你怎麼忘了寫當時寫稿子的事?
是啊,我怎麼能忘記了寫稿子的事?

再重申一遍了,我是感性的程序員,因此我喜歡舞文弄墨,寫了二十年的碼,也差不多寫了二十多年的文字,以下也帶著各位看官回憶回憶^_^(贊呢?)

上個世紀末,寫作的出處主要就是《電腦愛好者》了。第一篇是關於DOS中斷的東東,發表於97年,網上居然還能找到PDF:

後來連載多期的是98年的《漢字的處理技術》,那會大家正在鬧畢業,大家有的錢都花光了,就我很富裕,一期稿費800元,4期拿到了3200元,然後經常拉著幾個要好的哥們搓館子,還借出去了1000元錢。。。

後來一發不可收拾,將掌握的滑鼠處理技術轉換成了人民幣(1998年):

98年下半年,我開始了研究生階段,那時候就有了寫C++教程的想法,由於那時候普遍都是C語言,因此我的連載系列命名為《輕輕鬆鬆C to C++》,注意還是往《電腦愛好者》投的稿(1999年):

我也不知道,《電腦愛好者》為何總是將我的文章放在「步步高」這個欄目?是因為我寫的東西很有點步步高的意思?呵呵。。。不過,對於學生時代的我,稿費還算是比較地道的!

研究生畢業之後,正式進入工作,《電腦愛好者》的Z先生和我成為了QQ好友,後來我又寫了幾篇稿子,大抵是關於VC++ GUI方面的。再後來由於和水木清華BBS的幾個網友一起辦了http://vcer.net網站,我就直接把那些文章又發表成網上教程,在網上流傳了一段時間。上次我在百度里搜索,發現還有一些網頁屍體留存在那裡的:

恩,再靠後,就是和小編接上頭了,開始寫書。自己的編程水平其實也不高,但按捺不住要表達自己思想的衝動。最後寫的東西裡面,除了一些代碼,經驗雜談的也很多。。。

2007年寫了《標準C++開發入門與編程實踐》,大抵是覺得網上用VC6.0的程序員太多了,他們整天拿著一些過時的語法折騰來折騰去,對boost、STL卻毫不知情,實在是被老教材害得夠慘。。。

翻開蜥蜴的封面,裡面還是能找到我感性的文字的:

2009年結合VC,寫了本《把脈VC++》,初衷也很簡單,就是覺得一堆VC程序員看了一本又一本的編程秘籍,卻依然不懂怎麼開始一個項目。。。

在這本書里,感性的我索性先給出了一張VC編程地圖:

以上兩本書的發行量很小,因此早就沒有庫存了,也因此證明我發這篇帖子更多的是情懷驅動(感性碼農嘛)而非推銷驅動!請那些自認為自己的書寫得很好的、髙譚浩強一個世紀的牛人(這樣的人,據我所知,知乎上還是有的)保持風度,不喜勿噴!

最後show一下20年程序員的書架的一角:

當然,現在更多的書架被育兒經佔領了~~~~

最後比較遺憾的是,Java Web從2001年一直做到現在,卻一直沒能寫出一本有意思的書來,也許和自己的腦子也不夠靈光了有關吧~~~~下一本是啥題材的?大數據方面的?我不知道。

同學。。。點贊?


這個問題很懷舊,一晃也寫過 20 多年代碼了。


93 年小學時買的 386SX,2M 內存,沒硬碟,單色顯示器。那時沒有光碟機,沒有盜版碟,更沒有網路,於是只能翻著 C 語言書,望梅止渴,因為電腦里只有 QBASIC 可用。寫什麼?當然寫遊戲,黑白棋,飛機大戰什麼的,哈哈。

還記得神奇的 HD-COPY(黑科技,可增容軟盤)、PCTOOLS(傳說現在很多人已經不知道「保存」圖標里的那個軟盤是什麼了)等等。上初中後終於有硬碟有光碟機了!三國志3。大富翁2。沙丘2。模擬城市2000。還有 QEMM 和 FPE。當然也搞過 IOI,Turbo Pascal...

高中的時候,終於有 VC6 了。進入 DirectX 時代。沒 3D 顯卡,先來 DirectDraw 吧。做個 BitBlt 想快還得上 MMX 優化,光影效果也得 MMX(後來還有 SSE 了)。當然,最奧妙的還是 cache。當時寫的東西找不到了,發個代碼圖吧。

後來有 S3 Savage 了,可以玩 Direct3D 了。但沒 pixel shader 可用,於是用固定管線多來幾遍,照樣寫。那時泄漏的 Doom3 地圖,56K 小貓拖了半天回來,自己寫載入和渲染吧,如圖。

上面怎麼都發的是書的圖片?因為是中學時寫的一本遊戲編程書,汗。當時認識了不少國內做遊戲的朋友,剛看了一下,有幾位在知乎很活躍,這個問題裡面就有。

以上是十年前的事了。現在實時渲染終於普及了 PBR,有了 voxel cone tracing,離 GI 慢慢靠近了,不過還是沒有 path tracing 的專用硬體,也是有點奇怪。話說,有哪位想做單機的(如沙盒 RPG 等等),舉下手。

個人也喜歡理論,所以大學選了物理系。遺憾的是,那時業餘時間都給了暴雪全家福(暗黑,魔獸,星際,WoW),應該早點去做網站做 startup 啊,哈哈。不過,那時的創業氣氛確實與現在不能比,而且香港也是個很沒有創業氣氛的城市。


畢業後去了 hedge fund 做量化交易(中間讀了一段數學,純理論,純愛好向),C#,VBA,EXCEL 足矣,Mathematica 偶爾用用。不做太快的,所以並不用什麼酷炫的東西。交易策略,關鍵還是思想與細節。

市場很有趣,forex 尤其如此。從宏觀經濟,政策新聞,到微觀結構,各方博弈,幾個跳動的數字,蘊含著許多奧妙。當時獨立管過 65m us$ 的樣子(貨幣波動小,所以其實不多),後來有一天看到 Zuckerberg 同學要上市了,有點感慨。年紀差 2 年,怎麼差了這麼多呢。辭職跳創業坑去了。最初考慮過互聯網金融,後來感到還是應該做點慢一點的,真正有用的事情。


於是跳了最坑的坑,實體硬體坑,向 Musk 同學學習。沒有 Musk 同學的積蓄,那就先從把小的東西做好起。期間補上了 iOS,安卓(吐槽一下,在 IDE 方面 Visual Studio 真是領先太多):

Creo 建模,模擬電路和 PADS PCB 布線... 軟體硬體都能做了,進化成為「真·全棧碼農」 。

往後供應鏈等等大坑也爬了。看到自己心目中的設計變為實體,與用戶使用後的讚揚,確實是令人欣慰的事情。

那時還沒有所謂「創客」的提法,現在這個概念已經越來越火了,不過,硬體還是大坑。

1. 寫過這麼多年代碼,最有用的經驗還是在於 debug(見過了各種奇怪 bug)與代碼的 robustness(見過了各種奇怪邊緣情形、racing condition)


2. 學新技術會很快(但似乎也會忘得很快,一段時間不用就要查資料;未必是壞事,因為否則大腦會被塞滿)。而且生活中的許多事都可以用代碼來,比如前幾天想請師傅做個植鞣錢包,圖紙希望畫得比較完美,發現複雜了之後在 CAD 裡面畫會很坑,於是立即去查 SVG 格式,然後順手寫段 JS 生成 SVG,靈活太多。


3. 不一定好的方面,是會更喜歡造輪子。比如當時看到 nginx 就想寫個更快的,試了試用 epoll 確實可以快不少,再跟蹤進去看,發現瓶頸在 spin lock 和內核的進出,看來重新寫個系統可以並發高 n 倍,最好還寫個語言把前後端更統一(類似後來的 meteor),等等... 於是折騰。對於框架也是一樣,還是自己寫的最順手啊。


1995年開始,寫過20年。

出生在小縣城,資源有限,開始寫代碼完全是機緣巧合。

1、起步在初三
初中時,電視上有個四川的大背頭老師講DOS和WPS,聽了聽覺得還能理解。於是開始找書自學,在摸過電腦前,完全是在自己腦子裡編程,BASIC。

中考的時候和家裡談條件,考上重點的話給買一台裕興學習機,結果考上了。還記得媽媽帶我去所屬的地級市買,縣城沒有。試機的時候,寫了個冒泡排序,老闆很驚訝,老媽也很驚訝。呃,我很淡定。

2、深入在高中
拿到裕興之後,開始寫一切自己感興趣的東西,從LOGO寫遞歸,到BASIC用遊戲手柄模擬滑鼠。

上了高中,參加NOIP,在學校機房用386,1M內存,木有硬碟,自己攢了一堆5.25和3.5。因為純粹喜歡編程,對遊戲什麼的不感興趣,所以在coding上面花的時間很長,基本每周20個小時的編程聯繫。當時指導老師要請很嚴:經典問題不能調試,必須一遍過;複雜問題不能上機,在紙上寫,做好靜態分析,爭取一遍過。在家裡,周末基本沒有其他活動,依然在裕興上寫。可惜我上了大學之後,裕興被家裡送給了親戚,再也沒見過,遺憾,應該留個紀念的。回想起來,高中絕對BASIC腦殘粉呀,BASICA、GW-BASIC、Quick-BASIC,最喜歡的是Quick-BASIC!

高考的時候,所有志願都是計算機,如願以償了。忘了說了,高考結束後,我還打了個小工,給裕興代理做培訓老師,到小學講課,掙了300塊。

3、系統在大學
上了大學,跟著課程學C,不是太上心,因為除了指針,和BASIC沒有本質區別,成績中等偏上。同時跟著學長做項目,開始學Borland C++Builder、Delphi。

印象最深的是大二學彙編,寢室學習氛圍特別濃,大家比著大作業誰寫的位元組數少,誰的執行時間短!開始從底層去看待代碼和系統,為我以後打下很多基礎。還記得有一次作業挺難,我用了個劍走偏鋒的方法,結果代碼收到2個班同學的器重,大家都按著這個思路寫,老師看到後都瘋了。彙編成績年級最高97.

接著是大三的面向對象編程,開始了解之前用個BCB之類的完全按是玩鬧,開始用心學習面向對象的編程思想,而不是僅僅是C++語法,知其然還要知其所以然。面向對象成績年級最高96。

接著開始自學Windows編程,有了彙編的底子,反編譯過好多軟體,跟蹤看代碼玩。還學了破解和解密,純粹為了好玩,為了炫技,脫過殼、解過LIC、破過狗。

有了面向對象的底子,JAVA、C#之類的都是自己看。感覺C++是術、OOP是道,看一個人C++好不好,就看他能不能一周只能上手JAVA。大三暑假閑著無聊,開始學習圖形學,寫了個小的3D引擎,後來在學校的項目上還用了。也因為這個引擎,參加了一個大項目,表現還不錯,留校了。

4、工作之後。

留校工作,在職考研、考博,主要做項目和教學。在科研上做VR模擬,用過好幾個當時大眾和小眾的VR引擎,還在國防科技大學進修過HLA(分散式模擬的支撐框架),建模也用MATLAB。教學上主講了好幾年C++和OOP,還有些SE、windows編程之類課。過了幾年之後,學院開始號召學生參加ACM/ICPC,我開始做coach。有一年寒假,另外一個項目組人手緊張,也去幫著寫過ERP。組織AI的競賽,一個人寫過AI的對戰平台。帶學生做超算,寫過QT和MPI的混合編程。

博士畢業之後,有個機會到T大做全職博士後,覺得一輩子可能也就這麼一個機會去T大了,就辭職了。

現在帶學生做科研,建模用MATLAB,原型用python或RAD Studio,最終Release一般都是RAD Studio。一直對VS不感冒,也能用的挺好,但在C#出來之前,總覺得VS簡直就是反人類,無力吐槽——該封裝的都露著。寫過ARM、還寫過機械手等一些專用環境上的代碼。

說到感受,喜歡的話就不枯燥,喜歡的話才能全身心投入。coding的話,感覺就是面向底層、面向過程、面向對象三個層面,語言不是問題,思想才是。決定代碼質量的是演算法和可讀性。寫的時間長了,代碼就和自然語言差不多,就是你表達思想的一個工具,和別人交流的一個途徑,無它。


從1990年算起,到現在已經有25年了吧。現在不太寫代碼了,也就看看別人的代碼或者寫個console application做點實驗驗證。

其實我相信在那個年代,學編程和玩遊戲是緊密聯繫的,剛接觸編程語言的時候的想法就是為了寫遊戲啊。小學時基本沒接觸,到了中學預備班遇到一個同學是我的啟蒙師傅,他在少年宮計算機興趣小組的,傳說中的鄧摸頭(畫外音:計算機要從娃娃抓起)就是和他們一起的。我開始學電腦就是跟著他混的,後來自己也去了少科站計算機課外班。

最早就是Apple II上學BASIC。每次去少科站的上機時間很有限,所以我們都是事先在練習簿上寫好代碼,到上機的時候迅速輸入而後抓緊時間調試的。我記得我寫的第一個比較完整的遊戲就是一個梭哈遊戲,在練習簿上寫了大概4-5頁紙吧。純文本的,你下個注,然後你的電腦每人發5張牌,比較大小。估計是那時候看的賭神類電影受的影響。我還能記得當時的兩個難點,一個是怎麼洗牌(後來用的是隨機交換兩張牌n次),另一個是怎麼比較大小,後來是先排序然後比較死板地判斷牌型(炸彈,3帶2,等等)。

那時候的經典遊戲就是crossfire了,居然能在wiki上找到。
Crossfire (1981 video game)
就是下圖這貨,IJKL控制移動,ESDF控制往哪個方向射擊,非常考驗左右腦配合。

後來我又做了個開車躲避障礙的遊戲,算是一個「大作」了,也就是有幾條車道,用鍵盤控制左右切換車道,來躲避前方障礙,還可以吃東西。

當時我師傅寫了個街霸遊戲,就是模仿街機里的街頭霸王,只不過是用幾個色塊表示一個人,可以發波動拳,升龍拳,和旋風腿,非常好玩。要知道這都是BASIC寫出來的啊。

後來開始接觸DOS和C語言了,然後自己家裡搞了台XT-286,裝個Turbo C就可以自由編程了。那時候資料實在太少了,所以會寫個TSR就算很牛的了,我還記得時鐘中斷是每秒18.2次,然後設兩個計數器,第一個每18次就知道過了1秒,第二個記滿5次就要補償1秒。如果你能搞定XMS/EMS那就是屬於特別厲害了。

那時候遊戲都很經典,比如這個,三國演義1,智冠的:

這個軒轅劍1,這個縣太爺其實是個老虎精變的:

當時我們也想做個大遊戲,都企劃好了,模仿那是得街機遊戲快打名將,主角是機械戰警,人設都畫好了,招式什麼的都想好了。然後我還寫了圖形庫,比如用來TextOut的函數庫,那時候在圖形模式下是要自己讀字型檔文件然後自己畫出你要輸出的字元的。

後來我也忘了為什麼沒有做下去。

那時候還學了dBase,那個東西還是挺好用的,算是Access這種類型的祖先了吧。學那個的主要原因還是時常要給我爸朋友公司做點資料庫相關的程序,比如做個員工工資管理系統啊,進銷存系統啊,之類的,用dBase是最簡單的了。後來慢慢換成FoxBASE,FoxPro。

大概94年左右吧買了modem,開始接觸BBS,C-Fidonet。不是Internet,是打電話到別人家裡去的那種BBS。估計這裡知道的人比較少了。這個是藍波快信了(截圖來自月光博客CFIDO BBS回憶錄)。

然後有了Internet接入服務,就開始學做網頁了,那時基本都是手寫html的,不過這也算不上編程了。那時候網站編程基本是cgi模式,做個一個計數器就是用cgi方式。我那時在geocities上做了第一個個人主頁。

那時候比較熱門的網站有pchome,站長叫Hayes,modem的品牌名。我算是第一批給pchome供稿的人群了。我記得那時就是自己用htm做好網頁,包括用到的圖片文件,打個包發給Hayes,然後他再放到網站上去。後來聽說pchome賣了挺多錢啊,也沒給我分點稿費。。。

比較有意思的一個插曲,有天有個Ubisoft的人突然給我發了個email,說看到我在pchome上的東西要找我聊聊,然後我和幾個小夥伴就去Ubisoft的辦公室了。我們還是高中生,見到了那裡的電腦技術立刻就暈了,這個差距好大啊。聊的內容主要是聽聽我們對遊戲的想法啊什麼的,當時挺羨慕那裡的工作的,覺得這就是理想啊,可惜年紀太小了,高考還沒考呢。

後來到了大學裡,網站技術越來越成熟了。我們那時候成立個工作室,趁著那時候.com火熱,到處接活干。各種技術都用過了,一開始用得比較多的是asp,不是http://asp.net哦,就是手工拼html輸出的asp,然後配合ADO和access資料庫,算是一種很經濟的開發手段了。後來也用過jsp和servlet,php,mysql。那時候基本算全棧了,不光是coding,連macromedia三件套也是熟練運用了。

網站做好了一般是放在電信的虛擬主機服務上,一台主機有多個網站掛在上面。當時大家的安全意識真的很差,用的NT4的伺服器,基本不打補丁,好多漏洞。比如那個用Unicode的..就可以訪問到根目錄然後就可以調cmd了,還有像SQL注入也是90%命中,因為基本都是在asp裡面拼sql語句。我記得有個.com的網站和我們的掛在同一台伺服器上,然後我居然能看到他的源文件,裡面有資料庫連接串啊。。。

那時候也找一些軟體公司替他們做外包項目,基本上什麼都做,網站啊軟體啊都有,還有做flash的。印象比較深的一家叫火速,給他們做得比較多。剛開始合作的時候那家公司沒幾個人,CTO是個女生,技術上的事就和她談的。後來聽說他們越做越大了,有上千人規模,也挺不容易的。

桌面開發入門的是VB,真的太好用了。後來轉到MFC,貌似純WIN32開發被我跳過了。

畢業工作後基本上就是忙工作上的事了,業餘時間不多。有一段時間比較迷p2p下載,就是電驢電騾那個時代。我算是國內第一批接觸電騾eMule的,那是個開源項目,用MFC寫的。當時看到沒人去做簡體中文的本地化,就去申請做了簡體中文翻譯,也就是寫個中文的resource文件,電騾啟動的時候會載入相應語言的resource文件,也就實現本地化了。後來的各種電騾版本基本上都繼承了我最初的翻譯,我的翻譯有個特徵碼的,有一個選項叫Beep on error,被我一時腦殘翻成「出錯時嘟嘟叫」,後來若干年後我隨便下了個電騾發現還是這句。。。

之後給eMule開發小組提了不少bug和小段代碼,對eMule的代碼算是比較了解的了。那時候國內的p2p下載都是基於不少論壇的,我主要在一個叫牛過的論壇,後來分裂了一個叫牛過一個叫漢風。我們一群人做的事就是先到某個ftp下載一個片子,然後放到自己的emule裡面共享出來,當然我們的id裡面都是有名號的:[CHN][Hanstyle]名字,這樣的。

再後來我做了個eMule的mod,提供給論壇用戶使用。有什麼作用呢?第一會給帶特殊標籤的用戶名更高的優先權。什麼意思呢?eMule裡面你的上傳隊列是有限額的,比如同時給10個人提供上傳,然後其他人就會在你這裡排隊。排隊的時候每個人就會有個ranking值,隨著排隊的時間ranking值會變高,這樣決定下一個機會給誰。當然會有其他的因素決定ranking,比如是不是好友啊,是不是passive connection啊,然後我那個mod裡面就加了另外的因素,比如如果你的id裡面帶[CHN]就乘個係數,哇咔咔。論壇當時分裂的另一邊也做了相似的mod,差不多的策略。

所以你就別奇怪之後電騾裡面的人名怎麼很多都帶[CHN]了,後來的VeryCD版本還自動給你加[CHN]這個tag,我們就是始作俑者啊。現在想想也挺幼稚的,並不公平。

後來mod裡面又加了個挺強力的功能,因為論壇想要統計每個成員的下載和上傳量做考核用。這個怎麼實現呢?上傳量這個數據本來就是emule客戶端自己統計然後記錄在ini文件裡面的,很容易就可以篡改。後來想了個很傻的辦法,把上傳量,你的id之類的數據,加上一個鹽,hash一下再保存在ini中,然後定期給一個web伺服器post這些信息,伺服器那邊會用同樣的演算法hash一下看看是否被篡改。其實這東西很容易破,因為用到的鹽和演算法都在客戶端代碼裡面,逆向工程就可破了。不過當時用用效果還算不錯的。現在想想這不就是PT嗎?

然後更新了幾個版本我就玩消失了。太累了。後來我又出現的時候已經叫中國驢了,作者acat就是當時隔壁論壇那個mod開發者,和他聯繫上後又和他合作寫了一段時間代碼,再後來感覺無愛了就又消失了。

【更新】
說了這麼多玩的,再說說工作上的編程吧。我進微軟後先做的是技術支持,所以也算不上是程序員吧,主要的時間花在windows的調試(藍屏啊系統鎖死啊之類的),因此大多數時候我是在看代碼而不是寫代碼。幾年的時間我也數不清看了多少行windows代碼了,可以說是閱碼無數,心中有碼了。編程主要是做點小工具用來幫助調試,或者是模擬客戶環境來試圖重現問題。一般就是寫個console application調用些win32 api就可以了。有時候會改下windows某個組件的代碼,加點調試信息,自己編譯一個版本出來,讓客戶替換上,這樣可以在下次發生問題的時候獲得更多的信息。也有時候找到個bug,自己先做個fix給客戶試一下,如果有效再走正式流程出hotfix。

後來到了產品組,做的職位是測試開發工程師,從Windows Server 2008到R2,再到SQL 2008 R2, 2012等等,寫了好多測試程序。有時候是有現成的測試框架你只需要寫測試用例里的代碼,有時候就是從框架的測試用例都是自己寫。比較有意思的就是不時地想些新方法來測試。比如有一次用Model-based testing,先寫一個模型出來描述測試對象,比如要測一個對話框,用一個模型(類)來描述這個對話框的狀態以及各種動作(點擊按鈕),然後模型裡面自己計算出各種狀態正確的改變方式,同時用相同次序去操作測試對象,然後比對兩者結果是否一致。模型建立完善之後,就可以用隨機數生成各種各樣的測試步驟了,會找到一些你根本想不到要去找的bug。

發現bug後進行調試也是一個必備的技能,因為之前有大量調試經驗所以這還是很順手的,經常是開個bug,自己把bug的原因找到,然後把fix代碼做個changelist打包到bug裡面,然後dev只要check in就行了。

開發技術上,看到的主要是由C++ native向C#的變遷過程,使用.net的越來越多,產品代碼和測試代碼都是這樣。現在做Azure雲服務基本都是C#了。

再後來帶了團隊,然後測試和開發也合併了,工作重心就轉到工程管理上了,想的更多的是做什麼,怎麼做是正確的,而不是自己去做這件事。有時候一個正確的決定,可以躲過好多坑了。現在帶個小隊伍,主要做內部工程系統的研發,比如做一個持續開發部署平台,或者做個生產環境的監控報警平台,或者做個雲測試平台。做的東西不固定,目標就是提高內部工程開發的效率。做這個最有意思的一點就是沒有產品經理啊,自己就是產品經理,自己得決定做什麼,什麼先做什麼後做。

現在代碼已經很少寫了,最多就是看看code review,有時候心血來潮也會打開windbg調下bug。

最後打個小廣告,微軟今年的校招開始了,有興趣的同學請前往微軟2016年校園招聘報名。如果覺得自己很厲害的也可以找我內推哦,不過你得證明自己很厲害,呵呵。


入行十四年的人來答。

其實要算從寫有意義代碼(大學寫Foxbase管理自己的書本)算起,寫了二十多年了,但還是以參加工作為起始算十年的話,那時候正好在雅虎工作。

那時候,寫了十年代碼,回想起剛入行時聽到的一句話「難得不會,會的不難」,真的體會到這話無比正確。這行業知識和知識種類太多,但是都是相通的,只要入了門,不存在什麼事情你學不會,全看你有沒有精力去學。

到寫了十年代碼的時候,也會感覺好多事情才剛開頭呢。在這行,工作三四年的時候最容易自我膨脹,我還記得在我剛工作三四年的時候,周圍有些朋友看了幾本設計模式相關的書,張口閉口就儼然是「大師」口吻,幻想自己是Martin Fowler這樣的大師,其實就是小孩子過家家,自己鬧著玩。真正編碼了十年,才發現自己不了解的東西還很多,保持一顆謙虛的心很重要。

不過,真正編程十年的人差不多到了中年(程序員意義上的中年),開始會有點中年危機,心裡會想,我苦心鑽研碼術十年,不應該默默無聞還是這點成就,我要搞點大事出來!所以,編碼十年的程序員,不少都有創業的衝動,當年我就是那樣。

當然,創業就更加發現,這世界好大,你不懂的東西不只是沒學會的編程知識。

如今編程第二個十年過去一半,覺得終於找准了自己的定位,到這份上,如果還不知道自己是什麼人適合幹什麼事,那就真對不起這麼多年編的代碼了:-)

了解更多行業老兵觀點請關注我吧@程墨Morgan


寫過十年代碼,會意識到雖然技術更新看似很快,但核心的東西萬變不離其宗。

用自己熟悉的語言和技術寫過的代碼,一次性通過的概率變高了很多。大多數問題不是在測試的時候才發現,而是寫代碼的時候就能提前想到了。

對自己熟悉的語言和技術的工作量估計準頭還算不錯,能夠給自己的工作時間留出餘地保證質量。但對自己不熟悉的技術,有時候會過分自信導致工作量估計不足。

看問題通常會比較准。哪怕不是自己寫的代碼,出現問題了,聽一下描述或者看一下現象,很多時候問題的原因心裡都有一個大概的推斷,後期的調查證明大多數推斷都是準的。

對陌生技術沒有恐懼感,哪怕沒接觸過也有可以習得的自信。


不知道全職工作前的算不算,這樣算我首十年大約在1986年(小三)至1995年(高二)。

前兩年大概是學習一些最基本的電腦知識、BBC Micro 的 Basic。

之後兩年是自學Apple II,包括 Applesoft Basic 和 6502 彙編。然後一年使用 PC 的 DOS、GWBASIC。

然後第5年開始自學 C 語言、x86 彙編及計算機圖形學,寫過簡單的三維建模軟體。

第7年開始參與商業遊戲開發,學習遊戲引擎和工具的開發,開始學習C++。

第9-10年做主程主策開發遊戲,也開始讀一些計算機圖形學的大學教科書。

估計那10年大約每年可以看10-20本簡單的計算機書籍,早期去圖書館較多,後期不少零用錢都是存來買書的。

我兒子(今年小二)還未開始這種經歷,但遊戲玩得比我以前多很多呢,唉。

----
吃完飯補一下,題目問體驗。

小時候算是比較異類吧,學術成積不算是太好,但也過得去。在這種環境下可以說是比較自由一點,可以多花一些時間學習自己喜歡的事情。

做這些事情有時候也會和家人、老師有些衝突。特別是高中下課後去公司做到十一點才回家,和家人吵過好幾次。

學校方面,會代表學校參加一些編程的比賽,不是OI那種,而是要做教育相關的軟體。最初做三維建模軟體也是參加比賽的作品。因為這些經歷,學校也算是比較開放,比賽前幾個星期甚至經常上課睡覺,下課後寫代碼調試,有時候在學校的電腦室留到很晚,試過幾次要翻過學校的大門才能回家。回家後再繼續。小時候已經歷過類似程序員加班的日子,反而全職工作時就少了。

編程這回事還真的和其他學科很不一樣,喜歡的話自學可以進展很快,高中的電腦科題目是可以秒殺的。那時我們高中有電腦科,是共開考試的科目,所以學習上也省了一門課,可以簡單拿到一個A。

由於會編程,曾幾何時被家長介紹做一些很無聊的東西,例如幫一些公司寫 dBase 程序(不是用 SQL 的資料庫),也用 Director 做過教學軟體。可能更無聊的是替別人打字和排版(雖然後來被訓練到對排版有一定要求)。還好那十年還沒有互聯網,不然大概會浪費很多時間在做網頁(後來在大學就開公司做過??)。

說到互聯網,在沒有互聯網的日子,主要是靠書籍。另一個學習途徑是在 BBS (用modem打本地電話連接到別人家的BBS),可以找到一些零碎的文檔及源代碼。記得當年有看過 John Carmack 很早期的文檔。小時候,就是容易吸收各種知識。不過那時候還真是浪費了一些時間,學習一些現在看來沒什麼用的東西,例如 DOS 的各種內存技術(XMS/EMS)、TSR 編程之類。

那十年的編程生涯算是很快樂的日子。少年輕狂,想寫什麼就寫什麼。現在相比就會較保守謹慎,可能是學過了太多規條,太多現實限制(例如跨平台跨編譯器),太多自己的要求(例如性能之類),也怕寫出一些低級錯誤。

待續


數了數,從嚴格意義上的寫代碼到現在也有12 13年了。之前是97還是96年,小學二年級寫logo,應該不算。

最正經開始寫代碼應該算是在文曲星上,gvbasic,應該是01年或者02年的事情了。之前也在pc上qb寫過幾個,不過都是小打小鬧,算不得深入。
還帶動了一群人和我一起寫basic,現在感覺好屌絲,自己屌絲寫代碼就算了,還拉了三四個同學和我一起屌絲。
直到高中,寫了不少工具、遊戲之類亂七八遭的東西

然後應該是03年04年了,學了6502彙編。
不要問我為什麼是6502,寫gvb的到最後有幾個不學6502的。成就當然沒有gvb那麼璀璨,不過改改gmud還是拿下了

再然後就是04年春節的時候,整了本vb和c語言。很多人要失望了,都不是譚浩強。不過當時vb和c也只是看看,初三中考,拿來那麼多機會上機寫東西。
初中期間還因為跟著老媽學,把authorware給擼過一遍,大學時還靠這個技能幫妹子寫過一次多媒體作業,蛤蛤

然後,在04年初三的那個六月,我買了我的第一本,恰逢黑x創刊兩周年。
請不要用今天的眼光看待當年的雜誌和技術水平
於是,整個高中期間,基本都在圍著黑x轉了。c依舊停留在hello world級別;asp倒是好像基本能看懂了,反正和vb差不多嘛;html和js也迷迷糊糊能懂一些了;sql基本也開始理解了;計算機課的時候老師的教學軟體再也不能強制鎖我的屏了
最奇葩的,你們肯定都想不到,我靠著光看黑x的的文章,把x86彙編看懂了。緩衝區溢出的原理也總算是能看懂了。
當然距離實際能獨立寫彙編還早,不過od倒是舞得很熟,每次計算機上課,擼起od,先把還原精靈卸載了,然後開始下遊戲,總之高中期間老師對我很無語了,已經懶得管我了。期間有次老師為了讓我不要搞來搞去,要我去搞rcx機器人,期間也就又擼了擼LabVIEW和nqc,沒深入下去,一是功力不足,二是沒什麼卵興趣

高中過得很快,轉眼大學了。大一上輔導員不讓帶電腦,基本就啥都沒擼。
大一下自己帶了電腦,開始了真正意義上的寫c。我的第一個c還不是exe工程,是dll!
高中看了那麼多寫c的代碼,介紹如何寫dll,實際到自己動手的時候,竟然是那麼難。那個時候宿舍上網還不方便,查資料很麻煩。。。不過最終還是擼出來了,只要擼出第一次,後面就好說了。什麼把stdafx.h擼掉,什麼加個圖標,什麼去掉crt0,什麼包含共享節的pe挨個擼上去

大學期間曾經嘗試自學c艹多次,無果,只把c艹的各種方便特性給學來了,導致我一直把c艹當c用(vc6 vs2k3躺槍)

然後就是大學期間真的開始寫x86彙編了;ddk寫驅動;si調試;lord pe什麼什麼的又多又雜又亂,為今後踏入甲方安全這個深坑埋下了伏筆
當然,擼站也越發的純屬了

然而直到畢業,我依然覺得c是世界上最好的語言:沒有c寫不出來的程序;沒有其他語言能和c一樣對底層有那麼強大的控制力

直到去了某傻逼度工作,第一個星期就傻眼了,然後用了兩個星期,把perl擼會,學bash,學vim,學Linux各種學學學,包括html,js,php,什麼都在擼,再用,在學

後來換工作,但是也跑不開linux,繼續慢慢積累著vim bash下的各種快捷鍵
終於直到三個月前的某一天,我把花1800大洋在某二手東買來的新電腦裝成了ubuntu,不要笑1800大洋便宜,國產大品牌海爾呢,請自行腦補那兩個只穿內褲週遊世界和北極的不良少年

這下又遇到新的挑戰了,「在Linux下工作、寫代碼」和「用Linux辦公」真的是兩個概念,期間歷經無數次google,調這調那,找驅動,升級,折騰,自己琢磨死機原因,想辦法擼qq。
好些問題其實就是問sa,他們也不知道。sa裝機器的時候只會用標準的系統,多半是rhel或者centos,中規中矩的這類,且沒有gui。而ubuntu恰好是一個特別激進,喜歡趕時髦的主,出了什麼新技術,用!出了什麼新的替代方案,用!出了新的gui,用!特別特別激進,好多問題網上查都查不到。
當然,有人說,Linux的價值就是貴在折騰,那就折騰吧,我還是要說,Linux的優越性體現在,它成功逼使用它的人學會解決那些在windows下不會出現的問題。

Windows是世界上最好的操作系統
Windows是世界上最好的操作系統
windows是世界上最好的操作系統

有人問了,那幹嘛我還用Linux辦公
因為方(zhuang)便(bi)啊

Linux原生的terminal再ssh到伺服器之後,對那些原生的bash快捷鍵支持和使用比windows下的secureCRT要好多了,sexureCRT配置半天,還是多快捷鍵沒法按

bash的utility設計思想就是每個小工具做好自己的事情,由人去有機的把這些工具結合起來,大多數時候,這非常非常方便。隨手寫個五六行的小腳本,就能完成絕大多數在windows下一用vbs或者bat得幾十上百行代碼才能完成的功能

好像扯得差不多了,最後來回顧下自己寫過些什麼語言好了。作為一個甲方安全工程師,萬金油,我有幸寫過大部分主流語言,有些非主流也有所涉及

排名按喜好程度分先後
perl bash c xvm(自己家養的語言當然和自家親)
x86 verilog(我沒寫錯,就是Verilog,作為大通信專業的,會寫Verilog不是很正常么) Lua
php java html js
vbs jscript basic vb http://vb.net c# asp vba 6502 qb authorware
logo(如果這也算語言的話) c51 arm Epic(對,你沒看錯,intel epic) bat/cmd(如果這也算語言的話)

厭惡的語言(沒錯,我就是要你們吵起來,php是世界上最好的語言,以下語言就是垃圾)
python c艹 lisp foxpro(不要問為什麼)

我用過的資料庫也是有點奇葩
access mssql mysql oracle
到目前為止,上述四個資料庫還比較正常,估計用過的不少
然後不要感謝某西南地區985學校圖書館,為了無線續借貴館館藏某幾本書,我練習到了如下資料庫
sybase base2


2000年參加工作,到今年已經15年了,目前在一世界500強做軟體開發經理,目前我正在向公司申請從管理崗轉回研發崗,做了4年的管理,但發現真正讓我感到快樂的還是編碼及嘗試技術。

回首我15年的開發生涯,下面是我一些淺薄的心得:
1.程序是可以寫一輩子的,只要你願意並且堅持。
2.不要過於迷戀所謂的軟實力,軟體行業,還得靠技術說話。
3.儘早學習設計模式。
4.掌握好演算法
5.經常鍛煉,生活有規律
6.堅持學習


95年左右開始,我寫了10年的代碼,然後,糊了10年的口。

能看懂這行的來握個手,各種心酸,非真碼農不懂。
這個題目里大部分高票答主,也都不懂。
看看他們的地理位置,他們的學校,他們的家庭背景,然後互相做對比,也許不明白的能多少看明白一點點吧。

最重要的感想是:
如果以後我的孩子也想做程序員,
要麼我賺夠了錢把他送去國外,
要麼我賺不到錢打斷他的狗腿。


10 歲:單片機彙編
12 歲:VB
15 歲:C / C++
18 歲:Lisp
20 歲:Type Theory (哪裡不對)

忘了說體驗了。。。體驗就是脖子疼。。。活生生疼的睡不著QwQ

最後拉一下仇恨
然而我有女朋友(逃


小學:BASIC、QBASIC
目的:參加競賽進重點中學

契機是個免費的小霸王學習機培訓班,因為教程里有個超級馬里奧的圖樣,覺得可以學完自己做小遊戲。加之家父混彙編風生水起,偶爾還會抄抄當年《電腦報》和一些教材上的代碼做些很簡單的小遊戲給我玩,興趣極高。但是學完發現然並卵,想在別處多學點,但除了個競賽班又沒有給小學生的正規學習班,於是光榮入坑。

小學生競賽基本上就是寫個楊輝三角啊斐波那契之類的,難度係數低但是能進重點中學誒!不用靠微機派位碰運氣/拼關係了!於是就下了不少功夫,市賽第五,得以減免部分擇校費進省重點中學雅禮中學的實驗班。

----------
初中:Pascal
目的:興趣、進重點高中

OI這個競賽挺好的,國內的話最低層就是NOIp了。初中參賽的那個叫「普及組」,難度不大。初一雖然只拿到省二等,但是稍微加把勁初二就有省一等了。覺得寫程序解決問題很方便,以及對遞歸和分治思想的理解當時可以超過絕大多數同齡人,成就感還是很不錯的。重點學校的話競爭對手會有很多,當然不缺特彆強力的,那幾年我校一直都有多個NOI/IOI金牌,所以也有動力和目標。

曾經回想過自己小時候想做遊戲的目標,曾經嘗試了一把,後來就發現了數學的重要性,加之莫名其妙地報了個物理競賽拿了個國一(初中組)所以升本校高中實驗班不是問題,主要動力就成了個人興趣。

----------
高中:Pascal、C、C++
目的:興趣、保送

高中競賽的內容很複雜,而我的目標早就不在NOIp上,而是一心想去NOI去IOI,加之進了個實驗班,高二開始就處於半停課狀態一心競賽了。雖然順利NOIp拿一等成功趕上保送,但是還是想多嘗試一把,於是確實大啃了大量演算法、數據結構、數學、編程概念等方面的書。無奈能力不濟+對手太強,省隊選拔差了2名沒拼上。

期間接觸了很多方面的知識,包括且不限於C51單片機、編譯原理、C51和X86彙編、Qt、Java(J2SE和J2EE)、SQL、posix、HTML、集群計算、近似演算法、人工……但是以中學生的知識結構並不能徹底理解,也很少應用。不過至少要感謝家人給我帶來的良好環境。

-----------
本科:C++、Java、Matlab、Python
目的:興趣

本科讀了NUDT,還是光學專業,偏理論而基本上沒有計算機什麼事。因為中學階段沒有參加國際大賽成為了遺憾,所以想至少能在大學階段靠ACM來彌補,反正沒有啥就業顧慮,時間上也會寬裕很多。

大一參加數學建模美賽,一道數獨大題,很意外的拿到了M獎,忽然就獲得了極大的自由。這在那所學校是非常難得的事情,所以我開始同時做三件事:靠數學建模競賽成績來保護自己的難得的自由時間,靠ACM來彌補沒有去國際賽場的遺憾,以及學習自己感興趣的東西。

所幸三條腿走路也還算平穩,為了數學建模學了Matlab,但不算特別深入,因此經常的用C++和matlab混編,ACM則繼續用C++為主Java為輔(主要是有個很方便的BigInteger類,以及10倍時限…)。值得一提的是校內無網路,為了充分利用平時時間,我開始在紙上用筆寫代碼,然後在有網路的時候集中敲進去提交。這使得我的代碼一次正確率有了很大提高。順帶一提,還學了學用emacs和vim,不過自己更傾向於vim罷了……

最終在08年的Regional中出線,得以去到09 World Final的賽場,也算是圓夢了。賽場上遇到了很多以前OI時就認識的高端選手們,包括6位同中學的同學,覺得總算是追上了一點點……

由於之前的編程幾乎全都圍繞著競賽,而我還想更多做點什麼。想起之前接觸過但是並不精通的東西,就逐一自學力求掌握。效果還是不差的,也做了許多諸如單片機啊互聯網啊以及最早的安卓app製作之類的事情。

大三的時候遇到了python,當時就有被驚艷到,語法簡潔開發迅速這樣的感覺特別美妙。當然當時並沒有太多應用場景,於是主要做了一件事:讀python解釋器的源碼。

----------
碩士:C、C++、Python、Obj-C、Java
目的:興趣、培養能力

讀研的時候就基本上沒有什麼競賽了,對比以前的中學同學中70%國外讀研,20%大企工作的情況,雖然自己走不了那條路,多少還是羨慕的。

Python解釋器源碼讀完後成為了我主要的開發工具,畢業論文里的所有計算都是通過Python+C的混編完成的。當然也明白了很多這個看起來特別簡單的語言里的不簡單之處。此外還自己實現了用CUDA完成計算的一批核心代碼,以及利用6台4核電腦組建的計算集群上跑的光場傳播模擬。

偶爾會做一些手機APP,包括安卓與iOS,甚至有做WP的嘗試。也做過一些簡單的外包工作。

編程和研究演算法這麼久了,思維方式很容易就會向那個方向變化,對生活中的事情形成的觀點和解決問題的思路都與不編程的人有些不同。說不上好壞,但是至少更邏輯化,對於解決工程問題來說是有很多好處的。

----------
工作:C、C++、Python、Unity3D(C#)、HTML+CSS+JS
目的:生活

畢業後被扔去了距離家很遠且很荒涼的地方,JSLC。起初因為畢業專業是光學的緣故,被扔去了相關崗位。後來被人發現想法獨特解決問題和學習新知識的速度可觀,引起重視,後來就弄去編程了。內容很雜,有計算有網路服務也有圖形界面,所幸不是孤軍奮戰,如我不擅長的UI部分一般都會在可能的情況下叫同事完成,因此非科班出身,文檔倒也寫得還算不賴。

偶爾做些外包,都是休息時間趕工的,包括app,也包括一些web服務。做過微信公眾號後台服務的開發。

仍舊會學一些新的語言,比如Erlang、swift、julia、Rust之類,基本上都能很快學會,短的一禮拜,長的也就一個月,雖然說不上精通,但是多寫寫的話也能算得上專業了。

----------
基本上最大的體驗就是思維的邏輯化、解決問題的方法總會更加清晰;新學個語言什麼的會很快,因為原型其實就那麼幾種。對編程的事情可能不覺得是壓力,只會覺得真的很有趣。


1, 想想已經14年了,好像也沒什麼感覺,就是很多事已經有了思維定勢,設計如此,架構如此,編碼如此,重構如此,調試如此,就像框架一樣;
2, 對新事物還是很好奇,學起來總覺得沒止境,但實際能用到的東西卻只是其中一小部分,造成兩個後果,一是覺得自己記憶力好差,除了語言本身,其他的好像都忘了,使用時總需要去查查,經常會因此產生無力感;二是變得很懶,對絕大多數新接觸的框架或庫,總是大概看下結構和介面,然後就按照自己的經驗半猜半調試就過掉了;
3, 對糙亂差的代碼極其厭惡,特別是邏輯不清晰的代碼,review人家的代碼時經常會忍不住想重寫,但絕大多數時候都是提出改進意見,卻大多數時候又因為項目進度等原因不了了之(註:現在新入行的絕大多數人都是結果導向,心中根本沒代碼質量這回事);
4, 代碼已經滲透到自己生命中,經常會產生一種恍惚,覺得世界上的一切或許都能用代碼來解釋,包括人性這種不確定的東西,無非就是扔骰子而已,但家人經常說我情商差,好吧,其實我也這麼認為;但這幾年代碼已不在是生命中最重要的事,生活中應該還有更多的美好,但如果有可能希望自己能寫到60-70歲;
5, 大家都喜歡聽故事,我也來講講故事吧,進入計算機行業本非我願,高中時因為化學奧賽拿了全國一等獎,保送川大,但因為各種原因,最後放棄了,最終卻因為高考考砸又選擇了川大,填志願時本想選化學或食品專業,卻因為老爸聽人說計算機以後好找工作,在和老爸大吵一架後還是填了計算機,其實一個農村娃娃,在當時我的家庭環境下,談理想和個人自由總覺得有些奢侈;大學之前我都沒接觸過計算機,其實大一也只有上機課能摸一下,當時網吧已經流行,但對我來說太貴,此外當時對計算機真的懷著深深的敬意,每次上機就像朝聖一樣,但這不妨礙我用紙筆寫代碼,然後用一指禪輸入機器進行驗證,這也帶來一個對我影響至今的好處,我的代碼很少有編譯錯誤;我的第一門語言課C++大一就開了,這也是大一唯一一門專業課,對一個完全不會用計算機,進一步說對計算機一點概念都沒的人來說,這和天書無疑,我用了一個最笨也最聰明的方法:背;我當時背下了譚浩強C++教材的每一個知識點,每一個細節,每一段代碼;也諷刺的拿了全年級C++唯一一個滿分,老師說怕我自滿,最後給了99;當然背和考試是一回事,理解是另外一回事,能想像對虛函數,我花了一年時間直到在圖書館看到BIOS的中斷向量表,才完全明白過來嗎?當時的自己就像一塊海綿,每天11點睡覺,6:30起床,好像天天都泡在圖書館,了解計算機歷史,了解計算機構成,學習如果裝機,學習使用各種軟體,再之後去學習計算機體系結構,學習操作系統原理,反正就是一切都圍繞著C++發散開,缺什麼就補什麼;大二暑假同學介紹開始出去做項目,就此走上了碼農這條不歸路,這是後話,以後有空再說吧。
說了這麼多,其實我只想告訴大家,代碼也好,其他事也罷,喜歡也好,被動選擇也罷,既然已經在這條路上,就一定要投入你的熱情,如果的確沒熱情,還不如早點離開,畢竟通過寫代碼發財的,我真沒遇到幾個,何況凜冬將至!


答主94年的,現在大三,看了一下其他答主的答案,也許我是年齡比較小的吧。
今年是2015年,算起來正好十年,就算做一個回顧吧。寫了十年代碼還渣成這樣還真是慚愧。

我從小學二年級時候開始接觸計算機,當時也不知道怎麼的,覺得商場里的電腦特別有意思,也說不清哪有意思,總之就跟家裡說想學電腦。當時是2002年,我媽找同事的在電腦城工作的朋友攢了一台電腦,當時好像叫什麼兼容機,後來才知道CPU用的是大名鼎鼎的圖拉丁(@圖吧基佬)。當時什麼顯卡、音效卡、網卡(貓)還都是獨立的。記得顯存還是32M吧,硬碟是30G好像,RAM沒印象了。

電腦買了,光在家閉門造車也不行啊,於是我媽給我報了個什麼少年宮的電腦班,學Word、PowerPoint什麼的,後來學FrontPage、Flash。我記得從那時候開始我就不好好上課233

十年前,2005年,我五年級。少年宮的計算機相關課程基本上都上過了,就剩下一個什麼「編程」。於是順理成章的繼續學這個「編程」。學的是BASIC,後來聽說有個什麼競賽,就去參加了。五年級第一次參加毫無懸念的爆了零,非常有意思的是爆零竟然可以得二等獎。六年級弄了個一等獎。

小升初考砸了,至今我也不知道我為什麼考成那樣,一個幾乎進不了重點中學的成績。考前我媽聽說南開收信息學一等獎的,可以無視考試成績進去。我考成這樣,萬念俱灰之際我媽決定去南開碰碰運氣,雖然覺得考成這樣人家也不一定會要。

到了南開,當時的潘主任說「既然我們有這個政策,那就給你們一個機會吧」

這個機會,也許真的改變了我的人生軌跡。

就這樣心驚膽戰進了南開。因為OI在我最關鍵的時刻救了我一命,我決定繼續學下去。初一還沒開學,就到了南開中學滕偉老師任教的一個集訓隊繼續學OI,也注意到身邊也有很多小學時一起學過OI的同學。(後來我才發現,和我一起堅持到最後的OI黨就是這些同學們)

當時學的是Pascal,一門我至今仍未忘記的語言。

開學了,我竟然驚奇的發現,和我一起學OI的小夥伴,全部和我分在了一個班級!不知道學校是有意為之還是純粹的巧合。

初一那一年(07年),我得了普及組的一等獎。僅僅會模擬、貪心、排序、斐波那契數列的我。

後來漸漸學了搜索、DP等,還有Pascal的鏈表什麼的。

我們那個集訓隊還分很多班,根據入學時間不同,比如我們當時在07B,07年比我們早的叫07A,晚的是07C。還會根據每個人不同的水平調整班級。我那一年一期得一等獎的小夥伴們升進了06B。後來,整個初中階段我一直在06B。

和我一起學的小夥伴們,有的升到了更高等級的班級,有的因為學習、個人興趣等原因離隊了。感覺身邊的人換了一茬又一茬。。。

初二我沒有考好,普及組竟然沒有提高組考的分高。(是的,我們好多人都在初二報了提高組)得了兩個二等獎。這一年感覺不怎麼順利啊。

刷題什麼的自不必說,當時刷的主要是RQNOJ,有時候老師上課講了POJ上的題也會去交一下。此外,我們機房的區域網也有一個OJ,和POJ一模一樣。。。不知道滕老師怎麼弄來的Orz。。。
我開始在內部OJ上刷題,當然大部分都是水題。。。就這樣,我刷到了Ranklist的第二名。。。當然,比我水平高的多的是,人家只是懶得刷水題,當時的我也清楚這一點,但也是很開心。

初三,11月,同樣參加了普及組和提高組,同樣的成績:市級一等,省級二等。

初中的OI生涯就此結束,回去中考。

中考我考到了一個非常一般的學校,和我一起的OI小夥伴們大多去了南開。我成了傳說中的弱校獨苗。

高中的OI生涯和初中相比也沒有什麼不同,除了接觸到了更深層次的演算法和數據結構,比如圖論、並查級、線段樹等。高一高二兩年的失利,我不得不放棄了OI,也許我真的與保送無緣。

高三,比賽開始報名了,我媽強烈反對我報名,覺得我再次失利的話可能影響高考心情.

我當然是要參加的,跟我媽也沒有統一意見,晚上我爸回家了。

「讓他去。」

然後就不小心得了個省一,在一道水題出現嚴重失誤的情況下擦線省一,也是幸運。

最後一年有保送嘛,保送過程略下不表,於是就來了華科。現在大三,在做數據科學相關,大二的暑假在新浪實習了一段時間。

現在發現自己因為長時間的懶,已經不會寫代碼了Orz

就這樣吧,對細節有疑問再補充。


從找工作實習算起也有十年了,如果從學寫開始,正好也二十年
94年家裡有了一台學習機,頭一年只是學打字,接觸裡面的G-BASIC和F-BASIC(後者有浮點能力)是95年,照著書寫一些簡單程序,記得第一個程序是for循環算1加到100,第一個演算法程序是選擇排序,第一個遊戲程序是用其內建的語句讓mario從左邊走到右邊(想加手柄控制結果失敗)
96年上初中,就沒怎麼搞了,不過學校有微機課,也有興趣小組,參加之
97年開始NOI,混省賽,同時家裡有了自己的電腦,不過大都是用來玩遊戲,用QBASIC做NOI,只會暴力搜索,演算法方面老師只講了快排然而不知道怎麼用,平時沒事就拿一些無聊小題目練手,比如水仙花數,AABB猜數字什麼的,高中後總算在暴力搜索上學會剪枝了。。。高二時候運氣好,因為NOI全國賽時間改了,省一等獎的已上大學無法參加,於是替補上場
(同時中學幾年一直在持續玩遊戲,有段時間每天中午都去網吧星際或CS,而俺們老師就在隔壁搓街機。。)
信息學競賽那時候比較冷門,成績也沒到很好,高考保送幾率不大,於是自己考,報了計算機
大一在學校機房war3中度過
大二打球
大三談戀愛+打球
大四找工作+實習
其實課也在上的,專業課比如離散、計組、體系結構等比較感興趣,然而唯一掛的專業課就是體系結構,還是我們班主任的課,衰。。當然還有其它物理、化學、英語什麼的也掛了幾門,06年畢業時候,因為補考比別人晚了半個月拿證
06~07,金融伺服器開發,到處出差做工程,同時惡補APUE(剛畢業時候只會TC)
2008,年初辭職轉做證券方面伺服器開發,發現是坑後試用期又跳,改做手游後台,學python
2009,學python,用python,研究python,看python源碼實現,同時因某些原因轉作運維
2010,運維較累但是時間安排自由,看演算法導論,下半年跳槽,安全業務,同樣是伺服器開發
2011,自己帶團隊做項目,沒搞什麼多餘的東西
2012,做projecteuler,陸續搞了300多題,惡補數學
2013,因各種原因比較低谷,就看了看AI和ML的皮毛(工作中用得上)
2014,興趣轉到編譯器和語言理論,成果:larva-lang/larva-lang · GitHub,後因工作變動,文檔方面太監了,但代碼上基本都完成
2015,做資料庫研發,一直很忙。。。
感觸:興趣最重要,要有競爭意識但也不要勉強自己


從2001年開始吧。
小學四年級,作為「被選中的孩子」參加學校信息學競賽培訓班。
語言:BASIC。
那時候二線城市的小學機房是緊俏資源,放學後集訓,紙上寫好程序腦子裡過幾遍覺得結果正確才給上機(這直接導致後來複賽機試時間緊缺)。練就一手白板寫代碼的本領。

初中還是信息學競賽
語言:Pascal。
這個時候開始搞一些不務正業的東西了,比如用Delphi寫個小遊戲啥的。

高中開始接觸C,以及C++。
高中開始轉機器人競賽。

大學去了新加坡。
新加坡階段大學就是各種Hackathon,微軟的居多,各種WP,偶爾Android。競賽也就一個IEEE Xtreme。我是渣渣。

在HP Lab SG工作的時候是C++和Ruby。HP還是有一些C++大神的,包括我當時的組長,UIUC的HPC博士,現在去了Google。
在HP的時候經常收到大佬的離職郵件,不乏「我已經寫了20年代碼」這種話。。。

後來去了UCL,因為機器人做得好,去了Matlab-Arduino組做驅動。做完之後又去達爾文組做直系同源基因項目。

在一個二線城市,小時候拿過希望杯數學競賽國家獎、信息學市獎,和機器人國一的人,大概很容易被貼上「天生就應該學計算機」的標籤吧。
以至於高二分文理的時候本來想學歷史報文科,被各種人問「你那麼好的天賦學歷史可惜了」。

然而我清楚地知道,比我牛的人太多太多,太多,太多。所以我更能在這個領域保持謙遜的心吧。


我也知道,我不差,能黑客(真的攻防黑客)比賽拿到新加坡第二,從英國最好大學之一的學校走出來的人,我有這個自信。

有空也會研究研究圍棋(業5),歷史純自學,為了研究中日關係史自學了日語,因為愛拜仁自學了德語,沒事練練手風琴(小時候學了8年)。

不是天才,那就做個有趣的程序員吧!

說到底,
我,愛,編程。


15年的經歷,告訴我,愛好可以,但要跳出碼農思維,要始終明白:碼農跟大街上擦皮鞋的手藝人是一樣一樣的。


1996年高中玩小霸王,把說明書里的Basic 代碼全打一遍,但是那時候沒有意識到這是編程。
2000年左右上大學期間,自學VB,覺得VB不酷,就放棄了,轉學C++。
2002年工作,正式作為程序員,一直主要使用C++到現在。
雖然用了這麼多年C++,但是還是稱不上精通。
期間出於好奇,或者項目需要,也用過 Delphi, PHP,JavaScript, Python, Java。

和剛入行時相比,變化的就是心態,經驗和年齡。

剛入行,代碼錯誤百出,編譯通過都要高興的歡呼一下。現在基本上不會出什麼錯誤,甚至邏輯錯誤都很少,大部分時候一遍通過。但是現在會經常忘寫分號,歲數大了~~~, 還有就是程序越來越啰嗦,函數傳進來的參數都必須全檢查一遍才放心。

現在寫程序的時間少了,想的時間多了,經常一個問題想幾天,寫程序幾小時搞定。以前是想幾分鐘,寫幾天程序,再找幾天bug。

以前找bug 靠編譯器和調試器,現在是靠直覺。

剛入行時,寫程序從早弄到晚,精力仍然充沛。現在寫一個小時就要休息10分鐘,要不然腦子不管用了。

年輕的時候,什麼都想學,什麼都學得進去。現在只能學和經驗兼容的東西,不兼容的幾乎進不了腦子。比如手機上的應用,試過幾次,就是理解不了它的運行方式。

年輕時,有大把時間,沒有時間的概念;現在,每天都要計劃好,不能浪費每一分鐘。都奔四的人了。

以前寫程序只是工作。現在已經成為生命中的一部分,幾天不寫程序手就痒痒,心裡空蕩蕩的。

年輕時,一心想改變世界;現在是想抓緊時間改變世界,時日無多。但是內心知道自己是改變不了什麼世界的,能寫一些有意義的程序就行了。

我非常幸運,做了這個職業,我喜歡安靜,正好適合這種工作。也喜歡創造新東西,寫程序能隨心所欲的改造我的電腦世界,這也是當初沒深入研究黑客和破解的原因之一。

歲數越來越大,可能很快就不以寫程序為職業了,但是程序會一直寫下去,以後會多寫點自己覺得有意思的東西,真的很喜歡寫程序,喜歡手指在鍵盤上跳舞的感覺。

老碼農,既幸福又悲涼。不知不覺已經是2015年秋天了......


我覺的沒什麼,這就是一種工作而已。有一定的創造性,但是比其他行業也沒有高太多。生產工具比較先進而已。

此外可能需要有一定的知識積累,但人跟著工作走工作跟著行業走,歷來不都是如此么?只不過這個行業很新,國內外都是如此,人們比較好奇而已。

我覺得寫十年程序,做十年菜,看十年病本質上都沒有什麼區別。技藝肯定是比新手高一些,但能否到拔尖的程度,這個因人而異。


推薦閱讀:

「Talk is cheap. Show me the code」怎麼翻譯比較好?
程序員很悶騷么?
自學編程需要注意什麼?
程序員大牛與菜雞分別寫音樂播放器,播放同一首歌,音質會有差別嗎?
怎樣找到 IT 界的男朋友?

TAG:程序員 | 編程 | X 是種怎樣的體驗 |