很簡單,老師不是專業程式設計師唄。
如果你真的寫過程式,那麽一定知道,寫程式有N個層次……
1、這個東西的原理是什麽
2、我該如何把它用程式碼表達出來
3、這個表達方式究竟對不對?能不能透過編譯?
4、哎呀,為什麽這行程式還有這麽多副作用?壞了壞了壞了……它完全不按我預想工作怎麽辦?
5、我就是參考書,所有語句在記憶體在寄存器在任何地方的任何副作用全都門清!
6、哎呀哎呀邊界值……這裏究竟該用>呢,還是>=呢?分割點這個邊界是寫成j+1呢,還是j-1?壞了!j是不是丟了啊同學們?
7、我才寫了兩行你給我報7K錯……這鬼畫符怎麽看?什麽時候C++裏面來了這麽多雙冒號這麽多<>>><><><<>?!
一般來說:
純看書能把1學好已經很不錯了;
想到2就必須多思考;
想到3就必須多上機;
想到4就必須把微機原理、作業系統原理等等融會貫通(不需要很深,但起碼得知道哪是哪);
想到5就得對編程癡迷,沒用又瘋又傻的經歷,怎麽可能把滿篇鬼畫符讀出肉味。
想到6反而得從書裏走出來,徹徹底底把自己的腦袋變成CPU,以至於見了程式碼無需實際執行靜態分析都能把它的整個執行過程看的通通透透……
想到7就得跳出課本窠臼,自發的跟蹤研讀新技術——沒錯,泛型之類「過新」的技術並不在教材範圍內,你必須有能力自己查資料自己教自己知識……
如果你想要在課堂上現場敲程式碼、敲完一遍過……那麽不到5甚至6基本上是不可能的。然而很遺憾,這水平哪怕專業程式設計師都不多見——我在知乎說自己編程,不超2000行一般都能0 error 0 warn 0 bug一遍過,多少人罵我吹牛。
對絕大多數人來說,一段程式碼寫完,編譯執行255個錯誤(第255個錯誤是錯誤太多無法繼續)才是正常現象;然後排錯一排五六個小時(往往總還是會有一兩個錯誤無論如何都找不到根源)……
等等……一節課是多少分鐘來著?
貼點數據。
根據這個數據可知:
google chrome每千行程式碼bug率為0.06;或者說平均每十萬行程式碼有6個bug;或者說平均每一萬行程式碼有0.6個bug。
Firefox的程式碼質素要更好一些,千行bug率僅為0.05;也就是說平均每兩萬行程式碼會有一個bug。
python千行程式碼bug率為0.003,一百萬行程式碼有3個bug,或者33萬行程式碼出一個bug。
ruby千行bug率為0.08。
PHP千行bug率為0.03——剛好比python差了十倍。寫的真爛,三萬三千行程式碼就有一個bug。
django的bug率為0.007,比python程式碼質素差了不少,十幾萬行程式碼就有一個bug。
ruby on rails的bug率為0.05。
總結起來就是,這些業界支柱級的開源專案,其每千行程式碼的bug數目介於0.003到0.08之間;或者說,平均每一萬兩千五百行程式碼到三十萬行程式碼會出一個bug。
再看看這個,看看你們能不能被嚇死:
>>industry average bugs per 1000 lines of code at 15-50 and Microsoft released c...
業界平均每1000行程式碼有15到50個bug;微軟released程式碼平均1000行有0.5個bug——而NASA的程式碼,50萬行0bug!
看看這個數據,看看這些業界頂尖程式設計師的程式碼質素。
現在,看看我那可憐巴巴的、2000行程式碼0bug的記錄,您覺得我是「程式碼質素真好」呢,還是「2000行無bug也值得出來吹」?
看著業界頂級程式設計師們的水平,我還覺得自己這兩下子不夠看呢;你們居然覺得是吹?
是我對自己要求太高呢,還是你們眼界太狹隘?