前些日子,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ù))。
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)領域的解決方案提供商
成為生物信息學領域的開拓者
...
本文面向的是技術小白或編程初學者,技術大牛可繞道。
也許你有疑慮,文章通篇沒給出一個切實可行的落地方案。
確實如此。
文章面向的是大眾,關注的是如何思考。
落地面對的是個人,個人終究還是要因人而異。
如果你想進一步咨詢或探討,可以后臺留言(會盡可能回復),或加入小密圈。
本文由公眾號「世相微語」原創(chuàng),歡迎朋友圈分享。
關注「世相微語」,有機會一起探討,一起翱翔。