經常看到人們在討論選什麼專業的問題。有的是父母在為孩子選專業焦心,有的是在校大學生、研究生自己在懷疑專業選錯了、是不是應該重選,有的是已經走上工作崗位但對現有工作不滿意、自我懷疑是不是該改行。很多人都不約而同地認定:該學計算機。
計算機(叫電腦也行)在第三次工業革命中崛起,在第四次工業革命中成為靈魂。計算機的作用早就超過計算了,只有想不到的,沒有做不到的。學計算機對未來的學習、工作確實是很好的切入點。但學計算機有一個學法,更重要的是,學計算機不等於報考計算機系。
早幾十年還要科普一下,現在似乎誰都知道,計算機有硬體、軟體,儘管軟體硬化、硬體軟化又能把人繞暈了。這些對於還在選專業階段的人來說,其實都不重要,不都是計算機嗎?
人們一方面一股腦地認定學計算機就是好呀,就是好,另一方面也在不斷聽到計算機專業的人訴苦,在悲嘆「逃出xxx」。問題出在哪裡呢?
計算機也稱電腦,還真是有道理。人類因為這個大腦(而不是四肢)才成為萬物之王,否則靠腿腳是跑不贏豺狼虎豹的,靠拳頭更是連野豬山羊都打不贏。但靠腦子,以及由此而來的思考、溝通、協調、製造工具的能力,弄得人類現在一不小心可以把什麼物種都給滅了,生態保護成了大事。
計算機在第三次工業革命中已經出現。儘管已經稱作電腦,但還是與工業革命之前的人腦更加可比,那時很多情況下腦瓜還是不頂拳頭和腿腳更重要。在第四次工業革命中,電腦才是真正的核心。但也和人類的發展一樣,第一、二次工業革命解決了機器代替人力的問題,第三次工業革命解決了電腦與機器(包括通過機器的視聽)的溝通的問題,第四次工業革命要解決給電腦裝進知識、增長技能和學會協調的問題。硬體依然重要,但關鍵在於軟體,不光是應用軟體,更是軟體的應用。對於第四次工業革命來說,造計算機(包括硬體和軟體)只是很小的一部分,用計算機才是大頭,包括直接使用計算機和包括計算機的新工具和產品。
對於軟體的應用,存在很多誤解,以為這就是熟悉軟體的使用和操作。這只是最初級的應用,好比駕校畢業,可以開車去超市或者上下班了,離有經驗的駕車人還有很大距離,離賽車手更是天差地遠。對標賽車手才是軟體應用的高級境界,但這需要不僅有高超的車技,更需要對車有精到的理解。
以工業控制的DCS和PLC為例,DCS主要用於連續控制,好比汽車的定速巡航,PLC主要用於事件觸發的連鎖保護和順序控制,比如火警噴淋。過去這是井水不犯河水,現在的趨勢是兩者你中有我我中有你。
DCS和PLC最基本的使用包括組態(在PLC裡常用階梯邏輯),差不多就是各種填表和搭接。這用來搭建各種簡單和複雜控制迴路、各種連鎖保護邏輯、順序控制邏輯,是最基本的軟體使用。但要更進一步,就需要超過現有的組態選擇,使用程序語言和順序控制圖了。簡單地說,這就是編程序了。
寫一個小程序,工科學生在學校裡基本上都學過,沒有什麼大不了的。但要更進一步,就不簡單了。比方說,反應器有A、B、C等3個主要進料,但反應條件是通過總進料流量(決定產量)、A的濃度(決定反應產率)、B/A的克分子比(決定產物性質)來決定的,並不是直接的A、B、C的流量,就需要建立三元聯立方程,實時解方程。這不是大問題,問題是,有的產品有B成份,有的不用B,那就需要用條件來引導程序走向。這也不是大問題。但要是兩個反應器串聯,條件的排列組合一下子就多了好多。如果要容許操作工在任何時刻將任意組合的A1/2、B1/2、C1/2置於人工控制之下,比如說是開停車、應對緊急情況、閥門或者變送器維修,排列組合就更多了。這時比較好的方法就是把多元聯立方程改寫成矩陣形式,將從自動模式中拉出去的A/B/C/1/2對應的行和列從矩陣中抽出去,重新解算,就可以用簡明、統一的方法應對各種組合了,而不是用不勝其煩的IF…THEN來導引各種組合下的程序走向,也便於過程擴展,比如增加了第三個反應器。
但這就比較複雜一點了。首先需要會一點矩陣運算,其次需要在編程中不僅重組矩陣,還要在最後復原的時候找對門戶,別串錯門。這就是稍高一級的編程能力了。
再進一步,需要做一個工藝過程自動開停車的應用的話,有的步驟是串聯的,上一個完成再做下一個;有的是並聯的,兩個一起做,都做完了再做下一步;還有的是串並聯組合的;更有返回的,一路做下來,條件不滿足,回到幾步之前重做,但又不是完全的重複,而是有分叉的重啟。各種不同的路徑需要精巧的程序走向管理,還需要考慮執行中操作工的人工打斷,恢復後有繼續、轉向、重複等多種選項。這一切使得這樣的大型順序自動化應用可比照為簡化版的作業系統,對編程能力的要求更高。
這些都是廠商帶來的組態裡不可能有的功能,都需要自編程序實現。但這些都是對計算機控制系統應用軟體的應用,而不是軟體開發。一般來說,這不屬於「學計算機」的範疇,而屬於「用計算機」的範疇,但這才是第四次工業革命最需要的。這也是應用軟體的開始。
在原有應用軟體上開發高級應用,在應用中完善化,並發掘共性,提升出新的應用軟體,這正是應用軟體的成長和發展道路。比如說在上述矩陣控制問題裡,人工「抽出」的控制量也可以看作是控制量觸限了,動不了了。把這個算法提純一下,作為新的組態推出,以後處理約束控制問題就有現成工具了,就不需要再重頭自編程序了。對工藝開停車的應用也是一樣,打造更加通用的架構,就是通用的複雜過程順序控制的應用軟體了。
大名鼎鼎的MATLAB也是這麼來的。Cleve Moler是新墨西哥大學的教授,在教學中,發現要學生用FORTRAN編數值分析的程序有很多重複工作,掌握各種編程技巧也不容易,於是自編了MATLAB最初的原型,讓學生不用FORTRAN就能運用現成的LINPACK和EISPACK子程序庫,並在一些大學裡推廣開來。但Jack Little發現了這個好東西後,用C語言重新編寫,並用矩陣和向量作為一切運算和可視化顯示的基礎,大大簡化了使用環境,成功地推出了商業化的MATLAB,以計算能力強、使用方便迅速獲得學術界和工業界的熱烈擁抱。但學術界和工業界在使用中,根據不同需要和學術方向,很快從基本MATLAB功能重組、強化,推出各種「工具箱」,如控制系統設計、信號分析、最優化、神經元網絡、統計分析、系統辨識等,還根據不同應用方向推出財務分析、飛行器設計、圖像識別、機器學習、電力系統、預防性維修規劃等工具箱,大部分都是用戶在應用中提煉出共性,草建工具箱,反饋回來,規範化包裝後重新推出的。
這和賽車手異曲同工。頂級賽車手不僅對賽車的操控厲害,對車和發動機的理解也是厲害,不少賽車手直接就是機械專家。電影《福特vs法拉利》說的是真實歷史,這裡面的Carrol Shelby不僅是賽車手,也是賽車改裝專家,後來自己開公司,專門幹跑車改裝,Shelby Cobra成為一代經典,現在還不斷有模仿者。Ken Miles對福特歷史上最傑出的賽車GT40有決定性的貢獻,50年後,福特還特意推出全新GT40,向當年致敬。反過來,機械專家不一定能幹賽車手,對賽車操控的極端要求也不理解。
這恰好是「學計算機」和「用計算機」的差別。應用軟體是第四次工業革命的關鍵,但應用才是引導應用軟體的。對於應用軟體來說,應用包括具體領域的知識和使用經驗,也稱domain expertise,這是應用軟體的基石。相反,軟體工程的一般技巧反而屬於「大路技術」。這不是說輕而易舉,而是說人才隊伍和開發基礎更加廣泛地存在。最好是應用人才自己也是軟體人才,但退而求其次,軟體的完善化是可以請「僱傭軍」來幹的,MATLAB就是例子,當然Jack Little是自帶乾糧的僱傭軍,最後也成了東家了。
那回到前面的問題:選專業,選什麼呢?學計算機硬體挺好,但也好硬核;學軟體,實際上也是一門大路手藝,求職面可能很廣,但還是打工的命,難當主將,好比賽車隊裡裝卸輪胎、加油打氣、跑龍套的。
還是學硬核的數學或者工程吧。數學的春天真是來了,大數據、人工智慧都需要數學,有了數學的底子,再把計算機抓一抓,就好比有了好廚藝,再練一把刀工,這就好馬配好鞍了。反過來,光有一手好刀工,可能就只能在廚房打下手了。中國是製造業超級大國,學工程永遠前途廣泛。在實踐中積極學習計算機硬體軟體的應用技術,主動應用計算機工具,打造優秀的應用環境,甚至迭代出新的應用軟體,這不香嗎?當然,在數學、工程裡能當領軍人物也是要有金剛鑽的,但畢竟面大啊,切入點多啊,不比計算機硬體軟體那裡要擠獨木橋。而且說得不好聽,這是業主與裝修隊的關係啊,還是值得考慮的。
在選什麼專業的問題上,投身造計算機(包括硬體和軟體)行業當然是不錯的選擇,那當然報計算機系。但這個行業的容量也是有限的,而用計算機的行業就幾乎是無限的了。最不幸的或許是學計算機但最後「淪落」到給用計算機的行業當IT保障,這就是IT的機修工了。這活肯定要有人幹,瞧不起是肯定不對的,但這也可能不是糾結於選什麼專業的學子和家長們的目標職業。
支持原創,分享、點讚、在看素質三連一氣呵成