前些日子,Youtube上看到了一位网名为“9To5Google”的发布者,上传了一段视频:Hands-on with Google's new Fuchsia OS
在视频下方,还附上了一篇关于谷歌这个新操作系统Fuchsia的文章,网址:https://9to5google.com/2017/05/10/fuchsia-os-hands-on/
国内外各媒体自然也不会错过,纷纷报道了谷歌这款新OS-Fuchsia的相关细节。
简而言之,Fuchsia基于谷歌自主研发的微内核Magenta,抛弃了Linux内核,UI层使用跨平台的Flutter SDK,还内置了escher(一个基于Vulkan的图像渲染引擎)。
Fuchsia支持各种分屏模式和多任务操作,相比目前碎片化严重的Android,更适合应用在PC、AR/VR/MR、物联网等领域。
在移动市场,尽管目前Android的占有率超过8成,市场份额遥遥领先,在谷歌的地位也举足轻重。
但基于目前Android流畅性不足,以及谷歌对Android弱掌控的现实,未来的移动端,从Android(包括PC端的Chrome OS)迁移到Fuchsia也应该是谷歌所期望的。
也许你觉得是杞人忧天,但纵观历史,这似乎又是顺理成章的事。
移动OS变迁
IBM Simon
1994年8月,作为世上公认的第一部智能移动设备,IBM Simon发布。
IBM Simon搭载了ROM-DOS操作系统和Navigator用户界面。包含世界时钟、行程表、日历、计算器等功能,可收发传真、电子邮件等。
Windows
1996年11月,微软专为HPC定制的Windows CE面世。
2000年6月,Windows CE 3.0问世,而后更名为Pokect PC(即后来的Windows Mobile),打响市场。
2010年10月,微软正式发布Windows Phone 7。
2012年6月,微软发布了代号为“Apollo”的Windows Phone 8。
2015年1月,微软发布Windows 10 Mobile。
根据IDC报道,Windows Phone的市场份额在2013年曾达到3.9%(参考下图,2017年是预测数据)。
Palm OS/WebOS
1996年3月,专用于PDA上的Palm移动操作系统1.0发布。
由于系统简单易用、软件丰富和高效的手写输入法等亮点,Palm在微软、诺基亚、黑莓还未强势介入前,一度占据了PDA市场上大部分的份额,风靡一时。
2009年1月,作为PalmOS的继任者,WebOS应运而生。
Palm希望借此重塑辉煌,但事与愿违,2010年4月Palm被惠普收购,WebOS也未能挽救Palm的衰亡。
2011年8月,惠普宣布停止开发及生产webOS产品线。
黑莓
1999年1月,作为黑莓手机专用的移动操作系统-BlackBerry首次亮相。
黑莓向来以安全性著称,在政客、商务人士人群中普及率极高。
2009年,黑莓手机还曾占据美国50%以上市场份额(参考下图)。
塞班
2000年12月,第一款搭载塞班OS的智能手机问世。
2008年12月,诺基亚宣布完成对塞班的收购。
2010年2月,诺基亚发布塞班^3,并正式开放源码。
塞班作为历史上第一个真正意义上的智能移动OS,辉煌一时。
在iOS和Android问世之前,诺基亚借助塞班,当之无愧成了智能手机界的霸主。
但塞班从辉煌走向陨落,诺基亚由盛极一时到颠沛流离,也不过是短短几年。
7610、3230、3250、5230、N70、N73、N86、N93i、N95等等,也都只能成了经典回忆。
2009年年底开始,LG、索尼爱立信、三星等各大厂商纷纷终止研发塞班,转投Android阵营。
2012年2月,塞班的全球市场占有份额仅为3%,霸主地位已被Android取代。
2013年1月,诺基亚宣布不再发布搭载塞班的手机,塞班最终谢幕。
iPhone
2007年1月,乔布斯发布第一代iPhone,公开亮相,同年6月正式发售。
从此苹果时代来临。
Android
2007年11月,由谷歌倡导,联合了34家厂商成立了开放手持设备联盟,联盟包括Broadcom、HTC、Intel、LG、Marvell、Samsung等企业,来共同研发和完善Android系统。联盟对外展示了第一部搭载Android的智能手机。
2008年9月,HTC官方发布全球首款商用Android手机HTC Dream。
从此Android时代开启。
无论是曾经辉煌的Palm、黑莓、塞班,还是命途多舛的MeeGo、Firefox OS、Ubuntu Touch。
无论是正在积极推进的Tizen、Sailfish OS,还是有强大后盾的WindowsPhone、Windows 10 Mobile。
还有后来居上、目前雄霸市场的Android、iOS。
每一代移动操作系统,都是一代研发工程师的追求与梦想,都凝聚了一代开发人员的智慧与心血。
但同时,移动操作系统的变迁史,也可能是移动开发人员的血泪史。当年在塞班系统上积累的所谓丰富的移动开发经验,到如今的IOS和Android时代,还剩多少价值?
未来会怎样?
技术就像一列高速运转的火车,并不会就此止步,Fuchsia只是其一,还有下一代会话式UI交互技术,也正蓄势待发。
苹果Siri、微软Cortana、Google Assistant、Amazon Alexa等语音助手的普及,以及语音识别、NLP、NLU等技术的不断改进。
会话式UI这种新型交互模式的崛起是一个大概率事件。
而对于技术人员,一次次的技术变革、之前积累的经验也许会价值缩水,甚至会一文不值。
即使是同一个IOS、Android,很多开发人员也由原生的开发方式,过渡到了像React Native、Weex类似的跨平台解决方案,允许直接使用JS来开发APP。
因为移动操作系统的变迁,有些个体在苦苦挣扎,有些个体不得不在一个陌生的领域另起炉灶,从头再来。Android已经有后来者虎视眈眈,IOS呢,谁能确保它不会是下一个塞班?
面对纷繁复杂的技术体系,我们程序员该如何选择?
如何准确把握趋势?
如何辨识哪些技术才具备持久的生命力?
回首过去六十年
FORTRAN
1957年,首个FORTRAN编译器在IBM计算机上实现。作为最早的高级编程语言之一,FORTRAN目前在科学和工程计算领域仍有不少应用。
LISP
1958年,美国的John McCarthy基于λ演算创造了LISP语言。
作为第一个函数式编程语言,LISP早期广泛用于微积分计算、定理证明、博奕论、人工智能等领域。Common Lisp和Scheme是LISP最有名的两门方言。
至今在教育、金融等领域依然能见到它的身影。《黑客与画家》的作者Paul Graham对Lisp评价颇高。
COBOL
1959年,美国五角大楼组织了一个委员会去设计开发一种面向商业的通用语言,COBOL就此诞生。
COBOL目前在金融、会计等商业数据处理领域仍有不少应用。
BASIC
1964年,美国两位数学家兼计算机科学家John Kemeny和Thomas Kurtz在Dartmouth学院设计了一种新的语言—BASIC。
BASIC的初衷是专为初学编程者设计的。
Pascal/Delphi
1970年,瑞士Niklaus Wirth教授发布了Pascal语言。
1995年,Delphi作为Borland公司的Windows应用软件集成开发环境(IDE),首次面世。
Delphi由于比C++易学,比VB强大,曾经风靡一时,也是大学程序设计课程的主流编程语言之一。
当时曾有一句名言:“真正的程序员用C,聪明的程序员用Delphi”。
在一些传统企业、事业单位等,应该还能看见Delphi的身影。
C
1972年,贝尔实验室的Dennis Ritchie出于系统移植,需要重写Unix内核,以B语言为基础设计开发了C语言。
由于C语言的高效、表达方式灵活、功能强大、可移植性好、可进行结构化程序设计等优点,时至今日,C语言依然是最为广泛使用的编程语言之一,也是众多科班出身的程序员入门编程的首选语言。
C语言也直接促成或间接影响了众多后起之秀,如C++、Objective-C、Java等。
Objective-C
1981年~1984年,Stepstone公司的Brad Cox和Tom Love设计开发了Objective-C语言。
它扩展了标准的ANSI C,后续成了编写OS X和IOS应用程序时主要的编程语言。
C++
1983年,在Rick Mascitti的建议下,Bjarne Stroustrup等人将1979年开始着手研发的C with Classes改名为C++,C++自此诞生。
作为一种最广泛使用的编程语言之一,C++支持多重编程范式,包括抽象数据、面向过程、面向对象、泛型编程等。
如今在众多性能、内存控制高要求,或底层驱动等场景下,还有Window客户端,C++依然是最佳的编程选择之一。
Erlang
1986年,爱立信的Joe Armstrong、Robert Virding、Mike Williams共同创造了Erlang,1998年开放源代码。
Erlang属于函数式编程语言,在高并发、分布式场景有较多应用。
Perl
1987年,Larry Wall为方便报表处理,开发了一门通用的Unix脚本语言-Perl。
Perl被称为编程语言里的瑞士军刀,在系统维护、脚本、自动化、生物信息学等领域应用广泛。
Python
1991年,Guido van Rossum首次发布了Python解释器。Python支持面向对象、命令式编程、泛型编程等多种编程范型。
Python代码简洁、优雅,容易使用,在科学计算、游戏、爬虫、人工智能等领域应用广泛。
R
1993年,新西兰Auckland大学的Ross Ihaka和Robert Gentleman开发了R语言。
R语言在统计分析、数据挖掘、机器学习等领域应用广泛。
Java
1995年,Sun公司改造了James Gosling等人于90年代初开发的Oak,以Java为名正式发布Java 1.0,并提出了"Write Once, Run Anywhere"。
Java的辉煌不必多言,常年高居编程语言排行榜榜首。
PHP
1995年,Rasmus Lerdorf出于维护个人主页开发了PHP。
由于其易学易用的特性,PHP的使用也相当广泛,尤其是在Web网站开发领域。
Ruby
1995年,日本人松本行弘正式公开发布了Ruby,其中Ruby on Rails框架甚为知名。
Ruby在Web开发社区、自动化运维等领域占据一席之地。
JS
1995年,Netscape与Sun达成协议,将其开发的浏览器脚本语言叫做JavaScript。
从此这个一统前端江湖的脚本语言问世。
HTML5的未来势不可挡。
得益于Node.js的崛起,全栈JS工程师也一度兴起。
加之目前借助于React Native等框架,移动端APP的开发也可基于JS完成。
JS前景可谓一片光明。
Scala
2004年,运行于Java虚拟机的Scala发布。Scala的设计初衷是要整合面向对象和函数式编程,取各家所长。
Scala在大数据、Web开发等领域有不少应用,大名鼎鼎的大数据框架Spark即用Scala编写。
有相当一部分java程序员把scala作为第二编程语言。
Clojure
2007年,运行于Java虚拟机的List方言Clojure诞生。开发者是Rich Hickey。
由于其语法简练、专注实用、清晰一致等优点,受到不少程序员青睐,特别是熟悉Lisp或Java的程序员。
Go
2009年,Go语言(也称Golang)正式宣布推出并开放源代码。
Go出自Google,具有执行效率高、开发速度快、并发性好、部署简单等优点,号称是云计算时代的C语言。
很多初创公司(尤其云计算、区块链领域)选择Go作为其核心技术。
而且在Google等推动下,Go有望在人工智能领域也一展身手。
Rust
2010年,Mozilla主导开发的通用编程语言Rust对外发布。
Rust语法接近C和C++,安全性、并发性、性能要求高的场景下,是最有潜力的竞争者之一。
2016、2017年度的Stack Overflow开发者调查,Rust荣获了“最受喜爱的编程语言”。
Dart
2011年,Google宣布推出一门开源编程语言-Dart,目标是成为下一代Web开发语言。
虽然短期内JS的地位无法撼动,但Dart的潜力还是很不错的,曾被评为2017年最有潜力的三门语言之一(另外两门是Go、Perl)。
另外,将来Fuchsia操作系统如果盛行,Dart无疑会成为新宠,潜力不可估量。
Swift
2014年,在WWDC(苹果开发者年会)上,苹果发布了Swift,与Objective-C共存于Mac OS和iOS平台。
今年3月,Swift首次进入编程语言排行榜前十名。
注1:数字信息尽量是不同资料来源可相互考证的,个别数据来源之间信息不一致的,以英文版Wikipedia为准。
注2:编程语言总数超过500门(数据参考了Quora),上述列出的只不过是个人熟悉、认识、或看好的一小部分。
慎重选择编程语言
编程是具备长久生命力的职业,但具体到个人,很多时候并非如此。
之前一位同事,在IBM China,还有另一位,在日本NTT DATA,做的都是银行、保险等金融机构的项目。
平时主要工作就是玩转大型机-MainFrame,编写JCL(Job Control Language),系统还是用COBOL语言开发的。
类似这样的工作,僧少粥也少,混个日子不难,但在一个市场如此狭窄的领域,前景可想而知。
本公司的员工大多走了管理路线。但外派进场的人员,除了少数有机会转正,剩余的大多数,每天敲的代码最大的回报是那还算过的去的薪水,于自身发展,不言自明。
还有一位,在事业单位整天玩转Delphi。
上面也曾提到,Delphi功能强大、控件极其丰富,开发方便快捷。
但如今显然已是小众语言,走出这个事业单位,前景可想而知。
还有一位,当年整天在玩转炫酷的Flex。
但随着Html5的崛起,Adobe开始放弃Flex。
Flex开发人员不得不转投JS阵营,重新开始。
还有当年风光无限的SAP、Oracle EBS高级开发|实施顾问,眼看着走下坡路,还是无奈的啃着老本。
注:个人经历、眼界所限,COBOL、DELPHI、Flex、ERP大牛请略过此处
语言如果有些小众,或者已走向没落,编程的生命可能就不会长久,后面那些年也许可以转实施、转管理,也许就成了代码搬运工。
选择编程语言,不仅仅要考虑语言本身,还应多看看周边的生态。立足于大的生态,你可以走的更加稳健、踏实。
如果现实点,可以搜索一下互联网科技企业的招聘信息,看看都缺什么样的人才。选择流行度高、应用广、需求多的语言,也许达不到为兴趣而敲代码,但至少不会饿肚子。
总之,选择编程语言,尽量避免让自己的而立或者不惑之年,处于四顾茫然的境地。
只学一门够吗?
“语言是相通的,一门精通了,其他上手也很快”。
话虽这么说,但编程语言的跨界,可能并没有你想象的那么简单,除非你只是想写个“Hello World”。
语言之间,有不同的语法特征、语言风格,编程范式的倾向也有所差异,有面向对象、面向过程、函数式、泛型编程等等。有弱类型,有强类型。有静态类型,有动态类型。有编译型,有解释型。
即使你克服了上述这些,你还得熟悉该语言相关的工具、框架,以及背后的生态。
别说从C++跨到Haskell,即使是从C++跨到java,至少也得有个半年的孜孜不倦(大神除外)。
优秀的程序员,不在于掌握了多少门语言,而在于你利用编程创造了什么、解决了什么。
有人说,“精通一门语言不能通吃各个领域”。
这能说明什么?什么也说明不了,没有人能依靠个人技能通吃各个领域。因为我们不是达芬奇。
那为何还要学习多门?
跨语言玩得多了,凌驾于语言之上的东西,就会自然而然呈现出来。
数据结构、设计模式、算法架构、网络协议,模型抽象、OS|编译器原理、分布式、高并发、可扩展、高容错,概率统计、数论、代数、几何、微分、逻辑思维...
正如人类的语言是相互交流的媒介,编程语言也不过是人和机器沟通的工具。程序背后蕴含的原则、思想、哲学,甚至数学,才更值得玩味,也更为厚重。
掌握多门编程语言,还有一个优势:你不会只依赖你的那一把锤子,而把一切都看作是钉子。
许多不同的场景,如果能选择一个趁手的工具,可以达到事半功倍的效果。
几点建议
跨编程范式学习,思维可以更加开阔,如C++程序员,可以学点Haskell。
跨语言,同语系,如java程序员,可以学点同属JVM系的Scala、Clojure、Groovy。
跨前后端学习,做全栈工程师,如PHP程序员,可以学点JS。这个加入创业团队,或自己折腾点东西,会比较不错。
同一门语言,也可以试试不同写法。Java 8已经可以写Lambda表达式了。
Java程序员还可以转安卓开发,熟悉一下Android的基本组件以及事件处理机制等,善用一些Android的开源库。
跳出安逸的舒适区,很多时候确实会有意外收获。
但切记勿盲目跟风、浅尝即止,要耐得住寂寞,没有一段时间的积累和付出,很难会有真正的收获。
如果学习一门语言,只会使用工具,调用API,熟悉框架,那我劝你,还是少学这一门吧。
多说两句
多阅读Github等网站上优秀的开源代码,看看大牛们如何写出那么棒的代码的。
多思考如何让代码更简约?如何让开发更敏捷?
也许你还没经历过技术的变迁,但为了避免哪一天,自己编程的职业生涯走入了死胡同,懂得未雨绸缪总是好的。
如果真天不由人,可以尝试将技术能力拓展到产品、设计、运营、管理、测试等领域。
产品大神,多半出自懂编程的程序员。
最后,编程关乎的是人,而不是计算机。有些时候,也要多学点人类的语言,懂得如何与人沟通。
未来会如何?
未来,你纠结的可能不再是语言、平台。
跨平台的解决方案,层出不穷,会逐步趋向成熟、稳定。
优秀的算法、框架、方案,会逐步提供各种编程语言的API。譬如Google的TensorFlow。
将来,你考虑更多的可能是,如何站在巨人的肩膀上,
成为大数据领域的数据科学家
成为人工智能领域的AI专家
成为VR/AR/MR领域的技术大牛
成为区块链领域的应用专家
成为物联网领域的解决方案提供商
成为生物信息学领域的开拓者
...
本文面向的是技术小白或编程初学者,技术大牛可绕道。
也许你有疑虑,文章通篇没给出一个切实可行的落地方案。
确实如此。
文章面向的是大众,关注的是如何思考。
落地面对的是个人,个人终究还是要因人而异。
如果你想进一步咨询或探讨,可以后台留言(会尽可能回复),或加入小密圈。
本文由公众号「世相微语」原创,欢迎朋友圈分享。
关注「世相微语」,有机会一起探讨,一起翱翔。