徒手碼一千行以上代碼是一種怎樣的體驗?
在學C語言(非本專業),感覺看著代碼一行一行碼下來好爽啊。不知道徒手碼一千行以上的代碼是個什麼感覺呢?有人試過嗎?
一千行不是很多了,想清楚了再寫,思如泉湧,五指如飛,配上青軸的機械鍵盤,有種飛起來的感覺,自然是很爽的。
更爽的是,狂寫了4,5個小時,編譯一次通過,放進server就能跑,沒有bug,自己都不相信,好像戰神附體,無往不勝,激動地一拍桌子,站了起來,為之四顧,為之躊躇滿志。可惜無人關心,別人還是忙自己的事。
只好坐下來,skype上給老婆說,我可厲害了,寫了幾個小時,一個bug都沒有。
老婆說,好。代碼不都是徒手寫的么?1000行很容易達到的。07-08年春節前夕的時候,我們的客戶問我們能不能給他們做一個搜索,我沒有學過搜索,但是看過一些科普的文章,自己研究過一點思路。我事先知道Lucene,知道它是基於Java的。
我出門買了本Lucene in Action和Java語言的入門書,然後就回家過年了。春節假期7天,我女朋友和父母在打牌看電視,我在另外一個屋子,看這兩本書和寫一個基於Lucene的搜索系統,我設計了一個XML的出入協議,索引的導入格式用XML,我寫了一個Java版本的web server作為系統的底層,查詢用REST形式返回XML的結果,一個配置目錄裡面用配置文件設置查詢欄位,排序欄位,自帶索引整理,切換不同的查詢方法,只需要在url選擇不同的配置文件名即可,帶簡單日誌。
7天的時間,寫完了2000-3000行的代碼。然後節後就給我們的客戶上線測試,一啟用,就把它們原來的搜索速度從高峰的時候幾分鐘沒有結果,變成穩定在幾十毫秒內。他們的日搜索量因為用這套搜索,從日4000增至8000,後來增至10萬。
在他們搜索量20-30萬後,這套代碼才做了第一次大改進,性能提升到百萬級。後來我們接入了更多的客戶,這套代碼不斷改進,最高單機支撐2000萬次搜索。後來幾經改進,代碼增至1萬8000以上。後來,我就沒關注過行數了。
這套代碼發展出來的系統,曾經服務於,飯統網、大眾點評、FTChinese、六間房、盛大雲中書城,以及我們公司當年幾十個小客戶。日最高搜索在3000萬左右,應該至少完成了幾億次搜索。
(我職業生涯中寫過大小上百個業餘的side project,大多數沒有發布,大多數行數都在3000行以上。)
===========
既然有人點贊,再講一個故事。我們上海泰尼現在還沒倒閉,靠的是一套排版系統,我們從底層支持蘋果iBook Author的格式,這是一個非常複雜的打包格式,類似於網頁,但是有大量網頁不支持的排版格式和CSS3標準的東西。12年,我們公司快到窮途末路的時候,我突然有個瘋狂的主意,要做這個非常複雜的東西。但是我跟我們的主程,也就是現在的CTO老師 @陳勇輝 老師說了這個idea,這個豬頭聽不懂。
於是我在出差去做演講的三天路上,寫了一個原型,實現了一個XML DOM解析樹,一個簡易的CSS解析樹,寫了一個簡單的iBook Author的格式分析文檔,利用我分析出來的文件格式,寫了一個可以顯示某本iBook Author電子書一頁的信息的一個Demo,剛才查了下代碼庫,大概不到900多行。
交給主程看,給他講解思路和文件格式的細節。然後第二天,他看懂了,然後這個項目的具體代碼我就沒有參與過了。這個項目現在大概有2萬6000行左右。前後已經給公司賺了200萬左右。公司沒死因為這個項目。我今天晚上一邊看著電視,一邊刷知乎,還一邊斷斷續續地寫了300行的Go程序,是個協議格式解析,所以代碼有點多,如果用C++寫可能也有500-600行,如果我把整個協議都解析完肯定會超過1000行了。
說實話,沒什麼感覺,屬於日常小訓練。
大多普通人覺得跑個3000米要累吐血,對職業運動員來說,3000米不過是個熱身運動。
如果程序難度不高,而且全神貫注的話,一天2000+行也不會很困難,當然並不是2000行沒bug的代碼,以後調試排錯可能需要3-4倍的時間。
隨便搞點能用的東西就有這麼長
你現在的感覺就相當於小學一年級的學生在想:認識一千個漢字的人好厲害啊!
在一個晚上,
我的母親問我,
今天怎麼不開心。
我說在我的想像中,
有一個程序員,
一晚上碼字千行效率肯定棒,
整個github找遍所有的repo都沒有
她說將來會找到的
時間會給我答案
星期天我再次尋找依然沒有發現
一個月後我去了第二個網站
這裡的人們稱它為百度文庫
時間過的很快網頁還沒打開
我想我必須要離開
當我正要走時我看到了一個帖子
那就是我要的代碼王
回車 回車
在這虛無的代碼後面回車
回車 回車
在這最後的一行猛敲回車
Line 1000 }
寫代碼多不是什麼難事,一天寫1000行代碼只能說是入門,其實會給別人很多煩惱的,真正的高手一天能刪掉別人1000行代碼,這才是真本事
樓上的都好厲害。。我都是用鍵盤寫的。。你們都是徒手寫。。
給你們講個神人。
96年我上大二,看一個學長擼代碼。擼的是一個DOS下的圖標編輯器,1000多行C,一個多小時後完美運行。
這都不是重點,重點是這1000多行代碼……
所有變數都放全局!
命名全是a b c d e f...!!
最最關鍵的是
沒!有!任!何!縮!進!
此兄靠其強大的腦力,完全不顧任何編程規範,在一個多小時內強擼了1000多行完美運行的C代碼!
服!
…………
更新:
不縮進當然是不該提倡的,評論的兄弟不要較真啦。我寫這些只是突然想起這位學長。
學長人非常nice,而且極聰明。聰明到很多時候我請教他問題,我還沒說明白,他已經聽明白我要問什麼了。
編程方面學長給了我很多幫助,只是畢業後再沒見過。
祝好!徒手碼1000行代碼不是最厲害,徒眼幫別人debug1000行代碼才是最厲害,就列印出來,沒有電腦沒有機器。。。幾十頁A4紙裝訂。。。我為此還弄了一個函數介面——頁碼+行數的映射表。。。。然後自己為每個函數手寫注釋。。。
補充,最爽的不是徒手寫一千行,是把一千行改成一百行,這才是最爽的。
===========昏割線============
移動開發有些扯上web或者UI的隨隨便便都是千行啊(本人做的是Android)。
遊戲開發一不小心就千行了啊。
GUI一不小心就千行了啊。
熟練度一上去,碼千行一般幾個小時就能碼完。
如果是寫過類似的話,十多分鐘就有千行。比如寫個WebUtils或者一個帶RecyclerView之類的需要適配器的控制項的Activity什麼的。親身經歷。
寫完,不報錯就能跑,我會懷疑是不是有邏輯錯誤,然後拉上小夥伴們調試幾天才敢相信真的沒錯(親身經歷)。
報錯→debug→不報錯。這個過程一下來,我絕對不會懷疑,馬上git commit。。。然後給基友們說,又發布新版啦,增加balabala功能啦。然後享受他們仰望的眼神。偶爾在一兩天後會有基友來找我得意地反饋bug。
反正,寫完之後我會喝點水,打一局東方,然後大吼一聲,合上電腦,閉目養神兩分鐘。
感受,就一個字!
爽!!!!!!!!!
聲明,一千行不含xml。純Java,或者Kotlin,或者C,或者Ruby。0 0 被 @何欽堯喊來了。。
其實有很多答案說的很有道理,行數不代表什麼;以及寫那麼多代碼困難之處不在寫,而在於調試。
所以我的經驗就是,要徹底想清楚一個系統的完整的架構。可能是我比較弱,現在寫大作業之前一般都會有很長一段賢者模式,為的就是把一個個的坑在寫代碼之前想清楚;這樣不僅在之後調試起來非常簡單,而且也可以方便的對代碼進行修改。
不過這個方法還是有很多缺陷的,畢竟想的再多也不如親手寫一寫。。。(其實我就是懶剛入行的時候做 java 的 online erp 項目,業務邏輯部分經常就是一個幾千行。
後來做 troubleshooting ,發覺這種方式的坑了:出了 bug 代碼不好分析。當時的伺服器端調試還很原始,上千行的代碼,就是讀通了猜測運行時狀態還是會有問題。
後來強制團隊 TDD(Test Driven Development),發現他們代碼越寫越短了。因為他們要通過自動化測試必須清晰分割功能。
後來做架構師,看的框架越來越多,越發現解耦是一件多麼重要和美妙的事情。會想大學時學的這個概念,覺得很簡單,沒想到工作中要花幾年的時間去理解。。。
再後來做產品經理,團隊用一種叫做 Scrum 的敏捷方法。更短的代碼在對應不停迭代的需求(變化)中更體現出優勢。
總而言之,業務清晰的分層,測試驅動開發,使用框架,迭代開發等等,都是不斷減少代碼量的方式(迭代也許意味著更多開發工作量,但是發布的代碼不一定更多)。
而這些方法背後的意義其實並非在於減少 coder 的工作量 - 而在於更快,成本更低的生產健壯的軟體。減少軟體整個生命周期中的問題和維護成本。
編譯通過,僅僅是一個可能服務無數人很多年的軟體的步履蹣跚的第一步。
coder 說測試無 bug,僅僅是 troubleshooting 人員噩夢的開始(越難 troubleshooting 的問題,往往就是看似很合理的代碼和解決方案)。
跑一年沒問題,不意味著第三年不會冒出問題。
寫了個跑三年沒問題的代碼,不意味著需求不會在第四天就發生變化。
寫的短一些,其實是目光更長遠的表現。最終,也往往能在整個生命周期收穫更好的表現。
軟體開發不是腦體力上的勝負,需要更高的智慧和哲學。
這一行沒有銀彈,但是確實有許多需要糾正的錯誤認識。
比如代碼寫的越快越長越 nb。。。找到感覺了寫起來飛快,就跟樓上有人貼的海上鋼琴師的圖一個感覺,一天1000行還是可能的,如果感覺找不到,寫一行都覺得是shi...好幾天寫不出來....
不嚴謹地認為調試時間和連續寫代碼時間成指數關係增長。
徒手寫過3K行C++代碼,沒編譯、沒運行,調試時間大概是寫的時間的4倍吧……
別說調通了,就把編譯錯誤修完的一瞬間就已經有歡呼雀躍的感覺。
哎呀,可惜我沒一次、不中斷地、中間不測試不調試地寫 1000 行以上的代碼。
加起來的話,Patrisika 的本體就有這麼長,我上次重寫是在一星期內完成的,沒什麼特別的感覺——我做的時候是邊做邊測試的——除了後來發現靈異 bug 的時候,調試很蛋疼。
寫得多容易,寫得少難呀。
說的好像代碼行數多是個很光榮的事似的
C 我真沒寫過一千行以上的程序。
但是寫網頁,HTML、CSS、Javascript 啥的寫起來,一千行算個啥啊?寫個登陸交互都好幾百行了。記得在大二那會,自己還沒有買電腦,那會開設的有AS3.0這門課
最後結課,有一門課程設計,當時自己做的是一門類似於QQ截屏的小FLASH插件
因為沒電腦,自己把85%實現代碼全部寫在信紙上
來來回回折騰了半個月,最後用了20多張信紙
最後在去機房給老師檢查的時候,利用空隙完成了作業
推薦閱讀: