(27)技術人員的內功和外功

如下部份內容選自知乎,侵權刪。javascript

看了不少人的問題和他們的困擾。諸如:php

  • 新技術不斷出現,舊技術不斷淘汰,沒法跟上新技術的步伐或擔憂學習的技術會被淘汰
  • 學習那種語言比較有前途
  • 那種語言比較好,不容易被淘汰
  • 已經學了這個語言,要不要再學那個語言
  • 等等諸如此類的問題。
  • 其實電腦編程語言的世界裏面是有編程語言的共性和通用的東西。固然每一個語言也有本身的特性。

 有個朋友在和我討論編程學習的時候,提出了編程內功和編程外功的觀點。他認爲編程內功是全部語言通用的東西,外功是浮在表面上的那些具體的產品和工具。java

 外功是使用語言和工具的一種技能,能夠一直在變化,能夠隨意換。內功就是編程理論和共性已經通用的知識,是一種能力。node

 學好內功,用內功推進外功,之外功表現出來,能夠作到型變神不變,通吃全部的語言和工具。python

 還有就是內功比外功重要,學好內功,任何新的語言和工具都能很快上手使用。外功是輔助工具來顯示內功實力,但卻更有現實的實踐意義。git

假設內功外功理論是合理的,那些能夠稱爲編程內功那些是編程外功?他們的關係是怎麼樣的?程序員

 

做者:caoglish
連接:https://www.zhihu.com/question/22471978/answer/21468471
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

本身認爲的編程內功有:

編程通用性的知識
  • 算法+數據結構
  • 編譯原理
  • 設計模式
  • 重構
  • 性能優化
  • 面向對象編程
  • 數據庫
  • 抽象化

語言內部的共性正則表達式

     字符串處理算法

  • 正則表達式
  • 變量與常量
  • 控制語句if-else
  • 循環
  • 函數/方法
  • 類/對象/接口
  • 遞歸
  • 哈希表
  • 數組
還有工具類的內功:
  • 構建工具 (通用知識)
  • 單元測試 (通用知識)
  • 依賴包管理 (通用知識)
  • MVC 框架 (通用知識)
  • 代碼質量檢測 (通用知識)
  • JSON 和 XML 設計 (通用知識)
  • 代碼版本控制 (通用知識)   git  svn  cvs等

IT外的相關知識:數據庫

  • 數學(離散數學,幾何學)
  • 物理
  • 圖形處理
  • 圖形/UI設計

等等,這些都是能夠各類語言內都能交叉使用的共同的知識。這些知識學好了,大部分語言均可以用到,也都能或多或少在項目和應用中體現出來。


編程的外功包括有:

  • 各類編程語言包括C++,javascript,java,php,C#,perl,python等
  • 各類編程環境,.NET, WAMP/LAMP,node.js 等
  • 各類IDE和編輯器,notepad++,vim,Visual Studio,Sublime等
  • 各類快捷鍵,
  • 各類包依賴管理器,npm,composer,Nuget
  • 各類版本管理器:git,svn,cvs
  • 各類單元測試工具
  • 各類構建工具
  • 各類MVC框架

等等



內功和外功的相互關係和做用

外功就是一個個的獨立工具的使用知識。其實就是一個和內功的具體實現,具體的外功是抽象內功的具體實現。使用這些工具,你能夠實踐你的內功。


因爲內功的通用性很高,因此好比說你在java中能實現的數據結構,你能夠馬上在C#中複製出同樣的數據結構,若是再學了一個新的語言,好比說python,ruby,也能很快實現出同樣的數據結構來。由於是相通的。 內功就是你在一個工具裏面能實現的東西,在另外的那個工具也能一樣實現的東西。


另外,內功學好了,學習新的語言或者工具會很快,這是由於,全部的編程語言和工具都有不少共同點,知識語法改了一改,固然還有一些特有的特性,是要你針對學的。因此假設當你尚未學習java或者C#的時候,你學java須要一年時間,學習C#也一樣須要一年時間,可是若是先學習了java後,在學習C#(或先學C#再學java), 兩個前後學習的時間總共只要1年2-3個月的時間,而不是2年。這是由於你用Java去學習語言的共性,修煉了編程的內功。


內功學好了,內功比外功重要,那要學習外功嗎? 要,固然要,還要好好的學。由於你是經過外功來學習內功的。沒有語言自己,那裏表現內功的載體呢。當你把一種語言做爲載體,把全部語言的共性都學完了,而後就關注特定語言的特性了,有了內功的基礎,這些外功很容易就啃完了,而後具體問題具體分析解決。好比要跨平臺的桌面程序,用Java;快速網站構建,用PHP;嵌入式編程,用C;網頁內編程用javascript; 而後還有不一樣語言之間的通訊,用json或者xml。


而那些工具,能夠輔助你的編程技巧,加速你的編程速度,提升你的編程質量,是你的編程駕輕就熟,享受編程帶來的樂趣。


總結

編程的學習和提升,應該重點在編程內功上。經過某個編程語言和工具,去學習研究編程的通用功能和共性上。這樣就算將來有新的語言和技術出現,也能很快的適應新的語言和技術了。


而外功的提升,是能夠大大提升本身的工做效率,它和內功相輔相成。外功做爲輔助和內功的載體,也是很重要的。畢竟它多是一個程序員吃飯看家領工資最具體的技術表現。

相關文章
相關標籤/搜索