徒手碼一千行以上代碼是一種怎樣的體驗?

在學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多張信紙

最後在去機房給老師檢查的時候,利用空隙完成了作業


推薦閱讀:

如何系統地學習 C++ 語言?

TAG:編程 | 編程學習 |