本人關(guān)于IT技術(shù)體系的一些理解
根據(jù)我自己的想法和理解,IT技術(shù)體系并不能單純地劃分為軟件和硬件(有些時候,持這種理解的人問的一些很嘲諷性的問題會讓人吐血的),硬件我并不是十分精深,模糊中我認(rèn)為純粹的硬件應(yīng)該分為模型和電路系統(tǒng)這兩個部分,模具制作應(yīng)該是屬于模型的,PCB板屬于兩者都有,電路設(shè)計是畫PCB的基礎(chǔ)和前置條件,理應(yīng)屬于電路系統(tǒng)。兩部分難度不分上下:模型需要更多的考慮環(huán)境和人的因素,電路則更傾向于技術(shù)知識。但是根據(jù)我看到的一些情況,往往懂技術(shù)的人不少,但真正能結(jié)合模型去思考電路(也就是根據(jù)實際情況,使用者的習(xí)慣,質(zhì)量,外觀等因素)的人在大學(xué)生中真的不多見。如果在本科階段就能在技術(shù)之上結(jié)合模型相關(guān)的考慮,那么這個做底層硬件的人算是真的“硬起來”了,在就業(yè)過程中應(yīng)該會很受歡迎的。
有人經(jīng)常會想單片機到底屬于哪一塊的東西。我這里的劃分僅僅是憑著“代碼”來作為依據(jù),并沒有太大的實踐指導(dǎo)意義,僅僅是為了更方便的說明問題,做一個歸檔罷了。單片機在我眼里屬于軟件的最底層,但是考慮到軟件都是建立在硬件之上的,即使是最底層的軟件,也應(yīng)該在硬件之上(上下并不止價值和難度,只是指在架構(gòu)中處于的邏輯位置)。往往處于架構(gòu)結(jié)合部的技術(shù)都是屬于難度非常大的,但是單片機是個例外。也許時光倒退個幾十年,單片機的確是一個難點,但是到了現(xiàn)在,單片機的難點正在逐步因為其自身性能的提高,軟硬件技術(shù)體系的完善所侵蝕。功能越來越完善的IDE、越來越豐富的片上資源、功能完備文檔健全的API、統(tǒng)一封裝的功能模塊等,這些因素使單片機編程越來越成為一個引導(dǎo)新手入行的工具:現(xiàn)今軟件的難度主要表現(xiàn)在大規(guī)模系統(tǒng)代碼設(shè)計、技術(shù)選擇和架構(gòu)上,單片機的應(yīng)用特殊性注定其代碼規(guī)模有限(單顆處理芯片);硬件系統(tǒng)中的封裝思想愈加完善,底層模擬實現(xiàn)逐漸被API屏蔽。不過任何事情想要精通還是很有難度的,單片機也是如此,屬于入門容易,精深有難度。這個難度主要體現(xiàn)在代碼規(guī)模的膨脹和為了充分利用硬件資源而進(jìn)行的代碼改革優(yōu)化。代碼規(guī)模的膨脹需要編程者向純粹上層軟件體系學(xué)習(xí)架構(gòu)、設(shè)計模式、算法優(yōu)化等領(lǐng)域的知識;硬件資源的發(fā)揮也在于編程者對模塊底層實現(xiàn)、單片機的底層實現(xiàn)有一個充分的了解,主要表現(xiàn)為基礎(chǔ)知識數(shù)字模擬電路以及他們的引申知識(諸如EDA,高頻模擬電路或者類似通信等專精的電子領(lǐng)域知識,關(guān)于單片機和這些相關(guān)技術(shù)的學(xué)習(xí)我建議去http://www.51hei.com/里面的教程比較人性化)。另外我個人建議對于并發(fā),多核編程有所了解會有助于跟上時代的步伐,畢竟這已經(jīng)不再是 80C51橫行天下的時代了。
一路往上走,單片機之上應(yīng)該是嵌入式系統(tǒng)相關(guān)的東西了。我在專注于嵌入式的學(xué)習(xí)之后和一同學(xué)習(xí)的兄弟探討嵌入式系統(tǒng),覺得嵌入式系統(tǒng)的難點關(guān)鍵在于廣,而一個真正的大牛會在廣的基礎(chǔ)上對這些廣泛的知識做進(jìn)一步深入的研究而達(dá)到精神,并且對于某幾項技術(shù)做到專精。因為嵌入式系統(tǒng)其實也是建立在MCU、CPU 之上的,上文所述的知識體系對嵌入式系統(tǒng)學(xué)習(xí)者同樣有效。但是與純粹的單片機編程相比,嵌入式系統(tǒng)的難度還體現(xiàn)在系統(tǒng)。除了要對軟件體系的基礎(chǔ)——操作系統(tǒng)要有著十分精通的了解以外,基于操作系統(tǒng)環(huán)境下的編程代碼規(guī)模成幾何倍數(shù)的膨脹,同時帶來的還有測試和調(diào)試難度變大,手工測試已經(jīng)無法滿足要求,而自動化測試代碼覆蓋率也很難保障?;诓僮飨到y(tǒng)的編程在學(xué)習(xí)過程中十分復(fù)雜(一旦掌握了開發(fā)起來倒也沒那么痛苦),要了解各種API,操作系統(tǒng)的各種調(diào)度機制和其架構(gòu)體系(不然怎么寫驅(qū)動)。而對于專業(yè)領(lǐng)域上還有一系列讓人望而生畏的東西,比如說智能算法,圖像分析,穩(wěn)定性實時性要求等等。我在這里沒事掰著指頭算都要算很久,就不一一列舉了。但是我著重要提到的是,嵌入式系統(tǒng)這個名詞中系統(tǒng)二字代表的并不是操作系統(tǒng),而是指更加廣泛意義上的系統(tǒng)。具體解釋有興趣的去翻翻系統(tǒng)論(與控制論,信息論并稱三論)。一旦從模塊級上升到系統(tǒng)級,考慮的問題各種各樣,有興趣的去翻翻軟件工程吧,雖然寫著是軟件工程,對于硬件也同樣適用,個人覺得對于工程二字都不怎么了解的人有何臉面自稱工程師。那么需求工程、架構(gòu)設(shè)計、編碼規(guī)范、編碼管理、系統(tǒng)測試、項目發(fā)布等領(lǐng)域的知識多少也要懂一點的(沒人愿意一輩子當(dāng)小工吧)。然后別忘了還有人機交互,這個界面其實十分十分關(guān)鍵,開發(fā)過程中你至少得花30%以上的精力在這上面。
像android,windows phone,ios之類環(huán)境下編程如果僅僅是做個應(yīng)用丟APP去賣的那種的話,根本算不上嵌入式系統(tǒng)(別以為寫了個非PC程序就算是搞嵌入式了,差別太大了),也就是一般的計算機編程加點佐料而已。
在往上走一點,那應(yīng)該是傳統(tǒng)意義上的計算機編程了。這是一個十分蛋疼的東西,因為涵蓋面過分廣大了導(dǎo)致很多人都快累死了也搞不明白那是啥。還是老規(guī)矩從下往上說。最下面的應(yīng)該是BIOS,這個不能被忽視,就跟嵌入式的bootloader為代表的引導(dǎo)程序一樣,是整個體系不可缺少的一部分,當(dāng)然PC上的 BIOS我沒有太多的了解,也就不班門弄斧了。我只是想提一下匯編這門語言的重要性。我大一大二的時候經(jīng)常性有學(xué)長跟我說,匯編這種東西都快被淘汰了,沒有搞頭啊,不如把時間放在別的方面。我覺得這是一個誤區(qū)。對于所有有志向在軟件編程上有所成就的人來說,代碼的效率,功能往往是重點中的重點,而匯編正是效率和功能最佳的伙伴。我這么說不是讓人都用匯編去提高效率實現(xiàn)功能,這對于這個時代來說成本太高,根本不科學(xué)。我要說的是,學(xué)習(xí)匯編這個過程能夠幫助所有學(xué)習(xí)軟件的人能更好的理解硬件,理解底層。有了理解后,產(chǎn)生的代碼自然而然會對一些效率上的硬件障礙有所規(guī)避(比如經(jīng)典的乘2操作),對于這點無論是用什么上層編程語言來編寫代碼都是一樣的。此外,會匯編,你懂的,可以干很多壞事的(為了網(wǎng)絡(luò)環(huán)境的和諧這些請自己領(lǐng)悟了)。
(時間有限,我寫得累死了,下面開始稍微簡潔一點,等哥滿狀態(tài)復(fù)活了在以后的日子逐一論述)
BIOS之上是操作系統(tǒng),這個其實跟嵌入式很相通的,最多操作系統(tǒng)種類有所區(qū)別,然后要求、性能也有所區(qū)別。這里關(guān)鍵是要了解操作系統(tǒng)的運行機制,一些系統(tǒng)級常用算法數(shù)據(jù)結(jié)構(gòu)啥的(別覺得沒用,這些東西才是好東西,自己做稍微有點規(guī)模的系統(tǒng)時候有用得很,畢竟是一群大師的智慧結(jié)晶)。我堅信一個不懂得操作系統(tǒng)運行機制的人寫的代碼也好的有限。
操作系統(tǒng)之上的東西又海了去了,比如網(wǎng)絡(luò)啦,數(shù)據(jù)庫啦,并發(fā)啦,人機交互啦,測試?yán)驳鹊龋òl(fā)現(xiàn)沒,哥說的都是通用型的技術(shù),絕對不搞技術(shù)陣營化,微軟跟甲骨文鬧多大都跟咱沒關(guān)系,微軟倒閉了地球也照樣轉(zhuǎn)的,別到時候哪家公司倒閉了自己也跟著失業(yè))。這些是純粹技術(shù)上的東西。這個時代比較流行的就是這些啦。網(wǎng)絡(luò)大家都懂的,多扯也沒意義,學(xué)TCP/IP協(xié)議族有多惡心看過的人都知道,但是看過跟沒看過區(qū)別還是十分大的。一些眼花繚亂的技術(shù)比如P2P之類的都是基于基礎(chǔ)的網(wǎng)咯體系的,看基礎(chǔ)知識總沒錯的。數(shù)據(jù)庫也是當(dāng)今軟件不能少的東西,但是關(guān)鍵能力還是在于數(shù)據(jù)庫架構(gòu)能力,數(shù)據(jù)庫管理維護(hù)能力,表結(jié)構(gòu)設(shè)計能力等,在此基礎(chǔ)之上可以去搞某一種數(shù)據(jù)庫的專精(甲骨文是好東西)。并發(fā)是經(jīng)常被無視的,但是沒有并發(fā)哪有現(xiàn)在的軟件體系,其重要性各位看官自己心里都應(yīng)該明白。人機交互對于我們這些代碼男來說是最痛苦的,但這年頭就屬它最重要,第一映像嘛。這個跟把妹釣凱子一樣,長著一副*絲樣,就算有顆高富帥的心路人也不會搭理你。
另外一塊就是WEB技術(shù)體系咯,近十年最火的東西。照理說我應(yīng)該多扯一點這方面的,因為內(nèi)容真的很多,但我個人對其的看法是眼花繚亂前路迷茫。這并不是指的是WEB技術(shù)即將會沒落,而是對開發(fā)時程序員的狀態(tài)和技術(shù)體系的運作模式表現(xiàn)出一種模棱兩可的態(tài)度。WEB技術(shù)體系是當(dāng)今發(fā)展速度最快的技術(shù)體系,百花齊放,各種框架和技術(shù)實現(xiàn)爭奇斗艷,更新?lián)Q代十分快,單拿出某個具體技術(shù)進(jìn)行品頭論足實在沒什么意義。任何人看到這種現(xiàn)狀第一反應(yīng)就是好累,這種生活是一種看不到盡頭的生活。我只能說,多關(guān)注WEB技術(shù)的底層,框架的范式型實現(xiàn)規(guī)則和技術(shù),通用型技術(shù)架構(gòu),交互模式,高并發(fā)后臺支撐容器,容災(zāi)等等東西。最后的總結(jié)在于:會個具體技術(shù)當(dāng)敲門磚開路不錯,最重要的還是學(xué)習(xí)新東西的速度,速度跟不上,別人討厭你不說,自己也會活得很累很痛苦。
最后我扯一下項目管理的東西,這并不是一項需要很多精力去翻書查資料去研究的技術(shù),但的確是最為重要的東西,即使沒有一顆成為管理者的心,學(xué)一下這些東西也能讓自己更能被管理,理解管理者需要面對的困難會有助于交流,從而使整個項目推進(jìn)更加順利,思想更加統(tǒng)一,也能為自己爭取到更多機會,從更高的層面看待整個世界,也會有種豁然開朗,一切盡在掌握的快感。
句句肺腑,也算對自己的一個總結(jié)。
評論