寫十年的代碼是一種什么樣的體驗?
發現組織內有不少寫了十年代碼的工程師,作為一個寫了5年代碼的碼農,想知道寫十年的代碼是一種什么樣的體驗?
馬劍,軟件工程師
寫代碼20多年的工程師, 可以回答嗎?
0: 小學時期
設備:紅白游戲機 Laser-310
語言:BASIC語言
## 在紅白機上寫BASIC ##
我最早的編程是在紅白游戲機上, 我可不是寫FC游戲,我沒那么老:) 。 那是小學的時候買了一臺紅白游戲機,機電部46所研制的, 可以配一個鍵盤,就可以當電腦用了。
不記得了那時花了多少時間在這個玩具上, 主要是用BASIC寫各種小程序。那時這個東西沒有磁盤驅動器, 需要用錄音機把程序錄下來, (沒錯,就是磁帶錄音機)。 下次開機就可以用磁帶Load回來:)
從網上帖子(【私人博物館】游戲機篇-01:當年的黑科技國產紅白機)找到到了這個游戲機和鍵盤的照片:
游戲機配的鍵盤(我當時那個是黑色的):
用來連接錄音機的接口:
能記得當時寫的程序有:
通訊錄, 輸入姓名縮寫, 查找電話號碼。 把老爸的通訊錄全部輸入進去了。
隨機產生音符,起名為胡編之歌
用ascii字符打印動畫, 比用_ - ^ 等字符打印出快速移動的蟲子等等。。。。
當時我的輔導書就是從圖書館借來的譚浩強的《Basic語言結構化編程》。借來的圖:
## Laser-310 ##
還要提的是小學學校里有計算機課,用的是Laser-310. (知乎上有問答說這個:LASER310 是什么設備? - 科技)
計算機課上了幾次課之后就停課了,不過我還是經常找老師要鑰匙去玩。 Laser-310上主要就是Basic語言, 其他同學都不喜歡玩, 都圍著旁邊的那臺中華學習機,因為可以打游戲(挖金子)。
1:中學時期
設備:PC/AT、286
語言: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 是什么意思。
#p#
那時候很喜歡和一個同校的網友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年的時候,互聯網泡沫破碎了。這家公司很快轉型, 做企業和校園郵件服務。我最近驚奇的發現,這家公司還存在呢。
<待續>
白喬,資深感性碼農,中科院博士
70后老人,來自皖南山區純的農村娃,大學之后才有的編程經歷
受前面一個兄弟的啟發,截點圖說說自己的這段歷程,后面有時間再補充文字:)
1995年***次接觸到計算機編程,機械制造專業當然是ForTran了~~~依稀還記得***次上課前天晚上對床對著一張鍵盤圖狂練指法的樣子。。。
講解FORTRAN的是一個香氣襲人的美女老師,但FORTRAN這門課程確實惡心了我。。。如果要問那個時候的體驗恐怕也就是“枯燥”“心存恐懼”了吧?想想那些“缺省”“回車”“控制臺”,能不望而生畏才怪呢!
editor.exe是那時候最帥的編輯器了(此前一直用的一個http://ed.com程序):
1996年花錢參加了一個C語言培訓,從此發現了一個嶄新的世界!C語言太帥了啊!關鍵是,C語言還可以檢測到press any key,還可以settextcolor,甚至還可以initgraph哦~~~
我對交互型的東西比較感興趣,一開始模仿各種書籍上的代碼,嘗試著實現文本編輯器的一些功能(菜單、編輯、存取、光標),再后來直接跪拜在圖形編程,熟悉了鼠標編程、中文編程、定時器編程。
能體會到在DOS的窗口里出現鼠標箭頭光標的欣喜么??
能體會到在DOS的窗口里出現大中華的漢字的欣喜么??
能體會到在DOS的窗口里拖曳十字架畫圖的欣喜么(沒錯!模仿的AutoCAD,因為我是機械專業嘛)??
那個時候,我已經是系計算機編程大賽的一名積極分子,有一次獲準用系辦公室的一臺386(用來打印的)調試程序,當天晚上我直接拉上同學Y,一起編程弄了個通宵。。。
1997年接觸到面向對象編程,當時給自己定了一個任務,就是把原來實現的那一堆GUI組件,封裝成自己的Window、Text、Menu。。。也因此熟悉了OOP和Boraland C++:
1998年畢業設計用到了foxpro,然后外調我的c程序:
#p#
1999年,開始用上了vc5.0,后來一直用vc以及mfc很多年:
2000 開始接觸web編程,除了vbscript和flash,我發現了asp以及interdev:
2001年參加工作,開始接觸到java和jsp,那個時候沒有成形的MVC框架,所以很多類似框架的東東都是自己擼:
剛參加工作的那幾年確實很開心,沒事就逛逛水木BBS、一塌糊涂、CSDN。
2005年左右,發現java也有ide了,當然也免不了要弄spring,jQuery這些東西:
2014年搞spark轉道scala:
我想申明的是,我是一個感性的程序員,因此總是難免有點念舊,經常想起DOS時代的:
殺毒我們用KV:
更多的是這個:
依稀記得UCDOS:
老求的WPS(我不會告訴你我知道***密碼是^QIUBOJUN)
當然還有:
嗨!看帖的那位,說你呢!見到上古時期就著粗像素看H照片的前輩,咋能不點贊呢?!
This Ispan,God be with u...
晚上自己寫完代碼,看著躺在床上的老婆孩子。
心想:寫著吧,要不干啥去,除了堆幾個代碼,還有啥手藝?房貸還完再說吧
Milo Yip,游戲程序員、《游戲引擎架構》譯者
不知道全職工作前的算不算,這樣算我首十年大約在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 編程之類。
那十年的編程生涯算是很快樂的日子。少年輕狂,想寫什么就寫什么。現在相比就會較保守謹慎,可能是學過了太多規條,太多現實限制(例如跨平臺跨編譯器),太多自己的要求(例如性能之類),也怕寫出一些低級錯誤。
待續
開源哥,閉關修煉戒知乎
10 歲:單片機匯編
12 歲:VB
15 歲:C / C++
18 歲:Lisp
20 歲:Type Theory (哪里不對)
忘了說體驗了。。。體驗就是脖子疼。。。活生生疼的睡不著QwQ