My Think About Career Specialization - from Computer Graphics, Computer Vision to Robot Perception
- 1. 个人经历
- 2. 一些认知
- 3. 回顾历史 : 信息(IT)时代/第三次工业革命
- 4. 展望未来 : 智能时代
- 5. 立足当下 : 知行合一
本文是我空闲下来,眼界开阔之后,对10多年工作经历的反思,也是对CS专业,IT行业的一些系统性的思考和总结,同时也是一系列关于科技,商业,产业,国家等深入学习和思考的第一篇…
History : 2015.12.15 初稿;2016.02.18 增加专业/职业考虑的因素; 2017.08.24 调整文章结构;2019.11.12 定稿
人生的道路是很漫长的,但要紧处常常只有几步。
— 柳青 <<创业史>>一个人的命运当然要靠自我奋斗,但也要考虑历史的进程。
— 江泽民人最大的无知是不知道自己无知。
参考书籍:
- <<异类>>
- <<见识>>
- <<人类简史>>
- <<浪潮之巅>>
- <<硅谷之谜>>
- <<商业的本质>>
- <<硅谷百年史>>
- <<全球科技通史>>
- <<第二次机器革命>>
学习历史,是为了开阔眼界,寻找客观规律。洞察当今世界的科技,政治,经济现状及格局,是为了看清未来大势,早做准备,厚积薄发。 回顾个人的过去,是为了总结经验教训,以后少走弯路;看清现在,是为了认清自己的价值观,能力,在方向选择上更坚定,对自我的定位更理性客观;展望未来,则是为了立足当下,做事更有目的性,树立清晰明确的长期愿景,中期目标,短期路径。
个人经历
以我个人学习和工作经历,来引出对CS专业,IT行业的一些认知,以及自我反思和对未来科技发展的预判及个人选择。可以看到一个出身于中国中部农村的普通人要经历多么漫长的时间,多么机缘巧合下才能在眼界,格局的层次上有所突破,能理解/从事当前世界最前沿的科技和产业领域。这是一个从“不知道自己无知” 到 “知道自己无知” 的漫长过程。
以现在的我的认知水平回望过去的自己,总的来说:从读书到工作的这十几年可以说一直稀里糊涂,在低水平的重复。我归结于 眼界 未开,见识太少,格局不足,思维和工作局限在低层次的 术 的层面,少有高层次的 道 的思考。2011年前,信息不畅,只知道学习技术(应用型)和解决具体的问题,思维被局限住。 等做了些团队/项目管理工作,对商业,行业,科技趋势有所了解,眼界才稍微开阔点。真正的深入思考是在2015年末,从技术管理岗位下来,判断Android/移动开发要和Windows开发一样要日薄西山进入平稳期,又要寻找新的方向。因为有了大量时间可以阅读(和上知乎),尤其是阅读 吴军 老师的书,眼界更开,有一些“顿悟”。
还有一个原因是35岁的焦虑 :时间,精力,体力不允许再总是低水平重复,必须要找到一个可持续积累,可叠加进步的事业。探索/学习/思考的过程中有各种感受 :为开阔眼界而欣喜,但也为自己曾经的无知而懊恼;为树立清晰的人生愿景,目标,路径而充满斗志,同时也为环境和能力的限制,无可奈何而痛苦消极。
在这个深入学习和思考过程中,不只是探索IT技术的本源,更是思考更深层次问题(本源)的过程,世界的运行规律,最终是对世界的认知过程,对自我的认知过程。
懵懂无知,井底之蛙
出身背景的介绍,更有利于理解影响认知水平变化的关键因素。 我出生在中国中部湖北省的一个农村家庭,父亲小学文化,母亲从未上过学,自认为有些聪明还喜欢学习,运气不错成了学校少有的几个考上大学的学生之一。那是在1998年,大学(包括大专)的录取率为34%,第二年就开始扩招,录取率飙升到56%。也许复读一年,可以上个更好的大学,可当时不知道不同大学的差异如此之大。现在依然印象深刻的小时候的事情大概有三件:1. 一个月能吃一回肉; 2. 白天经常停电,晚上才有电,黑白电视要拍一拍画面才正常;3. 想看书不可得,全村找不到什么书。
少年时期的环境塑造了青年时期我的性格:能吃苦耐劳,有韧性;有好奇心,爱读书,少实践;做人认真,认死理,不灵活;有些自卑,优柔寡断,会想太多,太在乎他人对自己的看法;眼界窄,不安全感强,总有危机意识;对物质生活要求不高,对金钱不敏感; 说这些,是因为性格会影响判断,决策,选择。人终究是环境的产物,性格,习惯,思维方式,见识 都会被环境塑造,唯有学习和实践能改变(还要有运气)。思维,眼界的认知变化是很漫长的过程,除了学习,实践,还要靠运气。尤其在我当了父亲之后,对这一点认知更深刻。
原生家庭是一个孩子的起点,也是下限。人的原生家庭环境的差距有时是几代人积累而形成,有些看起来理所当然的认知,对他人却需要十几年的学习和痛苦的摸索。我时常将我和儿子的成长环境做对比,简单地说差距巨大。一方面是时代的因素(国家发展太快,70年走过发达国家2~300年的路,”集四次工业革命为一体”,物质生活条件极大的丰富),更重要是父母的教育理念,认知水平处于不同的层次。有一个终身学习理念的爸爸,孩子的人生可以少走很多弯路。
大学不专业的学习
1998年,我高考的志愿填报的专业都是”计算机科学与技术”,其实并不是我对计算机技术多么有兴趣(实际上读大学前我根本没见过PC,第一次上打字练习课,人生中才第一次见到PC,不知所措下在同学的帮助下才开的机),而只是偶然听说这个专业很火,好找工作;也是因为我(包括父母,老师)对其他专业更是一无所知。 当时的我当然是稀里糊涂的,但从这些年的从业经验来说,从性格,技能上来说,还是很契合我的:一是逻辑思维不错,分析问题解决问题能力很好;第二是做事严谨认真;第三是喜欢学习思考。 这也是10几年后我还在从事此行业的原因。总的来说,运气很好,选择了一个可以说是最好的专业,而且还在持续发展的行业。 没有眼界的人生真的是靠运气。但只靠运气就走不远。
当时专业的课程安排大概如此:
大一,微积分,数字电路,汇编
大二,线性代数,PASCAL,模拟电路
大三,概率论,C,计算机网络
大四,软件工程,Java,数据库(PowerBuilder)
当时来说,只是觉得没啥意思,根本还没有工业界的认知,所以学习只是为了应付考试,拿毕业证。 这也是学校教育的一个问题所在,学校在科研上应该是超前于业界,在教学内容上也不能与时俱进,尤其是IT行业,变化很快,老师没有工业界历练,很容易就脱节。 现在看,学校的课程,多而杂,不成体系,和工业界脱节,学的知识有什么用途,业界需要什么样的技能,老师没有传授,恐怕他们自己也是不知道。
如果与多年后我认知到的Stanford的老师水平,教育理念,课程体系设计做对比,只能说一个天上一个地下,这也是名校的价值所在。 照道理说,在当然这可以归结为历史的原因,现在的中国 清北 复浙交 双一流名校的科研教学水平已经追上来。 额外值得一提的是在最新 AI/CV/NLP 专业领域可以看到大量的华人AI领域,中国人/华人有多牛?,及 国内高校的成果,这一次算是中美第一次在IT领域并跑了。 参考 CSRanking 排名
大一,大二,我业余对计算机原理比较感兴趣,主要看电脑报来获取一些硬件知识,DOS指令之类的,但知识碎片化,不系统,始终不得其门而入。 然后兴趣就逐渐转向了C++,Win32编程,还有MFC。这些全部是靠自学掌握,这个习惯保留至今。2001年后自己买了电脑,开始上网,很多人玩游戏,但我是穷人家的孩子,始终克制,现在依然觉得游戏是玩物丧志,而且也亲眼见到好几个同学玩游戏成了废人。 所以主要关注的还是编程相关的内容,其实网络上已经有相关的网站,比如CSDN,Vckbase之类的,我经常买的<<程序员>>杂志,那时候比较多的谈的C++语言,软件工程等 技术,项目管理细节。 主要的问题是对技术的讨论停留在应用层面,不深入和系统,同时对技术应用领域,行业业务,发展趋势,商业模式等方面欠缺。
大学四年教的内容泛泛,没有明确的方向和深度,与业界也基本脱节,基本上是往 万金油 方向教育的,到毕业时,全班40多个学生,有的出国留学,有的进父母单位,有的已经找好关系,只有不到10人从事了IT相关的工作,做程序员的那就更少了。 可能是环境的原因,在今后10多年的工作中,其实见到的真心热爱技术的也寥寥,不求甚解的多,追根究底的极少。 大多数人只是把编程当做一份工资比较高的工作,混口饭吃而已。
总的来说,学校学的和工作用的基本上脱节,C++,Win32都是我自学。打的基础很不扎实(数学,算法,计算机系统方面),在编程,软件工程方面还不错,也算是有了一些技能,能养家糊口了。在毕业时学过一点PowerBuilder所以很明确的对数据库没什么兴趣,在所有学过的科目中,只对计算机网络感兴趣,所以第一份工作,找的是需要C++,计算机网络知识的公司。
低水平重复的工作
第一次找工作就是在51JOB看招聘信息,然后选了一个做C++,网络相关的公司,投了,面试完了就去了。工作初期的确是想从事 计算机网络 方向,但实际上学了点tcp/ip, socket,根本没机会往深处学。完整的看完了<<计算机网络>>,买过<<TCP/IP详解>>,可发现学习到的知识跟工作内容基本无关,也没有考虑转换环境去解决此问题,就这样放弃了。 并不需要考虑多并发,分布式,也没有实际的需求去做这样的工作(所以环境和平台的作用很重要)。根源在于缺乏对计算机网络这个技术方向的具体应用的认知,现在来看,一个是计算机网络也好,socket也好都是基础设施,最重要的是承载的具体业务,而且真正要深入网络知识,应该去做后端Server,研究分布式系统,并发网络,可是当时并不知道,也没有机会,更没有主动去寻找机会。早期也热心于C++语言的语法语义细节,然后在转到MFC, COM,STL, ATL, ACE, BOOST等C++库的学习,但实际工作中发现很少应用,导致都只是入门,没有实践可以让理解及经验更深入。
第一份工作,了解了RTP, RTCP, Directshow,H264 等专业领域知识,知道了UML, RUP,OOAD等软件工程知识,熟悉C++, Win Socket, MFC, Visual Studio, VSS 等编程语言,平台,库,IDE,VCS工具。
第二份工作,熟悉P2P,BOOST,有机会做移植到Linux平台的工作,因为Linux满足技术好奇心,所以转到Linux平台。
第三份工作,企图和朋友做所谓的创业,其实资本,能力,认知水平都不到,结果是无疾而终,身心疲惫。
现在回头来看,从2003年到2010年,如井底之蛙,有如下几个问题:
1.错过了整个PC互联网发展的时代大机遇
个人觉得有3个主要原因:
- 所在 城市环境 的影响,周围根本没有人讨论商业模式,流量,日活,期权,IPO这些互联网领域的概念(或者说 先进思想);
- 没有获取信息的渠道,对科技发展历史,现状,趋势一无所知;
- 没有商业意识,没有随着业务的不断增长而磨炼技术的机会。
早在2001年就我就使用QQ,Chinaren,但没觉得跟编程有什么关系(并没建立技术和产品的关联,没关心他们是怎么做出来的,可见当时学校教育和业界的脱节)。在学校也搞过一点HTML,JS,觉得太没技术含量,导致对web开发不屑一顾。至于有没有什么用,是根本不考虑的…2010年以前只关注所谓的技术,语言,框架细节以及软件工程,具体的技术细节。领导安排工作就去做,只考虑怎么实现,怎么解决问题,很少去思考为什么这么做?更想不到这么做有什么价值。也就是只关心HOW,从没想过WHAT/做什么,WHY/为什么做。
2009年去深圳一个合作公司出差,才第一次听说”期权”和”股票”的概念。第一次知道公司/资本家的利益可以和员工的利益绑定起来,也初步了解“利益共享”的,后来在华为的 在心声社区 看了很多文章。 对“财散人聚,财聚人散”的理念有所了解,但对资本的力量感受并不深刻。
2010年,有所谓创业想法,所以会稍微了解市场销售的概念。比如做的东西卖给谁,以什么价格卖? 一年大概能卖多少? 对市场,对商业有了一点概念。
就在我按部就班,温水煮青蛙的工作中,北深杭的几个互联网公司正在飞速的成长。可以说这些地方是最早接触 硅谷(新兴技术和商业模式的发源地),最早接触互联网及应用的一批人。个人觉得 先开眼界 ,最早接触最先进的产品,理念是他们成功的很大一个因素。 幸运的是在在进入移动互联网时代后,信息的不对称更少了。
现在回头看,整个IT产业,只有2C互联网这个方向发展的最好,其他领域,比如企业软件(Office, ERP,办公会议系统),嵌入式应用,行业信息化发展缓慢。 也许下一个20年,轮到2B公司的崛起。
互联网的成功,可以说是 商业模式(软件免费,靠广告,服务收费) 的成功,是市场需求驱动下的商业增长,商业的盈利驱动了技术的持续积累和进步。 有一种观点认为,过去几十年信息技术对促进生产力上作用不大。我个人觉得是有一定的道理,过去20年的2C互联网,对个人来说,生活学习沟通的确更为方便,在减少信息不对称,开阔眼界的同时也带来注意力碎片化,娱乐低俗浅薄反智内容泛滥的问题。抖音,快手,这种“即时满足,不许深层思考”的游戏化设计,的确有导向“娱乐至死”的“美丽新世界”的倾向,如果不加抑制的话,信息垃圾将充斥我们的精神世界。
消费互联网在工农业的生产力促进上没有发挥功效,更多的是在生产关系上的重塑,在财富的分配上向少数人,少数群体聚集。 从国家角度来说,减少了中间环节,提高了社会运行效率,创造了税收,产生了具有世界竞争力的公司,培养了上百万的IT从业者,在第三次信息革命中没有掉队。更重要的是为接下来 工业/产业互联网 奠定了基础,蓄积了能量。
当然,从更广泛的视角来看,或者自我安慰的说,错过互联网时代的岂止是我个人。从城市的角度来说,除了北深杭(上广都差强人意),其余全国300多个城市(我国有338个地级市)也都错过,基本无所作为;即使是放眼全球,除了美国,中国,其余200多个国家也全部错过,传统的IT比较强的日本,印度,台湾基本都没有产生有影响力的互联网公司。 不得不承认,确实是少数先行者先知先觉,绝大多数人只是被时代浪潮裹挟着随波逐流,无所作为。有时候真理的确是掌握在少数人手中的。
2.没有 职业规划 的概念,基本上是随波逐流
刚工作对IT行业的了解是一片空白,并不知道能做什么,也没听说过 互联网,当然也不知道有互联网泡沫破灭这回事,毕竟不像现在信息如此发达,互联网如此显学。所以没有什么职业规划。
前三份工作没有过多筛选,对本行业的情况也是一无所知:具体做什么工作,行业有哪些细分方向,行业发展状况,有什么知名公司,工作岗位有哪些,职业路径怎样,所有的这些,都一无所知,只是求一份可以拿工资的工作而已。不知道从何种渠道获知这些信息(比如网络,老师),更根本的是没有这个意识,没有专业,行业,公司这样的认知。
这三个公司的几个共同点:
- 业务不稳定或者很难做大做强,也就是增长的天花板很低。中小公司还没有稳定可持续的盈利来源,为了生存,必须要不断的寻找赚钱的机会,及时的调整产品方向,也就没有在一个方向持续投入和积累的动力。
- 没有系统的培训机制,很少招聘应届生,都是希望有一些工作经验来了就能干活,把职工当万金油,也就是什么都会一点,但什么都不精深,因为都只是为了完成任务而已。没有时间,也没有必要深耕细作。
- 基本没有激励机制,年终双薪算是不错的了。
推而广之,中小公司(小10~100人,中100 ~ 300人)的资本实力决定了它需要将员工当做万金油,同时在人的培养上也不会有太多投入,除非在商业上获得持续的利润和增长,那时候它也就成长为中型,大型公司了(>300人)。典型如腾讯,阿里巴巴都是小公司成长起来的,固然有其自我努力,但更重要的是历史的趋势。小公司成长为巨头是这一种很低的概率事件。
所以第一份工作最好去大公司,虽然大公司也有缺点:大公司病(冗长的会议,低效的流程,无形的部门墙,等等),把人当螺丝钉等等。但即使如此,名校出身毕业生大多选择去大企业(存在即合理,企业规模大不代表其实力强,但至少说明其一定有核心的竞争力) :除了薪资外,完善的职业和技能培训,优秀的同事人脉,成熟的流程及资源支持,有挑战的工作内容,在开阔眼界,培养职业素养和规范上是不可同日而语的。 从发展的角度来说,大公司的小兵出来做小公司的领导是理所当然,但反之,小公司不管你是经理,总监,CTO,CEO,去到大公司,还得从小兵做起。
3.知识不成体系,对技术/业务认知不深刻,总是低水平重复,缺乏可叠加的进步
两次跳槽都没有目的性,没有主线,技术和业务都没有很强延续性,在不同技术不同领域的公司间瞎折腾:
技术上有一些相关性,基本围绕 多媒体/流媒体 方向,也并非我自己主动选择的结果,而是第一份工作自然而然的延续。除开第一份工作,后续的工作必然会看重你之前工作所积累的知识,经验,技能。所以第一份工作的选择很重要,如果没有自己的规划,那只能是听从公司的安排。大公司也许有转换方向的机会,但小公司以生存为第一要务,不会在乎你个人的想法,而且也没有什么机会可以转型。这又是大公司的一个好处。
现在知道 信号处理,多媒体 算是EE的领域,而不是 CS,但当时对有哪些技术方向,有什么应用完全不知道,而且还有错误的认知,将多媒体,图像处理 和 图形学 混为一谈。
所以根源在于没有对 知识体系 的深刻认知,导致“狗熊掰棒子”,做一个丢一个,知识和经验没有可叠加的进步。
其实那时认知上根本没有 行业 的概念(也就是同一种技术能应用到不同领域)。马后炮的来说,比如第一个工作主要是流媒体技术,那么后续的工作,应该围绕此技术展开,比如安防公司,互联网视频公司,直播公司,互联网短视频…
如果是从行业的角度,视频会议其实很小众(即使到2018年全球规模不过78亿美元,国内市场规模也才20亿美金),有相关性的比如可以转换到通信公司的子部门(华为,中兴,Cisco都有做视频会议系统),互联网公司的IM部门(腾讯),然后与时俱进到云时代的 WebEx,Zoom,小鱼互联…
但根源在于 武汉 当时是没有这样的公司可以选择的,那时没有认识到 环境和平台 对一个人职业发展的影响如此之大。
若有所思,抬头看路
就这样稀里糊涂的工作了8年,开始警醒是因为遇到”编程是吃青春饭的,30+岁后怎么办?”的问题。这个问题算是老生常谈,现在变成40岁怎么办了。 根本原因是有几个:
从行业的角度来说:
- 国内IT行业起步比较晚,90年代从DOS/windows时代出现的第一批从业者很少,那时期机会比较多,要么财务自由,要么转管理;再到2000年初的互联网从业者,至今也不过20年。
IT行业相比传统行业很特殊:
一个是硬件上,由于摩尔定律的指数效应,IT硬件一直以来是“每隔18个月性能提升一倍,价格降一半”。摩尔定律对用户友好,但是对厂家就比较残酷。
一个是软件上,传统行业受限于时间,空间的限制,成本随产品销量增长而增长,而软件的边际成本接近于0,卖给100个人,和卖给10000个人的成本差不多,而且不受时空限制,产生的超级马太效应导致 赢家通吃,第二名都很难活下去。
在PC时代的软件由于饱受盗版问题,没有完全发展起来。到了互联网时代,出现了自由,免费,开源软件与商业软件抗衡的模式。不得不说IT行业的开源,共享,协作的文化在其他行业很少见。这也是软件开发门槛比较低的原因之一。
因此硬件的门槛越来越高,技术难度和资本投入越来越高,各个细分领域的玩家寥寥无几。而互联网应用开发,在竞争的压力下,为获得先发优势,必须小步迭代,快速试错,结果是员工996的不可避免。 如果没有新的技术浪潮,IT行业不可避免会走向垄断。技术变革快,而且是波浪式的,而不是叠加性的。从大型机,PC到互联网再到智能手机;从IBM,微软,到雅虎,Nokia跟不上时代变革就会没落甚至倒闭,波浪式的变革导致技术,经验很难复制和积累。公司要不断转型,连Google的战略也是从Web First,到Mobile Frist,再到AI First
从大型机,小型机,从DOS到windows,从面向过程到面向对象,从C++到Java,从PC到手机,从瀑布到敏捷,软件开发的范式一再变革。
通常的模式是,最优秀的程序员开发更好用的库,工具降低开发门槛,普通的程序员开发业务,在资本的助推下,加速缩短了技术/商业的生命周期。
从个人的角度来说:
- 对技术有兴趣的少,对钱有兴趣的多,没有兴趣驱动,很难走的远
- 知识更新太快,大概7年一个技术周期,需要持续的学习,终身学习
- 工作强度大/996,压力大/敏捷迭代1周一个版本,脑力和体力消耗大,颈椎病腰椎间盘突出脱发等职业病困扰
- 官本位思维,管理就是比技术要高一级,所得的金钱,权力回报也要大
- 国内技术水平不高,还没有形成真正的工程技术氛围
- 随着年龄增长,身体素质下降下降,更多的时间和精力要分配到家庭和孩子教育中
如此种种导致从业者的焦虑和缺乏安全感是肯定的。 少数人通过在一波浪潮中获取的期权股票得以财务自由,但大多数人还要继续在下一波浪潮中工作下去。
以我个人为例,从C++到JAVA再到Python三种编程语言,历经Windows,Linux,Android三个操作系统平台。从传统的PC软件开发再到嵌入式移动开发,经历PC互联网,移动互联网2个应用型技术浪潮,平均一个7年左右。从22岁到35岁,如果没有赶上业务持续增长,愿意利益分享的老板,相比教师,医生,律师这样传统越老越吃香的职业来说,的确是吃青春饭。现在又面临新的智能时代的浪潮,要转型,要学习。坦白说,相比大学就开始学习AI相关技术的年轻人来说,其实并没有太多优势。
出路在哪里,这就是个可以枚举所有solutions的问题,可选项只有如下几个:
- 技术路线 : 技术专家,架构师,CTO
技术专家 在大公司才有可能;要么选定一项技术,能跨过技术的波浪起伏;要么选定一个行业,把技术当做工具 - 管理路线 : 技术管理,产品管理,项目管理,职业经理人,CEO
- 其他支持角色
测试,运营,销售,市场 - 与传统行业结合
传统行业的IT部门,IT培训,咨询 - 换行
彻底离开IT,是不可能的,IT行业可以说是最好的行业,这个最好指的是收入和机会。IT行业依然是科技发展的最前沿,其他行业更是多年没发展了。
但反过来说,IT行业这么累,996+不断学习有这样的精神和态度在什么行业干不好? 一定要做自己喜欢的或者说愿意的,否则不值得。 - 创业
可能性很低。天时地利人和
综合考虑下,技术管理者,是我给自己的定位,所以尝试选择一个大公司,有机会做 管理 的工作。从2011年开始,从自身 职业规划 的角度,开始关注 技术趋势 ,武汉的 行业环境 ,对相关的公司信息有意识的搜集整理。
技术趋势 上,在开发嵌入式Linux应用的过程中,接触到了Android,判断即将到来 移动互联网 的浪潮。
行业环境 上,依然没有脱离武汉这个区域,武汉的Android 系统相关的开发工作,大部分是外包公司。武汉这边的大公司,烽火,中兴,华为的主要业务在光通信领域。但因为一直在做系统,并没有想过做APP。
当了解到 华为武研所 有开发Android平板的部门后,目标明确,将 华为武研所 作为唯一的目标公司。在充分的准备,面试通过后,在等待HC的过程中,他们要求我去做光通信,我选择了拒绝。2013年,又去了华为,要求出差半年,那时孩子还小,选择了放弃。如果再年轻一些,我还是很乐意去奋斗一下的。一直在关注华为,多说一句我对 华为 的理解(从心声社区,网络,自己的亲身体会)是:一家真正做科技的公司,真正做到了”以产业报国和科教兴国为己任,以公司的发展为所在社区作出贡献。为伟大祖国的繁荣昌盛,为中华民族的振兴,为自己和家人的幸福而不懈努力。“ (华为基本法)。任正非的”利益共享,责任共担”的理念,”通信行业三分天下有其一”的豪情,华为基本法的格局,都让我钦佩。可以说任正非是应用马列主义毛泽东思想的政治智慧在治理商业公司。但可以做的更好,更人性化一些。少一些“工作随意安排,异地研发,转岗难”的不人性现象。中华民族伟大复兴需要更多华为这样具有全球竞争力和影响力的世界级企业。
在武汉,一直缺乏领头羊,互联网这个方向我认为已经没有希望能崛起有影响力的公司,机会窗口已过,市场格局已定。除了“芯屏端网”的制造业,软件方面除了 华为武研所,小米武汉 其他的基本没有影响力。也许AI/机器人还能有一些机会。
追根溯源,醍醐灌顶
做了几年Android技术管理,团队管理之后,对 产品,商业,团队 理解更多,尤其对 公司的层次 有更深刻的理解:
- 公司是个虚拟的商业组织,没有共同的利益(不管是金钱上的,还是理念上的,还是信仰上的)作为目标,是不可能有持续性的,也不可能做出什么有竞争力的产品
- 公司的文化来自于创始人/团队的基因,正如不同人的层次差别巨大,公司间(不同行业间的差别要比同一行业内的要大)也差别巨大,在战略能力,技术实力,管理水平,中层执行力,领导者的眼界,格局等上有层次上的差距。
- 管理上三种模式:一种是事无巨细,从规划,到团建,再到项目,技术细节全权掌控;一种是无为而治,只管分配任务,检查结果,不关心过程;大多数人介于两者之间
- 技术和团队的发展需要业务持续增长,商业的持续盈利作为支撑,否则难以为继
- 大公司不一定是强公司。公司的上限限制了员工的上限。同为世界500强的沃尔玛收银员和Amazon程序员,哪一个 收入,成长性更大,上限更高?
2015年,从部门管理的岗位退下来,工作清闲下来,有较多的时间搜集信息,阅读,发散性思考。阅读了大量的科技历史,科技趋势,商业认知,国家发展的书籍
开阔了眼界和格局,跳出环境的束缚,认知水平有层次上的提升
一直在武汉这样的二线城市,同时早期互联网不像现在有那么多专业的科技媒体,所以眼界很窄,只知道手头工作,最多只了解下本地情况,对整个行业格局和技术趋势,基本不知道。
上 知乎 后开始看到更多的互联网行业信息,才知道了CS专业的全球排名前四的”四大”: CMU,MIT,Stanford/斯坦福,UC Berkeley/伯克利;理解了先发优势,马太效应,摩尔定律;理解了社会阶层 ;知道了不同国家,行业,城市的差距;知道了中国在世界舞台的竞争力,付出的努力和还需要做的事,对国家有了很深刻的认识(主要是 宁南山 的文章);对我们党的认知也发生转变,从愤青转变为理性的爱国爱党者,为曾经的无知而羞愧。
阅读 吴军 的书,从更高维度开眼看世界,了解硅谷,科技,资本,知晓科技历史,发展趋势
随着阅读的范围越广,思考的维度和层次也逐渐发生变化。
2015年最大的思维变化是从 科技趋势 角度考虑问题:
了解 科技发展历史,规律,趋势;认识到 资本,人,技术 生产要素的相互作用。
2016年最大的思维变化是”多维度,多层次思考问题”,从行业,商业,公司角度考虑工作和职业,而不仅仅是 技术:
了解 产业链的概念,认识到 产业 的复杂性,有意识从产业角度理解公司的定位。
了解 商业模式,个人和公司的关系,平台的重要性。
商业模式是什么? 怎么赚钱,营收/成本 用户是谁?市场现有规模有多大?市场成长性如何? 竞争对手有哪些,优劣势? 产业链合作伙伴?可能的新技术,其他行业/公司的降维攻击。
从 统计局 的宏观角度认知社会上各个行业,公司,人员的情况。
2017年,真正考虑自己未来要做什么时,开始思考人生,人的性格习惯思维三观的形成,人与人的差异,环境对人的影响:
认识到 学习技术要成系统,知识要成体系,思考要有方法论。
认识到 自己的能力和位置, 人与人的差异,智力,知识,技能,来自于家族几代人,更关键都是思维方式,眼界,和格局。
认识到 刻意练习的重要性,认识到家庭环境的重要性,也认识到成功的偶然性,更深刻理解阶级,精英和大众的关系。
了解 金字塔层次,意识到不只是人,社会,公司,行业,国家都是有 层次 的。
深刻的意识到: 环境(城市,行业,公司)对一个人职业发展的巨大影响力,人是环境(家庭,教育,社会,国家)的产物,选择比努力更重要。
开始认识到 公司的差异,行业的差异,城市的差异;一个人,一个组织(公司,行业,城市,国家)的上限和下限。
地域至关重要,以前不觉得,地域比行业都重要: 有的地域可以创造新的行业,产业,上限很高;而有的地域永远不可能诞生某些行业,即使有也是产业链的低端,上限很低。
环境包括: 所在 城市 产业环境状况, 所属 行业 细分领域增长空间, 所在 公司 的愿景和成长性, 具体的 部门 的定位和产品。
从城市角度来看,不同城市有其核心支柱产业,对个人来说,如果没有足够的信息来做判断,那只能随波逐流碰运气。所以对科技发展规律,趋势,国家战略,各地区布局都有所了解,也就是所谓的大局观,对个人的重要性就在于此。
任何事物都存在生命周期,不同行业所处的历史时期是不一样的,处于成长期和衰落期阶段的行业给人带来的机会当然是天壤之别。
公司在行业地位,成长性,技术能力,业务水平,管理水平,激励机制等等各个方面,尤其是领导者的能力,眼界对个人发展至关重要。 如果自身眼界不开阔,格局不高,是无法有清晰的判断的。 有时只能靠运气能否跟对人。
2018年开始从国家发展,人类发展的层面思考问题,从政治,经济,社会,文化 多元角度理解这个国家:
对工业革命以来,科技和商业 驱动的人类 经济 发展有了初步的认识。
从日本,韩国的崛起,理解了 技术扩散,产业转移,资本自由流动,以及 国家独立自主的重要性。
对 资产阶级,无产阶级, 资本主义,社会主义等 政治 概念有了更深刻的理解。
认知到 知识分子,小资产阶级,中产阶级的阶级认识的局限性,很多时候,把自己看的太高,太把自己当回事。 “知识分子是工人阶级的一部分”,脑袋不要和屁股脱节。资本家或者说生产资料的拥有者,或者说所谓的精英,是如何看待普通人,普通的工作者的。不是要阶级对立,是要有清醒的认识。在我们国家不富裕,还需要资本大力投入的时候,可以对资本友好,效率优先,在合适的时候,应该向公平倾斜,这样才是真的不忘初心。
资产阶级的 产 是生产资料,是资本,土地,不动产,机器;中产阶级的 产 是财产,财富。
找到了系统的CS知识体系,为事业方向明确了技术路径
上面的内容过于宏观,更切合实际的是,在技术的认知上找到了可学习的成体系的技术路径。
总的来说,工作10几年,对编程,架构设计,测试,需求分析,项目管理,团队管理等各种角色都有所涉猎,对技术的快速变化,不断转换方向,总是低水平重新开始,感到疲惫,试图找到一种本源的,“不变/少变”的可持续积累的东西。可始终不得要领。到2015年初发现移动App已经发展成熟,而且认识到Android只是一个平台,最终还是要依托具体的业务上。然后对“教育行业”(我重视教育,教育很重要,但教育行业是个慢行业,关键是老师,家长和孩子本身,技术只是辅助老师的工具。涉及到人性的关怀,理解,沟通,AI是很难替代老师的。)兴趣不大,又到了选择方向到时候。初步的判断是要么选择一项基础技术持续积累而不考虑行业业务,要么就选择一个行业持续积累,不在乎用什么技术。实际上在武汉这个环境,前者的可能性很低。
到底做什么,选择什么技术方向,什么行业可以持续的积累,真的没有头绪。尝试过研究Android Graphics System,尝试学习Html5,JavaScript,尝试后端Go,Mongodb…其实仍然是迷茫的,直到深入的查看Stanford CS 网站。 真的是”醍醐灌顶”的感觉, 被Stanford CS的教育理念和课程设计震撼了 :
- 可以尝试性的选修各个专业方向的引导课程,可以随时换方向,直到找到自己感兴趣的方向,给予学生自由选课的权力
- 课程设计系统成体系,每个专业方向都有详细明确的进阶课程表,让学生知道要学习什么,也知道如何去学习
- 课程内容与时俱进,内容紧贴工业和科研最新成果,作业/项目不是练习,而是确实解决具体问题
- 大量的选修课程,包括邀请学术界,工业界的大拿开设相应的课程,“以学生为中心”,不是受限学校能提供而什么,而是根据学生需要什么
- 所有的课程都在internet上公开,每门课程都有详细的指南:包括参考书籍,教材,作业等,也有大量的TA可以寻求帮助
- 5%的录取率的优秀的同学们,5:1 Student-to-faculty ratio
Stanford大学的课程设计提供了最小代价的试错,投入一个学期的时间,学习一个引导课程,对某个方向有初步的了解来判断和选择自己最感兴趣的方向,而不用在工作后付出很大的代价才能发现自己的兴趣所在。生命短暂,一定要做自己感兴趣的事情。 详细的内容在后面。
我看到了师资力量,教育实力,教育理念的差距。我想这也是国内的大学CS学科可以学习和进步的方向,也是创建 教育强国 的必由之路。
我也是很偶然的才深入阅读了网站的内容,主要是为了儿子的教育,看了吴军的“大学之路”,才有机会去Stanford大学官网浏览,才有机会认知到这些。一直迷茫的专业方向,学习路线问题,其实别人早就有完整的路径。这就是世界顶尖大学的巨大优势,可以让人少走多年的弯路。如果不是通过互联网获取这样的知识,可能终其一生都不能有这样的认知和视野,这就是互联网的伟大之处,获取信息更方便,极大减少了信息不对称。当然仍然存在路径引导的问题,这就是启蒙教育的重要性,需要一个 师傅 引进门。也认识到到认知水平是有层次的,是有数量级的差距的,不通过读书,没有人指点,可能终生难以突破认知之墙。
这么多年的工作,不觉得失败,但感到很遗憾,在最黄金的年纪没有在正确的方向上奋斗,走了很多弯路。分析起来,主要的原因:
- 信息缺失,没有获取信息的渠道,对世界科技发展趋势基本处于无知状态
- 眼界和格局不足,没有大局观,无法从不同国家,城市,公司的角度来看 行业 发展现状,趋势
- 没有建立起系统的知识体系,无法从源头了解技术,对于具体的专业研究什么内容,有哪些理论基础,有什么细分领域,具体有什么用途,各个公司,产品中如何应用 等都不知道
- 唯技术论,对商业,资本,产品不敏感
- 关键时刻的判断力和勇气
理虽顿悟,事需渐修
2016年,对CS知识体系及应用的有了一定系统的认知,可持续性,成长性 都有一个了解后,那时候刚好AR/VR比较火。而且从PC,互联网,移动互联的发展来看,似乎 游戏 是永恒的方向,而且是最主要的利润来源。个人本身对 科幻特效 有兴趣,所以想往这个方向转型。于是选择以 Computer Graphics 作为技术方向,以 VR/AR/MR游戏 作为行业方向。
一个感受是,最好在进入职场前就确定自己要从事的领域,否则没有领域积累,工作后基本没大块时间用于学习来转换方向,工作内容通常由不得自己的,转型需要花费大量的时间,精力成本。
参考 Stanford Computer Graphics的课程设计,制定了详细的计划和具体的路线图。
在学习,实践,探索VR/MR的过程中,随着眼界更开阔和格局更高,对自我的人生观,价值观,世界观有了更坚定的认知后,决定放弃CG/VR这个方向。一是Video Game并非我认同的事业方向,一直以来认为游戏是玩物丧志,即使它可能很赚钱;二是找到了更有影响力,更有价值的方向。AI+机器人是更广阔的天地,其对整个人类的影响巨大,且更符合我的价值观,过往的嵌入式开发的经验知识也可以复用;三是作为孩子的父亲,需要言传身教,和孩子一起投入到 智能时代 的浪潮中,有所作为。
大道至简,追随我心
不再仅仅为生活而工作后,开始思考一些看起来很虚,不紧急,但是很重要的事情。高大上的说法就是“马斯洛需求层次”的”自我实现”。期望工作不仅仅是赚钱,而是更有意义,可以更长远,能当做一份 事业。
随着思考的宽度,深度,长度 最后归结到哲学层面:“我是谁,我想做什么,我能做什么,如何度过这一生。” 人生的意义是什么呢?和一群志同道合的朋友做一些有意义,有价值,有影响力的事情。
2016年,AlphaGo战胜李世石,让AI这项技术出现人大众面前;2017年,我们国家就将之作为国家战略;2019年更是提出了智能+战略,推进AI技术的进一步发展和应用,其重要性可见一斑。
AI不仅仅对国家间竞争很重要,作为一种通用目的技术,它可以应用到几乎所有行业,其应用的深度和广度都远超互联网。更重要的是其对人类社会的影响和改变是革命性的,是史无前例的。比如结构性失业问题,如何定义“工作”,如何定义 “人”的价值 问题。
AI是个很宽泛的技术总称,他还可以细分为多个子方向,随着了解的深入,阅读更多的AI,机器人相关的书籍,以及一些CV项目的实践,我选择AI与机器人的结合 : 智能机器人 作为事业方向。一方面是契合我的世界观,我认为现实世界也比虚拟世界更有挑战和价值;另一方面,人类的财富创造长期来看来源于生产力的提高,智能机器人会促进生产效率的极大提升,创造更多的财富。通用智能机器人可能是通向共产主义社会的必由之路。
智能机器人的复杂性,AGI的突破,从DARPA挑战到工业领域,再普及到服务业,最后进入家庭,也许还需要20-30年的时间。这件事具有可持续性,值得花余下的职业生涯。
对于程序员/软件工程师来说,AI时代的门槛要比PC,PC互联网,移动互联网时代高得多,这一轮AI的新创企业基本都由博士,教授创立。而且处于早期阶段,依然是以研究为主,工程为辅的阶段,普通工程师对于转型和自我定位要更理性和灵活。
一些认知
一段时间以来,看的书越多,思考的也越多。思考的出发点是解决个人的职业瓶颈问题,所以这里只列出我对CS专业和IT行业的一些思维上的认知:
技术是分层次的,知其然更要知其所以然,追根溯源,构建系统的知识体系
我们知道IT行业变化很快,但很多是 应用层技术,商业模式的改变(当然商业模式也能创造巨大的财富),并非技术本质上的变革。少数本质上的改变当然也有,比如深度学习对AI的变革,云计算对分布式计算的变革,未来量子计算对计算的革命性改变?
技术层次: 科学理论,基础层技术,应用层技术
应用层技术,变化太快,生命周期太短,目前看一般是7年一个新平台。应用层技术通常基于基础层技术抽象出的API来开发业务,比如C++嵌入式开发,Win32/MFC 应用开发,Android 应用开发,Java Server应用开发…
基础层技术,变化较慢,通常属于CS的一个子方向,可不断积累,掌握在大公司和少数人手中。 比如操作系统设计和开发,GUI系统,TCP/IP协议栈,数据库系统,DL 框架等…可参考Stanford的9个Track
理论层,比如线性代数,优化,密码学,复杂性,分布式计算等 科学研究,科研,学术界,是另一条路。 不追求有用,追求逻辑自洽,比如 渲染方程,
应用层技术可以拿来入门,基础技术才是可持续积累的。比如对计算机网络有兴趣,可以学习Socket API,然后再到TCP/IP协议栈,Server设计和实现,分布式系统设计,云计算等等一直叠加的进步,然后具体做什么业务就不要太在意,只要能促进技术的提升就可以。这就是走技术专家的正确路线了。
在招聘的时候,看到大量的xx语言工程师,xx平台工程师,这些岗位名称会造成很大的误导,让人以为编程语言(C++, Java, Python, Go…),操作系统平台(Android, Web, iOS)的那些语法,API,SDK是最关键的因素,其实除非是做编译器或操作系统的开发,否则编程语言,操作系统只是我们完成工作的工具,最终个人是从事某个具体技术/行业业务的工作。我看到的很多国外的技术招聘则具体得多。
什么Android工程师,iOS工程师,还有windows程序员,C++/JAVA/Python程序员,这些职位简单说就是万金油,以应用/工程为主,什么都会一点,什么都不精通,一旦平台成熟,没有新的需求,这些技能基本就无用了,同时也不会对转向新的技术方向有太大帮助。对于这些职位来说,更为重要的是商业模式,业务经验,领域知识。 对专业是没有可叠加的进步的。 更合理的技术职位是:系统工程师,计算机图形程序员,安全工程师,多媒体工程师,数据挖掘,计算机视觉,NLP算法工程师…
Stanford CS专业的System Track的定义 : “Systems is the study of the design and implementation of computer systems such as compilers(编译器), databases(数据库), networks(计算机网络), and operating systems(操作系统).” 也就是如果对这几项技术感兴趣,那就不是拿他们当工具,而是要实现他们,否则了解怎么用就好。
比如对于编程语言的设计和实现,通常是少数的专家(C语言的设计者 2人,C++ Front的编译器团队不过10人,Go语言团队核心成员 5 人),他们的工作是设计语言的语法语义,开发编译器,调试器,基础的标准库,应用库等,甚至制定标准,推广等。
而对于编程语言的使用者来说,语言就是工具,目的是快速高效的解决 行业或者其他技术方向 的问题。争论语言的优劣是幼稚的,每种语言都有他最适用的场景,根据要完成的工作选择合适的语言是明智的选择.同时要学以致用,否则只是单纯的学习下语法,语义,很快就会遗忘的跟没学一样。语言本身只是一套语法,最重要的是需要各个领域相关的库的支持,比如数据结构/算法相关的库,OS相关的库(线程,内存管理,文件系统),网络(socket),多媒体(音视频图像),图形(OpenGL)等等。
还有就是操作系统应用工程师,比如Windows工程师,Android工程师这样的这个岗位可能就是打杂的,因为除非是从事OS开发本身的工作,比如在微软开发Windows,在Apple开发iOS,在google开发Android,芯片厂商比如Qualcomm,Nvidia,手机设备厂商需要维护或定制,能从事Android系统的开发外,大多数时候只是在这个平台上开发业务,这个业务/行业本身比Android系统重要的多。平台热点几年就一变,除非做出来的应用能快速商业变现,否则平台的生命周期一过,只需要几个人维护,大多数人又要转方向;现在还有几个人在开发windows应用?
技术由人来设计和实现,技术层次对应的是人的层次。吴军老师在 <<硅谷来信>>中对工程师等级的划分:
第 1 级 : 开创一个产业 爱迪生,福特,贝尔
第 2 级 : 能设计和实现别人不能做出的产品,也就是说他的作用很难取代 独当一面,事业群 jeff dean
第 3 级 : 能独立设计和实现产品,并且在市场上获得成功 商业意识,产品意识,市场/营销能力
第 4 级 : 能指导和带领其他人一同完成更有影响力的工作 领导能力,管理能力,任务分解能力
第 5 级 : 能独立解决问题,完成工程工作 基础知识和技能
具体到CS学科,IT行业:
最顶级的人才从事理论,科研,甚至创造新的科技分支,一般在大学,研究所等科研机构比如图灵奖的获奖者,TCP/IP之父,数据库之父,图形学之父,Linux之父,最新的 深度学习三巨头…
基础层技术人才,一般在行业的领导公司,比如MS, Ggoogle, Apple这样开发操作系统,编译器,数据库系统等CS基础技术
应用层技术,按产品的影响力,可以分为三等,应用平台型:比如阿里,腾讯这样,十亿级用户;垂直应用型:知乎,滴滴等;项目应用型:…
一直以来国内IT界少有基础层技术,绝大部分是应用层技术。 对于应用层技术,倘若没有业务的增长来推动技术的深入,解决问题,创造价值,应用层技术难以持续积累,只会快速被替代。唯有在巨大的业务需求和压力下,必须开始往上走,所以像阿里就自研比较多的基础技术。
2018年贸易战,华为和中兴一正一反两个案例给所有科技行业的公司上了生动一课,至少统一了思想。自主可控,同时开放共赢。
当然,我们也看到美国在IT领域的确是世界领先的,比如软件方面,基础的核心技术,比如OS(Windows/1985, Linux/1991, Android/2007…VxWorks/卫星军事航空航天, QNX/汽车,电信,医疗,电力),Networking(Apache/1995, Nginx/2004, Webkit),编译器(gcc,llvm),基础库(glibc,),IDE(VS, Eclipse,Android Studio)数据库(MySQL,Mongodb),编程语言(C,C++,Python,GO…),各个子领域的基础接口,库,协议…(OpenCV,OpenGL, FFMpeg, Webkit, ZeroMQ, Ngnix, ProtoBuf,QT,…)
但软件的一个优势是 : 开源,共享的文化,是没有办法脱钩,断供的。
多维度思考,不唯 技术 论,要有 产品 意识,管理 理念,商业 思维
曾经的我以掌握复杂的语言特性,技巧为乐,追求所谓智力上的成就感;现在则努力甄选简单高效的方案,利于团队协作及知识的可持续性。更加注重技术的持续积累和开发效率;思考技术之外的内容:趋势,产品,管理,商业。
如果一开始没有人指导,就容易陷入唯技术论的思维中,要转变思维方式是很困难的,孟岩的这篇文章可能代表了我们那个年代的迷茫和无知,把大量时间和精力耗费在应用层技术细节上,而不是领域知识商业价值上。
技术是为商业服务的。科学可以“无用”,但技术必须要能产生商业价值。技术只是手段和工具,不是目的,目的是创造价值,为他人解决问题,为人的需求服务。
技术唯有创造商业价值,也就是能持续的净利润,才能可持续的发展。持续的业务增长反过来也会要求技术的积累,专业,深入。
不管是贝尔实验室,施乐实验室,还是微软研究院,这样纯粹的以研究为目的的实验室,虽然发明了很多新技术,但如果没有持续的巨额的资金支持,难以为继,资金的支持来源于商业上的持续盈利。
真正核心的基础的科技只是少数人创造出来的,是从0到1;大多数普通的工程师,在前者的基础上做产品,满足用户需求,创造商业价值,是从1到N。对于工程师而言,要想有持续发展,我觉得:
- 先泛再专后博,先泛就是开阔眼界,找到兴趣和擅长的领域;再专就是系统学习某一专业知识成为专家;后博是指围绕事业学习相关的横向知识,比如管理,商业,投资等
- 要可叠加的进步。要么专注一项技术(从应用到基础再到理论),任他应用,业务,平台变化(语言,框架通常可以持续积累,迭代改进);要么专注一个行业领域(业务需求,行业知识,产品设计),任他技术,平台,语言,框架变化(IT是一种通用技术,是可以和所有行业结合的,与时俱进)
技术(参考Stanford的分类) : AI(ML,CV,NLP,Robotics),Computer Graphics,Information(Database,Big Data), System(Compilers, Computer Network, Operating System), Computer Engineering(CS与EE结合的部分,可以理解为嵌入式系统 : Networking, Digital Systems, Robotics and Mechatronics)…更具体的参考下文
行业 : IT行业(开发基础软件和平台,比如OS,Database,Server : 微软,苹果,谷歌,Oracle),互联网(搜索,社交,电商:百度,腾讯,阿里巴巴),娱乐(游戏,影视,直播),教育,医疗,餐饮…更多参考 2017年国民经济行业分类(GB/T 4754—2017)
具体举例来说:
专注于 技术,比如多媒体,FFMPEG 已经有20年历史,既可以做播放器,也可以做流媒体(安防,视频网站),还可以做直播,短视频;比如图形学,既可以做影视特效,也可以做主机游戏,端游,页游,手游,还可以做模拟器,AR/VR…
专注于 行业,比如教育,既可以做网站,也可以做电子书包,教学平板,还可以做MOOCs,AI+教育等等… 将IT技术作为工具更好的服务客户
以我的经验来说,相比前端的不断变化,后端系统(以前叫服务器,主要是分布式系统,计算机网络,数据库 技术)更能积累:从早期的C/S,再到B/S,再到所谓的云端,大数据,他虽然也有变化,但是是叠加的进步的。不像windows,web,移动App基本上完全换了技术栈,开发语言,操作系统,框架,交互方式,完全改变,总是重头开始。
以我为主,以终为始 : 愿景,目标,路径, 大局观上认清公司,行业,国家
永远要明确,工作不是为了公司或者他人,而是为了自己的职业发展这个既定的大方向
— 吴军 <<见识>>
只有时代的产业,没有永远的产业。只有时代的公司,没有永恒的公司。尤其在IT行业,7-10年左右就转换一次技术范式:从大型机/小型机,PC,Web,Mobile,AI。
科技公司的风险在于,如果踩对了步伐,可以顺风顺水到达浪潮之巅,但如果没有做好下一个浪潮的准备,就会在一个波谷跌下神坛,甚至销声匿迹。 浪潮是有生命周期的,成熟的技术“润物细无声”,在一项技术在大众都感知到时,表明已经成熟,一项技术要经历在实验室的发明,到公司商业化,再到大众熟知的漫长过程。
技术是有生命周期的,当新的技术/平台 机会出现时,公司在资本的推动下组织大量的人参与设计,开发,测试,一旦产品/服务成熟,重心转到维护和推广,只需要少数人维护和运营,其他人就没价值了,要寻找新的项目或方向。
而跟不上新技术的公司和个人,即使强如柯达,摩托罗拉,Nokia手机这样曾经拥有垄断地位的公司都无法在新的技术浪潮下活下来,更何况个人,该裁员就裁员,该解散就解散,倾巢之下焉有完卵?
和技术一样,商业也是有周期的,一旦行业饱和,不再增长,进入存量市场,如PC,互联网,手机那样,最后变成公司间或者资本间的零和博弈,行业最后留下几个垄断公司,没有新的投资,没有新的需求,那么行业走下坡路,在所难免。对人力的需求供大于求,行业里的人也会过得辛苦。
所以中年危机,行业寒冬都由此产生。如果超越IT产业,一般性的来看,每个产业都有兴衰,都有周期,普通劳动者的命运为之起伏,转变。 如果超越科技和产业,更一般性的来看,资本主义的本质矛盾(生产的社会化与生产资料的私人占有的矛盾)导致了经济周期性危机。我们有看到资本家有中年危机么? 大部分人的技能/工作并不是不可替代的,这就是资本的强大和可怕之处,这也是AI的强大和可怕之处。
人到中年,才体会到资本的力量和无情,体会到当年为社会主义新中国舍生忘死洒热血的共产党奋斗的意义。在未来的几十年,中国和世界人民会更加体会到我国社会主义制度的优越性。
一个人的职业生命周期大概是40年,经历过2次技术变革,就人到中年,很难重头开始。 上一节中已经给出了解决方法。但这一次AI技术带来的社会革命不一样,这次是对人与其他万物本质区别的“大脑”的自动化,对国家和个人都是百年难遇的机遇。
AI自身方向很多,也可以赋能万物,如此的复杂性导致我们不知道:哪个技术会率先取得突破,哪些技术被证明是死胡同,哪个领域会取得商业上的成功,哪些公司会死去。 所有人都在一起试错。
对此我的应对方法是,找出其中的共性技术,专注并与时俱进;在行业选择上并不设限,关键是找到 志同道合 者,能灵活调整,只要还在浪潮上就还有机会。
长期的愿景可以明确;中期目标则要因势而变,具体情况具体分析;实现的技术路径可以选一个深入,其他路径保持关注。
以我为主,但不要眼高手低,而是要尽早弄清自己的上限和下限,更明确的定位。
以我为主,不完全依赖公司平台,和公司是 “互赖”的关系,而不是依附关系。 把自己当做事业的主人。
以我为主,做事情要有目的。时间,精力,复杂性决定了我们不可能什么都精通,必须要取舍,要专注和坚持,兴趣和擅长的要精通,其他的熟悉了解即可。
以我为主,技术会迭代,热点会变化,项目会失败,部门会解散,公司会倒闭,而且这些都是高概率事件,但只要我选择的大方向(技术,业务)可叠加的进步,个人能持续的成长,这些又算什么?
尽人事,听天命
人生而自由,但却无往不在枷锁之中
— 卢梭 <<社会契约论>>
就算眼界开阔,最后还是要脚踏实地,实事求是,个人要转型,基础没打扎实,要重新学习,也要学习很多新知识和技能,时间精力又有限。在没有能力自行创业的情况下,只能加入某个城市的某个公司的某个部门。不同城市,不同的公司的差异,层次非常之大,个人难以脱离环境的约束。毕竟人生不只是工作,还有生活,家庭。孰重孰轻,虽然具体情况具体分析,需要综合考虑,但我觉得最重要的一个因素是自己的价值观。对于现在年龄的我来说,家庭尤其是孩子的教育是第一位的,孩子的成长只有一次,陪伴至关重要。况且当AGI实现之后,作为人类的我们,工作也许可有可无,家庭才是我们的归属。家庭要兼顾,如果一个工作可以值得投入20-30年去做,那也就成了事业。
找到 志同道合 ,三观契合 的团队
随着年纪的增长,愈发觉得个人力量的渺小,集体力量的强大。但没有共同目标和利益的一群人,不过是乌合之众,不要在不适合的公司/组织浪费生命。我们国家的“集中力量办大事”的确是我们社会主义的优越性的体现。夏虫不可语冰,也不要浪费时间和精力在不相干的事情和人身上。成长和幸福更重于成功和金钱
成功如何定义?如果以马云,马化腾作为成功的代表,那绝大多数人做不到。这样的成功本来就是超低概率事件。成功是多个因素作用的结果,在<<异类>> 中给出一个参考公式:成功 = 机遇(时代大背景) + 环境(家庭,学校,地域,国家) + 天赋(个人天生的基因) + 努力(10000小时刻意练习) + 运气(随机)。 坦白说,除了学习和努力,其他的我们无法控制。 那是不是就完全认命算了,如果是这样,人生也变的没有意义。取乎其上,得乎其中,目标要高一些,期望要低一些,心态平和些。“但问耕耘,莫问收获”,注重成长和意义,欲望比能力低一点,人应该会更幸福一些。
更多的思考
随着阅读的书越来越多,思考的宽度由具体的CS技术到个人的事业,三观,命运;思考的广度由具体的IT行业,扩展到关于科技,工业革命,国家战略,政治制度,人类未来等。以前也有想过,但从未如此系统和深入,眼界和格局的确开阔很多。同时也深感自己的局限性,世界的复杂性。
可以说,长期以来,思维局限于具体 术 的层面,开始思考 道 的层面,选择真的比努力要重要。
关于人生理念,人生观,价值观,世界观的一些思考。
关于思维模式,方法论,客观规律的一些认知。
回顾历史 : 信息(IT)时代/第三次工业革命
近一百多年来,总有一些公司很幸运地、有意识或者无意识地站在技术革命的浪尖之上。一旦处在了那个位置,即使不做任何事,也可以随着波浪顺顺当当地向前漂个十年甚至更长的时间。在这十几年间,它们代表着科技的浪潮,直到下一波浪潮的来临。… 这些公司里面大大小小的人在外人看来都是时代的幸运儿。因为,虽然对于一个公司来讲,赶上一次浪潮不能保证它长盛不衰;但是,对于一个人来讲,一生赶上这样一次浪潮就足够了。对于一个弄潮的年轻人来讲,最幸运的莫过于赶上一波大潮。… 在这些公司兴衰的背后,有着它必然的规律。和世界所有事物的规律一样,科技行业的规律性也是可以认识的。…
— 吴军 <<浪潮之巅>>历史总是重复,科技永远向前。 历史总在重演,科技永远向前。科技几乎是世界上唯一能够获得叠加性进步的力量,它的发展是不断加速的。
人类每一个故事里都有科技的内核。回望全球科技的发展,一种新的技术从理论到应用要经历漫长的过程。以大家都熟悉的电来举例,从1820年奥斯特发现电磁感应现象,到西门子发明直流发电机,前后相隔46年,实现真正意义上的大众普及,则要67年之久。即便是现在,从理论到应用的时间也要在20至40年左右。通过科技改革来提升工业水平和生产力水平,这需要足够的时间、耐心和定力。靠热钱炒概念收割韭菜的模式仅是昙花一现,或者说只不过是资本泡沫。能够活下去、活得好的创业公司,一定跟新科技、新产业牢牢绑定的。
— 吴军 <<全球科技通史>>Software is eating the world.
— Marc Andreessen Why Software Is Eating the World
毫无疑问,现在是IT行业的黄金时代,科技公司成美股巨无霸。
Apple, Google,Microsoft,Amazon,facebook,华为,腾讯,阿里巴巴,百度,小米,Samsung,Intel,Nvidia,IBM,Qualcomm等等这些我们习以为常的公司名字时刻提醒我们正处于 信息 时代。从世俗的成功的角度来看: 全球公司市值和排名(单位:亿美金):http://finance.sina.com.cn/stock/usstock/sector.shtml
公司 | 成立时间 | 2016.10.10市值 | 2019.11.20日市值 | |
---|---|---|---|---|
苹果 | 1976.4.1 | 6147 | 11894 | |
谷歌 | 1998.9.4 | 5497 | 8946 | |
微软 | 1975.4.4 | 4496 | 11424 | |
亚马逊 | 1995.7.16 | 3960 | 8588 | |
2004.2.4 | 3689 | 5698 | ||
埃克森美孚 | 1882 | 3599 | 2880 | |
强生 | 1886 | 3267 | 3646 | |
阿里巴巴 | 1999.9.9 | 2698 | 4747 | |
腾讯 | 1998.11 | 2638 | 4020 | |
通用电气 | 1892 | 2605 | ||
中国移动 | 2000.4.20 | 2554 | ||
摩根大通 | 1799 | 2458 | 4323 | |
英特尔 | 1968.7.18 | 1802 | 2603 | |
甲骨文 | 1977 | 1590 | 1922 | |
思科 | 1984 | 1576 | 1984 | |
IBM | 1911 | 1487 | 1185 | |
百度 | 2000.1 | 641 | 397 | |
京东 | 1998.6.18 | 359 | 460 | |
网易 | 1997 | 312 | 368 |
- 这些公司不但年轻,市值高( 富可敌国 ),而且还在快速增长中,这就是历史的进程;
- IT巨头完胜传统能源,制造,金融日用品巨头;而IT公司中 互联网公司 又完胜 传统软件 ,硬件公司,这就是时代浪潮,不以个人意愿为转移的大势。
- 美国强大的体现之一 : 在IT科技领域具有绝对领先地位;唯有中国能望其项背,还不能说并驾齐驱
为什么说IT巨头富可敌国,作为参考,IMF公布的2018年世界GDP排名,苹果和微软的市值可以排到第16,17位:
国家 | 2018GDP(万亿美元) | |
---|---|---|
美国 | 20.49 | |
中国 | 13.40 | |
日本 | 4.97 | |
德国 | 4.00 | |
英国 | 2.82 | |
法国 | 2.77 | |
印度 | 2.71 | |
意大利 | 2.07 | |
巴西 | 1.86 | |
加拿大 | 1.71 | |
俄罗斯 | 1.63 | |
韩国 | 1.61 | |
西班牙 | 1.42 | |
澳大利亚 | 1.41 | |
墨西哥 | 1.22 | |
印尼 | 1.02 | |
荷兰 | 0.91 |
通过IT技术发展的历史,看到一些规律性的东西:
- 任何技术都有其起源,也有其前置条件,从理论到技术再到应用普及需要20-30年时间。
- 随着科技的复杂性越来越高,创新的难度越来越大,现代重大的科技发明来源很多是不计时间和资金成本的军事/国防用途,然后再应用到工商业,最后普及到家庭/个人
现代很多影响深远的技术都是发轫于军事用途,由科学家最先探索,从实验室应用到军事(主要考虑功能性,稳定性,不考虑价格和易用性)领域,然后因为价格原因应用到 行业 ,可能需要几十年时间,个人用户才有机会接触到。比如计算机(密码破译,曼哈顿计划),GPS(导弹导航),手机(Motorola战场无线通话),Internet(ARPA),雷达 - 创新性技术和理论的源头来自顶级大学 : Stanford,MIT,UC Berkely…
- 技术的应用和扩散有周期性,因为马太效应的存在,拥有先发优势的公司将有更大概率占据大部分市场
从1936年图灵提出计算机数学模型(理论),到1946年制造出世界第一台计算机ENIAC(军事需要),到1964年IBM的大型机IBM360诞生(2B),然后在1984年Apple I PC 开始进入普通人家庭(2C),再到2011年PC销量达到顶端(3.6亿台)。所花的时间分别是:10年,20年,20年,30年
所以时机很重要,“早一步成为先烈,早半步成为先驱”,对公司如此,对个人亦如是。
互联网公司特点:
- 轻资产,主要成本是人力成本
- 边际成本接近0,没有时空的限制(只要基础设施配好,任何时间任何地点都可以使用),覆盖用户可达数十亿
- 极端马太效应,一个子领域只有1,2个生存者
- 没有产业链的概念,产品直达用户,从业公司间没有分工,没有上下游的关系
- 以媒体,消费,娱乐为主要载体
- 互联网极为年轻,不过20多年,但聚集了巨额的财富
IT技术虽然发展时间不长,行业的先驱很多还生活在世上,但摩尔定律驱动下的指数级增长的速度,让它已经经历过几波浪潮:大型机和小型机/1964,PC/1975,互联网/1993,移动计算和云计算/2007,大数据和IOT/2006 以及 AI/2015
每一波浪潮的技术建立在前一个之上,但又是全新的领域。
从技术角度,CSEE,EE可以看做是硬件,CS看做软件,他们有交集之处就是OS,CS本质围绕 信息 的产生(文字,图片,语音,视频,3D),处理(编译器/将人类可读的文本转换为计算机理解的格式,多媒体),存储(数据库),传输(计算机网络,无线网络),呈现(图形学技术,GUI, AR/VR),决策(AI)
不管什么浪潮,软件,硬件,网络(通信)是核心:
软件/CS:Operate System,Computer Networks,Database,Compiler,Software Engineering,Computer Graphics,AI(CV, NLP, ML, Robotics)
硬件/EE:CPU/GPU/DSP, Modem,Memory,Storage;I/O :Mouse,Keyboard,Touchscreen,Display,Speaker;Sensor:MIC,Camera,IMU,GPS,陀螺仪,Radra,LiDar…
PC 时代
1936年5月,计算机科学之父Alan Turing阿兰·图灵(1912.6.23 ~ 1954.6.7)发表论文 论数字计算在决断难题中的应用, 提出了 图灵机 数学模型。
1946年,为解决长程火炮计算量巨大的问题,在美国军方支持下,宾夕法尼亚大学John Mauchly和John Eckert为首的研制小组制造出人类第一台电子计算机ENIAC;1949年,在John von Neumann(1903.12.28 ─ 1957.02.08)的帮助下,EDVAC被制造出来,是世界上第一台 通用电子计算机。其设计理念也就是我们熟知的“冯·诺伊曼体系结构”,这对后来计算机的设计有决定性的影响,特别是确定计算机的结构,采用存储程序以及二进制编码等,至今仍为电子计算机设计者所遵循。 冯·诺伊曼 是真正少有的天才和全才之一。
ENIAC,是图灵完全的电子计算机,能够重新编程,解决各种计算问题。ENIAC长30.48米,宽6米,高2.4米,占地面积约170平方米,30个操作台,重达30英吨,耗电量150千瓦,造价48万美元。它包含了17,468根真空管(电子管)7,200根晶体二极管,1,500个中转,70,000个电阻,10,000个电容,1500个继电器,6000多个开关,计算速度是每秒5000次加法或400次乘法,是使用继电器运转的机电式计算机的1000倍、手工计算的20万倍。 通过ENIAC与当今的普通手机的大小,重量,功耗,价格对比,可知信息技术的发展真的是人类历史上少有的指数增长的例子。
20世纪下半叶,计算机的历史几乎等同于这个时期的半部科技史。1946年是人类文明史的一个分水岭,人类的进步从以 能量 为核心转变为以 信息 为核心,而作为处理信息中心的 计算机 的出现是一个标志。
1947年,AT&T 贝尔实验室的Willan Shockley威廉·肖克利(1910 - 1989),John Bardeen, Walter Bratain发明了半导体晶体管。使用晶体管替代电子管后,计算机速度提高数百倍,耗电量下降两个数量级,价格也降低一个数量级。晶体管的发明是电子技术史上具有划时代意义的伟大事件,它开创了一个崭新的时代。
1956年,Shockley搬到旧金山完全,创办了自己的公司。1957年9月18日,手下的8个年轻人离职,然后创办了 仙童 半导体公司,其中一位诺伊斯和TI的Jack Kilby共同发明了 集成电路。
1960年,仙童公司制造出第一块可以实际使用的单片集成电路,开创了全世界的 半导体 行业。 由于集成电路使用的半导体原材料主要是硅,靠着集成电路发展起来的旧金山湾区后来就被称为”硅谷”。
1965年,仙童创始人之一的戈登·摩尔(Gordon Moore)提出著名的”摩尔定律Moore’s law” :价格不变,集成电路上可容纳的元器件数目每年增加一倍,性能也提升一倍。1975年,他将预测改为每两年翻一番。
1967年,出现大规模集成电路,半导体体积大幅减小,标志着 第三次工业革命: 信息时代 的开启
摩尔定律带来的结果是,在过去的半个多世纪里,计算机处理器的性能提升了上亿倍,耗电量却下降了上百倍,而价格可以便宜到和一杯星巴克咖啡差不多。从20世纪60年代开始,摩尔定律成了全球经济的根本动力。如果扣除摩尔定律对社会带来的进步,世界的经济总量不仅没有增加,反而在减少。
1969年,Kenneth Thompson在小型计算机PDP-7上用汇编语言开发出UNIX系统,1973年Dennis Ritchie发明C语言并重写Unix,标志着跨硬件平台的OS及系统级通用编程语言的诞生。以前的操作系统和编程语言都是专有而非通用。两人获得1983年的图灵奖。值得一提的是2011年,Dennis去世,几乎无人关注,与之相反,同年去世的乔布斯却万众瞩目。 C语言的后续衍生出多种广泛使用的编程语言(提升程序员的开发效率) : 1979年Bjarne Stroustrup发明的C++,1995年James Gosling发明的Java,2000年Anders Hejlsberg发明的C#,2009年Thompson参与设计的GO
1974年4月,Intel推出8位芯片8080。这块芯片的体积和性能,已经能够满足开发微型电脑的需要。
1975年4月4日,比尔·盖茨与保罗·艾伦创办微软,在PC时代,全世界份额高达90%,但是手机时代,虽然收购了Nokia,推出Win10,但都失败告终。虽然1976年的AppleI是世界上第一台个人计算机,但最后的胜出者,真正开启 PC时代 ,将PC带入普通用户家庭的是微软和Intel开启的Win + Intel标准化联盟。
1980年,IBM公司选中微软公司为其新PC机编写关键的操作系统软件,这是公司发展中的一个重大转折点。由于时间紧迫,程序复杂,微软公司以5万美元的价格从西雅图的一位程序编制者Tim Paterson(帕特森)手中买下了一个操作系统QDOS的使用权,在进行部分改写后提供给IBM,并将其命名为MS-DOS
1984年,苹果推出了第一款具有图形用户界面的电脑Macintosh,标志着带有图形化操作系统的PC可以交付给普通消费者使用,而之前PC主要是企业购买,由行业用户使用。商业模式由2B转到2C。
1985年11月20日,MS 开始发行了Microsoft Windows1.0,它是Windows系列的第一个产品,同时也是是微软第一次对个人电脑操作平台进行用户图形界面的尝试。
1995年8月24日,微软公司发行了内核版本号为4.0的一个混合了16位/32位的Windows系统——Windows 95,并成为当时最成功的PC操作系统,一直延续至今。
图形化界面极大的降低了使用者门槛,计算机逐渐普及到普通家庭和个人用户。如果从1976年算起,到2011年达到顶点,花了35年,比起智能手机的普及要慢得多。
2011年,全球PC销量达到顶点3.654亿台,自此后出现负增长,出货量逐年下滑,市场呈现全面停滞状态,大势已去(参考Gartner的数据) : 0.93亿(1998) -> 1亿(1999) -> 1.40亿(2000) -> 1.36亿(2002) -> 1.52亿(2003) -> 1.83亿(2004) -> 2.39亿(2006) -> 2.64亿(2007) -> 3.02亿(2008) -> 3.08亿(2009) -> 3.50亿(2010) -> 3.654亿(2011) -> 3.511亿(2012) -> 3.165亿(2013) -> 3.137亿(2014) -> 2.887亿(2015) -> 2.697亿(2016) -> 2.625亿(2017)-> 2.594(2018)
2018年PC市场的前6大厂商:联想(0.58亿/22.5%),惠普(0.56亿/21.7%),戴尔(0.41亿/16.2%),苹果(0.18亿/6.9%),宏碁(0.15/6.1%),华硕(0.15/6%)
PC时代的赢家 :微软,Oracle,Adobe,AutoCAD等软件公司,Intel,Nvidia,华硕,三星,海力士,镁光等硬件厂商,联想,DELL,HP等集成商以及产业链上相关配套电源,主板,声卡,网卡,电源,机箱等公司。
PC用户时间转移到智能手机上,除了办公,人们更多使用智能手机。我认为,智能手机本质上是一种更小型,可便携,具有通信功能的 PC
互联网 时代
1967年,美国高等研究计划署(ARPA)的Lawrence Roberts负责建立一个网络,让大家可以远程登录使用大型计算机,共享信息。这个网络被称为APRANET,就是互联网Internet的前身。
1974年12月,罗伯特·卡恩、Vinton Cerf的第一份TCP协议详细说明正式发表。
1981年,NSF在阿帕网的基础上进行了大规模的扩充,形成了NSFNet,这就是早期的互联网。
1983年1月1日,ARPANET完全转换到TCP/IP http://baike.baidu.com/view/7649.htm
1990年11月12日,Tim Berners-Lee 发布”WorldWideWeb”计划,开启一个新时代: 互联网时代 ,WWW, URI,HTTP, HTML, web browser,web server等技术相继被发明和创造出来。The first web site,[12] which described the project itself, was published on 20 December 1990
1991年,芬兰的Linus T基于Mix,重新设计一个称为Linux的操作系统内核,并公布在互联网上。Linux也是未来Android系统的内核。 Linux可以看做基于互联网的开放,共享,合作精神的典范。
1993年1月23日,Marc Andreessen公布Mosaic项目,它是第一个广泛使用的graphical web browser,将互联网从少数科学家,知识分子使用的工具普及到大众,极大推动了WWW的普及。可以看做是PC互联网普及的开端。
自此后,大批基于WWW/Internet的公司创立,其中的幸存者,佼佼者成为了当今的科技巨头
1994年1月,斯坦福大学 的两位研究生杨致远和大卫-费罗创办网站:Jerry and Dave’s Guide to the World Wide Web 也就是后来的YAHOO!(雅虎)。雅虎于1996年4月12日IPO,筹资1亿3380万美金,标志着 门户网站 兴起,以及 互联网广告 盈利的商业模式。
1995年7月16日,杰夫·贝佐斯(Jeff Bezos)成立Amazon,一开始叫Cadabra。性质是基本的网络书店。然而具有远见的贝佐斯看到了网络的潜力和特色,当实体的大型书店提供20万本书时,网络书店能够提供比20万本书更多的选择给读者。在1997年5月15日时股票上市。代码是AMZN,一股为18美元(2012年10月,股价为242.36美元,2014年12月29日股价308.52,2019年达到1745美元)。
1996年1月,斯坦福大学 的博士生拉里·佩奇和谢尔盖·布林在学校开始研究一项关于搜索的研究项目,1997年9月15日,两人注册了Google域名。1998年9月4日,佩奇和布林在加州门洛帕克一位朋友家的车库内建立了Google公司。Google在2004年8月19日进行了IPO,公司发行了19,605,052份每股价值85美元的股票。IPO后,Google公司的市值迅速上涨到超过230亿美元,2011年5月,Google的月独立访客数量首次超过十亿. Google的成功证明了 搜索业务 的价值,以及 互联网广告 商业模式的可行性。
1997年1月,HTTP1.1标准初始版作为RFC 2068发布,1999年6月修订版以RFC 2616发布,时隔18年后,在2015年5月,HTTP/2 作为RFC 7540发布;同年,1997年12月18日,W3C发布HTML4.0,时隔17年后,2014年10月28日,W3C发布HTML5标准
HTTP及HTML的标准化,给WEB应用的大规模开发和应用奠定了基础,铺平了道路。
互联网在20世纪90年代美国政府退出后,迅速商业化,大量资本涌入使得互联网开始爆发性增长。20世纪90年代初,诺贝尔奖获得者,美籍著名物理学家丁肇中教授和中国科学院高能物理研究所开展合作。为了方便双方每天及时汇报交流实验结果,经批准,高能物理研究所连通了一条64kbps的专线,直连到美国斯坦福大学线性加速器中心,这样中国开始了和互联网的联系。1994年初,中科院高能物理所允许研究所之外的少数知识分子使用。 很快,中国就建立自己的教育科研机构网络,并且在一年多的时间走完了美国20年走的从教育科研到商用的发展之路。
1998年11月11日,马化腾、张志东、许晨晔、陈一丹、曾李青创立腾讯,1999年2月,腾讯公司即时通信服务(OICQ)开通,注册用户数呈爆发式增长:1999年11月,达100万;2000年4月,500万,同时在线10万;2000年6月,破1000万;2001年2月,5000万,同时在线100万;2002年3月,突破1亿;2004年4月,突破3亿。2004年6月16日,腾讯公司在香港联交所主板公开上市,发行价仅3.7港元,市值为几十亿港元;2016年9月5日,腾讯市值已达到2565亿美元,超越市值2500亿美元的阿里巴巴,成为亚洲市值最高的公司,12年间股价涨了 284 倍
1999年,第一次出国的马云,偶然的机会使用网络购买了啤酒,感到非常神奇,觉得是一个巨大的商业机会,回国创办阿里巴巴。
1999年至2000早期,利率被美联储提高6次,出轨的经济开始失去速度。在2000年3月10日,以技术股为主的NASDAQ(纳斯达克综合指数)攀升到5048,网络经济泡沫达到最高点。网络经济泡沫的崩溃在2000年3月到2002年10月间抹去IT产业约5万亿美元的市值,大量的公司倒闭。
2001年9月 盛大正式进军在线游戏运营市场,开启大型网络游戏《传奇》公开测试序幕;同年11月,《传奇》正式上市,并迅速登上各软件销售排行榜首;2002年10月《传奇》最高同时在线人数突破60万人。标志着 互联网游戏 盈利模式成为可能,其他互联网公司相继进入网游领域。
2004年2月4日,Mark Zuckerberg与他的哈佛大学室友Eduardo Saverin, Andrew McCollum, Dustin Moskovitz, and Chris Hughes 创立了Facebook网站
1998年左右,未来知名的互联网公司相继成立,距离雅虎创立过去了4年,距离雅虎上市已经过去2年:网易(1997年6月),搜狐(1998年2月),新浪(1998年12月),阿里巴巴(1999年9月9日)等。 如果说PC时代还和中国没什么关系(苹果,英特尔,微软,甲骨文在中国就没有对应的公司和产品,除了与cisco对应的华为,与Dell对应的联想),那么PC+互联网时代开始,中国开始借鉴美国成功的商业模式(落后了1-3年时间),各种产品和服务开始跟跑和本地化:门户网站:yahoo(搜狐,新浪,网易);IM:腾讯QQ(ICQ); 电商:亚马逊/1995.7(卓越网,阿里巴巴/1999.9);搜索:Google(百度);社交:facebook/2004.2(人人/2005.12),twitter/2006.3(新浪微博/2009.8);视频:Youtube/2005.2(优酷/2006.6,土豆/2005.4,56网/2005.4)。
到了移动互联网时代,跟进速度更快,开始有所创新:whatsapp/2009.5(微信/2010.10,陌陌/2011.03), uber/2010.6(滴滴/2012.6), twitch/2011.6(斗鱼/2014)。
总的来说,硅谷创造基础技术和产品,中国跟随,然后本地化,微创新;可以说并没有技术的竞争,主要依靠中国庞大的人口基数红利而来的商业模式和产品本地化的成功。而到了2016年后,随着移动互联网用户的红利期结束,整个行业开始新一轮的技术研发推动(AI, VR/AR, BlockChain, 云计算,大数据…),此时中国基本与美国并跑,同时由于政府遏制中国崛起的政策,中国企业将更重视基础技术和理论研究,尤其在AI领域,最后谁会领先还未可知。互联网本质上极大消除信息不对称,减少中间环节,替代传统行业功能:电商对商场实体店实等冲击;门户对报纸电视等替代;搜索取代黄页,114,IM取代写信,短信; 提高了生活效率,但并没有在生产效率上有所进步。这就是接下来工业互联网和AI机器人要做到的。
就我个人感受,相比传统软件公司,互联网软件公司更注重效率(迭代快,996只是副产品),体验(本土化是打败硅谷大公司的利器),更舍得利益分享(期权,股权,高薪保障)
智能手机 时代
1973年4月4日,Motorola的Martin Cooper公布了第一个手持移动电话:DynaTAC的模型原型
1983年,Rudy Krolopp领导的研发10年,耗资1亿美金的世界上第一台商用手机摩托罗拉DynaTAC 8000X问世,售价3995美元,标志着手机进入大众消费市场。2011年8月15日,谷歌以125亿美元的价格收购了摩托罗拉移动,2014年1月29日,以29亿美元转卖给联想。
1994年,The first smartphone, the IBM Simon, has a touchscreen, email and PDA features,此前的20年(1973–1993)都是使用嵌入式系统控制。移动操作系统除了包含PC的特性外,还有一些特定适合移动使用的特定外设:touchscreen, cellular, Bluetooth, Wi-Fi, GPS, camera, near field communication and infrared blaster.
2000年,Nokia推出第一个带有操作系统Symbian的智能手机Ericsson R380。彼时,诺基亚如日中天,在2000年市值近2500亿美金,从1996年起到2010年,诺基亚在手机市场连续14年占据市场份额第一。然而,不过短短4年,2014年4月25日,被微软以72亿美金收购手机业务,正式退出手机市场。
2005年7月, Andy Robbin 创立的 Android Inc,2007年发布Android 1.0,2008年9月23日,谷歌联合HTC发布了全球第一款基于Android 1.0的手机T-Mobile G1,到目前Android手机市场占有率达到86%。
Andy Robbin 本身是一个机器人专家,之后为Google陆续收购6家顶级机器人公司:Industrial Perception, Schaft,Boston Dynamic
2007年6月 Apple iPhone with iOS is introduced as an iPhone, “mobile phone” and “internet communicator.”,大屏,按键到触屏,能上网 的全新设计和交互理念颠覆了功能机时代,开启 智能手机/移动互联网时代 。 2008年,Apple上线App Store,2009年3G牌照发送,2010年iPhone4发布,急速发展。
智能手机,与其说是手机,不如说是便携式带通信功能的小型通用PC,替代了数码相机,录音笔,MP3,MP4,公共电话亭,车载导航等专用电子设备。互联网的载体从PC转移到手机,也可以说是进入了移动互联网时代,除了苹果王者归来,其他一众PC互联网时代的公司延续了他们的优势,在移动互联网时代少有真正的商业模式,产品的创新,也许只有共享经济的Uber/滴滴, Airbnb,摩拜算是。
从2010年开始,Android手机的市场份额持续增长, 从2011年的33.2%到2013的78.1%,2014年达到84.4%,iOS/11.7%, Windows Phone/2.9%, BlackBerry/0.5%,到2016年Q2,Android市场份额达到86.2%,iOS/12.9%,Windows Phone/0.6%,BlackBerry/0.1% 参考 https://en.wikipedia.org/wiki/Smartphone Symbian、BlackBerry、Palm OS、WebOS,Windows Phone,Bada
根据IDC的统计数据,2008年全球智能手机出货量为1.5亿部,2013年智能手机销量才超过功能手机,到2015年提升到14.3亿部,复合年均增速38.0%,尤其是2010-2013年间,年增速在60%左右。如果与PC电脑相比的话,智能手机在2007到2011年的5年时间内,出货量就超过了已经发展30多年的个人电脑(从1980年到2011年):
2007(1.24亿) -> 2008(1.514亿/12.7%) -> 2009(1.742亿/15.4%) -> 2010(3.047亿) -> 2011(4.914亿) -> 2012(7.253亿/17.381) -> 2013(10.042亿/18.218) -> 2014(13.017亿) -> 2015(14.329亿) -> 2016(14.73亿) -> 2017(14.72亿) -> 2018(14.04亿)
对比一下,2005年全球手机销量达8.166亿部,全球六大手机供应商是:诺基亚,摩托罗拉,三星,LG,索爱,西门子。2018年智能手机市场的前6大厂商:三星(2.92/20.78%),苹果(2.08/14.85%),华为(2.06/14.65%),小米(1.22/8.71%),OPPO(1.13/8.06%),vivo(1.01/7.19%)
可以看到,除了 苹果, PC厂商和手机厂商完全不同;除了 三星,功能手机厂商和智能手机厂商也完全不同。曾经的成功会成为改革的巨大障碍,这就给后来者巨大的机会。2000 - 2010年,互联网成功的盈利模式被一一试错出来,优秀的互联网公司进入急速发展期,纷纷上市,巨头形成,格局已定。从07年开始的移动互联网不过是PC互联网的延续,当然也有基于手机特点的商业模式微创新。未来,互联网会做为基础设施存在,如水电气一般。
盈利模式:广告,游戏,电商,增值
产品类型:门户,邮箱,搜索,社交,电商,视频,游戏,… O2O,共享,短视频,手机支付
2016年第一季度,智能手机销量开始下降,从增量到存量,必然会产生更激烈的竞争。
展望未来 : 智能时代
参考资料:
- <<第四次工业革命>>
- <<中国制造2025>>
- <<全球科技通史>>
- <<第二次机器革命>>
- <<AI·未来>>
- <<无人驾驶>>
- <<from internet to robotics>>
2019年9月26日,任正非于深圳录制了 <<与任正非咖啡对话(第二期)>> 具体内容
任正非:今天,人类社会正处于新理论、新技术再一次爆发的前夜。电子技术到了3纳米-1纳米后,不会因摩尔定律的到头而停下发展的脚步,还会继续前进,只是前进的实现形式还不知道罢了,我们曾经期望通过石墨烯来实现,但直到今天还不是很清楚;基因技术在这二、三十年一定有大的突破,它促使生命科学、生物技术、纳米医疗……的巨大突破,给人类带来的变化还不可知;如果电子技术到达比1纳米更加精密后,它与基因结合会催生出什么场景,它带来人类社会什么震撼,还不可想象;科学技术已经发展到用分子科技直接合成前所未有的材料,新材料、新技术不断出现,我们现在完全不清楚;人工智能必在此期间得到大规模的应用,对社会进步的促进和改进,财富的增加形式,还无法构想;量子计算在这个时期的突破普及,带来信息社会的爆炸,产生的影响,虽然想象得到,但绝对不是我们想象的样子;光技术的深入应用……。这个时期,单学科技术的突破,给我们带来新的机会,已经让人目不暇接了,而跨学科领域的突破产生的巨大冲击波更令人震撼;任何突破都伴随信息流量的爆炸增长,这些超大容量的数据的计算、存储、传送、处理会是什么需求,不能预测。
大规模的新技术都会在未来二、三十年内产生突破,在新机会面前,我们应该怎么迎接新时代,还是不清楚。新时代给我们打开了一个超大的机会窗,我们需要更多努力,需要全世界更多的科学家、工程师……团结起来迎接这个新时代,这是我们所期望的。对未来的不可预测,我们不用忐忑不安,应该勇敢迎接这个新时代。
Jerry Kaplan: 简单来讲,人工智能就是自动化,正如卡尔·马克思所解释和理解的,自动化就是替代人力成本。因此,拥有资本的人能够获得这项技术的主要经济收益。和其他形式的自动化一样,人工智能也将加剧社会的贫富分化。我们需要做的是不要让社会政策为经济服务,而是让经济政策为社会目标服务。我们应努力最大限度地提升整体的幸福感,而非只为了少数人的利益创造GDP。
我们正处于信息时代/第三次工业革命 向 智能时代/第四次工业革命 迈进的历史转折期。 软件,硬件,网络依然是核心,将从人们的生活赋能到农业,工业生产,交通医疗服务等等各个行业。最关键的软件技术是AI,与计算设备,传感器,机电设备结合起来让机器拥有自主性。
从2016年开始,全球手机销量增长放缓,由增量市场进入存量市场,到2018年表现出来就是移动互联网资本收缩,大公司缩招,独角兽裁员,创企倒闭,创业黄金时代过去了。与此同时,AR/VR,AI,5G等技术相继取得突破性进展,从实验室开始进入商业化阶段。
新的增长点在哪里? 2B,2G,消费升级,产业升级,供给侧结构性改革,不管是“互联网+”,还是“智能+”,为 信息技术 下一步发展指明了方向。和各行各业融合,推进各产业提质降本增效,向价值链的中高端发展提供技术支撑。
如企鹅智库在2016年底所预言的,随着移动互联网和智能手机红利接近天花板,中国乃至全球科技产业将进入一个2~5年(2019 ~ 2022)的”分水岭”过渡期。这里面将没有明确的先行者指引,没有可以循规蹈矩的路标和方向。一切都充满了未知的可能性,同时也遍布陷阱。从目前看,下一波技术浪潮很可能不再是一两项技术突破来引领,而是由物联网,云计算,人工智能,大数据,基因工程,材料科学,VR/AR等 技术集群 所形成的合力,来掀起更为庞大的代际更迭。无论大公司还是创业者,在分水岭技术迭代周期里,冒进和迟缓都是危险的,甚至冒进要更危险一些。合理做法是选择与自己公司和所处行业耦合高的新技术方向,先保持合理投入;在获得“技术+产品”融合突破后,可以提速;在获得“技术+产品+商业模式”进一步融合后,可以全力冲刺。
这里的未来,不是 可控核聚变,强人工智能AGI,量子计算,星际探索 等还难以预测的未来;而是可见的10年-20年的未来:
从全球科技趋势来看,主要研发和创新的重点在: 信息技术,生物技术,新材料,能源技术,航空航天 这些技术相互融合,相互促进,以及应用到其他产业。
- IT技术集群
AI + IOT + 5G + 云计算 + 大数据 + 机器人 + VR/AR + 区块链 等多种技术综合应用到 三大产业,实现“自动化,数字化,网络化,智能化”,将深刻影响和改变人类的生产,生活的各个方面,也就是 第四次工业革命,“智能时代” 的开端。
在 <<第四次工业革命>>一书中列出具体的例子: 1万亿个传感器将接入互联网,无人驾驶汽车占到美国道路行驶车辆的10%,首辆3D打印汽车投产,政府首次采用区块链技术收税,出现首座人口超过5万但没有红绿灯的城市
吴军老师的一个观点是:”AI + IOT + 区块链 = 超级智能,人工智能是一种生产力,它能提高生产的效率,使得我们更快、更有效地获得更多的财富。区块链是一种生产关系,它能够改变我们一些分配。“
生物技术
基因测序 : 结合机器学习和云计算 癌症预测;
基因编辑 : 修复癌症基因
新药研发:AI辅助筛查,AI加速新药研发
生物打印:3D打印和基因编辑结合,制造活体组织,以实现组织的修复和再生。
脑科学,神经认知科学的研究和AGI的研究可以交叉,互相促进新材料
石墨烯,碳素纤维,3D 打印
虽然”生化环材“在知乎属于劝退行业,但一旦取得突破会是革命性的,适合家庭环境好,又有兴趣的。
新能源
锂电池,可再生能源,核能航空航天
从更遥远的将来,最终,我们的征途是“星辰大海”。 不管是机器人技术,VR技术,量子计算,可控核聚变,都会促进星际探索的发展。
在第四次工业革命的进程中,软件技术驱动的数字互联将会彻底改变整个社会。其影响范围之广,变革速度之快,使得这场变革有别于人类历史上的任何一次工业革命。
人们将用更低成本享有更丰富的物质,生活水平。未来,人们更多的追求精神上的发展和丰富,但同时也会面对2个根本挑战: 结构性失业和财富鸿沟。不过对中国来讲,根本不同担心,因为我们有社会主义的制度保障。
面对这样一个”百年未有之大变局”,“新一轮科技革命和产业变革开启的的历史机遇期”,可以说机会真的是太多,但机遇窗口开启时间有限,一旦关闭,那就将永远错过了。世界上200多个国家,只有少数几个国家拥有相应的技术,产业,人才,资本的前提条件能参与这场革命。
对我们国家来说,错过了第一次,第二次工业革命,在第三次工业革命的末尾抓住了机会,成为仅有的与美国并驾齐驱的互联网科技强国,诞生了多家世界级的互联网企业,储备了技术,人才和资本。同时我国在70年时间里走过了发达国家200多年的工业化历程,建立起完整的工业体系,制造业总产值在2018年已经超过美日德三国之和。将两者结合起来,中国是最有希望成为此轮工业革命的领先者和领导者。从历史的尺度来讲,这是人类发生工业革命以来,中国近现代最大的战略机遇期。对国家来说,不容有失,对公司来说,也是绝佳机会窗口,所以阿里创建”达摩院“,华为成立 方舟实验室,腾讯宣布向产业互联网进军。
对于个人来说,要有所作为,但也要有目的的专注。
对于未来科技,产业,国家,社会的更多想法和预测,写在了这篇文章中。
立足当下 : 知行合一
闻道有先后,术业有专攻,如是而已。
— 韩愈 <<师说>>上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。
— 老子 <<道德经>>
上述的历史,未来趋势判断都是很宏大的战略视角,对个人而言,倘若不能落实到日常工作,做到知行合一,便是眼高手低,流于空谈。
能思考是很好的开始,很多时候人们没有相应的认知和信息做出决策和判断,结果就是无意识的,随意的就做出其实是人生路上非常关键的选择。
思考如何选择时,不要从单一维度做决策,而是综合考虑: 兴趣 + 擅长,专业,行业,国家/城市,公司/部门,团队,产品
在人类中,只有极少数人(通常被称为”天才”)可以从0到1发明创造新的技术,新的行业。绝大多数人,需要考虑的是选择什么专业,具体专研什么子方向,在哪个城市工作,哪个行业有更多的发展机会,加入什么样的公司,掌握什么样的技术知识和技能,等等。
在<<商业的本质>>中提到了“生命之域”的概念,可以作为事业/工作选择的参考准则。生命之域就是结合兴趣和擅长,对自我和世界有一定的认识后做出的选择。
所谓兴趣和擅长,简单的判断指标是:业余时间在做什么。你喜欢的事,就在你业余时间上体现出来。如果你对一件事/一个行业没有热情,你是很少会花业余时间去持续学习思考实践。而这,往往是区分高手和平庸者的分水岭。
即使明确了兴趣和擅长所在,倘若没有全球视野,专业知识体系,行业认知,产业格局,公司信息,自我认知等等信息辅助决策,如此多的可变因素,还有运气,双向选择等等不可控因素,要选择一条康庄大道很难,有人指点将是非常好运的。所谓的命运大抵如此。
接下来的内容,就是非常具体和细节的,我个人当前的一些认知,判断和选择。先从专业技术入手,然后是行业,公司。
在专业技术知识学习的理念上,要采取”先深度后广度”的顺序,把基础打扎实,保持终身学习的习惯,根据需要快速学习。
这里所谈的专业方向,是某个大专业的细分方向,以Stanford大学https://www.stanford.edu/ 为例,每一次的选择都很重要,同时可选项很多:
University(Stanford) -> School(Engineering) -> Department(Computer Science) -> Specialization(AI/CV,ML) -> Application(Intelligence Robot) -> Company(公司)
Stanford University分为7个School(学院):
- Business(商学)
- Earth, Energy & Environmental Sciences(地球,能源与环境科学)
- Education(教育)
- Engineering(工程)
- Humanities & Sciences (人文科学)
- Law(法学)
- Medicine(医学)
这里的不同类别,可以看作为是第一层次的方向性选择( 职业 ) : 老师,医生,律师,职业经理人,金融家,投资家,工程师,科学家,画家,作家,心理学家…
每个School又细分为多个Department(系),以School of Engineering为例,下属9个Department:
- Aeronautics & Astronautics(航空航天)
- Bioengineering(生物工程)
- Chemical Engineering(化学工程)
- Civil & Environmental Engineering(土木与环境工程)
- Computer Science(计算机科学) https://cs.stanford.edu/
- Electrical Engineering(电气工程)
- Management Science & Engineering(管理科学与工程)
- Materials Science & Engineering(材料科学与工程)
- Mechanical Engineering(机械工程)
第二层次的方向性选择( 专业类 ):软件工程师,硬件工程师,电气工程师,机械工程师,生物工程师,航天工程师,材料工程师…
每个Department可以修BS,MS, PHD 三种degree,以CS BS为例又分为9个Track,每个Track又可分为多个Subareas(专业细分方向),详细的见后文:
- Artificial Intelligence(人工智能)
- Biocomputation(生物计算)
- Computer Engineering(计算机工程)
- Graphics(图形学)
- Human–Computer Interaction(人机交互)
- Information(信息)
- Systems(系统)
- Theory(理论)
- Unspecialized(未分类)
比如AI就细分为如下几个子方向 :AI Methods(Machine Learning, Reinforcement Learning) , ,Natural Language Processing,Computer Vision,Robotics
第三层次的方向性选择( 专业 甚至更细分): 系统软件工程师,数据库软件工程师,CV软件工程师,计算机网络软件工程师,ML算法工程师…
每个专业及细分方向可以应用到不同的行业领域,比如Graphics可以应用到如下行业领域:
- Video Games 视频游戏
- Movies 影视特效
- CADs, Animators, Modelers CAD
- 2D Image Processing 图像处理
- Visualization
- Simulators 模拟仿真
- Virtual and Augmented Reality
- User Interfaces 操作系统GUI
第四层次的方向性选择( 行业 ): 如果不是做科研的话,在产业界,必然面临选择具体做什么应用的问题。尤其是AI这样的 通用目的技术 ,可应用的范围太广,基本上可以和所有行业结合起来。
Stanford Electrical Engineering
从IT技术的角度来说,CS是软件,EE是硬件,两者的交集是嵌入式系统,EE具体的专业方向:
将EE重点列出来,主要是从我个人的经验来看,因为一直没有搞清楚EE和CS各自具体做什么有什么差别,导致知识体系的认知上有误区,走了很多弯路。比如我多年前尝试的方向:多媒体(Multimedia),嵌入式Linux(Embedded Linux),其实都是属于EE而不是CS专业类别。
Stanford EE有三大核心研究方向和2大交叉方向,每个方向又有很多子领域,
Physical Science and Technology(物理科学与技术)
We look to define the device technology and circuit fabric of future electronic and photonic systems, which integrate the abstraction levels of materials, nanostructures, semiconductor devices, integrated circuits, power electronics and electronic system engineering. We also investigate physics, materials, devices, and systems using light and electromagnetism, for applications including sensing, imaging, communications, energy, biology, medicine, security, and information processing.
- Integrated Circuits and Power Electronics(集成电路)
- Biomedical Devices, Sensors and Systems(生物医学设备,传感器与系统)
- Energy Harvesting and Conversion(能量收集与转换)
- Photonics, Nanoscience and Quantum Technologies(光子学,纳米科学以及量子技术)
- Nanotechnology, Nanofabrication and NEMS/MEMS(纳米技术)
- Electronic Devices(电子设备)
Information Systems and Science(信息系统和科学)
In addition to work on the core disciplines of information theory and coding, control and optimization, signal processing, and learning and inference, our research in this area spans several application areas, including biomedical imaging, wireless communications and networks, multimedia communications, Internet, energy systems, transportation systems, and financial systems.
- Control & Optimization(控制与优化)
- Information Theory and Applications(信息理论与应用)
- Communications Systems(通信系统)
- Societal Networks(社会化网络)
- Signal Processing and Multimedia(信号处理及多媒体)
Applications include multimedia compression, communications, networked media systems, augmented reality, and remote sensing. - Bio-Medical Imaging(生物医学成像)
- Data Science(数据科学)
Hardware/Software Systems(硬件/软件系统)
Our research in this area looks into new ways to design, architect, and manage energy-efficient systems for emerging applications ranging from the internet-of-things to big data analytics.
- Energy-Efficient Hardware Systems(高效能硬件系统)
- Software Defined Networking(SDN)
- Mobile Networking(移动网络)
- Secure Distributed Systems(安全分布式系统)
- Data Science(数据科学)
- Embedded Systems(嵌入式系统)
- Integrated Circuits and Power Electronics(集成电路)
更详细的课程信息在: https://exploredegrees.stanford.edu/schoolofengineering/electricalengineering/
Stanford Computer Science
Stanford CS 有三个学位:BS/本科, MS/硕士, PHD/博士,不同学位都有详细的课程体系设计和要求
课程安排的原则都是先根据兴趣选一个专业方向(深度),然后要求足够的编程实践,最后根据兴趣选择一定的扩展课程(广度)。
这里有一个值得一再强调的伟大的教育理念是: 可以根据需要先尝试选修1,2个引导课程,然后可以无代价的随时换方向,直到找到自己感兴趣的方向。甚至可以自行组合自己感兴趣的课程。 可以说做到了”以学生为中心“而不是以老师为中心。
Stanford的课程SCHEDULE分为Autumn(09.23 ~ 12.08), Winter(01.04 ~ 03.13), Spring(03.28 ~ 06.06), Summer(6.21 ~ 08.12)四个Quarter
个人觉得BS学位的课程为从事某个领域的工作打下了基础,强调的是专业深度(depth);MS学位在领域知识的深度(depth)和广度(breadth)上取得了一个平衡,在就业上更有竞争力,目标是工业界;PHD则是要求在4~6年的时间在某一个方向取得世界级的科研成果,强调的是研究和发表顶级会议论文,同时对Breadth的范围要求更广,目标是学术界。 CS领域还是有不少巨头的研究院可以从事科研工作,但肯定是没有在大学那么自由。如没有较好的家庭经济基础,一定的天赋,韧性以及科研的热爱,还是不要读PHD的好。这里有一个例子供参考:一个stanford CS研究生的博士毕业旅程
不管是BS还是MS,在学完基础的Mathematics, Science, Engineering Fundamentals, Computer Science Core课程后,都要根据兴趣选择一个专注的子方向。
具体来看BS课程,在选择CS专业前,阅读https://cs.stanford.edu/degrees/undergrad/index.shtml提供了详细的指南,通过 https://cs.stanford.edu/degrees/undergrad/Considering.shtml 可以了解CS专业的基本信息,所有的课程信息在 https://cs.stanford.edu/academics/courses,首先第一步就是选 Advisor(导师),然后选择感兴趣的引导课程,选择必修基础课程,Track 核心课程,选修课程…
在 https://exploredegrees.stanford.edu/schoolofengineering/computerscience/#bachelortext非常详细列出了获得BS学位需要学习的课程及路径. 可以通过 课程号.stanford.edu 来访问该课程对应的网页,比如通过 cs131.stanford.edu (因为每年授课的人不同,所以会指向不同的URL)就可以查看Computer Vision CS131课程的相关信息,一般会有课程安排,可下载的教材,参考资料等信息;根据教材可以大致的了解该方向的关注的内容,然后根据推荐的参考书籍系统的学习。
具体的Track课程的选择(也就是专业方向):
The tracks allow students to develop depth in a particular specialization by taking 4-5 courses in a related area. Students must complete the requirements for any one track which typically includes 1-2 gateway classes, 1-2 classes form a menu of highly-related courses, and then a selection of classes from a list of more broadly related courses.
a track must consist of at least 25 units and 7 classes。
可以根据这些tracks涉及的主题或者应用方向来选择,方向的选择至关重要,可能影响到职业生涯的数年,甚至一生,但同时选择也是一件困难的事情。明确的知道兴趣所在的人是幸运的;不确定的可以尝试去学习每个track的引导课程,也许能发现自己真正的兴趣所在。当然如果能找到一两个Advisor可以咨询他(们)的意见,那就是再好不过的了(这也是名校的价值所在). 不管怎样,充分了解,审慎选择,跟随内心。
总的来说, 在掌握基础知识之后,需要从10个专业方向中,根据自己的兴趣有目的的选择,对于不确定自己想选什么方向的,每个track都有1,2个引导课程,每个引导课程通常会说明该方向具体有哪些应用,据此可以判断是否有兴趣继续在该方向深入,然后再尝试其他方向。这个设计非常人性化,让每个学生有机会尝试了解不同技术方向的知识,从中发现自己热爱的领域;也是非常非常非常重要的,因为它提供了早期的快速试错的机会,等到职场上再来找自己感兴趣的方向是非常困难的,因为很难有自我选择的机会;想转换方向就更困难了,除了机会,还需要付出大量额外的时间,精力。
参考 https://cs.stanford.edu/degrees/undergrad/Tracks.shtml, https://cs.stanford.edu/research :
Artificial Intelligence
Artificial Intelligence includes the study of foundational material on topics such as logic, probability, statistics, language, and their relationship to several applications.
细分方向: Computational Biology | Computer Vision | Machine Learning | Natural Language Processing | Robotics
引导课程: CS221 - Artificial Intelligence: Principles and Techniques
应用领域: Robot(PR2), Autonomous Driving(Google Driver, Telsa), VR/AR(Hololens), Speech Recognition(语音识别), Face Recognition(人脸识别),AI助理(Google Now, Siri, Cortana)
Biocomputation
Biocomputation is an interdisciplinary track that focuses on computational challenges and solutions in the biological and medical informatics application areas.
应用领域: 医学,生物
Computer Engineering
The computer engineering track gives students a combination of CS and EE knowledge required to design and build both general purpose and application-specific computer systems. The computer has focuses on three main areas: Networking, Digital Systems, Robotics and Mechatronics.
这个方向偏向硬件和底层软件,以EE为主,CS为辅。
细分方向: Networking(计算机网络硬件和底层软件), Digital Systems(数字硬件和底层软件,嵌入式系统), Robotics and Mechatronics(机器人硬件和底层软件)
引导课程: EE 108 : Digital System Design & EE 180 Digital Systems Architecture
应用领域: IC设计,机器人,通信
Graphics
Graphics includes the study of digital image and video manipulation, including topics related to capture and display devices; color, shading, lighting, and perception; digital representations of physical objects, simulation, modeling, and animation; and geometric algorithms.
细分方向: Shading, simulation, modeling, animation, geometric algorithms
引导课程: CS148 - Introduction to Computer Graphics and Imaging
应用领域: Video Games(GTA, WOW, COC…), Movies(ILM, Weta), CADs(AutoCAD, PS), Animators, Modelers(3DMax, Maya), 2D Image Processing(PhotoShop), Visualization(可视化), Simulators(模拟器), Virtual and Augmented Reality(Oculus Rift, Hololens), Graphical User Interfaces(GDI, GTK+)
Human-Computer Interaction
These skills are applicable to areas : collaborative work, information visualization, tangible computing
个人觉得此方向更偏向人文,艺术方面,适合对产品设计(人机交互,UI设计,心理学,沟通,艺术…)感兴趣的人,有CS基础,然后更希望从事PM工作的可以选择此方向。
引导课程: CS147 - Introduction to Human-Computer Interaction Design
应用领域: UX Design, UI Design
Information
Information is a track that that synthesizes topics from across Computer Science that pertain to creating, processing and understanding digital information in the modern world. The track seeks to span topics ranging from computer data storage through issues of data models, formal query languages, and issues of data integrity to searching for and extracting information from unstructured data sources such as web pages, human languages, and DNA, by using techniques like machine learning and data mining.
细分方向: Information-based AI applications, Database and Information Systems(数据库应用,数据挖掘), Information Systems in Biology, Information Systems on the Web(社交,搜索)
引导课程: CS145 - Introduction to Databases
应用领域:大数据(Hadoop, Spark…),数据挖掘, 推荐系统, chatbot
Systems
Systems is the study of the design and implementation of computer systems such as compilers(编译器), databases(数据库), networks(计算机网络), and operating systems(操作系统).
研究计算机基础领域,这些领域的成熟度和复杂度决定了主要是研究机构和大公司才有此需求,比如Google, 微软,苹果 目前操作系统,比如Windows, Linux, MacOS, Android, iOS,
Topics include the hardware/software interface, the networking stack, digital architecture, memory models, optimization, concurrency, privacy, security, distributed and large-scale systems, reliability and fault tolerance, and related algorithms and theoretical topics.
细分方向: Architecture | Computer Security | Data Science | Networking | Operating/Distributed Systems | Programming Systems and Verification
引导课程: CS140 - Operating Systems and Systems Programming
应用领域: Operating Systems(Windows, Linux, iOS, Android), Compilers(gcc, llvm), Tcp/IP Stack(Linux), Databases(MySQL, MongoDB)
Theory
Theory includes the study of fundamental computational techniques, their capabilities, and their inherent limitations.
对计算机基础理论研究:
细分方向: data structures数据结构,sequential and parallel algorithms顺序和并行算法 | computational geometry计算几何 | design and analysis of programs and programming languages 程序和编程语言的设计和分析 | logic and formal methods 逻辑和形式化的方法 | combinatorial, logical, and algebraic mathematics组合,逻辑和代数数学
引导课程: CS154 - Introduction to Automata and Complexity Theory
应用领域: Computer Science(计算机科学)
The development and analysis of algorithms for a variety of settings and applications. Major directions include Complexity Theory, Cryptography, Algorithmic Game Theory, Geometric Algorithms, algorithmic techniques for internet applications, various aspects of network and computer security, databases, design and analysis of programs and programming languages, and supporting studies in combinatorial, logical, and algebraic mathematics.
Unspecialized
The unspecialized track includes classes from across the CS Department and gives students the opportunity to study many areas in the field, providing them with a significant amount of breadth. This track is essentially the previous CS undergraduate curriculum. Requirements include a systems class, an AI class, an applications class, and electives from the general CS electives list.
可以根据自己的需要定制一个方向,必须要包括一个system课程,一个AI课程,一个应用方向课程。
相比本科生,MS研究生包含更多的课程,这些课程是根据工业界需要,融合了不同的track的内容,可以看出选择哪些课程就是需要和导师好好聊聊,有针对性的选择,避免浪费时间和精力。
MS的课程和BS并没有继承关系,在方向分类上比较类似,相对BS的9个track,MS的课程在内容上除了一样的深度外,更强调课程关联性,技术的广度及编程实践的要求。个人觉得MS的课程更好,因为它在工程和研究,技术的深度和广度上取得了较好的平衡。当然MS的课程可选内容是非常之多的,所以还是需要根据自身的兴趣有目的的筛选。从课程安排上可以看出,Stanford对于知识的学习是按照 基础(数学,科学,工程) -> 专业深度(按兴趣选1个主方向) -> 专业广度(根据行业需要选择关联课程) 的顺序来安排的。
MS : Artificial Intelligence, Biocomputation, Computer and Network Security, Human-Computer Interaction, Information Management and Analytics, Mobile and Internet Computing, Real-World Computing, Software Theory, Systems, Theorectical Computer Science
MD具体的10个专业是(大部分与BS的track分类一样,只是内容的多寡):
- Artificial Intelligence
AI很宽泛,包括CV, NLP, Robotics,ML 几个子方向的课程内容。 - Biocomputation
生物计算 - Computer and Network Security
对计算机及网络安全有兴趣的可选择此方向 - Human-Computer Interaction
- Information Management and Analytics
- Mobile and Internet Computing
对计算机网络,操作系统,互联网感兴趣的可选择此方向 - Real-World Computing
对计算机图形学,机器人感兴趣的可选择此方向,相比AI,RWC更倾向仿真,计算机图形学的课程较多。 - Software Theory
- Systems
计算机系统本身:操作系统,计算机网络,数据库 - Theorectical Computer Science
除了各个专业方向的课程外,在广度上还有大量的 Electives/选修 课程,在时间,精力,能力有限的情况下,只能有目的的选择。
技术选择 : 学习路线图
所以,基于上述的认知,以及各种信息的评估,并做了一些实践后,根据我自己的兴趣,目标,最终我选择 Computer Vision 作为 专业方向,选修课程以 Robotics,Computer Graphics为主。我对课程的选择和学习以此作为指导思想。
从技术掌握的层次来讲,分为:熟悉,掌握,精通,根据需要采用不同的投入程度。技术最终要为应用服务,应用最终落实到行业上,在考虑将某种技术作为主要专业方向时,就要考虑到这项技术的应用场景,也就是最终从事什么样的行业,这个行业是是否符合你的兴趣,价值观,是否有成长性。
可以看到Stanford的一门课程通常持续2个月时间,一般是10周,每周2节课,1节课1个半小时左右,也就是说一门课程总计课堂时间是30个小时(1.5 x 2 x 10),大量的时间要花在课外:查找资料,阅读书籍,论文,编程实践,做作业
CS是实践性很强的学科,理论和实践一定要结合,Learning by doing是最好的学习方式,在学习过程中带着目的/Ieda会更有效率。以下所列是我参考Stanford课程大纲,互联网信息,以及我个人的经验而成。我自己的学习过程并非完全按照下面所列的顺序,因为和本篇文章一样,学习的过程就是我个人的探索过程,随着认知和经验的提高,会更有判断力,知道什么是弯路,知道什么顺序更合理。
Stanford课程作为大纲,指引正确的方向,引领我们入门,真正要投入更多时间和精力的是详细反复阅读课程推荐的书籍,论文以及亲自动手实践。 课件,参考书,编程实践互为参考体会,将纲要,细节,实践相结合,从而融会贯通,深刻理解和掌握。
Lectures are meant to lead you in the right direction — just to get your started
和软件开发一样,个人的经验,见识以及文章的形成,都是螺旋上升,逐步迭代而成的。本文即是在多次的修改中不断完善起来的。
技术的积累需要阅读大量的书籍和编程实践来提升认知和开发水平,扎实基础,阅读经典,认真实践,思考记录构成良性循环和知识体系闭环,这是个长期的过程,需要多年的积累。完成下面这些知识,课程的学习,并理解掌握,需要4~5年左右的时间,还没有算上基础知识的掌握所需的2-3年时间,总共大概需要7年左右的时间,和读完本科+硕士(4 + 3)所需时间差不多。和”异类”所说的10000小时练习差不多。
Computer Vision只是 AI 的一个子方向,AI 细分为:AI Methods, Natural Language Processing, Vision, Robotics 4个子方向。而且现在 AI 正处于研究的热潮期,还在不断涌现新的技术,理论知识。从广度的角度(交叉专业)讲,即使是高相关性的选修课程也是非常多,根据工作需要有针对性的学习,学以致用。
综合 https://cs.stanford.edu/degrees/undergrad/Requirements.shtml,[BS Track : Artificial Intelligence](https://exploredegrees.stanford.edu/schoolofengineering/computerscience/#bachelortext), MS Specialization Areas : Artificial Intelligence
以及我的认知,及目标,选择CV, Robotics, Machine Learning的课程作为专业课程:
1. Mathematics
微积分,线性代数,概率论
- MATH41 - Calculus
- MATH42 - Calculus
- MATH51 - Linear Algebra and Differential Calculus of Several Variables
CME100
2. Science
机械,电子
- PHYSICS41 Mechanics
- PHYSICS43 Electricity and Magnetism
3. Engineering Fundamentals
CS106A - Programming Methodologies
CS106A introduces computer programming for people who have not programmed before. Introduction to the engineering of computer applications emphasizing modern software engineering principles: program design, decomposition, encapsulation, abstraction, and testing. Emphasis is on good programming style and the built-in facilities of respective languages. 从2019年Fall开始,CS106A与时俱进将教学的编程语言从Java改为Python。 适合毫无编程经验的人。
Prerequisites:
Reading:
Topics:
We will cover all the important topics of basic programming in Python: types, numbers, strings, functions, linear collections, dictionaries, logic, decomposition, good programming style, whole-program structure, text, file-processing, debugging, and performance.ENGR40 Introductory Electronics (ENGR40)
ENGR40 is an introductory electronics class taught by the EE department.
4. Computer Science Core
CS106X, CS107, CS110, CS103, CS109, CS161 是必修课程
CS106X - Programming Abstractions in C++
CS106B/X introduces students to many fundamental programming concepts and software engineering techniques using the C++ language.
CS106B 以及 CS106X都是使用C++语言学习编程,其覆盖的主题类似(基本的数据结构,算法),但CS106X相对而言会更深入,Significant amount of additional advanced material and substantially more challenging projects.
本课程使用QT creator作为IDE,可以选择CS106L来深入学习C++ Standard.
Prerequisites: CS106A
Reading:
Programming Abstractions in C++ The book was written by a Stanford CS professor and targeted directly for this course
Topics:
Abstraction and its relation to programming. Software engineering principles of data abstraction and modularity. Object-oriented programming, fundamental data structures (such as stacks, queues, sets) and data-directed design. Recursion and recursive data structures (linked lists, trees, graphs).CS41 - The Python Programming Language
The fundamentals and contemporary usage of the Python programming language. Primary focus is on developing best practices in writing Python and exploring the extensible and unique parts of the Python language.
Prerequisites: CS106X
Reading:
Topics:
Topics include: Pythonic conventions, data structures such as list comprehensions, anonymous functions, iterables, and powerful built-ins (e.g. map, filter, zip). We will also focus on data analysis tools including NumPy, Pandas, Matplotlib, and Scikit-learn for their application in machine learning.CS107 - Computer Organization and Systems
CS107 is the third course in Stanford’s introductory programming sequence. The CS106 courses provide you with a solid foundation in programming methodology and abstractions, and CS107 follows on this to build up and expand your breadth and depth of programming experience and techniques. The course will work from the C programming language down to the microprocessor to de-mystify the machine. With a complete understanding of how computer systems execute programs and manipulate data, you will become a more effective programmer, especially in dealing with issues of debugging, performance, portability, and robustness.
Prerequisites: CS106X
Reading:
The C Programming Language
Bryant & O’Hallaron. Computer Systems: A Programmer’s Perspective 3rd
Topics:
Topics include machine architecture (registers, I/O, basic assembly language), memory models (pointers, memory allocation, data representation), compilation (stack frames, semantic analysis, code generation), and basic concurrency (threading, synchronization).CS106L - Standard C++ Programming
CS106L is a companion class to CS106B and CS106X that offers a more complete exploration of the C++ language. 更深入使用C++语法,标准库
Prerequisites: CS106A, CS106X
Reading:
C++ Primer
Topics:
Streams, Sequence Containers, Associative Containers, Templats, Functions, STL, Operator, Inheritance, polymorhpism, Smart Pointers, MultithreadingCS110 - Principles of Computer Systems
CS110 will teach students how to build larger scale systems using operating system and networking abstractions.
Prerequisites: CS107
Reading:
Computer Systems: A Programmer’s Perspective 2nd
Principles of Computer System Design
Topics:
Topics include processes (threading, context switching, interprocess communication), storage and file management (file systems, virtual memory), networking (sockets, TCP/IP, routing) and an understanding of distributed systems.CS103 - Mathematical Foundations of Computing
CS103 will give students the mathematical foundations necessary for computer science.
Prerequisites: CS106X
Reading:
How to Read and Do Proofs, Daniel Solow
Introduction to the Theory of Computation, Third Edition by Michael Sipser.
Topics:
Topics include proof techniques and logic; induction; sets, functions, and relations; an introduction to formal languages; Graphs, Induction, DFA’s, NFA’s, and Regular Expressions; Context-Free Grammars, Turing Machines, and NP-Completeness.CS109 - Introduction to Probability for Computer Scientists
CS109 is designed to teach students material from probability and statistics that is relevant to computer science.
等价:CME106, STATS116, MS&E220
Prerequisites: CS103, CS106X, MATH51
Reading:
Sheldon Ross, A First Course in Probability (10th Ed.), Pearson Prentice Hall, 2018
Topics:
Topics include combinatorics; probability theory; conditional probability, and independence; probability distributions; Bayes’ Theorem, Law of Large Numbers, and the Central Limit Theorem; and hypothesis testing. The class will also cover applications of probability including hashing, data analysis, inference, and an introduction to machine learning.CS161 - Design and Analysis of Algorithms
CS161 gives students the tools to analyze data structures and algorithms.
Prerequisites: LaTeX, Python, CS103, CS109
Reading:- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduction to Algorithms, 3rd Edition
Topics:
Data structures: binary search trees, heaps, hash tables. Algorithm design techniques: divide-and-conquer, dynamic programming, greedy algorithms, amortized analysis, randomization.
5. Specializations
要从10个方向中选择1个作为 专业方向 ,同时选修的课程也非常之多,没有导师和前辈的指点要正确选择是非常困难的。试错有成本,最好一开始就选对:
- 要有目的性,根据自己想做什么以及要进入的目标行业的需要这2个大前提作为基础,方法上是:选择一个主方向作为切入点,达到一定的 depth 之后,然后再学习横向关联的 breadth 课程。
- 不太明确的,可以广泛的学习各个方向的入门课程(通常第一节课会介绍该方向的典型产品,应用领域),搜集相关的更多信息(有人指点是很幸运的)来辅助决策,再做出决定。
智能机器人 是个复杂的系统,涉及多个学科(ME, EE, CS)。同时作为通用技术,应用极为广泛,可以和所有行业结合。我主要关注Computer Vision,Machine Learning,Robotics 三个子方向。具体来说,我选择AI的子方向CV作为主专业方向,对于智能机器人来说,也是其Perception能力所必须的技术,所以从CV作为专业方向的切入是最佳选择。CV的一些High Level任务需要依靠Machine Learning(当前主要是Deep Learning的突破)实现,所以横向扩展需要学习 ML 知识。
Deep Learning只是Machine Learning的一个分支,其他还还包括Support vector machines, Clustering, Bayesian networks, Reinforcement learning..;
而Machine Learing也只是AI的一个分支,其他还包括Computer Vision, Speech Recognition, NLP, Robotics;AI只是CS的一个分支,还有System,Computer Graphics,HCI,Information;CS只是IT的一个分支,其他还有EE,IT只是Science的一个分支,其他还有生物,物理,…
可选择的课程非常多,要有目的的选择,如果有人指引会少走很多弯路。人的时间,精力,能力有限,必须有所取舍。 先泛再深后广,先通过学习引导课程广泛了解,确定兴趣/专业后扎实深入系统的学习和实践,最后围绕专业根据需要扩展。
在后续的工作和学习中,围绕stanford的这些课程展开,有的深入,有的泛泛,是个反复的过程,而且Stanford的课程也在与时俱进,及时的传授最新的研究方向,工业界的最新成果。很多都是很前沿性的科研内容,包括深度学习的可解释性,多模态,知识图谱,智能通用机器人等通向AGI的研究。
Computer Vision
CS131, CS231A, CS231N, CS468, CS205L
CS131 - Computer Vision: Foundations and Applications
Prerequisites: Python,MATH51, MATH41, CS109
Reading:
D. A. Forsyth and J. Ponce. Computer Vision: A Modern Approach (2nd Edition). Prentice Hall, 2011
Topics:
Transformation matrixes, Pixels and image representation, Filters, Edge detection,Features and fitting/RANSAC,Feature descriptors/SIFT, Resizing, Clustering/K-means, Object recognition/Nearest neighbors, Dimensionality reduction/SVD, PCA; Face identification/LDA; Visual Bag of Words; Detecting objects by parts/DPM; Visual ontologies; Motion; Tracking; DLCS229 - Machine Learning
Prerequisites: Python, MATH51, CS109
Reading:
Richard Duda, Peter Hart and David Stork, Pattern Classification, 2nd ed. John Wiley & Sons, 2001
Tom Mitchell, Machine Learning. McGraw-Hill, 1997
Richard Sutton and Andrew Barto, Reinforcement Learning: An introduction. MIT Press, 1998
Trevor Hastie, Robert Tibshirani and Jerome Friedman, The Elements of Statistical Learning. Springer, 2009
Topics:
Linear Regression, Netwon’s Method Perceptron; Naive Bayes. Laplace Smoothing. Kernel Methods; SVM; Neural Network; Bias/ Variance. Regularization. Feature/ Model selection; K-means. Mixture of Gaussians. Expectation Maximization; GMM(EM). Variational Autoencoders; Principal Component Analysis. Independent Component Analysis; MDPs. Bellman Equations. Value iteration and policy iteration; LQR. LQG. Monte Carlo Tree Search; Q-Learning. Value function approximation; Policy Search. REINFORCE. POMDPs;
Spring 2019由 马腾宇Tengyu Ma 授课 : http://ai.stanford.edu/~tengyuma/ 清华姚班,普林斯顿博士,斯坦福AP;
My research interests broadly include topics in machine learning and algorithms, such as non-convex optimization, deep learning and its theory, reinforcement learning, representation learning, distributed optimization, convex relaxation (e.g. sum of squares hierarchy), and high-dimensional statistics.
另一个研究 非凸优化的 https://users.cs.duke.edu/~/ 鬲融rongge:清华姚班,普林斯顿博士,杜克AP http://dy.163.com/v2/article/detail/E9TMNEJF0511DSSR.html
关于 清华姚班,https://zhuanlan.zhihu.com/p/36549612 十年前的天才少年,如今的AI黄金一代
CS231A - Computer Vision: From 3D Reconstruction to Recognition
Prerequisites: Python, MATH41, MATH51, CS109, CS131, CS229
Topics:
Camera Models, Single View Metrology,Stereo Systems, Structure from Motion,Fitting and Matching, Detectors and Descriptors, Active Stereo & Volumetric Stereo, Introduction to Recognition : Image Classification, Image Classification & 2D Object Detection, 2D Scene Understanding,3D Object Detection, 3D Scene Understanding
Reading:
D. A. Forsyth and J. Ponce. Computer Vision: A Modern Approach (2nd Edition). Prentice Hall, 2011
R. Hartley and A. Zisserman. Multiple View Geometry in Computer Vision. Cambridge University Press, 2003
R. Szeliski. Computer Vision: Algorithms and Applications. Springer, 2011
Gary Bradski, Adrian Kaehler. Learning OpenCV, O’Reilly Media, 2008CS231N - Convolutional Neural Networks for Visual Recognition
This course is a deep dive into details of the deep learning architectures with a focus on learning end-to-end models for these tasks, particularly image classification.
Prerequisites: Python, MATH41, MATH51, CS109, CS229
Reading:
Topics:
Image Classification, Loss Functions and Optimization, Backpropagation, Convolution and pooling, DL HW/Framwork, CNN Architectures, Recurrent Neural Networks, Generative Models, Detection and Segmentation, Visualizing and Understanding, Deep Reinforcement LearningCS468 - Machine Learning for 3D Data
machine learning methods for 3D shape classification, segmentation, and symmetry detection, as well as new shape synthesis.CS331B - Representation Learning in Computer Vision
Prerequisites: CS131, CS231A, CS231N
Topics:
2D and 3D Object and scene representationsCS233 - Geometric and Topological Data Analysis
The goal of this course is to cover the rudiments of geometric and topological methods that have proven useful in the analysis of geometric data, using classical as well as deep learning approaches. Even non-geometric data, e.g. social networks or genomic microarrays, are often best analyzed by embedding them in a multi-dimensional geometric feature space.
Prerequisites: CS131, CS231A, CS231N
Topics:
PCA, CCA, Graph methods, Multidimensional Scaling, Computational topology, Persistent Homology, Representations of 3D Geometry : voxel, multiview, point cloud, and mesh formats, Shape alignment, Shape differencesCS205L - Continuous Mathematical Methods with an Emphasis on Machine Learning
从2019年开始本课程替代CS205 ,将重点从图形模拟转到机器学习/深度学习的数学应用上,侧重从Machine/Deep Learning 的角度,讲授 数学 在Computer Vision 和 Robotics中的应用。:http://physbam.stanford.edu/~fedkiw/
A survey of numerical approaches to the continuous mathematics used in computer vision and robotics with emphasis on machine and deep learning. Although motivated from the standpoint of machine learning, the course will focus on the underlying mathematical methods including computational linear algebra and optimization, as well as special topics such as automatic differentiation via backward propagation, momentum methods from ordinary differential equations, CNNs, RNNs, etc.
Prerequisites: MATH51, CS106X
Reading:
Scientific Computing 2nd http://heath.cs.illinois.edu/scicomp/
Topics:
overfitting, Solving Linear Systems, Singular Value Decomposition, Iterative Methods, Local Approximations, Least Squares, Regularization, Optimization, Nonlinear Systems, Newton’s Method, Gradient Descent, Momentum MethodsCS348K - Visual Computing Systems
Visual computing tasks such as computational imaging, image/video understanding, and real-time 3D graphics are key responsibilities of modern computer systems ranging from sensor-rich smart phones, autonomous robots, and large datacenters. These workloads demand exceptional system efficiency and this course examines the key ideas, techniques, and challenges associated with the design of parallel, heterogeneous systems that accelerate visual computing applications. This course is intended for systems students interested in architecting efficient graphics, image processing, and computer vision platforms (both new hardware architectures and domain-optimized programming frameworks for these platforms) and for graphics, vision, and machine learning students that wish to understand throughput computing principles to design new algorithms that map efficiently to these machines.
非常偏底层硬件,从 体系结构 角度如何设计处理image, video, ML/DL 数据,计算
Throughput Hardware Design Principles, Digital Camera Processing Pipeline, Smartphone Camera Processing, Efficiently Scheduling Image Processing Algorithms on Parallel Hardware, Specialized Hardware for Efficient Image Processing, Lossy Image and Video Compression, The Light Field and Capture for VR Display, Efficient DNN Inference (for Image Analysis), Algorithms for Parallel DNN Training at Scale, Hardware Accelerators for DNN Inference, Algorithmic Optimization: Examples of Task-Motivated DNN Structure, Algorithmic Optimizations for DNN-Based Video Analysis, Video Stream Processing at Cloud Scale, The GPU-Accelerated Real-Time Graphics Pipeline, Efficiently Accessing Memory: Hardware for Texture Mapping and Depth Buffering, Scheduling the Graphics Pipeline onto a GPU, Domain-Specific Languages for Shading, The Fusion of Rendering and Deep Learning
Robotics
CS223A, CS237A, CS326, CS234, CS238,CS239, CS330,CS336
CS223A - Introduction to Robotics
This course provides an introduction to physics-based design, modeling, and control of robotic systems, in particular of robotic arms. You will learn basic methodologies and tools, and build a solid foundation that will enable you to move forward in both robotic research (CS327A, CS326) and applications (CS225A). Concepts that will be covered in the course are Spatial Transformations; Forward and Inverse Kinematics of Robots; Jacobians; Robot Dynamics, Joint, Cartesian, Operational Space and Force Control as well as Vision-based Control.
Prerequisites:
Reading:
Robotics - Modelling, Planning and Control by Siciliano, B., Sciavicco, L., Villani, L., Oriolo, G.
Topics:
Spatial Transformations, DH Parameters, Forward Kinematics, Jacobians, Trajectory Generation, Robot Dynamics, Inverse Kinematics, Joint Space Control, Task Space Control, Operational Space Control, Force Control, Obstacle Avoidance, Visual ServoingCS225A - Experimental Robotics
The goal of this class is to introduce you to the intricate art of programming articulated robots. The course will review the basics of control theory in the first half of the quarter, and will require groups of three to four students to implement a motor task on one of our available robotic manipulators.
Prerequisites:
Topics:
Simulation and Graphics, Kinematics, Dynamics and Control, Operational Space Framework, Operational Space Control
以下AA开头的课程,是AA系提供,参考 https://aa.stanford.edu/courses
CS237A/AA274 - Principles of Robot Autonomy I
Prerequisites: CS106X, MATH51, CS109, ROS
Topics:
Basic principles for endowing mobile autonomous robots with perception, planning, and decision-making capabilities. Algorithmic approaches for robot perception, localization, and simultaneous localization and mapping; control of non-linear systems, learning-based control, and robot motion planning; introduction to methodologies for reasoning under uncertainty, e.g., (partially observable) Markov decision processes. Extensive use of the Robot Operating System (ROS) for demonstrations and hands-on activities.CS237B/AA274B: Principles of Robot Autonomy II (AA 174B, AA 274B, EE 260B)
Prerequisites: CS106X, MATH51, CS109, ROS, CS237A
Topics:
This course teaches advanced principles for endowing mobile autonomous robots with capabilities to autonomously learn new skills and to physically interact with the environment and with humans. It also provides an overview of different robot system architectures. Concepts that will be covered in the course are:
Reinforcement Learning and its relationship to optimal control, contact and dynamics models for prehensile and non-prehensile robot manipulation, imitation learning and human intent inference, as well as different system architectures and their verification.
Students will earn the theoretical foundations for these concepts and implementnthem on mobile manipulation platforms. In homeworks, the Robot Operating System (ROS) will be used extensively for demonstrations and hands-on activities.
CS326: Topics in Advanced Robotic Manipulation
This course provides a survey of the most important and influential concepts in autonomous robotic manipulation. It includes classical concepts that are still widely used and recent approaches that have changed the way we look autonomous manipulation. We cover approaches towards motion planning and control using visual and tactile perception as well as machine learning.
Prerequisites: CS131, CS223A, CS229
Topics:
Classic contact-based grasping, Learning to Grasp, Reinforcement Learning for Manipulation, Trajectory Optimization, Motion Planning, End-to-end Learning, Tactile Sensing, Visual Servoing,CS234 - Reinforcement Learning
Prerequisites: Python, MATH51, CS109, CS229
Reading:
Richard S. Sutton and Andrew G. Barto. Reinforcement Learning. url
书籍中相应的例子代码: https://github.com/ShangtongZhang/reinforcement-learning-an-introduction
Stuart J. Russell and Peter Norvig. Artificial Intelligence. A Modern Approach.
Ian Goodfellow, Yoshua Bengio, and Aaron Courville. Deep Learning. url
Topics:
To realize the dreams and impact of AI requires autonomous systems that learn to make good decisions. Reinforcement learning is one powerful paradigm for doing so, and it is relevant to an enormous range of tasks, including robotics, game playing, consumer modeling and healthcare. This class will briefly cover background on Markov decision processes and reinforcement learning, before focusing on some of the central problems, including scaling up to large domains and the exploration challenge. One key tool for tackling complex RL domains is deep learning and this class will include at least one homework on deep reinforcement learning.CS238/AA228 - Decision Making under Uncertainty
This course introduces decision making under uncertainty from a computational perspective and provides an overview of the necessary tools for building autonomous and decision-support systems. Following an introduction to probabilistic models and decision theory, the course will cover computational methods for solving decision problems with stochastic dynamics, model uncertainty, and imperfect state information.
Prerequisites:
Reading:
Mykel J. Kochenderfer, Decision Making Under Uncertainty: Theory and Application, MIT Press
Topics:
Topics include Bayesian networks, influence diagrams, dynamic programming, reinforcement learning, and partially observable Markov decision processes. Applications cover air traffic control, aviation surveillance systems, autonomous vehicles, and robotic planetary exploration.CS239/AA229 - Advanced Topics in Sequential Decision Making
Prerequisites: CS238, CS221
Topics:
Survey of recent research advances in intelligent decision making for dynamic environments from a computational perspective. Efficient algorithms for single and multiagent planning in situations where a model of the environment may or may not be known. Partially observable Markov decision processes, approximate dynamic programming, and reinforcement learning.CS330 - Deep Multi-task and Meta Learning
This course will cover the setting where there are multiple tasks to be solved, and study how the structure arising from multiple tasks can benleveraged to learn more efficiently or effectively.
Prerequisites: CS229, CS230, CS234
Topics:
goal-conditioned reinforcement learning techniques that leverage the structure of the provided goal space to learn many tasks significantly faster;
meta-learning methods that aim to learn efficient learning algorithms that can learn new tasks quickly;
curriculum and lifelong learning, where the problem requires learning a sequence of tasks, leveraging their shared structure to enable knowledge transfer.CS336 - Robot Perception and Decision-Making: Optimal and Learning-based Approaches
Prerequisites: Python, Math41, Math51, CS109, CS229, AA273, AA203, CS234, CS238
Reading:- Probabilistic Robotics
- State Estimation for Robotics
Topics:
How can robots perceive the world and their own motion so that they can accomplish navigation and manipulation tasks? In this course, we will study how this question has been approached specifically if the robot is equipped with visual sensing capabilities. We focus on studying how a robot can make decisions based on raw, high-dimensional sensory data that represents only partial, noisy observations of the environment. Therefore, the course is divided into two main themes (i) Estimation and (ii) Decision-Making and Control where in each theme we will study traditional approaches, learning-based methods and combinations of those.
Stanford AA 273: State Estimation and Filtering for Aerospace Systems
https://online.stanford.edu/programs/robotics-and-autonomous-systems-graduate-certificate
CS327A - Advanced Robotic Manipulation
Topics:
This course focuses on advanced control methodologies and novel design techniques for complex human-like robotic systems. It provides an extensive coverage of the task- oriented operational space formulation, and discusses its application to the challenges of interactive whole-body control of humanoid robots.CS333 - Safe and Interactive Robotics
Topics:
Motion Planning, Trajectory Optimization, Optimal Control and Reinforcement Learning, Learning from Demonstration, Intent Inference, Shared Control, Communication and Coordination, Collaboration, Formal Methods in Robotics
Machine Learning
CS230, CS224W
CS230 - Deep Learning
Deep Learning is one of the most highly sought after skills in AI.
You will learn about Convolutional networks, RNNs, LSTM, Adam, Dropout, BatchNorm, Xavier/He initialization, and more. You will work on case studies from healthcare, autonomous driving, sign language reading, music generation, and natural language processing. You will master not only the theory, but also see how it is applied in industry.
Prerequisites: CS106X, CS109, MATH51
Reading:
Topics:
Hyperparameter tuning, Regularization, Optimization, GAN, Batch Normalization, Programming Frameworks, Interpretability of Neural Network, Sequence Models, Deep Reinforcement LearningCS224W - Machine Learning with Graphs
Networks are a fundamental tool for modeling complex social, technological, and biological systems. Coupled with the emergence of online social networks and large-scale data availability in biological sciences, this course focuses on the analysis of massive networks which provide several computational, algorithmic, and modeling challenges.
Prerequisites: Python, CS107, CS109, MATH51
Reading:
Topics:
robustness and fragility of food webs and financial markets; algorithms for the World Wide Web; graph neural networks and representation learning; identification of functional modules in biological networks; disease outbreak detection.CS129 - Applied Machine Learning
You will learn to implement and apply machine learning algorithms. This course emphasizes practical skills, and focuses on giving you skills to make these algorithms work.
Prerequisites: Python, CS106X, CS109, MATH51
Reading:
Topics:CS217 - Hardware Accelerators for Machine Learning
This course provides in-depth coverage of the architectural techniques used to design accelerators for training and inference in machine learning systems.CS236 - Deep Generative Models
Recent advances in parameterizing these models using deep neural networks, combined with progress in stochastic optimization methods, have enabled scalable modeling of complex, high-dimensional data including images, text, and speech.
Prerequisites: Python, CS221, CS228, CS229, CS230
Reading:
Topics:
variational autoencoders, generative adversarial networks, autoregressive models, and normalizing flow models.CS20SI - Tensorflow for Deep Learning Research
This course will cover the fundamentals and contemporary usage of the Tensorflow library for deep learning research.
Prerequisites: Python, CS229, CS231N
Topics:
Graphs and Sessions, Operations, Linear and Logistic Regression, Eager execution, Variable sharing and managing experiments, Convnet, GAN, VAE, RNN, Reinforcement Learning
More Electives
还有太多课程可以学习,根据 工作需要,认知水平提高 再来选择。这里只列出来作为参考:
AI Methods
- CS221 - Artificial Intelligence: Principles and Techniques
Prerequisites: CS106A, CS106X, CS107, CS103, CS109
Reading: - Artificial Intelligence: A Modern Approach
- Probabilistic Graphical Models
- Reinforcement Learning: An introduction
- The Elements of Statistical Learning
Foundations of Constraint Satisfaction
CS228 - Probabilistic Graphical Models: Principles and Techniques
Prerequisites: CS106A, CS106X, CS107, CS103, CS109
Reading:
Probabilistic Graphical Models: Principles and Techniques by Daphne Koller and Nir Friedman. MIT Press.
Topics:
Probabilistic graphical modeling languages for representing complex domains, algorithms for reasoning using these representations, and learning these representations from data. Topics include: Bayesian and Markov networks, extensions to temporal modeling such as hidden Markov models and dynamic Bayesian networks, exact and approximate probabilistic inference algorithms, and methods for learning models from data. Also included are sample applications to various domains including speech recognition, biological modeling and discovery, medical diagnosis, message encoding, vision, and robot motion planning.
Natural Language Processing
- CS124 - From Languages to Information
- CS224N - Natural Language Processing with Deep Learning
- CS224S - Spoken Language Processing
- CS224U - Natural Language Understanding
Computer Graphics
计算机图形学主要用于游戏,电影,CAD, GUI,在 智能机器人 领域,可以做 仿真
CS148: Introduction to Computer Graphics and Imaging
CS148一年有2次课程,在每年的Summer(6.21 ~ 08.12)和Autumn(09.23 ~ 12.08)开课。
Topics:
Topics include: Scanline Rendering; OpenGl pipeline; Triangles; Rasterization; Transformations; Shading; Triangle Meshes; Subdivision; Marching Cubes; Textures; Light; Color; Cameras; Displays; Tone Mapping; BRDF; Lighting Equation; Global Illumination; Radiosity; Ray Tracing; Acceleration Structures; Sampling; Antialiasing; Reflection; Transmission; Depth of Field; Motion Blur; Monte Carlo; Bidirectional Ray Tracing; Light Maps.
Reading:
Fundamentals of Computer Graphics, 3rd Edition
OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3 (8th Edition)CS248 - Interactive Computer Graphics
The course has a strong focus on computational geometry, animation, and simulation.
Topics:
2D and 3D drawing, sampling, interpolation, rasterization, image compositing, the GPU graphics pipeline (and parallel rendering), geometric transformations, curves and surfaces, geometric data structures, subdivision, meshing, spatial hierarchies, image processing, compression, time integration, physically-based animation, and inverse kinematics.
Reading:
Fundamentals of Computer Graphics. A K Peters, 2009
John F. Hughes, Andries van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner, and Kurt Akeley, Computer Graphics: Principles and Practice- CS348B - Computer Graphics: Image Synthesis Techniques
- CS348C - Computer Graphics: Animation and Simulation
System
- CS140 - Operating Systems and Systems Programming
设计和实现一个小型操作系统,参考书籍 Operating System Concepts, 8th Edition - CS144 - Introduction to Computer Networking
比如基于IP设计和实现一个TCP滑动窗口协议…基本上就是实现最小化的TCP/IP协议栈,参考 Computer Network-Top Down Approach 7th - CS145 - Introduction to Databases
Database Systems: The Complete Book by Garcia-Molina, Ullman, and Widom.
What’s Next : 行业选择
如果能回到大学刚毕业的时刻,我会做如下考虑:
选择了一个初步感兴趣的Track,掌握基本的编程知识和技能,熟悉track相关的专业知识,这只是第一步而已。接下来要做职业生涯的第一个选择:
如果是做科研,读博士,进入学术界,当然是做自己感兴趣,值得长期投入的方向;
如果是做工程,进公司,那么必须考虑当前的产业格局,以及科技大势。 剩下问题是如何选择城市,行业,公司
兴趣是一个起点,同时也是比较粗略的,而且人的兴趣其实是多样,易变的,如何变成终身的事业? 随着认知和实践的加深,要更明确,将兴趣转化为热爱,然后坚持。
先选行业,再选专业;还是先选专业,再选行业,没有确定的答案,具体情况具体分析。根据实践,认知变化调整,学习不同的课程。关键在于内心的那份初心。唯有热爱,才能持续;唯有热爱,才能全身心投入,才可能进入正循环;唯有热爱,才能坚持,熬过艰难时期。
选择了 专业技术 方向,选择了 行业方向 之后,除了学习和实践,最关键的找到 志同道合 的团队。技术会被淘汰,行业会有兴衰,找到志同道合的团队,则可以因势而变,而又不忘初心。
专业技术可以有很多应用,尤其是IT行业很复杂,已经可以细分很多方向。而且随着2C to 2B的场景转移,互联网,AI这样的通用目的技术将和传统行业融合,成为类似水电的基础设施。 国家提出的数字化,网络化,智能化,互联网+,智能+就是这种导向。可以说机会太多,可选择的技术方向太多,可以选择从事的行业也太多,但个人能力有限,时间精力有限,结合兴趣,价值观,认知水平来做出选择。
一项技术可以应用到不同的行业,一个行业也需要多种技术。 一个行业有 关键技术 和 辅助技术,关键技术必然要足够深度,才有竞争力;辅助技术 主要是能应用,不需要太深入。
男怕入错行,隔行如隔山,不同行业之间的游戏规则,需要的技能,需要多年的积累,转换行业的成本高昂,所以第一次选择就要慎重。
一个行业如果市场空间巨大,复杂性高,那么必然会形成上下游的产业链的各个公司。 一流的公司制定标准,二流的公司做品牌,三流的公司做产品,不入流的公司做项目,公司间差别巨大。公司可以在不同的城市设立,所以对个人来说,还需要考虑 城市 的因素。对于年轻人就不要受城市的束缚,但对于有家有口的人来说,工作只是人生的一部分,而不是全部。
对于公司而言,没有商业上的可持续的盈利,技术和产品无法持续的积累和迭代,技术和设计上是无法积累的,个人和公司也无法成长,只能低水平重复。做纯粹基础技术,甚至科研,现在是非常花时间,花钱,同时风险也很高的事情,所以选择一个成长期的行业,利用应用层技术赚钱,反复积累,形成正循环,才有可能投入资金,招聘更高层次的人才去做更基础的技术,甚至是基础领域的科研。有多少资源就做多大的事。
关于工作选择,行业,城市,商业,公司,团队的一些认知。
努力很重要,方向选择更重要,“选择大于努力”很有道理,人的时间精力有限:顺势而为,事半功倍;逆势而行,事倍功半,越努力越痛苦。 坦白说,对我个人来讲,相比那些在互联网(BAT…),通信(华为,中兴)公司随着行业的发展而获得更多经济利益,发展机会,成长空间的同龄程序员们,说不羡慕是自欺欺人的。 程序员这个职业都是比较辛苦的(要不断学习,要赶进度…),但商业上其他领域并没有像互联网一样高速增长,且老板们很少有互联网企业那样的利益共享的思维,导致从业者的付出回报不成比例。历史的进程比个人的努力要重要得多。现在,历史可能到了新的转折点。
现在的我,基于上述的种种认知和思考,对于行业,我选择了 智能机器人Intelligance Robot 这个大方向。智能机器人可以说是各种人工智能技术的集大成者,也是最佳的载体,同时也拥有巨大的商业价值,更重要的是它对社会的影响力。更详细的对于智能机器人的行业状况,商业机会,社会影响力,技术路径等等的思考在这篇文章。