4個月寫了4萬行iOS代碼,算多還是少呢?

感謝各位的回復。

這問題原本只是想請大家幫忙評估一下工作量或者工作強度。謝謝大家的參與。


好吧,為了你這個問題,我專門寫了一篇文章,歡迎移步去看

從代碼行數是否可以評估一個人的工作成績說起——談抽象結構和開發流程

如果你不是進行非常特殊的項目,或者說你技術非常牛的話,我會認為這可能說明你的代碼質量太差。Objective-C是一種非常高級的語言,Cocoa是一個非常完善的框架,用這兩者寫代碼,代碼應該很簡潔。

我們在做的一個項目,是非常複雜的交互排版系統,支持各種文字繞排效果、視頻、Keynote、各種交互,等等等等,代碼行數也才2萬行。當然這需要了解你的具體情況才能準確評估你的代碼是好是壞。如果你在做一個很複雜的項目,比如說,做App的話,各種不同的窗口很多,加入你有1000個不同的窗口,那麼代碼多點也可以理解。再或者你實現了某種複雜的通訊協議,代碼多點也正常。

代碼不是一個完美的評估項目的標準。以前有一個故事是說,項目經理用代碼行數來衡量工作量。結果程序員就開始增加代碼裡面的空行,本來函數結果會有一個空行,現在放兩個。再後來,有個程序員寫了一個編譯腳本,每次編譯前在代碼後面就自動加一個空行,這樣有時候就算什麼正事兒都不做,光是編譯幾次,自己的日工作量就可以達標。這些都還是簡單的,真的要糊弄人的話,讓代碼變長的方法很多,比如,可以把一個資源文件,比如圖片,轉換成一個常量數組,那代碼尺寸膨脹的可以想多快就有多快。

但是更多的時候,代碼的無序膨脹就是代碼編寫習慣不好,也沒有經過專業的訓練。很多年前,我在某公司諮詢的時候,見過這樣的PHP代碼。一個頁面幾千行,沒有任何函數關係,一以貫之。我當時就跟客戶的程序員詢問他的寫代碼習慣,他就說按照邏輯一句一句寫,遇到類似的邏輯就複製粘貼,這樣代碼當然就越來越多。我就問他有沒有覺得這樣寫代碼很累,他說一點都不累。然後我問他,當代碼出了問題,改起來容易么。他就快哭了。然後,我就教他怎麼,去把重複的代碼凝結成函數,抽取結構和參數,提高復用級別。

這部分聽起來很簡單,但是實際上,這是一個極端的例子而已,大多數從業者可能知道怎麼構成函數,但是在代碼裡面,仍舊是復用級別太低。也許你是用面向對象的方法去編程,但是基本的邏輯是一樣的。

那就是重複的代碼,一定要被合併成函數,或者是類的方法。這樣首先是節約代碼,但是更重要是,結構開始展現,從徹底的麵條代碼變成有條理,有結構的代碼。人的認知能力是有限的,記憶能力是有限的,屏幕尺寸也是有限的。當你把幾百行麵條代碼變成,幾個函數以後,首先,你用來理解代碼的單元變化了,從大邏輯上,你可以把每個函數當作黑盒子,總體結構就變成,調用幾個函數了。然後當發現系統有問題,且你懷疑出在某個函數內的時候,你可以只分析這個函數的輸入輸出,就可以定位問題是否是在這個函數內。確定後,你修改和去理解的難度也大大降低。

以前有一個原則,叫做重複兩次的代碼塊,必須函數化。一個函數盡量在幾十行內。不見得非要100%的嚴格執行,但是建議認真體會,時刻反思。

寫代碼的過程應該是,先寫厚,然後再寫薄。寫一段時間就反思一下,實現的結構是否合理,是不是太過冗餘。當你的代碼總是能保持一定的結構和復用程度以後,代碼行數就會是項目規模的良好評估參數了。多一行,就說明邏輯確實複雜了一層。如果形成這樣的習慣以後,隨著代碼量的增長,你的功力自然會加深。

其實寫程序,就是一連串邏輯,你可以抽象他們,也可以具象他們,在看全局的時候抽象,可以幫你思考問題,看清big picture,可以理清頭緒。當做具體實現的時候,你可以回到具體的細節上,但是,有了全局的抽象結構,你可以只關心一個局部的細節。

剛才我和我們公司主程在商量新產品的開發步驟,我跟他回憶我們之前開發這個2萬多行交互排版系統。我說,如果我們一開始,一個模塊一個模塊的從頭做起,一步一步做精,那麼也許我們做幾年才能做完。但是實際上我們是先把每個模塊都定義好,實現了一個空架子,然後一點一點完善。這樣有幾個好處,第一,這東西是可以持續集成,邊開發可以邊測試整體效果,可以不段的改進,不需要瞎子摸象。然而,我們實際上,從始至終可以掌握進度,可以看清輕重緩急。這樣,這個項目才可為,否則就完全不可控。

當你能順暢的切換你的抽象層次,你其實就明白了什麼是架構。


瀉藥,好多啊!我大概這輩子都沒寫過這麼多代碼!

-----------------------------------

不是高級黑。不清楚情況,為什麼要黑別人?

難道因為我自己寫不出來,就認為人家也寫不出來?

沒有任何證據,憑什麼認為人家的代碼質量低?

總不能因為自己考試不及格,就一口咬定人家得滿分的是作弊的吧?

本來我不想回答這個問題的,後來看到很多答案不服氣,所以我過來說了一句很真誠的話,力挺題主。

我反正做不到,我最高產的時候是剛畢業的時候能夠一天寫一千行代碼(語法分析器),非常非常累,但是只做了一兩天就做不下去了。但是寫這麼多是好還是不好,我的能力是不是不如題主,這些我覺得都沒必要討論,因為題主只是問:多還是少?討論別的都是跑題。而且沒有足夠的信息,幹嘛要做這種判斷?

------------------------------------

就這個問題來說,我的回答很明確:多,非常多!都已經多到讓很多答題者嫉妒的程度了!


厲害。再花4個月,把這4萬行變成1萬行。


4個月4萬行,平均1個月1萬行,每個月22個工作日,一天將近500行,如果這500行是業務相關的代碼(不包括單元測試代碼、從別處拷貝過來的代碼),那工作量算是很大的,因為我幾乎每天都在寫代碼(包括雙休日)、各種代碼,平均下來也不過300多行而已。我寫一個UIScrollView,設想用戶操作、設計類方法、編碼、測試,也要一天,而代碼不過300多行。如果一個程序員一天平均500行,我覺得可能是要麼是全部是getter/setter的那種,要麼是那種一氣呵成全部不用測試的編程神童。

BTW,說一個故事,有一個在微軟工作的哥們說IE代碼有1000多萬行,看起來數字很好看,不過造成的後果是,現在大家都不敢去動它。


[圖]解放軍美女網路尖兵:90餘晝夜寫代碼40多萬行_cnBeta 人物_cnBeta.COM

我想到了這個~抱歉~


4個月就寫了「4萬行代碼」這五個字,你可真夠懶的。


人月神話上說程序員的工作效率大概是10行代碼/天:Mythical man month : 10 lines per developer day。

btw: 這可真是一個火藥桶式的問題呀!


不要臉的來回復一個

不管怎麼說我覺得樓主是好樣的。我越來越覺得,程序員大概分兩種,一種是能寫代碼的,一種是能寫一點點代碼但自己沒辦法從零開始做項目的,樓主明顯屬於前一種,能單開一個項目,寫出東西來能跑能賣錢就夠了,很多程序員做不到。樓主四個月能做這麼多東西,每個月 10k 的代碼量有類似經歷的人應該也是有,知道這是怎樣的強度,樓主能扛過來說明技術功底牛逼,工作態度堅決。寫程序又不是真的複製粘貼就能做完的,40k 的代碼量帶來的複雜度,樓主能在規定時間內做完就是牛逼。 另外樓主做過 linux 運維開發,現在做 iOS 開發也完全沒問題,說明樓主也不是一輩子啃著一門技術不放的,學習能力強,言語之間對自己的項目充滿自豪。作為程序員我希望和這樣的人一起工作。

只是我個人認為,以代碼行數作為成績顯得非常外行,非常掉價。除此以外我都想不出來能讓一個程序員更迅速掉價的方法了。如果有一個人當面跟我講他最近寫了多少行代碼,我第一反應就是呵呵,對他印象會掉無數個檔次。我說不出這是什麼原因,但是從上面的答案和其他問題我感覺很多人都有類似的想法。我大概可以理解樓主發這個問題是什麼思路,但是希望樓主在現實生活中真的不要以"代碼行數"作為成績。你做的那麼多東西,各種技術細節各種遇到的有趣問題,調試經歷都可以拿來講而且很叼,為什麼非要拿這麼不能顯示你牛逼之處的地方拿來講。

看到這個我想起一個稍微沾點邊的事情。如果經常關心 Minecraft 的會知道,Minecraft 的作者 Notch 在網上,特別是各種外國"技術論壇"經常會被人說是一個「非常糟糕的程序員」,說他寫 Java 不用 getter/setter,OpenGL 不用現代的方法,class hierarchy 不優雅,不用現成的序列化格式自己亂搞等等等等。

卧槽,Notch 自己單一個人做了一個帶多人聯機,隨機地圖生成的 3D 遊戲,賣了他媽上千萬美元。這特么還有人說他不是一個牛逼的程序員,只能呵呵以對。只能說程序員或者技術人員之間,要讓別人認可你真的很難,因為每個人心裡總是能找出些邊邊角角的地方說服自己,自己總是最牛逼的。


數量上已經很厲害了

至少也不會不飽和,如果說要有多飽和那就是行數以外的事情了


4個月4萬行,假設你6x12工作,每小時138行+提交。

從碼字員角度,看,真少。

但根據我10年來當工程師的經驗(我自認是3流程序員,不過還好我的所有leader都覺得我還過得去),每小時100+代碼提交(假設這都是業相關代碼,而且是你手寫的)是非常厲害的。

因為在實際工作中,你面臨著業務需求的變更與明晰、技術方案的研發與明晰,演算法的理解和實現,折騰開發環境、處理異常事物、高頻調整重構代碼、必要文檔的編寫,與團隊的溝通,諸此種種,全是時間大塊的佔用。

從工程師角度看,真多。

兄弟,你很棒。

當然,無論是管理者還是程序員自己,企圖用代碼行數來做kpi,都是愚蠢的選擇。你的一行代碼能產生多少價值才是關鍵。


看你工作時間分配吧。新手時期我也這麼猛過,但是寫多了維護多了現在的按行數算只有新手時期的1/3不到。主要是時間分配,更多的時間花在查資料和思考上面,寫代碼和調試的時間只有1/3的時間不到。現在要實現同樣的功能,我可能會花上多一倍的時間,只用一半左右的代碼來實現。但代碼結構,代碼封裝更好,更利於復用。當然我算不上高手,只是給你個參考。


再問個有關,1晚上寫了200頁PPT的問題就更好了


如果這4萬行代碼,幾乎沒重複代碼,那你寫的真是夠多了!


問:代碼長度不夠怎麼辦?

答:多按回車。


只看提交記錄的話,之前十個月寫了23w++。後來空窗一個月,這個月又寫了5w++的代碼。這其中都有一些side project。

無他,工作量大。

我不同意說代碼寫到這個程度肯定是質量太差,如果你做的App總共有20個左右不同的頁面,還有幾十個API,以及一套複雜實時通訊協議,再加上對前人的重構,我覺得這個代碼量還差不多的。


最終產品能否靠得住是評判的標準,如果你稍後還得花8個月添坑,那就是造孽


我是6個月差不多4W行代碼,同事的代碼量是我的一半


前段時間一周內緊急寫了上萬行代碼,業務代碼超過5000行,然後花了三周去填坑


看了樓主的自辯,如果是結構優良的代碼的話,我只能說樓主很了不起。如果能給我我們看看成果的話就沒這麼多是非了。


一周每天專心寫碼4小時,每周5天,基本2k行,包含單元測試;思考的時間遠遠超過寫代碼的時間。


推薦閱讀:

在Android開發的過程中,有哪些坑是值得你放在checklist中警示自己的?
Android studio的工程默認繼承AppcompatActivity類和Activity不同?
2016 年第一季度,Android 有什麼讓人興奮的新技術出現嗎?
如何評價OPPO R9S升級後標識錯誤的Android版本號事件?
如何評價 Android M?

TAG:iOS開發 | Android開發 |