標籤:電腦科學 軟體技術 布爾代數 程式員 嵌入式
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/80/05/wKiom1c0TJfwz5SbAADS_yb12L0995.jpg" title="5.jpg" alt="wKiom1c0TJfwz5SbAADS_yb12L0995.jpg" />
有人說軟體技術變化太快,現在學的東西過兩年就要完全淘汰,是嗎?
你知道這話是什麼人說的嗎?必然是已經被淘汰的人說的。比如Delphi、BCB、PB這些開發工具和語言,都曾經很是風光了一陣,但現在已經完全被Java和.NET取代了。那麼Java和.NET會不會被取代呢,也許在相當長的時間內還不會。
這些被淘汰的程式員有一些共同的特點:只會用滑鼠拖拽控制項,離開IDE就不知道如何工作,學點兒花拳繡腿的功夫就想吃一輩子,對學習新技術不感興趣,做一天和尚撞一天鐘。現在請回頭看看1,在整個軟體技術領域,這些變化快的技術其實只佔了很小的一塊,卻成了這些人的全部看家本領,這樣的人能不被淘汰嗎?
與這些流行的開發工具和語言相反,很多技術和思想是很少變化的。比如,POSIX和SUS標準規定了一套系統函數介面和基本命令的語義,只有實現了這些才可以稱作UNIX,因此今天的Linux、Solaris跟20多年前的UNIX在系統功能層上是基本一致的。而指導電腦科學發展的數學理論,甚至是老祖宗們在電腦還沒誕生的年代就替我們想好的:布爾代數發表於19世紀,直到一個世紀後發明了電腦和數字電路才有了用武之地;數論在17世紀就出現了,一直都被數學家們當成一套好玩的理論,但只是好玩而已,直到電腦密碼學誕生後才發現它的實際用處。
各種流行的開發工具和進階語言雖然變化很快,但是底層的程式設計語言卻非常穩定,各種作業系統的核心都是用C語言寫的,以前是這樣,以後也不會改變。另一方面,各種程式設計語言的設計思想也是非常穩定的。其實世界上只有兩種程式設計語言,一種是C,一種是LISP,前者是imperative的,是對電腦模型的抽象,後者是functional的,是對數學函數模型的抽象。物件導向是一種重要的軟體工程思想,卻算不上一種新的語言模型,應該歸在C的一類。屬於同一類的各種語言其實都大同小異,一個精通C++的人學習Java需要多長時間?熟悉文法一個星期,熟悉類庫三個星期,一個月足矣,以往的經驗都可以套到新的程式設計語言上。然而要想習得深厚的演算法功底、邏輯思維和抽象思維修養,能夠真正說清楚“系統”是什麼,如何分析和設計“系統”,需要多長時間?恐怕要數十年。
在嵌入式學習過程中的困惑——有人說軟體技術變化太快,現在學的東西過兩年就要完全淘汰,是嗎?