可能地摊文学看多了,被资本家忽悠瘸了吧。张口大数据,闭口人工智能的。我就问,有几家公司有大数据,就字面意思,他有大数据吗?你进一家中小微公司,年产值就几千万或者几个亿,你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很短暂,因为很快发现没地方要(运用很广泛,但它难以单独成为岗位)。但是这里同样有个值得思考的问题,热门的市场需求往往意味着竞争也很激烈,尤其是你也明白,咱国家又不缺人,所以热门方向就一定意味着你很容易找到一份稳定且收入可观的好工作吗;反过来,看似冷门的市场需求,只要不是夕阳红产业,没有处于萎缩、衰颓阶段,那也不妨碍你找到一份不错的工作。
个人主观观点,仅供参考。
<hr/>其实吐槽这些一方面是我个人不太喜欢那些声音过大的舆论,它们总是试图引导、蒙蔽他人,给大家上红滤镜,看啥啥都是红海。但实际上,只要你自己努力去思考和前行,潮不潮的真跟你关系不那么大。要留意的问题是,有的岗位环境,上头是不断地在跟你博弈,想要削减你思考的积极性的。因此“思考”的重点就在于,你选择奔赴一个岗位,要清楚这意味着什么,你需要跟什么对抗,你需要给自己争取什么。而不是把主动权交给别人,让别人告诉你要做什么。某一天,他们可能就会告诉你,不需要你了。
如今看来,在C++上,大家主要是对两方面犯难。
其一是技术层面的,就是所谓基础知识、语言特性、语法等,这些内容可以选择参照大学专业的学习路线,去淘到一些学科教材,系统学习一下;如果觉得教科书又太过于“教科书式”了,也可以找寻一些更直接更偏商业一些的教学。譬如深蓝的课程:
C++基础与深度解析 - 深蓝学院 - 专注人工智能与自动驾驶的学习平台
可以用预习的方法,看标题自己先大概掌握一下对应的内容,带着疑问进去,以此来评估教学内容是否是你想要的。以免跟那些培训班学员的遭遇一样,花了钱,好像做了练手项目,稀里糊涂奔赴岗位发现又好像没学到干货。特别要注意的是,带着自己的观点和思考,教学的可能是位大神,但大神不是神;所以不能去迷信,知识内容能为你的大脑理解方式所接受,才算是真正掌握到你手头了。
其二是延展、桥接,说白了就是前面提到了,发现自己无论到哪个岗位都似乎差点了什么。如果非要说得高大上一点,大概就是,我们选C++这条路的,开局所掌握的生产资料就比较少。一个有明确输出方向的技术,可能最缺的是“价值变现”的部分;而C++因为输出方向对大部分使用者而言都不太明确,所以我们会觉得自己甚至连“创造价值”的部分都是不完整的。关于这一方面,实话讲,我自己也不敢说能提炼到几句书面语言就可以告诉大家该怎么去选。只能说,就我个人经历,我发现如今的社会,假象和谎言远比大家以为的要多,不要去相信那么多红海,不要去预设自己只能在泥潭里打滚;如果有什么想法或者困惑,也可以一起交流一下。
交流的效果远比我们以为的要大,我自己有时候想不出好的方案来,可能仅仅是找朋友单方面输出,把自己想的内容哔哔一遍,完了竟然就发现似乎方案明朗了不少;这其实就好比有一位聆听者给了你契机来梳理思路,他都不一定需要跟你产生特别多的互动,只是给了你一个输出和整理的渠道。
突然想到,我的某些朋友也是发语音自说自话,完了他就自个儿想到法子了。大概有些理解为什么会有人喜欢带个录音笔跟自己说话了,尬不尬已经不重要了,关键是如果自己念叨真的有帮助的话,试一试未尝不可。
<hr/>关于场景图的表述,再多提一下,虽说不知道确切的叫法,但不一定就没使用过;就像设计模式一样,你可能不知道某个模式的名称和书面定义,但自己早就用过变体了;而场景图,说到底也不过就是一个树形结构的节点,把一套组织形式变换到另一套组织形式,可以理解为数据模型的变换,一套是为了方便开发逻辑,一套是为了适配渲染逻辑,这种实现思路的体现其实非常广泛。而我说不搞图形开发未必知道,并不是为了告诉大家这个东西很高深很流笔,你把握不住;而是为了表达,“界面开发”往往给人一种“本该很浅表”的印象,但是却难料他背后还有这样一套机制。就好像有人招聘你的时候说,“咱就找个拧螺丝的,你会拧螺丝那明天就来上班”,结果来了发现,拧螺丝的确不假,但拧的是精密设备的螺丝,而不是自行车。 |