1. 程式人生 > >軟體技術中的道與術

軟體技術中的道與術

說起專業基礎課,程式語言和各種庫和框架在軟體開發中的地位,大家可能會有不同的看法,關於深入學習什麼,也存在著各式各樣的看法。有的人認為,只要熟悉一門程式語言,然後深入學習這門語言實現的各種框架,就可以做好相關領域的開發;還有一些人認為,我需要廣泛的學習各種程式語言,做一名語言專家,這就好比是程式設計領域的翻譯;也有深鑽專業基礎課和各類演算法的人,這類人內功深厚。總之,每個人對自己喜歡和關注的領域可能都不同。

軟體技術的道也就是專業基礎,是軟體修習之路的內功心法,軟體技術道的理解越深刻,配之以合適的術,軟體開發功底自然不俗。就好比內功深厚之人,只是普通的拳法,一樣能克敵制勝。但是學習軟體技術的道很枯燥,堅持下來的人寥寥無幾。

軟體技術的術,就是我們的庫和框架,這些是前人知識的概括和總結,是有體系的武林祕籍,掌握術可以讓我們利用已有的經驗解決我們的問題,提高開發的效率。

至於程式語言,不妨將其認為是編寫武林祕籍的語言,同樣的術,可能會有不同語言的版本,差別僅在於這門語言是否能夠簡潔的描述術,能否讓術更快地被學習和接受。

如果我們是實用派,可以多花些精力學習術,術的掌握能夠讓軟體開發的門檻降低,也就是讓大家更快的步入江湖,但是在江湖中闖蕩多日後,單純掌握術,會讓人感到貌似自己什麼都能做到,但是又非常無力——我們有很多的招式用來躲避對手的殺招,在對手疏忽時克敵制勝,但是卻永遠不敢當面對質,因為我們內功不夠深厚,遇到強大的對手我們無力招架。

內功深厚之人,非常善於創造術,任何招式在他看來都是相同的,他們就如掃地神僧,淡泊名利,只期望不斷追求技術上的飛躍,進而普度眾生。

軟體技術的道和術最好是雙修為好,這樣相輔相成,相得益彰。正如前面寫到,內功的高低直接決定了同樣的術發揮作用的高低,當你使用別人的術時,明白背後的原因,你會揚長避短,在同樣型別的術上也能分出優劣。

那麼,軟體行業中的道和術分別有哪些呢?

道包括各類原理和演算法,各種程式設計思想,成熟的架構方案等等,這些內容不會因為時代的發展而改變,是客觀存在的規律和最佳實踐方法,比如作業系統原理中的PV操作,對於不同的作業系統和程式語言,機制是一樣的,只是介面不同;再比如TCP/IP協議棧,作為現代網路的基礎協議,是不會改變的,無論HTTP還是FTP,只是其上的應用層協議,底層都離不開TCP/IP協議棧,而作為訪問協議棧的手段,socket也可以算作是道的一種,不同的實現只是在介面,易用性以及操作的粒度上存在差別。道的例子比比皆是,專業基礎課中包含的基本都屬於道。術主要是各種庫和框架,一般都是具化到某種程式語言或者某種平臺的技術,例如Java Web程式設計,Linux應用程式設計等等。

但是在熟悉術的過程中,我們完全可以結合道的學習,從而理論聯絡實際。例如Java Web程式設計我們學會了使用Servlet,JSP,SSH,SSM等等各種技術,但是我們掌握這些技術是否就夠了?下一步我們應該去想,為什麼這些框架被廣泛使用?它們到底有什麼好處?或者至少他們在哪些方面做得好?我們可能就會想到,這些都是用Java編寫的用來簡化或者優化Web開發的,接下來我們就應該去想想,Web開發到底有哪些規則和理念,學習完這些,或許做Web開發已經可以不侷限於Java一種程式語言了。而更進一步,我們可以去想想,為什麼Web開發需要這些規則和理念,是否和HTTP有關,那就去了解一下HTTP....按照這樣的思路,通過修習術,也能夠帶動我們道的提升。

軟體開發是一項充滿挑戰的工作,需要我們不斷在道和術兩方面提升自己。我是從道的修習開始的,之後發現道太過晦澀,就去學了一些術,之後從術中又學習了一些道,藉機又回到了道的學習......可以說每一輪修行,都讓自己受益良多。大家可以去嘗試一下。最後想說幾個不要,希望對大家有所幫助:

不要被術束縛了你創造術的能力;

不要讓你最熟悉的程式語言成為了你學習其它程式語言中思想的絆腳石;

不要被商業的風向影響了你追逐技術的步伐;

不要覺得技術上有比你強大的人你就不可能比他更強大;

不要在自己技術強大的時候就忘記了當初小白的自己;

不要忘記幫助過自己的人;

不要以技術作為評判人的標準....