如下部份內容選自知乎,侵權刪。javascript
看了不少人的問題和他們的困擾。諸如:php
有個朋友在和我討論編程學習的時候,提出了編程內功和編程外功的觀點。他認爲編程內功是全部語言通用的東西,外功是浮在表面上的那些具體的產品和工具。java
外功是使用語言和工具的一種技能,能夠一直在變化,能夠隨意換。內功就是編程理論和共性已經通用的知識,是一種能力。node
學好內功,用內功推進外功,之外功表現出來,能夠作到型變神不變,通吃全部的語言和工具。python
還有就是內功比外功重要,學好內功,任何新的語言和工具都能很快上手使用。外功是輔助工具來顯示內功實力,但卻更有現實的實踐意義。git
假設內功外功理論是合理的,那些能夠稱爲編程內功那些是編程外功?他們的關係是怎麼樣的?程序員
語言內部的共性正則表達式
字符串處理算法
IT外的相關知識:數據庫
等等,這些都是能夠各類語言內都能交叉使用的共同的知識。這些知識學好了,大部分語言均可以用到,也都能或多或少在項目和應用中體現出來。
編程的外功包括有:
等等
內功和外功的相互關係和做用
外功就是一個個的獨立工具的使用知識。其實就是一個和內功的具體實現,具體的外功是抽象內功的具體實現。使用這些工具,你能夠實踐你的內功。
因爲內功的通用性很高,因此好比說你在java中能實現的數據結構,你能夠馬上在C#中複製出同樣的數據結構,若是再學了一個新的語言,好比說python,ruby,也能很快實現出同樣的數據結構來。由於是相通的。 內功就是你在一個工具裏面能實現的東西,在另外的那個工具也能一樣實現的東西。
另外,內功學好了,學習新的語言或者工具會很快,這是由於,全部的編程語言和工具都有不少共同點,知識語法改了一改,固然還有一些特有的特性,是要你針對學的。因此假設當你尚未學習java或者C#的時候,你學java須要一年時間,學習C#也一樣須要一年時間,可是若是先學習了java後,在學習C#(或先學C#再學java), 兩個前後學習的時間總共只要1年2-3個月的時間,而不是2年。這是由於你用Java去學習語言的共性,修煉了編程的內功。
內功學好了,內功比外功重要,那要學習外功嗎? 要,固然要,還要好好的學。由於你是經過外功來學習內功的。沒有語言自己,那裏表現內功的載體呢。當你把一種語言做爲載體,把全部語言的共性都學完了,而後就關注特定語言的特性了,有了內功的基礎,這些外功很容易就啃完了,而後具體問題具體分析解決。好比要跨平臺的桌面程序,用Java;快速網站構建,用PHP;嵌入式編程,用C;網頁內編程用javascript; 而後還有不一樣語言之間的通訊,用json或者xml。
而那些工具,能夠輔助你的編程技巧,加速你的編程速度,提升你的編程質量,是你的編程駕輕就熟,享受編程帶來的樂趣。
總結
編程的學習和提升,應該重點在編程內功上。經過某個編程語言和工具,去學習研究編程的通用功能和共性上。這樣就算將來有新的語言和技術出現,也能很快的適應新的語言和技術了。
而外功的提升,是能夠大大提升本身的工做效率,它和內功相輔相成。外功做爲輔助和內功的載體,也是很重要的。畢竟它多是一個程序員吃飯看家領工資最具體的技術表現。