百科问答小站 logo
百科问答小站 font logo



为什么技术主管跟我说程序员学算法不是最重要的,从工作项目中学习实际才是最重要的? 第1页

  

user avatar   lu-luce 网友的相关建议: 
      

学算法不是最重要的。但是学好算法,参加面试,让自己的工资翻倍是最重要的。


user avatar   s.invalid 网友的相关建议: 
      

因为大家都知道“中国式学习”是怎么回事。


绝大多数人的“学算法”实际上是这么回事:

——有个冤大头说他想招懂算法的人,让我们去糊弄他!

——对对!看看他要考什么题,我们背下来!

——还有这种题型?不行我得继续刷……

——好了,现在我有100%的信心糊弄过去……

——不!我不是糊弄!我真懂了!


嗯。糊弄多了,连自己都被忽悠瘸了。觉得自己不是背了些文本去糊弄人,而是真懂了。

骗子的最高境界就是连自已一起骗嘛。


很遗憾。

糊弄就是糊弄。一拉到实践上就原形毕露。

越是那些把自己糊弄的彻底的“高材生”,越是会造成更大的破坏。因为只有他“满怀信心”,却不知道自己只是个大忽悠。


在这个回答中,我提到的那800行代码,它有算法吗?


我一直以为没有。想到就写了,哪有什么算法。

但如果按你们的学法,那可不得了。


首先,XML本身就是一棵树,而且是多分叉的、数据类型多变的广义树。这可比二叉树“难”多了(这里的难指的是难糊弄,难混过考试,不是实际有多难——当然,对糊弄党来说,这玩意儿没有标准答案,自然是真的难)。

然后,我们要按文本顺序载入和分析它——最好从头到尾只读一遍,不做任何回溯,这样才能把复杂度降到最低。但这样一来,这就成了文本载入-分析-遍历的一条龙服务,你甚至都没法知道这究竟是先序后序还是中序遍历。

其次,因为每个节点都可能包含一堆下级节点,下级节点本身也可能有自己的下级节点;那么在分析时,遇到第一个<tag>标签我们就得把它压栈、然后把子节点、子节点的子节点统统压栈;直到遇到</tag>时才可以让它出栈——嗯,栈相关算法,对吧?

还不仅仅是栈相关算法。实践中,对端传来的xml可能是残缺的、或者传输中可能出现错误、也可能在封装时已经搞错了。那么,遇到不同的tag交错、tagB出栈时被它包含的tagA尚未出栈或者tagA出栈时才发现栈中没有tagA、或者一个节点分析完了才发现栈里“多余”了几个tag、或者某个tag出现了typo——你该怎么办?

最后,我们要如何把一个C结构体的类型、内部元素的类型数量位置等等信息表示出来?要如何自动生成这些数据?如何存储?如何解析?如何在单次遍历XML文本时,一边分析XML tag树一边重建C结构体?


再说一遍:当你学习的时候不糊弄别人更不糊弄自己时,这玩意儿实在太平凡了。平凡到完全不配叫什么技术、什么算法。想到即写而已。

但一旦你心存糊弄,你的二叉树能考满分、你的栈相关理论知识可以在任何场合对答如流;但别说让你写这种东西了,写完了给你看,你看得懂吗?


那么,这就是技术主管的意思:我们太熟悉你们的中国式学法了。你们用这种学法在算法上投入的一切心力都是无用功,因为你从一开始就志存糊弄。

相反,老老实实做你的项目,这时候你才没法骗人骗己。因为在工作中,一切装X都是在搬石头砸自己的脚。

那么,踏踏实实的,面对问题,解决问题,你才会知道算法究竟是什么,才会把它学成技能,而不是糊弄自己。


user avatar   huangzhe 网友的相关建议: 
      

归根到底,三个字:稀缺性。

如果你是研究员,专门研究算法,那么你主管的说的话不对,你可以当他没说。但看题目描述,题主大概率是工程师。程序员的工作,并不是发明新算法,而是用已知的算法去解决已知或者未知的问题。

稀缺性这三个字怎么理解?

  • 学习算法是没门槛的,只要你想学,你可以在很多网站免费自学,免费刷题,面试常考的题目大家都接触得到。
  • 而项目经验是有门槛的,越好的项目越稀缺,项目里的每个人的贡献度也是存在着指数级差异的,这也就造成了有能力做好工作的甚至能把项目带上一层楼的人才变得非常稀缺

学算法可以让你找到一份很好的工作,无它,因为应届生都没项目经验,只能从算法能力方面考核。但工作后,你会发现,你大学时学的快排二叉树遍历等算法,在工作中基本不怎么需要用到。

况且公司不是慈善机构,公司聘请一个程序员,是为了创造价值。研究技术是很有意思,但技术的存在,是创造价值。但你算法的掌握水平,和创造价值的能力和并不是正相关的,创造价值的能力,可能和你过去解决问题的经验更相关。

总的来说,只学算法不能让你从现在的工作上快速晋升,接触更稀缺的资源。

学算法也不是不重要,至少在某些公司,即使你工作十年了,还是会考你那些leetcode上常见的题目,但刷题这事,对于工作了n年的人来说,不值得花太多时间,偶尔刷下,稍微熟悉下就好了。


user avatar   davidtsang 网友的相关建议: 
      

普通编码中很少会用到算法。

主要还是了解你编程领域的各种概念。了解基本的解决方案。遇到问题的时候可以通过搜索和sof找到具体的参考代码。或者可以知道从哪里查阅文档。基本就能解决99%的编程问题了。也有非常难的领域。比如说图像识别、自然语音识别。你不会,我不会大家都不会。个别神级人才能搞得定。


user avatar   su-yuan-meow 网友的相关建议: 
      

因为是大实话。

我在Google那么久,没有写过一次递归,没有写过一次二叉树,没有写过一次快排,没有用到一次堆排序,没有用到一次动态规划。

不光是我,身边刷了几百道题的小伙伴,入职一年以后基本也都忘了精光,平时真不会用到。

Max Howell翻转二叉树都不会,照样能写出Homebrew。

如何看待 Max Howell 被 Google 拒绝?

算法这种东西,只是一张入门券,证明你头脑正常,有一定学习能力。本身有多大用,并不见得。

算法什么时候有用?跳槽的时候有用。

所以主管这么说,应该只是单纯的不想让你跳槽。


//---------------分割线---------------

本来只是吐槽,没想到这个答案突然火了,评论区基本两极分化。

关于算法有没有用,我之前的一个答案写的比较清楚。实际中,算法对于90%的工作是没有用的。

屠龙技有没有用?屠龙的时候当然有用,但现实中能有几条龙呢?


user avatar   wan-jin-you-39 网友的相关建议: 
      

中途岛战役……




  

相关话题

  编程中如何给变量命名?有哪些规范的做法值得学习借鉴? 
  为什么家底殷实的人还要从事医学程序员这样高强度工作? 
  在出现事故之前悄悄排除了一个重大BUG,是怎样的一种体验? 
  C 语言这些宏定义前面的 __extension__ 是什么意思? 
  C# 语言和 .NET 框架相比 Java、PHP、Python 等 web 开发技术有哪些优劣? 
  中国的程序员为何开发不出来像spring一样优秀的框架? 
  为什么互联网的程序员比产品经理薪资要高? 
  你在编程时见过最愚蠢的 Bug 是什么? 
  大多数普通程序员的起薪是多少?问题应该是2014年? 
  DirectX是谁开发的?有什么过人之处? 

前一个讨论
为什么健身房私教那么贵?
下一个讨论
读大学了英语什么都不懂,背单词也特困难,从零开始学日语有机会吗?





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利