10多年前有个小朋友说C++是二十年的老技术了,他要去学新技术新语言。
10多年过去了,C++已经变成了三十年的老技术了,而他已经学会了第三项新技术了。
你看,大家都有光明的未来。
很多人都是纯纯互联网领域找工作,对于工业互联网、自动驾驶、嵌入式等领域,是看不上眼的。而这些领域c++还是不可替代的,只不过不在他们找工作的范围之内。
如果学c++都觉得要被淘汰了,那学机械的呢?那么多人学机械,大学里还在画减速器,磨锤子呢。
问题在北美的job market,C++也是这个揍性啊。
能有几个人真的刷题面进google之后,乐意学C++折腾chromium和v8 engine搞“卡脖子基建”去啊?大部分进google的还不是哪个组赚钱、哪个组promotion快、哪个组正在扩张,就去match到哪个组吗?
都2022年了,不得不用C++解决的核心性能问题确实几乎只有那几个。在tech company的主流业务里,真正必须做到zero cost abstraction这个principle的地方能有几个?无非在湾区大公司基础infra部门里能挑出来几个,其他的哪个不是用更现代的语言快速糊一个protocol直接用起来啊?
你要思考,就绝大多数tech company和startup的核心business model,真的需要C++这玩意儿吗?能给chromium、linux、各种engine贡献代码的人,还需要考虑“我要不要学C++开发”、“要不要拿C++绑定我的career”这种事情吗?
过去50年来,这么多scientist把这么多问题核心抽象出更现代、更甜美、更简单、更舒服的编程语言,不就是为了让绝大多数普通开发者远离C++的这些乱七八糟范式和大坑吗?怎么还有人天天劝别人来跟咱们一起往C++的大坑里跳呢?
如果你已经开始快寻思找工作投简历了还没想好“要不要学C++”,那么你确实还是离C++越远越好,此时此刻的C++对于此时此刻的你来说,确实等于1949年加入国军。
可能地摊文学看多了,被资本家忽悠瘸了吧。张口大数据,闭口人工智能的。我就问,有几家公司有大数据,就字面意思,他有大数据吗?你进一家中小微公司,年产值就几千万或者几个亿,你tnd有什么大数据?数据在哪里,没有数据还搁那儿说自己要大数据。你可以关注一下,有这种岗位的中小微公司,要么挂羊头卖狗肉,要么几年后就差不多要死不活的了。人工智能同理,真当训练不需要资源的?
那么假定你就是要去大厂,能真正接触到大数据。那么问题来了,如果你是做分析和理论研究的,那什么语言无所谓,因为语言只是工具,你都懒得每天跟语言打交道,因为你需要设计模型,分析问题,然后分派给别人执行,天天敲代码不是你的事情;如果你是执行层,有关大数据处理的落地需要你来写,你觉得你会用什么?你tnd用java写是吧,用js写是吧,你跟阿里说,兄啊,C++是49年入国军啊,憋整了,咱直接来oracle吧?阿里说,你给我gun。哦,py是个好工具,但是py是好工具并不妨碍它单独找不到什么工作的事实,因为它就是个好用的工具而已。
另外他们会说,哎呀,人工智能可以不用C++,blablabla;唉,tnd如果是人工智能的话,你觉得问题在“语言”吗?问题在对人工智能的研究上啊,人家招你来是做研究的,至于什么语言,一看,哦python方便是吧,那就现学一下呗,当然你一开始就会是最好的。他们得搞清楚重点,就是这个岗位可能是用了某种语言,但人家的工作重点是什么,是语言成就了专业,还是专业刚好捡着这个语言好使;语言只是个工具。
其他当然还有各式各样的语言,关键看你要做什么。你想在中小微企业做服务端开发?那可以不需要C++,其实不是不需要,他们要不起。java问题不大,甚至找前端来直接http也行,现在很多app里面确实某些服务后台就走的http请求。你想做IOS、MacOS开发,那可以用OC、Swift。
如果你说的是商业、互联网企业的话,辣确实除了够大的,技术够深入的团队,可能用C++的不多了,但是需求还在,而且如果你有机会接触到他们,你会听到他们跟你讲,招C++的人真特么难。不是难在没有C++开发者来应聘,而是没有可用的人了。中小微企业的团队,因为成本问题会考虑选择C++,因为1.桌面应用往往可能涉及或复杂或频繁的交互,用js的方式,在可靠性和响应上都很难达到理想程度,不敢说一定不能;而是一旦出现了表现不合预期的情况,你甚至不知道从哪里去下手。譬如webgl的表现,某些场景渲染效率,firefox就是不及chrome,你怎么优化,这还只是不同浏览器内核的差距,如果同一个内核里出幺蛾子了,怎么玩;去改良重构是吧,那好,内核代码还是C++的(doge)。2.假定他要在windows,基于linux内核的桌面os,mac三类任意两个中上线,他就大概率考虑C++、OpenGL;用本地工具开发的话,那本来一次开发多次调试上线的事情,就变成了多次开发,成本暴增。
如果是工业开发领域,尤其是军工,C++还多得很。你也可以理解为是历史原因吧,但这个历史将延续下去的时间或许不比你的职业生涯短,这不是什么焦虑的问题。再者,如果你连C++都能掌握得很好,你还担心什么?出来没C++岗位需求了?那你学个什么还学不会呢?
*顺带提一些吧。如果你要走C++ 这条路,除了学习C++基础知识外,你还需要去思考,你想往什么方向走。通信、服务相关的开发,还是图形开发,或者别的什么。如果你不去思考,那么你有可能工作要么会赶鸭子上架到嵌入式,要么会到某个小企业去写基于Qt之类的GUI扩展的界面应用。嵌入式尚好,GUI也就是大家常说的界面开发,问题在于界面开发本身不足以成为一个值得深入研究并实现价值创造和价值变现的方向。走C++这条路需要面临这样的问题,就像读书时候选专业一样。而其他许多语言不用烦恼这个,譬如java,它已经在发展中就针对服务端提供了足够多的特性了。而C++是站在岔路口,不管你要选哪个方向,你都需要额外补足一些东西。
所以说到这里,可以说给周围人带来“49年入国军”的感觉的原因之一可能就是没有明确的、特定的发展方向。你可以试想一下, 如果有人说自己搞java开发的,你几乎想要把他跟服务端开发画等号;如果有人说自己是搞oc、Swift开发的,你说他做啥的呢,可不就是苹果的系统吗;如果有人说自己是js开发,你大概率会猜,哦,是不是做web开发的。那如果有人说,我是搞C++开发的;谜题就来了,我到底是干嘛的,嗯?图形开发,游戏开发,服务端开发,界面开发,客户端后台,算法库,好像tm都有可能啊,但是不管哪一种,都又差点东西。
譬如你要搞图形开发吧,那你得去学图形学啊,你跨平台要用OpenGL或者vulkan,那你还得去学这俩,得熟悉它们的API;你说就只在windows,那得学dx;在苹果的设备上,为了最适化,就得学metal。这还不止,如果你要做跟地理信息有关的,可能还要学以OpenGL为基础封装而来的开发组件;如果你要做游戏开发,也离不开前面那些图形API,另外你还得熟知游戏引擎本身的一套东西;如果是界面开发,就拿Qt来说,至少你要学Qt吧,Qt的widgets之外它还有一套qml,而qml背后的实现是场景图(scene graph),这东西就够喝一壶,不搞图形开发都未必知道这是什么。
归根结底问题在于,在现在的商业市场冲击下,C++的学习成本太高,还连说明书都没有。相比之下,跟着潮流学点时下热门的语言,看起来不是更美好吗——一度是java、php、js,python,py很短暂,因为很快发现没地方要(运用很广泛,但它难以单独成为岗位)。但是这里同样有个值得思考的问题,热门的市场需求往往意味着竞争也很激烈,尤其是你也明白,咱国家又不缺人,所以热门方向就一定意味着你很容易找到一份稳定且收入可观的好工作吗;反过来,看似冷门的市场需求,只要不是夕阳红产业,没有处于萎缩、衰颓阶段,那也不妨碍你找到一份不错的工作。
个人主观观点,仅供参考。
关于场景图的表述,再多提一下,虽说不知道确切的叫法,但不一定就没使用过;就像设计模式一样,你可能不知道某个模式的名称和书面定义,但自己早就用过变体了;而场景图,说到底也不过就是一个树形结构的节点,把一套组织形式变换到另一套组织形式,可以理解为数据模型的变换,一套是为了方便开发逻辑,一套是为了适配渲染逻辑,这种实现思路的体现其实非常广泛。而我说不搞图形开发未必知道,并不是为了告诉大家这个东西很高深很流笔,你把握不住;而是为了表达,“界面开发”往往给人一种“本该很浅表”的印象,但是却难料他背后还有这样一套机制。就好像有人招聘你的时候说,“咱就找个拧螺丝的,你会拧螺丝那明天就来上班”,结果来了发现,拧螺丝的确不假,但拧的是精密设备的螺丝,而不是自行车。
wait...這個地方不是割讓給蘇聯了嗎?現在屬於俄羅斯啊。
說話確實硬氣,一般來說俄羅斯也不會去打芬蘭,但是上趕著當小醜這不好吧...
還有,蘇芬戰爭主力不是烏克蘭人?
不會忘了和蘇聯簽的協議內容了吧?主動撕毀協議,美國也不會當你是正常人啊...要是俄羅斯先背刺也就算了,主動搞事情是瘋了?就不能悶聲發大財?
當領導人不用學歷史和地理?
成为美国总统?