什麼才算是真正的程式設計能力?

2021-09-20 01:18:49 字數 1340 閱讀 6631

程式設計能力是一種解決問題的能力。如果問題沒能被很好地解決,知道再多也沒用。

程式設計能力是一種運用機器解決問題的能力。首先是要判斷問題在什麼程度上可被機器解決,比如理論電腦科學會告訴我們什麼可做、什麼理論上不可做、什麼理論上可做實踐上不可做。然後是讓機器更好地理解問題,比如計算機都是(圖靈-馮諾依曼模型)等價,但不同的問題可能會適用不同的程式語言。再後是讓機器能更高效率地解決問題,比如同樣的問題可能會有效率差別巨大的演算法。

程式設計能力是一種抽象問題的能力。借用輪子是很好的辦法,省力省時間。今天任何軟體工程師都會有意無意地使用很多輪子,從作業系統編譯器資料庫網路到演算法資料結構。想高效地借用輪子,就需要將問題分解再分解,抽象再抽象。任何乙個實用的系統(不包括教科書上的示例程式和簡單的指令碼程式)都需要進行大量的分拆和組合。所以系統設計是程式設計能力裡的高階技能,加合理的假設簡化問題尤其有難度,此處不展開討論。高手和新手的區別在於新手往往不知道輪子的適用範圍,而高手的手上輪子數量多且熟知各種輪子的差異,所以對不同的問題可以輕鬆地找到合適的輪子,當實在找不到合適的輪子時可以自己動手改造現有的輪子。平時有時間拆裝和改造已有的輪子會對水平提公升有較大幫助。當然能知道怎樣快速在搜尋引擎裡搜出輪子也是一種能力。

程式設計能力是一種需要考慮擴充套件性的能力。演算法競賽中的很多演算法考慮的是單機的記憶體演算法,計算模型經過高度抽象,在實踐中機器的模型更為複雜。比如單機的多級結構帶來的各種時間空間複雜度的取捨平衡,多機網路中如何能在提高單機效能外進一步優化整體效能。除了在機器端的擴充套件,在程式設計師一端的擴充套件也很重要。複雜的問題和工程往往意味著團隊協同以及更長時間的開發維護,團隊分工和設計溝通這裡暫且不論。舉個容易被忽視的例子,程式中的注釋。高手會更在意完整且表達清楚的注釋,因為這是寫給現在和未來的團隊(包括自己和其他成員)看的,直接影響到長期的整體開發維護效率。

程式設計能力是一種取捨的能力。區域性的最優解未必是全域性的最優解。如果乙個美妙的解決方案需要將完工時間向後推遲一兩個月,需要考慮是否先使用平凡方案解決問題,之後再進行優化。當你的工作延後會阻礙別人的工作時尤其如此。發現乙個絕妙的優化方案時先想想這個優化是否真的有價值,如果只是系統中很小的部分,那麼不要為了追求心理滿足而花很多時間放乙個漂亮的輪子上去(參考amdahl定律)。

程式設計能力是一種預見未來的能力。目前的方案有哪些假設和侷限性,在何種情形下會遇到問題甚至崩潰。在未來出現問題時問題是否需要重新定義,系統是否需要重新設計,**是否需要重構或優化等等都需要未雨綢繆。

程式設計能力是一種工程能力。無它,唯手熟爾。

程式設計能力是一種解決問題的能力。如果問題沒能被很好地解決,知道再多也沒用。

什麼才算是真正的程式設計能力?

知乎上看到一題主的發問 還在讀書,也在實驗室幫忙做了些東西,自己也搭過幾個 在周圍人看來似乎好像我很厲害,做了那麼多東西,但是我發現這些東西雖然是我做的,但是實際上我手把手自己寫的 卻並沒有多少,很多都是用開源的東西,我寫的 無非是把別人的東西整合下,類似於膠水一樣的工作。我之前所認為的程式設計是全...

什麼才算是真正的程式設計能力

回答者1 電腦科學有兩類根本問題。一類是理論 演算法,資料結構,複雜度,機器學習,模式識別,等等等。一類是系統 作業系統,網路系統,分布式系統,儲存系統,遊戲引擎,等等等等。理論走的是深度,是在追問在給定的計算能力約束下如何把乙個問題解決得更快更好。而系統走的是廣度,是在追問對於乙個現實的需求如何在...

什麼才算是真正的程式設計能力?

電腦科學有兩類根本問題。一類是理論 演算法,資料結構,複雜度,機器學習,模式識別,等等等。一類是系統 作業系統,網路系統,分布式系統,儲存系統,遊戲引擎,等等等等。理論走的是深度,是在追問在給定的計算能力約束下如何把乙個問題解決得更快更好。而系統走的是廣度,是在追問對於乙個現實的需求如何在眾多的技術...