search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

你對自己真正的編程能力了解多少?

前言:我的朋友,在讀書的時候,就自己搭建過幾個網站,在當時同學之間算挺厲害的。但是有一天他告訴我,自己雖然做了很多東西,但是真正自己親手寫的代碼卻少之又少,大多數代碼差不多都是把別人的整合一下。而到了工作的時候,那些曾經以為編程全是手動一行一行敲代碼的想法,在靠一次次複製黏貼后就能解決問題的現實面前改變了。雖然依賴谷歌和複製別人的輪子可以做出很多東西,但是除了利用搜索引擎的能力提升以外,編程能力並沒有顯著的提高。而且這樣的現象使他產生了一個疑問,到底什麼樣的能力才算是真正的編程能力呢?

什麼是系統編程能力?

首先,我們知道,計算機科學有兩類根本問題:

①理論:演算法,數據結構,複雜度,機器學習,模式識別等。理論問題注重的是深度,它是對在給定的計算能力約束下如何更快更好解決問題的追問。

②系統:操作系統,網路系統,分散式系統,存儲系統,遊戲引擎等。系統注重的是廣度,它是對一個現實需求如何在眾多技術中設計出最多又快又好又省的技術組合的追問。

根據以上問題,主要是屬於系統編程能力這塊的問題,這類能力由於沒有簡單高效的考察方法,所以很多系統的苗子都因為缺少激勵和正確引導而隱沒。比爾蓋茨曾遺憾的表示,現在許多學習編程的人常把編程看作解各種腦筋急轉彎的問題。而其實做系統,不是讓你「重複發明輪子」,而是「重新製造輪子」才行。可以這麼說,系統的編程能力正體現在「重新製造」的能力上。

我們不妨問自己一些問題,當一個已有的部件不完全符合你的需求的時候,你能改進它嗎?如果你用的部件中有bug,你能把它修好嗎?在網上繁多的類似功能的部件中,誰好誰壞?為什麼?差別在哪?一個開源代碼庫,你能把它從一個語言翻譯到另一個語言嗎?從一個平台移植到另一個平台嗎?能準確估計自己翻譯和移植的過程需要多少時間嗎?能準確估計翻譯和移植之後性能是會提升還是會下降嗎?

總的來說,系統編程能力體現在把沒用的代碼變成有用的,把現有的代碼變得更好,體現在能根據一個做好的輪子畫出輪子的設計藍圖,並且解釋出設計藍圖中的關鍵所在,對於哪些是次要的,哪些是不容觸碰的,哪些是可以改進的都要瞭然於胸。如果你一點不懂理論,還是應該學點的。對於系統性能的設計上,不懂是絕對不行的。

怎麼提高系統編程能力呢?

①多造輪子

我們都知道,畫雞蛋和會畫雞蛋只是一字之差,但是差之毫厘可能就已失之千里,會畫雞蛋的人就是從多畫雞蛋開始的,本質上是馴服你的手指,感受陰影線條和筆觸。所以,自己多寫點代碼也是一個道理。當你把部件一個個都換成自己手寫,寫出個編譯器、渲染器、操作系統、web伺服器或者是web瀏覽器,然後再和現有的部件比一比優劣,注意,從性能到易用性,一定要仔細對比,發現自己的優點和不足,然後認真改進。

達芬奇雞蛋素描

②多拆輪子

雖然人們常說,多研究別人的代碼怎麼寫,但是實踐起來卻沒有那麼容易。原因是許多輪子的設計思想和技術都無可厚非,但是設計和製造過程卻雜亂無章,亂成一團,所以多研究別人代碼的前提是輪子相對簡單,如果輪子相當複雜,那就只好量力而行,淺嘗輒止了。題外再提一點,其實輪子不好拆是一個非常嚴重的問題。重複發明輪子固然是時間的浪費,但當輪子複雜而又不好拆的時候,尤其是原來造輪子的人已經不在場的時候,重新發明和建造輪子往往會成為無奈之下最好的選擇。

小結

程序本質是邏輯演繹的形式化表達,記載的是人類對這個世界的數字化理解。不能拆的輪子就像那一篇篇丟了曲譜的宋詞一樣,能讀,卻不能唱。以上內容僅代表個人觀點,歡迎大家各抒己見,談談自己對編程能力的看法。

文章答案來源:劉賀



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦