長期以來,「軟體業」一直被視為「智力密集」型的「朝陽」產業,大多數從業者都受過高等教育,其平均素質居於社會各行業的前列,這個產業的頂尖人物被公眾視為「知識英雄」,比如微軟公司的創始人比爾蓋茨雄據世界首富之位多年,更是為人「津津樂道」。
16年前我下決心開始學習計算機技術的時候,對這個行業也充滿了自豪感。
然而世事難料,在2023年高考剛剛結束之際,中國權威出版機構社會科學文獻出版社於2023年6月10日發布首部《中國大學畢業生就業報告(2009)》,其中「計算機專業」榮登 「就業最困難的十大專業」光榮榜。
大約從2023年開始,我在北京理工大學這所211、985重點大學開設.net課程,這件事後來給某些人「炮轟」——說我要將重點大學學生培養成it民工,也曾有技術牛人諄諄教誨年青學生——想學軟體,離金某人遠些……
「程式設計師」何時變成了「it民工」?
僅僅十多年,「程式設計師」就從「精英」淪落為「民工」,這也未免太戲劇性了吧!
在中國,不少程式設計師都是「crud」程式設計師,這不能怪他們,因為中國多數專案都是crud的。所以,crud似乎成為了「it民工」身上的標籤,問題是crud這活真的象在建築工地上倒水泥一樣,不需要太高的智商和較多的訓練?
下面分析一下需要從事這個crud的工作的程式設計師,到底需要哪些知識和技能。
我大致地思索了一下,畫了以下這個圖,展示出一名 「.net程式設計師民工」要順利參與乙個crud的資料庫應用專案開發所大致需要掌握的知識與技能:
說句實話,這個圖雖然「掛一漏萬」,但列出來的知識點與需要掌握的技能之 多已經很「恐怖」了,對於乙個需要掌握這麼多知識與技術才能勝任與幹好的工作,非要認為它是乙個「低階」的 「民工」就可以幹的活,想必持這種觀點的人一定知識豐富如汪洋大海,屬「白骨精(白領-骨幹-精英)」一族。
需要掌握這麼多的知識,才有資格當一名合格的「crud」程式設計師,「it民工」的「門檻」其實挺高的,不是嗎?
事實也如此,軟體開發行業從業人員的平均學歷我估計至少是大專,很可能是「本科」,其中固然有一些只有「高中」甚至更低學歷的「奇才」,但這僅是少數,而且這些人,雖然學歷低,但絕不會是乙個低智商的人。這說明軟體開發行業從業者的「平均智商」應該是挺高的。
我在旅美學者薛湧寫的《天才是訓練出來的》一書中找到了美國的一些統計資料:
美國大學本科生的中等智商為118,學士學位獲得者的中等智商為123,優秀畢業生的中等智商為133,物理學博士的平均智商為140。而在一般的人口中,中等智商為100。也就是說,你的智商如低於100分,你就屬於偏笨的人,高於此線,就屬於偏聰明的了。
國外依據資料得出結論:要把書讀懂讀好,智商還真的得達到一定的水準。所以,能上大學並且順利拿到學位的人,基本上是屬於比較聰明的那一批人。
重大的變化發生於2023年,從這一年開始中國大學開始擴招,尤其是計算機專業,更是擴招的重點,其規模迅速膨脹,錄取率大大地提高,其結果是,用一句打趣的話說,「阿貓阿狗都去讀大學了」,中國大學沒有做智商測試的制度,不然,我想應該會看到21世紀在校大學生的平均智商比上世紀80、90年代的在校大 學生的平均智商要低。但擴招對一些歷史悠久聲譽良好的重點大學的影響就沒那麼大,因為不管你怎麼擴招,能進名校(比如北大清華)的學生,智商是不會低的, 因為其入學競爭仍然十分激烈,各方面差一點的根本就沒這個機會。
國外還給出了一些著名科學家的智商:牛頓190,伽利略195,克卜勒175,達爾文165,哥白尼160。
現在回到軟體開發這個行業,其從業者平均學歷為大專以上,應該說明這個行業需要的是整個人群中比較聰明的那一批。
這個觀點與我的實際感受是一致的。
我在it業「混」了十多年,深感這個行業牛人輩出,別說這個行業的「頂尖」級別人物,就是在許多普通的it企業、科研院所中,也有不少的讓人佩服的牛人。 我在北理工教了8年書,「笨」的學生實在沒見著,而不少學生的聰明程度和學習能力等,都比我在他們這個年紀時要強得多,還有一些學生,真的很聰明,悟性 好,能舉一反三,在技術上沒多久就可以跑到我前面去了。
所以,軟體開發應該是乙個需要有較高智商的行業,我覺得不會有太大疑義。
中國人有句俗話:三百六十行,行行出狀元。這些「狀元」的出身並不重要,但他們應該接近100%的都有高的智商。
你能成為軟體天才嗎?
在整個計算機領域,有一些老外的名字如雷貫耳:馮諾依曼,圖靈,比爾蓋茨、anders hejlsberg,在中國,諸如「求伯君」、「柳傳志」、「李開復」等名人的故事也是眾人皆知,雖然我們拿不到其智商測試的分數,但相信他們個個都是聰明人。
「高智商」其實是成為「天才」的必要條件。相應的另乙個結論就是:普通人再怎麼努力,也成不了天才。
天才在各自領域內所達到的高度,大多數普通人是永遠達不到的,比如如果有某人告訴我:你只要努力,就可以比anders hejlsberg還牛。我一定會認為他在開乙個讓我很生氣的玩笑。
個體間智商的差異是客觀存在的。但成為不了天才不能成為躺倒不幹的理由。因為這裡有乙個引發了巨大爭論的問題。
智商重要還是努力重要?
國外心理學的統計資料明確無誤地說明了智商的重要性,但這裡有乙個問題:就算是具有「天才」淺質的人在總人員的比例很少,但人類有數十億之多,「天才」應該不少啊?怎麼數千年來,公認 「天才」的就是牛頓等那幾個?
2023年,諾貝爾經濟學獎得主、人工智慧研究的開拓者herbert simon和william chase在研究西洋棋大師的成長規律時發現:再大的天才,也需要10年修煉成器。
**天才莫扎特似乎打破了這個「十年定律」。5歲做曲,10歲登台演出,一生創作了數百部傳世之作。儘管如此,西方學者們還是發現,莫扎特6歲時就已經和 父親一起訓練了3500個小時,他第一部達到大師水平的作品,創作年紀是21歲,實際上已經經歷了18年的嚴格訓練。
聰明的腦瓜是必要的,但僅有它也是不夠的。
我引用了這麼多的資料,其實只為了說明乙個結果:不經「十年寒窗」,「天才」不可能出來。本身具有高智商的人是這樣,在平均智商上下的人更應該努力。
現在很好解釋當下的一些現象了:
1. 「程式設計師」為何是「it民工」?因為這些所謂的「程式設計師」本身就沒有具備從事軟體開發的基本知識與基本技能,加上人數眾多,可替換性強,怎麼會不成為「it民工」?
2. 計算機專業學生為何就業難?很簡單,乙個計算機專業本科生,四年下來至少應該有4~6萬行的**量,但就我觀察,達到這個要求的不到10%。
儘管軟體開發行業需要較高的智商,但在平均學歷為本科的軟體開發行業,從業者已經過高考的篩選,智商並不是問題關鍵,之所以「it民工」多和計算機專業學生就業難,主要問題是「懶」和「訓練不得法」。
下圖是我總結的乙個靠技術吃飯的「程式設計師」知識與能力增長路線圖:
這個圖不是針對「天才」設計的,而是針對乙個普通的計算機專業大學生可能的主要人生經歷繪製的,雖然經過了大量的簡化,但主線還是很清楚的。
我成不了天才,那成為「人材」,可以嗎?
我們需要解決的問題是「如何努力」的問題。
薛湧先生在書中介紹了一種名為「處心積慮的訓練(deliberation practice)」的天才訓練方法,這種方法是由天才研究的權威人士ericsson教授提出的,簡稱為「深練(deep practice)」,其意思是一般人練得淺,水平自然平庸,天才則練得深,所以能超出凡人之上。
普通人如果能科學地深練,雖然不能成為天才,但成為「半個」天才是完全可能的。
有關「深練」的介紹,朋友們可以自行去看《天才是訓練出來的》這本書。就我多年自學軟體技術和8年的教學經驗,我並不覺得「深練」有何奇特之處,我將「深練」總結為以下幾句話:
1. 織網:分解軟體技術的大塊知識為多個小的知識點,各個擊破,將新知識與老知識聯絡起來,構造一張完整的可動態擴充的知識之網
2. 訓練:將開發技能給拆分為多個小的步驟或子技能,針對每個步驟或子技能反覆地嚴格地訓練,然後再這些步驟或子技能組合起來,以達到職業的水準。
3. **性的學習與實踐:要將被動的學習轉換為主動的探索,要通過開發實踐把一切給「啟用」。
軟體天才都是訓練出來的
長期以來,軟體業 一直被視為 智力密集 型的 朝陽 產業,大多數從業者都受過高等教育,其平均素質居於社會各行業的前列,這個產業的頂尖人物被公眾視為 知識英雄 比如微軟公司的創始人比爾蓋茨雄據世界首富之位多年,更是為人 津津樂道 16年前我下決心開始學習計算機技術的時候,對這個行業也充滿了自豪感。然而...
模型是如何訓練出來的
一 模型裡的內容和意義 乙個標準的模型結構分為輸入 中間節點 輸出三大部分,而如何讓這三部分連通起來學習規則並可進行計算,則是框架tensorflow所做的事情。tensorflow將中間節點及節點間的運算關係 ops 定義在自己內部的乙個 圖 上,全通過乙個 會話 session 進行圖中ops的...
執行力是訓練出來的
有時候在夜半時分,會覺得生活讓人無法忍受,不是嗎?夜半時分,我們都會變成無措的孩子啊。加 澤文 瑪格麗特小鎮 就像愛的對面不一定是恨而可能是冷漠一樣,成功的對面也不一定就是失敗,這就是現實。所謂運氣,就是你認為自己是幸運的。很多人錯誤地認為,只要我們做好本職工作,回報就會自然而然地出現。當你建好了自...