從移動OS變遷到語言簡史,漫談程序員編程之路

前些日子,Youtube上看到了一位網(wǎng)名為“9To5Google”的發(fā)布者,上傳了一段視頻:Hands-on with Google's new Fuchsia OS

視頻截圖

在視頻下方,還附上了一篇關于谷歌這個新操作系統(tǒng)Fuchsia的文章,網(wǎng)址:https://9to5google.com/2017/05/10/fuchsia-os-hands-on/

國內外各媒體自然也不會錯過,紛紛報道了谷歌這款新OS-Fuchsia的相關細節(jié)。

簡而言之,F(xiàn)uchsia基于谷歌自主研發(fā)的微內核Magenta,拋棄了Linux內核,UI層使用跨平臺的Flutter SDK,還內置了escher(一個基于Vulkan的圖像渲染引擎)。

Fuchsia支持各種分屏模式和多任務操作,相比目前碎片化嚴重的Android,更適合應用在PC、AR/VR/MR、物聯(lián)網(wǎng)等領域。

在移動市場,盡管目前Android的占有率超過8成,市場份額遙遙領先,在谷歌的地位也舉足輕重。

但基于目前Android流暢性不足,以及谷歌對Android弱掌控的現(xiàn)實,未來的移動端,從Android(包括PC端的Chrome OS)遷移到Fuchsia也應該是谷歌所期望的。

也許你覺得是杞人憂天,但縱觀歷史,這似乎又是順理成章的事。


移動OS變遷

IBM Simon

1994年8月,作為世上公認的第一部智能移動設備,IBM Simon發(fā)布。

IBM Simon搭載了ROM-DOS操作系統(tǒng)和Navigator用戶界面。包含世界時鐘、行程表、日歷、計算器等功能,可收發(fā)傳真、電子郵件等。


Windows

1996年11月,微軟專為HPC定制的Windows CE面世。

2000年6月,Windows CE 3.0問世,而后更名為Pokect PC(即后來的Windows Mobile),打響市場。

2010年10月,微軟正式發(fā)布Windows Phone 7。

2012年6月,微軟發(fā)布了代號為“Apollo”的Windows Phone 8。

2015年1月,微軟發(fā)布Windows 10 Mobile。

根據(jù)IDC報道,Windows Phone的市場份額在2013年曾達到3.9%(參考下圖,2017年是預測數(shù)據(jù))。

在2013年第三季度, 平均21%的移動開發(fā)者使用了Windows Phone平臺。


Palm OS/WebOS

1996年3月,專用于PDA上的Palm移動操作系統(tǒng)1.0發(fā)布。

由于系統(tǒng)簡單易用、軟件豐富和高效的手寫輸入法等亮點,Palm在微軟、諾基亞、黑莓還未強勢介入前,一度占據(jù)了PDA市場上大部分的份額,風靡一時。

2009年1月,作為PalmOS的繼任者,WebOS應運而生。

Palm希望借此重塑輝煌,但事與愿違,2010年4月Palm被惠普收購,WebOS也未能挽救Palm的衰亡。

2011年8月,惠普宣布停止開發(fā)及生產(chǎn)webOS產(chǎn)品線。


黑莓

1999年1月,作為黑莓手機專用的移動操作系統(tǒng)-BlackBerry首次亮相。

黑莓向來以安全性著稱,在政客、商務人士人群中普及率極高。

2009年,黑莓手機還曾占據(jù)美國50%以上市場份額(參考下圖)。

但如今黑莓的人氣一落千丈,已被大眾漸漸淡忘。


塞班

2000年12月,第一款搭載塞班OS的智能手機問世。

2008年12月,諾基亞宣布完成對塞班的收購。

2010年2月,諾基亞發(fā)布塞班^3,并正式開放源碼。

塞班作為歷史上第一個真正意義上的智能移動OS,輝煌一時。

在iOS和Android問世之前,諾基亞借助塞班,當之無愧成了智能手機界的霸主。

但塞班從輝煌走向隕落,諾基亞由盛極一時到顛沛流離,也不過是短短幾年。

7610、3230、3250、5230、N70、N73、N86、N93i、N95等等,也都只能成了經(jīng)典回憶。

2009年年底開始,LG、索尼愛立信、三星等各大廠商紛紛終止研發(fā)塞班,轉投Android陣營。

2012年2月,塞班的全球市場占有份額僅為3%,霸主地位已被Android取代。

2013年1月,諾基亞宣布不再發(fā)布搭載塞班的手機,塞班最終謝幕。


iPhone

2007年1月,喬布斯發(fā)布第一代iPhone,公開亮相,同年6月正式發(fā)售。

從此蘋果時代來臨。


Android

2007年11月,由谷歌倡導,聯(lián)合了34家廠商成立了開放手持設備聯(lián)盟,聯(lián)盟包括Broadcom、HTC、Intel、LG、Marvell、Samsung等企業(yè),來共同研發(fā)和完善Android系統(tǒng)。聯(lián)盟對外展示了第一部搭載Android的智能手機。

2008年9月,HTC官方發(fā)布全球首款商用Android手機HTC Dream。

從此Android時代開啟。


無論是曾經(jīng)輝煌的Palm、黑莓、塞班,還是命途多舛的MeeGo、Firefox OS、Ubuntu Touch。

無論是正在積極推進的Tizen、Sailfish OS,還是有強大后盾的WindowsPhone、Windows 10 Mobile。

還有后來居上、目前雄霸市場的Android、iOS。

每一代移動操作系統(tǒng),都是一代研發(fā)工程師的追求與夢想,都凝聚了一代開發(fā)人員的智慧與心血。

但同時,移動操作系統(tǒng)的變遷史,也可能是移動開發(fā)人員的血淚史。當年在塞班系統(tǒng)上積累的所謂豐富的移動開發(fā)經(jīng)驗,到如今的IOS和Android時代,還剩多少價值?


未來會怎樣?

技術就像一列高速運轉的火車,并不會就此止步,F(xiàn)uchsia只是其一,還有下一代會話式UI交互技術,也正蓄勢待發(fā)。

蘋果Siri、微軟Cortana、Google Assistant、Amazon Alexa等語音助手的普及,以及語音識別、NLP、NLU等技術的不斷改進。

會話式UI這種新型交互模式的崛起是一個大概率事件。


而對于技術人員,一次次的技術變革、之前積累的經(jīng)驗也許會價值縮水,甚至會一文不值。

即使是同一個IOS、Android,很多開發(fā)人員也由原生的開發(fā)方式,過渡到了像React Native、Weex類似的跨平臺解決方案,允許直接使用JS來開發(fā)APP。

因為移動操作系統(tǒng)的變遷,有些個體在苦苦掙扎,有些個體不得不在一個陌生的領域另起爐灶,從頭再來。Android已經(jīng)有后來者虎視眈眈,IOS呢,誰能確保它不會是下一個塞班?

面對紛繁復雜的技術體系,我們程序員該如何選擇?

如何準確把握趨勢?

如何辨識哪些技術才具備持久的生命力?


回首過去六十年

FORTRAN

1957年,首個FORTRAN編譯器在IBM計算機上實現(xiàn)。作為最早的高級編程語言之一,F(xiàn)ORTRAN目前在科學和工程計算領域仍有不少應用。


LISP

1958年,美國的John McCarthy基于λ演算創(chuàng)造了LISP語言。

作為第一個函數(shù)式編程語言,LISP早期廣泛用于微積分計算、定理證明、博奕論、人工智能等領域。Common Lisp和Scheme是LISP最有名的兩門方言。

至今在教育、金融等領域依然能見到它的身影。《黑客與畫家》的作者Paul Graham對Lisp評價頗高。


COBOL

1959年,美國五角大樓組織了一個委員會去設計開發(fā)一種面向商業(yè)的通用語言,COBOL就此誕生。

COBOL目前在金融、會計等商業(yè)數(shù)據(jù)處理領域仍有不少應用。


BASIC

1964年,美國兩位數(shù)學家兼計算機科學家John Kemeny和Thomas Kurtz在Dartmouth學院設計了一種新的語言—BASIC。

BASIC的初衷是專為初學編程者設計的。


Pascal/Delphi

1970年,瑞士Niklaus Wirth教授發(fā)布了Pascal語言。

1995年,Delphi作為Borland公司的Windows應用軟件集成開發(fā)環(huán)境(IDE),首次面世。

Delphi由于比C++易學,比VB強大,曾經(jīng)風靡一時,也是大學程序設計課程的主流編程語言之一。

當時曾有一句名言:“真正的程序員用C,聰明的程序員用Delphi”。

在一些傳統(tǒng)企業(yè)、事業(yè)單位等,應該還能看見Delphi的身影。


C

1972年,貝爾實驗室的Dennis Ritchie出于系統(tǒng)移植,需要重寫Unix內核,以B語言為基礎設計開發(fā)了C語言。

由于C語言的高效、表達方式靈活、功能強大、可移植性好、可進行結構化程序設計等優(yōu)點,時至今日,C語言依然是最為廣泛使用的編程語言之一,也是眾多科班出身的程序員入門編程的首選語言。

C語言也直接促成或間接影響了眾多后起之秀,如C++、Objective-C、Java等。


Objective-C

1981年~1984年,Stepstone公司的Brad Cox和Tom Love設計開發(fā)了Objective-C語言。

它擴展了標準的ANSI C,后續(xù)成了編寫OS X和IOS應用程序時主要的編程語言。


C++

1983年,在Rick Mascitti的建議下,Bjarne Stroustrup等人將1979年開始著手研發(fā)的C with Classes改名為C++,C++自此誕生。

作為一種最廣泛使用的編程語言之一,C++支持多重編程范式,包括抽象數(shù)據(jù)、面向過程、面向對象、泛型編程等。

如今在眾多性能、內存控制高要求,或底層驅動等場景下,還有Window客戶端,C++依然是最佳的編程選擇之一。


Erlang

1986年,愛立信的Joe Armstrong、Robert Virding、Mike Williams共同創(chuàng)造了Erlang,1998年開放源代碼。

Erlang屬于函數(shù)式編程語言,在高并發(fā)、分布式場景有較多應用。


Perl

1987年,Larry Wall為方便報表處理,開發(fā)了一門通用的Unix腳本語言-Perl。

Perl被稱為編程語言里的瑞士軍刀,在系統(tǒng)維護、腳本、自動化、生物信息學等領域應用廣泛。


Python

1991年,Guido van Rossum首次發(fā)布了Python解釋器。Python支持面向對象、命令式編程、泛型編程等多種編程范型。

Python代碼簡潔、優(yōu)雅,容易使用,在科學計算、游戲、爬蟲、人工智能等領域應用廣泛。


R

1993年,新西蘭Auckland大學的Ross Ihaka和Robert Gentleman開發(fā)了R語言。

R語言在統(tǒng)計分析、數(shù)據(jù)挖掘、機器學習等領域應用廣泛。


Java

1995年,Sun公司改造了James Gosling等人于90年代初開發(fā)的Oak,以Java為名正式發(fā)布Java 1.0,并提出了"Write Once, Run Anywhere"。

Java的輝煌不必多言,常年高居編程語言排行榜榜首。


PHP

1995年,Rasmus Lerdorf出于維護個人主頁開發(fā)了PHP。

由于其易學易用的特性,PHP的使用也相當廣泛,尤其是在Web網(wǎng)站開發(fā)領域。


Ruby

1995年,日本人松本行弘正式公開發(fā)布了Ruby,其中Ruby on Rails框架甚為知名。

Ruby在Web開發(fā)社區(qū)、自動化運維等領域占據(jù)一席之地。


JS

1995年,Netscape與Sun達成協(xié)議,將其開發(fā)的瀏覽器腳本語言叫做JavaScript。

從此這個一統(tǒng)前端江湖的腳本語言問世。

HTML5的未來勢不可擋。

得益于Node.js的崛起,全棧JS工程師也一度興起。

加之目前借助于React Native等框架,移動端APP的開發(fā)也可基于JS完成。

JS前景可謂一片光明。


Scala

2004年,運行于Java虛擬機的Scala發(fā)布。Scala的設計初衷是要整合面向對象和函數(shù)式編程,取各家所長。

Scala在大數(shù)據(jù)、Web開發(fā)等領域有不少應用,大名鼎鼎的大數(shù)據(jù)框架Spark即用Scala編寫。

有相當一部分java程序員把scala作為第二編程語言。


Clojure

2007年,運行于Java虛擬機的List方言Clojure誕生。開發(fā)者是Rich Hickey。

由于其語法簡練、專注實用、清晰一致等優(yōu)點,受到不少程序員青睞,特別是熟悉Lisp或Java的程序員。


Go

2009年,Go語言(也稱Golang)正式宣布推出并開放源代碼。

Go出自Google,具有執(zhí)行效率高、開發(fā)速度快、并發(fā)性好、部署簡單等優(yōu)點,號稱是云計算時代的C語言。

很多初創(chuàng)公司(尤其云計算、區(qū)塊鏈領域)選擇Go作為其核心技術。

而且在Google等推動下,Go有望在人工智能領域也一展身手。


Rust

2010年,Mozilla主導開發(fā)的通用編程語言Rust對外發(fā)布。

Rust語法接近C和C++,安全性、并發(fā)性、性能要求高的場景下,是最有潛力的競爭者之一。

2016、2017年度的Stack Overflow開發(fā)者調查,Rust榮獲了“最受喜愛的編程語言”。


Dart

2011年,Google宣布推出一門開源編程語言-Dart,目標是成為下一代Web開發(fā)語言。

雖然短期內JS的地位無法撼動,但Dart的潛力還是很不錯的,曾被評為2017年最有潛力的三門語言之一(另外兩門是Go、Perl)。

另外,將來Fuchsia操作系統(tǒng)如果盛行,Dart無疑會成為新寵,潛力不可估量。


Swift

2014年,在WWDC(蘋果開發(fā)者年會)上,蘋果發(fā)布了Swift,與Objective-C共存于Mac OS和iOS平臺。

今年3月,Swift首次進入編程語言排行榜前十名。


注1:數(shù)字信息盡量是不同資料來源可相互考證的,個別數(shù)據(jù)來源之間信息不一致的,以英文版Wikipedia為準。

注2:編程語言總數(shù)超過500門(數(shù)據(jù)參考了Quora),上述列出的只不過是個人熟悉、認識、或看好的一小部分


慎重選擇編程語言

編程是具備長久生命力的職業(yè),但具體到個人,很多時候并非如此。

之前一位同事,在IBM China,還有另一位,在日本NTT DATA,做的都是銀行、保險等金融機構的項目。

平時主要工作就是玩轉大型機-MainFrame,編寫JCL(Job Control Language),系統(tǒng)還是用COBOL語言開發(fā)的。

類似這樣的工作,僧少粥也少,混個日子不難,但在一個市場如此狹窄的領域,前景可想而知。

本公司的員工大多走了管理路線。但外派進場的人員,除了少數(shù)有機會轉正,剩余的大多數(shù),每天敲的代碼最大的回報是那還算過的去的薪水,于自身發(fā)展,不言自明。


還有一位,在事業(yè)單位整天玩轉Delphi。

上面也曾提到,Delphi功能強大、控件極其豐富,開發(fā)方便快捷。

但如今顯然已是小眾語言,走出這個事業(yè)單位,前景可想而知。


還有一位,當年整天在玩轉炫酷的Flex。

但隨著Html5的崛起,Adobe開始放棄Flex。

Flex開發(fā)人員不得不轉投JS陣營,重新開始。


還有當年風光無限的SAP、Oracle EBS高級開發(fā)|實施顧問,眼看著走下坡路,還是無奈的啃著老本。


注:個人經(jīng)歷、眼界所限,COBOL、DELPHI、Flex、ERP大牛請略過此處


語言如果有些小眾,或者已走向沒落,編程的生命可能就不會長久,后面那些年也許可以轉實施、轉管理,也許就成了代碼搬運工。

選擇編程語言,不僅僅要考慮語言本身,還應多看看周邊的生態(tài)。立足于大的生態(tài),你可以走的更加穩(wěn)健、踏實。

如果現(xiàn)實點,可以搜索一下互聯(lián)網(wǎng)科技企業(yè)的招聘信息,看看都缺什么樣的人才。選擇流行度高、應用廣、需求多的語言,也許達不到為興趣而敲代碼,但至少不會餓肚子。

總之,選擇編程語言,盡量避免讓自己的而立或者不惑之年,處于四顧茫然的境地。


只學一門夠嗎?

“語言是相通的,一門精通了,其他上手也很快”。

話雖這么說,但編程語言的跨界,可能并沒有你想象的那么簡單,除非你只是想寫個“Hello World”。

語言之間,有不同的語法特征、語言風格,編程范式的傾向也有所差異,有面向對象、面向過程、函數(shù)式、泛型編程等等。有弱類型,有強類型。有靜態(tài)類型,有動態(tài)類型。有編譯型,有解釋型。

即使你克服了上述這些,你還得熟悉該語言相關的工具、框架,以及背后的生態(tài)。

別說從C++跨到Haskell,即使是從C++跨到java,至少也得有個半年的孜孜不倦(大神除外)。

優(yōu)秀的程序員,不在于掌握了多少門語言,而在于你利用編程創(chuàng)造了什么、解決了什么。

有人說,“精通一門語言不能通吃各個領域”。

這能說明什么?什么也說明不了,沒有人能依靠個人技能通吃各個領域。因為我們不是達芬奇。


那為何還要學習多門?

跨語言玩得多了,凌駕于語言之上的東西,就會自然而然呈現(xiàn)出來。

數(shù)據(jù)結構、設計模式、算法架構、網(wǎng)絡協(xié)議,模型抽象、OS|編譯器原理、分布式、高并發(fā)、可擴展、高容錯,概率統(tǒng)計、數(shù)論、代數(shù)、幾何、微分、邏輯思維...

正如人類的語言是相互交流的媒介,編程語言也不過是人和機器溝通的工具。程序背后蘊含的原則、思想、哲學,甚至數(shù)學,才更值得玩味,也更為厚重。

掌握多門編程語言,還有一個優(yōu)勢:你不會只依賴你的那一把錘子,而把一切都看作是釘子。

許多不同的場景,如果能選擇一個趁手的工具,可以達到事半功倍的效果。


幾點建議

跨編程范式學習,思維可以更加開闊,如C++程序員,可以學點Haskell。

跨語言,同語系,如java程序員,可以學點同屬JVM系的Scala、Clojure、Groovy。

跨前后端學習,做全棧工程師,如PHP程序員,可以學點JS。這個加入創(chuàng)業(yè)團隊,或自己折騰點東西,會比較不錯。

同一門語言,也可以試試不同寫法。Java 8已經(jīng)可以寫Lambda表達式了。

Java程序員還可以轉安卓開發(fā),熟悉一下Android的基本組件以及事件處理機制等,善用一些Android的開源庫。

跳出安逸的舒適區(qū),很多時候確實會有意外收獲

但切記勿盲目跟風、淺嘗即止,要耐得住寂寞,沒有一段時間的積累和付出,很難會有真正的收獲。

如果學習一門語言,只會使用工具,調用API,熟悉框架,那我勸你,還是少學這一門吧。


多說兩句

多閱讀Github等網(wǎng)站上優(yōu)秀的開源代碼,看看大牛們如何寫出那么棒的代碼的。

多思考如何讓代碼更簡約?如何讓開發(fā)更敏捷?

也許你還沒經(jīng)歷過技術的變遷,但為了避免哪一天,自己編程的職業(yè)生涯走入了死胡同,懂得未雨綢繆總是好的。

如果真天不由人,可以嘗試將技術能力拓展到產(chǎn)品、設計、運營、管理、測試等領域。

產(chǎn)品大神,多半出自懂編程的程序員。

最后,編程關乎的是人,而不是計算機。有些時候,也要多學點人類的語言,懂得如何與人溝通。


未來會如何?

未來,你糾結的可能不再是語言、平臺。

跨平臺的解決方案,層出不窮,會逐步趨向成熟、穩(wěn)定。

優(yōu)秀的算法、框架、方案,會逐步提供各種編程語言的API。譬如Google的TensorFlow。

將來,你考慮更多的可能是,如何站在巨人的肩膀上,

成為大數(shù)據(jù)領域的數(shù)據(jù)科學家

成為人工智能領域的AI專家

成為VR/AR/MR領域的技術大牛

成為區(qū)塊鏈領域的應用專家

成為物聯(lián)網(wǎng)領域的解決方案提供商

成為生物信息學領域的開拓者

...


本文面向的是技術小白或編程初學者,技術大牛可繞道。

也許你有疑慮,文章通篇沒給出一個切實可行的落地方案。

確實如此。

文章面向的是大眾,關注的是如何思考。

落地面對的是個人,個人終究還是要因人而異。


如果你想進一步咨詢或探討,可以后臺留言(會盡可能回復),或加入小密圈。

http://t.xiaomiquan.com/RfqFAIE


本文由公眾號「世相微語」原創(chuàng),歡迎朋友圈分享。

關注「世相微語」,有機會一起探討,一起翱翔。

世相微語

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容