什麼纔算是真正的編程能力?

編程能力是一種解決問題的能力。若是問題沒能被很好地解決,知道再多也沒用。程序員

編程能力是一種運用機器解決問題的能力。首先是要判斷問題在什麼程度上可被機器解決,好比理論計算機科學會告訴咱們什麼可作、什麼理論上不可作、什麼理論上可作實踐上不可作。而後是讓機器更好地理解問題,好比計算機都是(圖靈-馮諾依曼模型)等價,但不一樣的問題可能會適用不一樣的編程語言。再後是讓機器能更高效率地解決問題,好比一樣的問題可能會有效率差異巨大的算法。
  
  編程能力是一種抽象問題的能力。借用輪子是很好的辦法,省力省時間。今天任何軟件工程師都會有意無心地使用不少輪子,從操做系統編譯器數據庫網絡到算法數據結構。想高效地借用輪子,就須要將問題分解再分解,抽象再抽象。任何一個實用的系統(不包括教科書上的示例程序和簡單的腳本程序)都須要進行大量的分拆和組合。因此係統設計是編程能力裏的高級技能,加合理的假設簡化問題尤爲有難度,此處不展開討論。高手和新手的區別在於新手每每不知道輪子的適用範圍,而高手的手上輪子數量多且熟知各類輪子的差別,因此對不一樣的問題能夠輕鬆地找到合適的輪子,當實在找不到合適的輪子時能夠本身動手改造現有的輪子。平時有時間拆裝和改造已有的輪子會對水平提高有較大幫助。固然能知道怎樣快速在搜索引擎裏搜出輪子也是一種能力。
  
  編程能力是一種須要考慮擴展性的能力。算法競賽中的不少算法考慮的是單機的內存算法,計算模型通過高度抽象,在實踐中機器的模型更爲複雜。好比單機的多級結構帶來的各類時間空間複雜度的取捨平衡,多機網絡中如何能在提升單機性能外進一步優化總體性能。除了在機器端的擴展,在程序員一端的擴展也很重要。複雜的問題和工程每每意味着團隊協同以及更長時間的開發維護,團隊分工和設計溝通這裏暫且不論。舉個容易被忽視的例子,程序中的註釋。高手會更在乎完整且表達清楚的註釋,由於這是寫給如今和將來的團隊(包括本身和其餘成員)看的,直接影響到長期的總體開發維護效率。
  
  編程能力是一種取捨的能力。局部的最優解未必是全局的最優解。若是一個美妙的解決方案須要將完工時間向後推遲一兩個月,須要考慮是否先使用平凡方案解決問題,以後再進行優化。當你的工做延後會阻礙別人的工做時尤爲如此。發現一個絕妙的優化方案時先想一想這個優化是否真的有價值,若是隻是系統中很小的部分,那麼不要爲了追求心理知足而花不少時間放一個漂亮的輪子上去(參考Amdahl定律)。
  
  編程能力是一種預見將來的能力。目前的方案有哪些假設和侷限性,在何種情形下會遇到問題甚至崩潰。在將來出現問題時問題是否須要從新定義,系統是否須要從新設計,代碼是否須要重構或優化等等都須要未雨綢繆。
  
  編程能力是一種工程能力。無它,惟手熟爾。
  
  編程能力是一種解決問題的能力。若是問題沒能被很好地解決,知道再多也沒用。
  
  編程能力是一種解決問題的能力。若是問題沒能被很好地解決,知道再多也沒用。算法

相關文章
相關標籤/搜索