赞
踩
“算法都是封装好的,学了有什么用?”,这是几年前一个试用期员工问我的问题。
他有一年工作经验,基础一般跟过几个项目,属于可以干活的人。来了以后就问我,要快速提升应该学什么。面试的时候觉得他算法功底不太好,就推荐他把算法好好学一学。结果他反问:“算法都是封装好的,学了有什么用?”。
一直认为算法是编程的基础,学好算法是毫无疑问的事情。就好像学写字就要把横竖撇捺学好一样,但被人问起来,发现自己确实没有好好思考过这个问题。
还没过试用期,他就自己离职了。他说想做底层开发,而我分配给他的任务都是简单的应用逻辑,觉得没成长。
1级的玩家技术好可以打2级的怪,但要打100级的Boss恐怕会死得很惨。没有哪个公司会冒这样的风险让算法都不懂的新人开发底层模块。
故事讲完了,那么学算法到底有什么用呢?除了算法,其实我还被问过:
我不写编译器,学编译原理有什么用?
我不做计算机,学计算机组成原理有什么用?
我不写操作系统,学操作系统有什么用?
总结来说就是:基础知识(原理),工作中用不上,学了是不是浪费时间?
磨刀到底误不误砍柴工?这个问题其实很难讲清楚,但我还是尝试讲几点。
1. 知识的普适性
所谓普适性,或者说通用性,是指一项知识到了其他领域是否适用。
我们学了加减乘除,物理能用上,化学能用上,生物也能用上,所以加减乘除具有很强的普适性。
学美术的同学,与其学“手的100种画法”,不如研究一下解剖和骨骼结构,因为掌握了这个可以随意画1000种手,所以手的100种画法这个知识不具有普适性,但骨骼结构有。
学编程的同学,学各种时髦技术,各种框架API,流行技术框架每几年换一次,就得重新学,那之前学的到底是有用还是没用呢?这些知识具有普适性吗?
基础知识和原理,虽然很少会直接用到,但它们有强大的普适性,无论做哪个领域的开发归根结底都绕不开那些基础。
2. 成熟的、可借鉴的方案
很少有人能从0到1发明新的东西,所谓的创新通常是站在巨人的肩膀上,从1到1.1做了一些改进。我们写的代码、解决问题的方案有多少是自己发明的?
基础知识和原理,包含了大量经典问题的解决方案和思维框架,越是做底层开发,越是能理解这一点。资源管理、内存管理、线程调度,不学一学操作系统能玩得转这些开发?靠自己的脑子可以想得出完善的方案?
3. 解决疑难问题
面试过几个号称主程的,用xxxx库为公司搭建了网络框架,认为自己精通网络开发。问他如何处理粘包问题,他:“什么粘包”。我想他们公司的项目可能活不过半年吧。
但凡要做一些基础架构,不懂基础知识将是致命伤。使用开源库可以帮你快速完成工作,但若是出现开源库未涉及的内容、或对库理解不足导致出现bug,而程序员又不懂基础原理,那就只能蒙圈了。
4. 造轮子
程序员都知道不要重复造轮子,使用稳定的库肯定是比自己撸代码来得高效安全。越是低级程序员越不需要造轮子,他们大多写应用层逻辑,各种库拿来用就行了。
当你级别越高,越是需要造轮子。公司需要积累自己的核心技术、别人的轮子不适用与自己项目的场景等等各种原因,你总是需要自己造轮子或改别人的轮子。你不懂基础知识和原理造不了轮子?那公司找高手来造轮子,你去写简单的逻辑,当低级码农就好了。
----------
如果觉得对你有帮助,请用力点赞
个人公众号:ACM算法日常
专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、机器学习等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。