zl程序教程

您现在的位置是:首页 >  其他

当前栏目

为什么多数程序员都比较排斥更换编程语言?

程序员编程语言 为什么 比较 更换 多数 排斥
2023-06-13 09:17:33 时间

裁员季加上金三银四,又到了换工作的时间,身边的小伙伴以及群里的粉丝朋友经常让加微信帮忙介绍工作,但是通常情况下他们都喜欢问两个条件:

  • 面试考不考算法?如果考算法,我就放弃了,这东西没什么用,除了浪费时间。
  • 主攻的编程语言是什么?我一直用的是Golang,如果是 Java 我就不干了,反之也是一样的。

面试应不应该考算法,这个问题在圈子内争论颇多,通常旗帜比较鲜明,认为该考的坚决认为算法可以让自己技术职业生涯路线走的更远,而且是一种有效筛选人才的方式;认为不应该考的坚决算法在工作中根本用不到,面试之前还要刷题,搞这个纯属浪费时间和个人精力。

亮明自己的观点,我认为不应该刻意去刷算法,因为这些算法在 99% 的工作场景中是用不到的,即便是算法岗位,也是特定方向的。特别是一些中高难度的动态规划的算法,如果你没有做过或者看到过类似的实现,很难想出题解。当然使用多层 for 循环或者递归除外,一般使用这种方式解决问题,面试官还是会要求你进一步优化。

当然如果你为了进XX大公司的XX岗位,除了算法测评之外,其它的都非常符合你的职业发展方向,另外能给你超出预期的薪水。如果你有意的话,那就刷题呗,上学这么多年了,还怕了这几十道算法题,有钱赚,比什么都香。

另外工作中,会经常会用到缓存LRU或者LFU、B+树,如果恰巧在深耕这一块,一定要搞明白其中的原理。通过在工作中学习,学习中工作,学以致用,一种高效的学习方式。

最后建议面试官们不要懒政,直接抛几道算法题让面试人员卷。也可以通过互动的方式进行一些系统缓存设计,网络部署架构设计等。要搞清楚,把你招进来是做什么的,针对你后续的方向和期望进行面试。

多说两句,国内这种面试考算法的筛选人才的方式,基本都是跟国外的谷歌和微软学习的。但是国外程序员和国内程序员的学习和工作路线有一定的区别。

前段时间大家对ChatGPT争论的议论纷纷,话说国内大厂一家能打的都没有,没有一个能做出一个像样的AI智能工具的。

如果你把ChatGPT比喻成一个人,在欧美,ChatGPT走的就是精英路线,从小学、高中、大学、硕士...一直砸钱到他毕业,不用考虑其它任何事情,安心读书,工作之后,惊艳全场,像谷歌的AlphaGo、ChatGPT...都是这样出现的。

在中国ChatGPT走的是急功近利的路线,高中刚刚毕业就想着如何挣钱减轻家庭负担,大学期间,为了更快地找到工作,开始学习各种上层框架和表面技术。反而把更专业的基础课程给拉下了。总结下,我们学的更多的是市场化运作的技巧,如何根据自己当前的能力来赚到更多的钱,而不是专注于技术本身。最后带来的结果也是截然不同的,太容易被替代。不过这是社会大环境造成的,短时间内很难去转变这种思维方式。

有了上述算法相关的介绍,再说多数程序员不喜欢更换编程语言就更容易理解了。

每个计算机毕业的同学的都学过「程序 = 算法 + 数据结构」,我们现在每天都在写程序,也在用算法,只不过算法比较简单,简单到把一个简单的对象处理下存储到数据库,这个对象就是数据结构。无论什么编程语言,底层的实现无非就是数组、链表、树、图、队列、栈相关数据结构,通过这些数据结构进行算法设计。平时多数公司的面试也是在这些数据结构的基础上,进行一些算法测评,如果对这些算法测评都比较畏惧,可想而知,自身对数据结构和算法掌握的并不好,换言之并没有掌握编程语言的底层实现逻辑。一旦更换另外一种编程语言, API(数据结构+算法)更换一种实现,就会出现看不懂签名,看不懂实现,从而不敢使用,只能从网上搜索最佳实践,话说程序员都是 CV 组合,都是有一定原因的。

找到了答案,之所以不想更换编程语言,不是因为不喜欢而是因为技术不行,而是自己掌握的知识不具备迁移能力,菜是原罪。

很多计算机从业者会反驳说,编程语言仅仅是一门语言,更多的是这门语言的工程化实践、RPC通信、服务发现、负载均衡、限流、超时熔断、监控、链路跟踪、数据库等周边生态,甚至说如何使用一门语言快速搭建一套可以满足业务需求的框架。其中的一些,像工程化、脚手架搭建等工作,经验丰富的开发人员会给后续的扩展带来帮助,但是这些东西太容易学习;稍微用心的人,记录一个详细步骤,很快就会掌握。不过扪心自问下,像服务发现中的raft、paxos等经典协议有几个人可以熟练掌握。Mysql数据库的复杂程度不亚于任何一个业务系统,甚至编程语言。

如果抬杠的话,工作中压根用不到这么复杂的算法或者协议,就像开车一样,不用关心发动机引擎的运行原理,只管开就行了。即便学习了这些底层原理,没有实践的锤炼,很快就淡忘了。工作中用不到,学也学好,为什么还要学习呢?

假设我真的掌握了这些底层算法和协议,可能已经到谷歌或者国内一线互联公司做底层开发了,根本不用担心这些失业和中年危机的问题。但是问题就出在这里,没有一个好的出身毕业后没有一个好的工作起点,就导致我们不能学习这些底层算法,最后自学了效果也不太好,基本就是死路一条了么?

如果是刚毕业的学生,继续走计算机这条路的话,想办法进一线大厂搞技术,有很多种方式,这里不再啰嗦。毕竟很多技术实践和使用场景在小公司是不可能遇到的。

如果进不去,那就参考大龄程序员,公司在榨取我们精力和时间的同时,我们也要学会榨取公司的资源,那就是业务方向(形势就是如此,拿来即用,短平快,技术不重要,重要的是业务),搞透彻公司某个业务的运作逻辑和盈利模式。通过这种学习方式,公司会更加信任你,你会更容易得到提拔,从而获取更多的薪水。同时你也成就了自己,学会了业务,哪怕单干或者出去找工作都是一大亮点。还是那句话,工作中学习,学习中工作。