最近人品爆發,圖靈社區,InfoQ,51CTO相繼對我作了採訪,前兩天我把InfoQ對個人採訪張貼了出來,今天,圖靈社區和51CTO對個人採訪發佈了(圖靈的訪談 ,51CTO的訪談),我是一個有技術焦慮症的人,個人經歷比較特殊,對你們來講可能也沒有什麼意思,這兩個採都有一些重疊的部分,不過有些觀點我想再增強一些,並放在這裏和你們一塊兒分享一下。html
遇到新技術我會去了解,但不會把很大的精力放在這些技術(如:NoSQL,Node.js,等)。這些技術尚不成熟,只須要跟得住就能夠了。技術十年以上多是一個門檻。有人說技術更新換代很快,我一點兒都不以爲是這樣想。雖然有不成熟的技術不斷地涌出,可是成熟的技術,好比Unix,40多年,C,40多年,C++,30多年,TCP/IP,20多年,Java也有將近20年了……,因此,若是你着眼成熟的技術,其實並很少。前端
個人觀點是——要了解技術就必定須要瞭解整個計算機的技術歷史發展和進化路線。(這個觀點,我在《程序員練級攻略》和《C++的坑多嗎?》中提到過屢次了。)由於,你要朝着球運動的軌跡去,而不是朝着球的位置去,要知道球的運動軌跡,你就須要知道它歷史上是怎麼跑的。程序員
若是要捋一個技術的脈絡,70年代Unix的出現,是軟件發展方面的一個里程碑,那個時期的C語言,也是語言方面的里程碑。(當時)全部的項目都在Unix/C上,全世界人都在用這兩樣東西寫軟件。Linux跟隨的是Unix, Windows下的開發也是 C/C++。這時候出現的C++很天然就被你們接受了,企業級的系統很天然就會遷移到這上面,C++雖然接過了C的接力棒,可是它的問題是它沒有一個企業方面的架構,並且太隨意了,不然也不會有今天的Java。C++和C很是接近,它只不過是C的一個擴展,終年沒有一個企業架構的框架。而Java在被髮明後,被IBM把企業架構這部分的需求接了過來,J2EE的出現讓C/C++捉襟見肘了,在語言進化上,還有Python/Ruby,後面還有了.NET,但惋惜的是這隻侷限在Windows平臺上。這些就是企業級軟件方面語言層面就是C -> C++ -> Java這條主幹,操做系統是Unix -> Linux/Windows這條主幹,軟件開發中須要瞭解的網絡知識就是Ethernet -> IP -> TCP/UDP 這條主幹。另一條脈絡就是互聯網方面的(HTML/CSS/JS/LAMP…)。我是一個有技術憂慮症的人,這幾條軟件開發的主線必定不能放棄。web
另外,從架構上來講,咱們能夠看到,算法
另外,我聽到有不少人說,一些技術不適用,一些技術太學院派,但對我來講,不管是應用仍是學術,我都會看,知識不愁多。何須搞應用的和搞學術的分開陣營,都是知識,學就行了。shell
技術的發展要根植於歷史,而不是將來。不要和我描述這個技術的將來會多麼美好(InfoQ 的 ArchSummit大會上有一個微軟來的人把Node.js說得跟仙女同樣,而後給了一個Hello World),我認可你用一些新的技術能夠實現不少花哨的東西。可是,我認爲技術都是承前的,只有承前的纔會常青。因此說「某某(技術)要火」這樣的話是沒有意義的,等它火了、應用多了,規模大了,再說。有些人說:「不學C/C++也是沒有問題的」,我對此的迴應是:若是連技術主幹均可以不學的話,還有什麼其餘的好學呢?這些是計算機發展的根、脈絡、祖師爺,這樣的東西怎麼能夠不學呢?數據庫
另外,咱們要去了解整個計算機文化,我以爲計算機文化源起於Unix/C這條線上(注意,我說的是文化不是技術)。我也寫過不少與Unix文化相關的文章,你們能夠看看我寫的「Unix傳奇(尤爲是下篇)」。編程
學校教的大部分都是知識密集型的技術,可是社會上的企業大部分都是勞動密集型的。什麼是勞動密集型的企業呢?麥當勞炸薯條就是勞動密集型的工做,用不到學校教授的那些知識。若是有一天你不炸薯條了,而要去作更大更專業的東西,學校裏的知識就會派上用場。有人說一個語言、一個技術,能解決問題能用就好了,我不這樣認爲。我以爲你應該至少要知道這些演變和進化的過程。而若是你要解決一些業務和技術難題,就須要抓住某種技術很深刻地學習,當成藝術同樣來學習。後端
我在「軟件開發‘三重門’」裏說過,第一重門是業務功能,在這重門裏,的確是會編程就能夠了;第二重門是業務性能,在這一重門裏,技術的基礎就很管用了,好比:操做系統的文件管理,進程調度,內存管理,網絡的七層模型,TCP/UCPUDP的協議,語言用法、編譯和類庫的實現,數據結構,算法等等就很是關鍵了;第三重門是業務智能,在這一重門裏,你會發現不少東西都很學院派了,好比,搜索算法,推薦算法,預測,統計,機器學習,圖像識別,分佈式架構和算法,等等,你須要讀不少計算機學院派的論文。瀏覽器
總之,這主要看你職業生涯的背景了,若是你成天被看成勞動力來使用,你用到的技術就比較淺,比較實用,可是若是你作一些知識密集型的工做,你就須要用心來搞搞研究,就會發現你須要理論上的知識。好比說,我以前作過的跨國庫存調配,須要知道最短路徑的算法,而我如今在亞馬遜作的庫存預測系統,數據挖掘的那些東西都須要很強的數學建模、算法、數據挖掘的功底。
我以爲真正的高手都來自知識密集型的學院派。他們更強的是,能夠把那些理論的基礎知識應用到如今的業務上來。但很惋惜,咱們國內今天的教育並無很好地把那些學院派的理論知識和現實的業務問題很好地接合起來。好比說一些哈希表或二叉樹的數據結構,若是咱們的學校在講述這些知識的時候可以接合實際的業務問題,效果會很是不錯,如:設計一個IP地址和地理位置的查詢系統,設計一個分佈式的NoSQL的數據庫,或是設計一個地理位置的檢索應用等等。在學習操做系統的時候,若是老師能夠帶學生作一個手機或嵌入式操做系統,或是研究一下Unix System V或是Linux的源碼的話,會更有意思。在學習網絡知識的時候,能帶學生重點學一下以太網和TCP/IP的特性,並調優,若是能作一個網絡上的pub/sub的消息系統或是作一個像Nginx同樣的web server,那會更好。若是在學圖形學的過程當中能帶領學生實踐一個做圖工具或是一個遊戲引擎,那會更有意思。
總之,咱們的教育和現實脫節太嚴重了,教的東西不管是在技術仍是在實踐上都嚴重落後和脫節,沒有經過實際的業務或技術問題來教學生那些理論知識,這是一個失敗。
我以爲倒不是。作一個軟件開發者更簡單了。由於如今互聯網很發達,你能夠找到不少共享的知識——相對於我那個時候。第一,知識你容易查到,而後社區不少,文章、分享的人也愈來愈多。咱們那個時候沒有的。上網一查,什麼都沒有。都得去本身琢磨,本身去調查。因此我以爲相比咱們那個時候更容易了。第二,工具變多了。如今的工具比那個時候好用多了。咱們那個時候就是一天到晚在vi裏面,連個自動提示都沒有,連個版本庫管理都沒有。不光工具變多,框架也多了,各類各樣的編程框架。咱們那時候都是生寫。寫JavaScript,生寫,連個jQuery都沒有。沒有這些輔助性的、讓你提升生產力的東西。J2EE那時候也沒有。並且整個(開發環境)都很不成熟。一個服務器的最高配置就1GB的狀況下,一個WebSphere起來就佔了900多MB——這還能跑什麼應用?因此只能去用最基礎的系統。因此我以爲如今,不管是環境,仍是開發的過程,都更規範了。之前我作開發的時候就是,什麼都不懂就上了,瞎搞,沒有什麼開發規範,沒有人理你,反正你搞得好就搞好,搞很差就搞很差了,全靠本身,包括作測試維護等等。我以爲如今的軟件開發就很好,你一上去,就有好的工具,有好的知識庫,有好的社區,有好的開發框架,還有好的流程,方法,甚至還有人幫你作測試,還有人告訴你應該怎麼作。幸福得很。如今好多人還說這個很差那個很差,開發難什麼的。其實容易多了。
可是,有個東西我以爲是如今的軟件開發者比咱們那時候變得更難的。就是,你享福了之後,人就變懶,變嬌氣了。對不少東西的抱怨就開始多了。咱們那個時候哪有什麼好抱怨的?沒啥好抱怨的,有活就幹,有東西學就趕快學。如今呢,學個什麼東西還挑挑揀揀的,抱怨這個語言太扯,那個IDE很差,這個框架太差,版本管理工具太扯,等等。這就好像之前我沒東西吃,只有個糠吃,要是有面包有饅頭,我就以爲很是很是好了。如今是,好吃的東西多了咱們還學會挑食了,這也很差用,那也很差用。
根本就不是技術變難了,環境變差了,是程序員變嬌氣了。因此軟件開發變難,歸根結底仍是程序員們本身變嬌氣了。
中國人中庸的思想,入世和出世,天天的工做就是入世。舉個例子,我十年前在上海的時候,給交通銀行作項目的時候,每週休息一天,早九點到晚十點,天天工做12個小時,這樣的工做持續了一全年,沒有節假日,項目上的技術也沒什麼意思。當時我晚上十點回到住處,還想學一些C++/Java和Unix/Windows的技術,因而就看書到晚上11:30,天天如此,一年下來學到不少東西,時間沒有荒廢,內心就很開心。我以爲當時是快樂的,由於有成長的感受是快樂的。
如今的我,工做、寫博客、養孩子,事情其實更多。我早上7:30起牀,會瀏覽一下國外的新聞,hacker news, tech church, reddit, highavailability之類的站點,9點上班。晚上六、7點鐘下班,開始帶孩子。十點鐘孩子睡了覺,我會開始從新細讀一下這一天都發生了些什麼事情。這個時間也有可能會用來看書。學習的過程(我)是不喜歡被打斷的,因此從十點到十二點,家人都睡了,這正是我連續學習的好時間。可能從晚上11:30開始,我會作點筆記或者寫博客。我如今對酷殼文章的質量要求比較高一些,因此大概積累一個星期的時間才能夠生成一篇文章。天天我大概都在一兩點鐘纔會睡覺。沒辦法,我有技術焦慮症。可是以爲這樣的生活很充實,也很踏實。
另外,任何一門技術玩深了,都是頗有意思的。有些人造成了一個價值取向,「我只作什麼,毫不作什麼」。前段時間有一個剛來亞馬遜的工程師,他原來作的是數據挖掘推薦系統,原來的公司重組要讓他作前端,他不願就離職了,他說他不想作前端。我以爲,前端後端都是編程,Javascript是編程,C++也是編程。編程不在於你用什麼語言去coding,而是你組織程序、設計軟件的能力,只要你上升到腦力勞動上來,用什麼都同樣,技術無貴賤。你能夠不喜歡那個技術,可是仍是要了解了解,也沒有必要徹底不用,徹底拋棄。Javascript啊——只要能被Javascript實現的,將來總有一天會被Javascript所取代。
回到問題,怎麼才能享受到快樂呢?
總之一句話——若是你沒有興趣,什麼都是藉口,若是你有興趣了,什麼都是好玩的。
轉自:http://coolshell.cn/articles/8088.html/comment-page-1#comments