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

編程能力是一種解決問(wèn)題的能力。如果問(wèn)題沒(méi)能被很好地解決,知道再多也沒(méi)用。

編程能力是一種運(yùn)用機(jī)器解決問(wèn)題的能力。首先是要判斷問(wèn)題在什么程度上可被機(jī)器解決,比如理論計(jì)算機(jī)科學(xué)會(huì)告訴我們什么可做、什么理論上不可做、什么理論上可做實(shí)踐上不可做。然后是讓機(jī)器更好地理解問(wèn)題,比如計(jì)算機(jī)都是(圖靈-馮諾依曼模型)等價(jià),但不同的問(wèn)題可能會(huì)適用不同的編程語(yǔ)言。再后是讓機(jī)器能更高效率地解決問(wèn)題,比如同樣的問(wèn)題可能會(huì)有效率差別巨大的算法。

編程能力是一種抽象問(wèn)題的能力。借用輪子是很好的辦法,省力省時(shí)間。今天任何軟件工程師都會(huì)有意無(wú)意地使用很多輪子,從操作系統(tǒng)編譯器數(shù)據(jù)庫(kù)網(wǎng)絡(luò)到算法數(shù)據(jù)結(jié)構(gòu)。想高效地借用輪子,就需要將問(wèn)題分解再分解,抽象再抽象。任何一個(gè)實(shí)用的系統(tǒng)(不包括教科書上的示例程序和簡(jiǎn)單的腳本程序)都需要進(jìn)行大量的分拆和組合。所以系統(tǒng)設(shè)計(jì)是編程能力里的高級(jí)技能,加合理的假設(shè)簡(jiǎn)化問(wèn)題尤其有難度,此處不展開討論。高手和新手的區(qū)別在于新手往往不知道輪子的適用范圍,而高手的手上輪子數(shù)量多且熟知各種輪子的差異,所以對(duì)不同的問(wèn)題可以輕松地找到合適的輪子,當(dāng)實(shí)在找不到合適的輪子時(shí)可以自己動(dòng)手改造現(xiàn)有的輪子。平時(shí)有時(shí)間拆裝和改造已有的輪子會(huì)對(duì)水平提升有較大幫助。當(dāng)然能知道怎樣快速在搜索引擎里搜出輪子也是一種能力。

編程能力是一種需要考慮擴(kuò)展性的能力。算法競(jìng)賽中的很多算法考慮的是單機(jī)的內(nèi)存算法,計(jì)算模型經(jīng)過(guò)高度抽象,在實(shí)踐中機(jī)器的模型更為復(fù)雜。比如單機(jī)的多級(jí)結(jié)構(gòu)帶來(lái)的各種時(shí)間空間復(fù)雜度的取舍平衡,多機(jī)網(wǎng)絡(luò)中如何能在提高單機(jī)性能外進(jìn)一步優(yōu)化整體性能。除了在機(jī)器端的擴(kuò)展,在程序員一端的擴(kuò)展也很重要。復(fù)雜的問(wèn)題和工程往往意味著團(tuán)隊(duì)協(xié)同以及更長(zhǎng)時(shí)間的開發(fā)維護(hù),團(tuán)隊(duì)分工和設(shè)計(jì)溝通這里暫且不論。舉個(gè)容易被忽視的例子,程序中的注釋。高手會(huì)更在意完整且表達(dá)清楚的注釋,因?yàn)檫@是寫給現(xiàn)在和未來(lái)的團(tuán)隊(duì)(包括自己和其他成員)看的,直接影響到長(zhǎng)期的整體開發(fā)維護(hù)效率。

編程能力是一種取舍的能力。局部的最優(yōu)解未必是全局的最優(yōu)解。如果一個(gè)美妙的解決方案需要將完工時(shí)間向后推遲一兩個(gè)月,需要考慮是否先使用平凡方案解決問(wèn)題,之后再進(jìn)行優(yōu)化。當(dāng)你的工作延后會(huì)阻礙別人的工作時(shí)尤其如此。發(fā)現(xiàn)一個(gè)絕妙的優(yōu)化方案時(shí)先想想這個(gè)優(yōu)化是否真的有價(jià)值,如果只是系統(tǒng)中很小的部分,那么不要為了追求心理滿足而花很多時(shí)間放一個(gè)漂亮的輪子上去(參考Amdahl定律)。

編程能力是一種預(yù)見未來(lái)的能力。目前的方案有哪些假設(shè)和局限性,在何種情形下會(huì)遇到問(wèn)題甚至崩潰。在未來(lái)出現(xiàn)問(wèn)題時(shí)問(wèn)題是否需要重新定義,系統(tǒng)是否需要重新設(shè)計(jì),代碼是否需要重構(gòu)或優(yōu)化等等都需要未雨綢繆。

編程能力是一種工程能力。無(wú)它,唯手熟爾。

編程能力是一種解決問(wèn)題的能力。如果問(wèn)題沒(méi)能被很好地解決,知道再多也沒(méi)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 是時(shí)候表演真正的技術(shù)了!!! 問(wèn)題:什么才算是真正的編程能力? 還在讀書,也在實(shí)驗(yàn)室?guī)兔ψ隽诵〇|西,自己也搭過(guò)幾個(gè)...
    神木驚蟄閱讀 233評(píng)論 1 1
  • 伯樂(lè)在線小編注:本文綜合整理自知乎同名問(wèn)答帖。題主的問(wèn)題補(bǔ)充如下: 還在讀書,也在實(shí)驗(yàn)室?guī)兔ψ隽诵〇|西,自己也搭過(guò)...
    cmlong_閱讀 142評(píng)論 0 0
  • 還在讀書,也在實(shí)驗(yàn)室?guī)兔ψ隽诵〇|西,自己也搭過(guò)幾個(gè)網(wǎng)站。在周圍人看來(lái)似乎好像我很厲害,做了那么多東西,但是我發(fā)現(xiàn)這...
    鄭宏鑫閱讀 207評(píng)論 0 0
  • 轉(zhuǎn)載自什么才算是真正的編程能力?作者:IT程序獅 知乎上看到一題主的發(fā)問(wèn): 還在讀書,也在實(shí)驗(yàn)室?guī)兔ψ隽诵〇|西,自...
    Super_鄧帥閱讀 206評(píng)論 0 1
  • 溫州夏記者閱讀 157評(píng)論 1 4