(轉)什么才算是真正的編程能力?

伯樂在線小編注:本文綜合整理自知乎同名問答帖。題主的問題補充如下:

還在讀書,也在實驗室?guī)兔ψ隽诵〇|西,自己也搭過幾個網站。在周圍人看來似乎好像我很厲害,做了那么多東西,但是我發(fā)現(xiàn)這些東西雖然是我做的,但是實際上我手把手自己寫的代碼卻并沒有多少,很多都是用開源的東西,我寫的代碼無非是把別人的東西整合下,類似于膠水一樣的工作。

我之前所認為的編程是全手動一行一行敲代碼,但是現(xiàn)在我發(fā)現(xiàn)哪怕是工程上,也有很多人是復制黏貼來解決問題的,并且提倡不要重復造輪子。

但是靠谷歌和復制別人的輪子,雖然我做出了很多東西,可是我并不覺得自己能力上有提升,倒是利用搜索引擎的能力的確提升了不少。而學校里另外一部分在搞ACM的人,他們每天都在刷題練算法,但單憑我個人的感受感覺他們似乎對工程上有些東西并不了解,或許算法的能力才算是實打實的編程能力?那”膠水”的能力和整合輪子的能力算不算編程能力呢?

所以我現(xiàn)在就很困惑,所謂的編程能力到底是什么,我該如何提升自己的編程能力?


Paste_Image.png

下面是 劉賀 的回復:(伯樂在線已征得同意)

非常好的一個問題。這可能是我在知乎見到過的問編程有關的問題中問得最好的一個了。我非常喜歡這個問題。

計算機科學有兩類根本問題。一類是理論:算法,數(shù)據(jù)結構,復雜度,機器學習,模式識別,等等等。一類是系統(tǒng):操作系統(tǒng),網絡系統(tǒng),分布式系統(tǒng),存儲系統(tǒng),游戲引擎,等等等等。

理論走的是深度,是在追問在給定的計算能力約束下如何把一個問題解決得更快更好。而系統(tǒng)走的是廣度,是在追問對于一個現(xiàn)實的需求如何在眾多的技術中設計出最多快好省的技術組合。

搞ACM的人,只練第一類。像你這樣的更偏向于第二類。其實挺難得的,但很可惜的是第二類能力沒有簡單高效的測量考察方法,不像算法和數(shù)據(jù)結構有ACM競賽,所以很多系統(tǒng)的苗子都因為缺少激勵和正確引導慢慢就消隱了。

所以比爾蓋茨才會說,看到現(xiàn)在學編程的人經常都把編程看作解各種腦筋急轉彎的問題,他覺得很遺憾。

做系統(tǒng),確實不提倡“重復發(fā)明輪子”。但注意,是不提倡“重復發(fā)明”,不是不提倡“重新制造”。恰恰相反的,我以為,系統(tǒng)的編程能力正體現(xiàn)在“重新制造”的能力。

能把已有的部件接起來,這很好。但當你恰好缺一種關鍵的膠水的時候,你能寫出來嗎?當一個已有的部件不完全符合你的需求的時候,你能改進它嗎?如果你用的部件中有bug,你能把它修好嗎?在網上繁多的類似功能的部件中,誰好誰壞?為什么?差別本質嗎?一個開源代碼庫,你能把它從一個語言翻譯到另一個語言嗎?從一個平臺移植到另一個平臺嗎?能準確估計自己翻譯和移植的過程需要多少時間嗎?能準確估計翻譯和移植之后性能是會有提升還是會有所下降嗎?

系統(tǒng)編程能力體現(xiàn)在把已有的代碼拿來并變成更好的代碼,體現(xiàn)在把沒用的代碼拿來并變成有用的代碼,體現(xiàn)在把一個做好的輪子拿來能畫出來輪子的設計藍圖,并用道理解釋出設計藍圖中哪些地方是關鍵的,哪些地方是次要的,哪些地方是不容觸碰的,哪些地方是還可以改進的。

如果你一點不懂理論,還是應該學點的。對于系統(tǒng)性能的設計上,算法和數(shù)據(jù)結構就像在自己手頭的錢一樣,它們不是萬能的,但不懂是萬萬不行的。

怎么提高系統(tǒng)編程能力呢?土辦法:多造輪子。就像學畫畫要畫雞蛋一樣,不是這世界上沒有人會畫雞蛋,但畫雞蛋能馴服手指,感受陰影線條和筆觸。所以,自己多寫點東西吧。寫個編譯器?渲染器?操作系統(tǒng)?web服務器?web瀏覽器?部件都一個個換成自己手寫的,然后和已有的現(xiàn)成部件比一比,看看誰的性能好,誰的易用性好?好在哪兒?差在哪兒?為什么?

更聰明一點的辦法:多拆輪子。多研究別人的代碼是怎么寫的。然而這個實踐起來經常很難。原因:大部分工業(yè)上用的輪子可能設計上的思想和技術是好的,都設計和制造過程都很爛,里面亂成一團,讓人乍一看毫無頭緒,導致其對新手來說非常難拆。這種狀況其實非常糟糕。所以,此辦法一般只對比較簡單的輪子好使,對于復雜的輪子,請量力而行。

輪子不好拆,其實是一個非常嚴重的問題。重復發(fā)明輪子固然是時間的浪費,但當輪子復雜而又不好拆的時候,尤其是原來造輪子的人已經不在場的時候,重新發(fā)明和建造輪子往往會成為無奈之下最好的選擇。這是為什么工業(yè)界在明知道重復發(fā)明/制造輪子非常不好的情況下還在不斷重復發(fā)明/制造輪子的根本原因。

程序本質是邏輯演繹的形式化表達,記載的是人類對這個世界的數(shù)字化理解。不能拆的輪子就像那一篇篇丟了曲譜的宋詞一樣,能讀,卻不能唱。

鄙人不才,正在自己研究怎么設計建造一種既好用又好拆的輪子。您沒那么幸運,恐怕是等不到鄙人的技術做出來并發(fā)揚光大了。在那之前,多造輪子,多拆好拆的小輪子,應該是提高編程能力最好的辦法了。

以上。嗯。

(文章屬個人觀點,與本人工作雇主無關。)

(小編轉注:http://zhuanlan.zhihu.com/shanhu 這是劉賀的專欄。)

下面是 mu mu 的回復:(伯樂在線已征得同意)

懂得取舍。

在有限的時間內,幾乎沒有系統(tǒng)可以做到完美。要快,要安全,高并發(fā),易擴展,效率高,容易讀,高內聚,低耦合…

大到一個網站,小到幾個class,工程師都要清楚,要取什么,舍什么,這并不是那么容易的事。我們都有自己的性格,有的求新,有的求穩(wěn),有的求快,但具體到一個項目時,知道如何取舍對這個項目最好,很重要。

學校里的作業(yè),沒人在意你是不是寫在一個大的main()里面,能跑就行。但做項目的時候,太多的東西要考慮,有時候,寧可簡單易讀,也不用快那么一點點;有時候,要做太多看不到的工作,卻絲毫馬虎不得;有時候,寫了不如不寫,留白也是一個學問。

曾經接手個項目,里面幾乎所有的class,每個都有interface,各種繼承,各種實現(xiàn),理由是靈活性高,易擴展。真的易擴展嗎?

我不知道。沒多久,客戶的需求就改了,各種拎不清的繼承實現(xiàn)都化為烏有,一大半要重寫。

問題在哪里?

不是編程不好,而是取舍的不好。在那個階段,為30%的需求,花200%的努力,追求設計的滴水不漏,卻舍棄快速實現(xiàn),取得反饋的時機,這就是失誤。需求總會變,客戶看到越早,修改越早,影響越小。

很聰明的人,也可能做出很難用的系統(tǒng),不一定是編程不好,可能是不愿,或不屑于取舍。不同的階段,不同的項目,要取舍的東西也不同。編程只是手段,目的是解決問題,能力高不高,要看問題解決的好不好。不在于使用了什么高端算法,或是復雜的框架。

懂得如何取舍并不容易,需要對問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 還在讀書,也在實驗室?guī)兔ψ隽诵〇|西,自己也搭過幾個網站。在周圍人看來似乎好像我很厲害,做了那么多東西,但是我發(fā)現(xiàn)這...
    鄭宏鑫閱讀 204評論 0 0
  • 轉載自什么才算是真正的編程能力?作者:IT程序獅 知乎上看到一題主的發(fā)問: 還在讀書,也在實驗室?guī)兔ψ隽诵〇|西,自...
    Super_鄧帥閱讀 203評論 0 1
  • 他長得還行吧,拾掇一下湊合能打五分。從穿衣打扮看起來,心智似乎不夠成熟,但成熟不成熟的,你要仔細觀察。人多不行,他...
    馬長安閱讀 1,287評論 0 1
  • 昨兒聽坐對面的同事感嘆:‘’明年我就本命年了,感覺好老噢!‘’其它同事附和著,'我們都過本命年好今年嘍。'我跟坐對...
    慎獨狼閱讀 133評論 0 1
  • 十年身處抑郁的地獄 我是一個即將奔三的女子,我曾長達十年時間肉體生存于這個世界,心靈卻在另外一個地獄中不斷掙扎。 ...
    Larry心靈園丁閱讀 649評論 10 8