(27)技术人员的内功和外功
以下部分內(nèi)容選自知乎,侵權(quán)刪。
看了很多人的問題和他們的困擾。諸如:
新技術(shù)不斷出現(xiàn),舊技術(shù)不斷淘汰,無法跟上新技術(shù)的步伐或擔(dān)心學(xué)習(xí)的技術(shù)會被淘汰
學(xué)習(xí)那種語言比較有前途
那種語言比較好,不容易被淘汰
已經(jīng)學(xué)了這個語言,要不要再學(xué)那個語言
等等諸如此類的問題。
其實電腦編程語言的世界里面是有編程語言的共性和通用的東西。當(dāng)然每個語言也有自己的特性。
有個朋友在和我討論編程學(xué)習(xí)的時候,提出了編程內(nèi)功和編程外功的觀點。他認(rèn)為編程內(nèi)功是所有語言通用的東西,外功是浮在表面上的那些具體的產(chǎn)品和工具。
外功是使用語言和工具的一種技能,可以一直在變化,可以隨意換。內(nèi)功就是編程理論和共性已經(jīng)通用的知識,是一種能力。
學(xué)好內(nèi)功,用內(nèi)功推動外功,以外功表現(xiàn)出來,可以做到型變神不變,通吃所有的語言和工具。
還有就是內(nèi)功比外功重要,學(xué)好內(nèi)功,任何新的語言和工具都能很快上手使用。外功是輔助工具來顯示內(nèi)功實力,但卻更有現(xiàn)實的實踐意義。
假設(shè)內(nèi)功外功理論是合理的,那些可以稱為編程內(nèi)功那些是編程外功?他們的關(guān)系是怎么樣的?
作者:caoglish
鏈接:https://www.zhihu.com/question/22471978/answer/21468471
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
自己認(rèn)為的編程內(nèi)功有:
編程通用性的知識
算法+數(shù)據(jù)結(jié)構(gòu)
編譯原理
設(shè)計模式
重構(gòu)
性能優(yōu)化
面向?qū)ο缶幊?br />
數(shù)據(jù)庫
抽象化
語言內(nèi)部的共性
字符串處理
正則表達(dá)式
變量與常量
控制語句if-else
循環(huán)
函數(shù)/方法
類/對象/接口
遞歸
哈希表
數(shù)組
還有工具類的內(nèi)功:
構(gòu)建工具 (通用知識)
單元測試 (通用知識)
依賴包管理 (通用知識)
MVC 框架 (通用知識)
代碼質(zhì)量檢測 (通用知識)
JSON 和 XML 設(shè)計 (通用知識)
代碼版本控制 (通用知識) git svn cvs等
IT外的相關(guān)知識:
數(shù)學(xué)(離散數(shù)學(xué),幾何學(xué))
物理
圖形處理
圖形/UI設(shè)計
等等,這些都是可以各種語言內(nèi)都能交叉使用的共同的知識。這些知識學(xué)好了,大部分語言都可以用到,也都能或多或少在項目和應(yīng)用中體現(xiàn)出來。
編程的外功包括有:
各種編程語言包括C++,javascript,java,php,C#,perl,python等
各種編程環(huán)境,.NET, WAMP/LAMP,node.js 等
各種IDE和編輯器,notepad++,vim,Visual Studio,Sublime等
各種快捷鍵,
各種包依賴管理器,npm,composer,Nuget
各種版本管理器:git,svn,cvs
各種單元測試工具
各種構(gòu)建工具
各種MVC框架
等等
內(nèi)功和外功的相互關(guān)系和作用
外功就是一個個的獨立工具的使用知識。其實就是一個和內(nèi)功的具體實現(xiàn),具體的外功是抽象內(nèi)功的具體實現(xiàn)。使用這些工具,你可以實踐你的內(nèi)功。
由于內(nèi)功的通用性很高,所以比如說你在java中能實現(xiàn)的數(shù)據(jù)結(jié)構(gòu),你可以立刻在C#中復(fù)制出一樣的數(shù)據(jù)結(jié)構(gòu),如果再學(xué)了一個新的語言,比如說python,ruby,也能很快實現(xiàn)出一樣的數(shù)據(jù)結(jié)構(gòu)來。因為是相通的。 內(nèi)功就是你在一個工具里面能實現(xiàn)的東西,在另外的那個工具也能同樣實現(xiàn)的東西。
另外,內(nèi)功學(xué)好了,學(xué)習(xí)新的語言或者工具會很快,這是因為,所有的編程語言和工具都有很多共同點,知識語法改了一改,當(dāng)然還有一些特有的特性,是要你針對學(xué)的。所以假設(shè)當(dāng)你還沒有學(xué)習(xí)java或者C#的時候,你學(xué)java需要一年時間,學(xué)習(xí)C#也同樣需要一年時間,但是如果先學(xué)習(xí)了java后,在學(xué)習(xí)C#(或先學(xué)C#再學(xué)java), 兩個先后學(xué)習(xí)的時間總共只要1年2-3個月的時間,而不是2年。這是因為你用Java去學(xué)習(xí)語言的共性,修煉了編程的內(nèi)功。
內(nèi)功學(xué)好了,內(nèi)功比外功重要,那要學(xué)習(xí)外功嗎? 要,當(dāng)然要,還要好好的學(xué)。因為你是通過外功來學(xué)習(xí)內(nèi)功的。沒有語言本身,那里表現(xiàn)內(nèi)功的載體呢。當(dāng)你把一種語言作為載體,把所有語言的共性都學(xué)完了,然后就關(guān)注特定語言的特性了,有了內(nèi)功的基礎(chǔ),這些外功很容易就啃完了,然后具體問題具體分析解決。比如要跨平臺的桌面程序,用Java;快速網(wǎng)站構(gòu)建,用PHP;嵌入式編程,用C;網(wǎng)頁內(nèi)編程用javascript; 然后還有不同語言之間的通信,用json或者xml。
而那些工具,可以輔助你的編程技巧,加速你的編程速度,提高你的編程質(zhì)量,是你的編程得心應(yīng)手,享受編程帶來的樂趣。
總結(jié)
編程的學(xué)習(xí)和提高,應(yīng)該重點在編程內(nèi)功上。通過某個編程語言和工具,去學(xué)習(xí)研究編程的通用功能和共性上。這樣就算未來有新的語言和技術(shù)出現(xiàn),也能很快的適應(yīng)新的語言和技術(shù)了。
而外功的提高,是可以大大提高自己的工作效率,它和內(nèi)功相輔相成。外功作為輔助和內(nèi)功的載體,也是很重要的。畢竟它可能是一個程序員吃飯看家領(lǐng)工資最具體的技術(shù)表現(xiàn)。
總結(jié)
以上是生活随笔為你收集整理的(27)技术人员的内功和外功的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 巨一自动化工业机器人_2021第11届深
- 下一篇: 策略模式和工厂模式搭配使用