最近,随着美國對中國基礎性IT技術發起了制裁,從某種意義上講,這是一件好事,讓我們知道,需要重視基礎了。
目前,Linux基本上已經成為雲伺服器的事實上的标準化作業系統,大量服務軟體隻需要支援Linux就基本滿足中國用了,跨windows平台的需求可以短期不用考慮了。中國很可能會以Linux作業系統作為基礎,對各種基礎性軟體的重新開發。這将會導緻一波C語言的熱潮。C語言,那可是我們上世紀90年代剛上大學時候的熱門語言,當然現在在國外依然很熱,隻不過在中國大家都用跨平台的Java語言了。真是天道好輪回啊!
另外,很多目前的熱門技術都是古老思想的輪回,比如:
NO SQL資料庫是層次性資料庫的輪回。
并行計算的熱門架構Akka Actor源自1973年,那時是用古老的 Lisp語言編寫的Actor架構。
是以,在校的大學生們,一定要學好基礎接近計算機底層的彙編語言、C語言這些語言可以讓你更好地了解計算機運轉機制。
一定要學好數學,無論是高數還是離散數學,數學的思維教會我們以抽象的方式描述客觀世界,也就是計算機裡面最重要的“模組化”。
一定要學好資料結構、作業系統原理、編譯原理這些基礎專業課,它們對你今後程式設計有莫大幫助。
切莫盲目追求熱點技術,如果你把精力放在追逐這些熱點技術上,短期或許可以讓你更容易找到飯吃,長期而言無助于你的成長,也無助于中國整體IT技術的發展。
當我們看Unix或Linux作業系統中的各種概念和實作思路後會發現,這裡面很多關于程式的定義,程式之間的通信,程式内部不同子產品之間的互動模式。我們目前所接觸的
微服務架構,分布式,消息通信,聲明式API,指令式API等都可以在作業系統中找到類似的實作思路和對應的場景。
為什麼會這樣?
因為資訊從根本上講來自于人的意識,是意識的概念化。一切被人認識的資訊都是已經存在的,都是過去的東西,都不應該被改變。哪怕這些意識是你對未來的幻想,那這些關于未來的幻想也是在過去産生的。所謂軟體,就是意識活動在數字化世界中的映射。企業的所有的實體性業務活動都必須有意識性活動的參與,在意識的指引下完成。
是以,資料和軟體是人的意識和意識活動在數字化世界裡的映射。
幾千年來,人類的生活方式發生了很大變化,但是在哲學方面,也就是認識世界方面的突破并不大,是以軟體在思想方面沒有也太多的突破,隻是我們是對現實世界原理認識更深刻後反應在軟體設計之上而已。而且,簡單樸素的認識往往最後被證明最有效。
是以軟體設計者和架構師多少應具備一些哲學思維,尤其是辯證法。比如拆解于內建的辯證統一關系,分布與集中的辯證統一關系。當你把系統拆解成了多個微服務,那麼這些微服務必須得能夠內建,必須有承載內建的設施來展現。當你把微服務分布式部署,必須有集中的管理機制和設施來展現,否則就會出現問題。當我們的提出了理念明顯不符合哲學認識或樸素生活常識的時候,就一定會存在巨大的隐患。比如“大中台,小前台“來解決應變的問題,這樣的思維,明顯存在哲學上缺陷。因為,大的東西很難适應變化,适應變化的東西往往很小。再比如,先有事實還是先有抽象?對于人類而言,先有事實後有抽象,抽象是人對多種不同僚實的共性的提煉,是以在一個領域中,對多種事實進行抽象所産生的概念本身不應該被執行個體化,隻有那些表達事實的概念可以被執行個體化。我們抽象的目的是為了把握共性,根據共性對多種事實進行統一處理,在軟體上就能産生可複用的代碼。而把多種事實全部或部分資訊拼在一起的叫做視圖,視圖的作用與抽象的作用是不同的,視圖解決的是資訊全面展示的問題,不是為了統一處理。是以,對于架構師,一定要清楚“事實”,“抽象”和“視圖”之間的關系。最重要的是,我們要知道“抽象”和“視圖”都來自于“事實”,那麼你能分得清哪些是事實嗎?坦率地講,我沒有十足的把握。