一個人開發一個項目是一種怎樣的體驗?

我做過好幾個單人項目,讀書時做過,後來自己開公司,前面一年多都是我一個人,白天忽悠客戶,晚上寫代碼。

代碼寫的很快,基本不用考慮還要給別人看的問題,自己的代碼我自己讀的很快,一個射頻卡驅動加應用層邏輯lib,我可能兩三天就擼完了可能,刷一個潔面展示下數據一個下午搞定。有一個文件系統比較複雜,我又不會寫,開始是這裡抄一點那裡抄一點,然後做profiling,折騰了三個多月,我以前沒寫過文件系統所以比較慢。

會不會遇到隱藏很深的bug?不會,這個主要靠隔離功能的本事和隨時打log,實在不行大片dump內存,寫過內核的應該很清楚一般我們都很少單步的,printk do everything,我只在第一個工作的公司用過單步。如果panic了或者oop,通過backtrace或者內存dump,大概迅速定位到哪個文件,否則就是你的代碼可追溯性不好啦。有很少的時候也會把棧踩壞,我基本沒有犯過這種錯誤,這樣的情況一般把內存dump出來一個字節一個字節對了,然後腦袋裡把operations放一遍想想哪裡踩了,或者在不同point dump下內存,一般很快對出來。我從沒把一個bug搞幾天搞不定的狀況,可能因為我的項目複雜度不行,也可能我隔離做得好。

因為可能有好多寄存器我沒用,我留空了代碼,後來坑自己這tmd是啥,還要回去翻芯片手冊。後來我再留空這種就直接把芯片手冊頁碼寫上。

我有半夜寫代碼,就是別人都走了,我一個人在那,一般一包芙蓉王可以撐到8點鐘,然後去公司下的酒店洗個澡睡覺。睡到12點再回公司。我是醫學院出來的,我知道抽菸不好,但是那些日子不抽菸真的寫不下去,因為睡覺太少了,後來我戒了。半夜安靜,效率會很高,我半夜時神經系統特別興奮,可能跟抽菸有關當我遇到問題時,我能把寫完把所有operation和內存變化都像放電影一樣放一遍,我白天就沒有這樣的本事。

後來我們公司有好多人了,他們要用我的代碼,新人看我的代碼,一臉嫌棄。我花了一個多禮拜,把我一年多寫的代碼變得可以看了。然後我又讓新來的重構,他總是重構出bug,因為我也不寫單元測試的,大概他不會像我一樣在腦袋裡回放內存的變化,也可能是我的代碼太難重構。然後我就讓他回退到以前了,他寫的項目就直接調用好了。後來我覺得有十幾萬行部分代碼還是蠻重要的,我就又半夜一邊抽芙蓉王一邊重構了一遍,抽象出一些普適性好點的框架,那時候我花了好多時間研究qt的source,qt的一些技術思路還是很屌的。我後來那次重構是很成功的,後來公司那個領域的代碼基本都是複用那部分代碼。我後來有寫了幾個framework,至少別人沒罵我,可能因為我是老大不好意思當面罵。嗯,作出很舒服的抽象其實還是蠻不容易的。

後面真的就是管理別人的代碼,review別人的代碼,我覺得我review的本事還是不錯的,我基本用眼能瞄出新人寫的大部分bug,協作的問題還真是,我開始不擅長的東西,我看了很多模式和軟件工程的東西,這個真是我的弱項,我以前工作單位用敏捷,可是我是極度嫌棄敏捷的,後來我們慢慢探索出了一條自己的快速交付軟件的辦法,接口設計還是需要啃幾本書的,其實如果我在大廠可能也不會思考這些東西,因為撕逼開會能搞定,有人罩你。因為在這邊,也許下面的人有人比我聰明,但是太多時候,我就是天花板,如果我很操蛋,可能要麼好人走了,要麼就是越來越渣,好在我們沒有越來越渣也沒有因為技術模式太差出現大規模離職,我覺得大概幾個項目對我影響很大,linux,因為讀的Linux代碼太多了不由自主會受到上面設計策略的影響,說實話linux代碼整個設計一般。netbsd,我覺得這個是工程典範。每次新人入職我都會push他去讀netbsd的代碼,我自己也願意幫助他們走讀幾個模塊,STL,sgi 的代碼刷過一遍,qt ,我在不知道怎麼抽象的時候不斷去臨摩qt咋辦的。還有萊昂氏的代碼,bsd上的協議棧。這些代碼都不是很大,所以很多真可以當文獻讀。soloris/Illumos可能也很優質,我是看Gregg那本書時知道soloris上其實有很多很有用的工具,比如鼎鼎大名的dtrace。

我常常覺得自己也是一個沒有受過正規訓練的人,所以特別怕耽誤下面的人,所以我們不做項目的時候都在翻來覆去操這幾個項目的代碼,討論別人是怎麼解偶的,怎麼劃分文件和模塊的,怎麼抽象的,把代碼當文獻是我們這樣的草幫保持不落後的辦法,那時候我們也會花錢請別人來講,一般講的都很操蛋,後來就不請了,因為有時候傳說的大佬,大公司的老司機只是環境依附者,離開他們公司的工具和環境,就變得無所適從,也有講的很好的,我們花了20萬請人,大概只有一兩萬是值得的。


分享到:


相關文章: