为什么技术主管跟我说程序员学算法不是最重要的,从工作项目中学习实际才是最重要的?:讲真,我们都明白项目运用的重要性,但是江湖上有一句话:“无算法,不程
讲真,我们都明白项目运用的重要性,但是江湖上有一句话:“无算法,不程序”。
如果把程序看成一辆汽车,那么程序语言就构成了这辆车的车身和轮胎。而算法则是这辆车的核心——发动机。
这辆车跑得是快是慢,关键就在于发动机的好坏(当然轮胎太烂了也不行),而数据结构就是用来改造发动机的。
算法就是程序的灵魂,一个需要实现特定功能的程序,实现它的算法可以有很多种,所以算法的优劣决定着程序的好坏。
在早期的程序员可能对算法的认识不足,认为算法的研究是那些算法工程师的事情,对于普通的编程人员的用处是很小的。
总感觉数据结构和算法是“屠龙技”、“虚招式”,除了面试,工作中根本用不着。
不懂算法,只要编程语言API、开发框架用得熟练,代码照样写得“飞”起来。
语言是我们走向更高级的编程的必经之路,如果不能在算法方面有自己的建树,软件编程做到头也就是一个码农而已。
技术大牛和普通程序员在相同工作时间内,大牛的完成率通常是普通程序员的两倍
这就是数据结构与算法的神奇之处,能帮你码出更快更优质的代码。
普通程序员,只拥有单身20年的手速,只能用框架写CRUD。
高级程序员,必须拥有【数据结构和算法】内功,才能以气驭剑,独霸江湖。
2算法当然不是最重要的,这在绝大多数情况下是正确的。你主管的观点基本正确。
作为技术人员,你工作的目标是什么?首先是满足业务需求。技术主管关心的是进度,质量,成本,风险等因素。至于算法,在他看来可能只是锦上添花的事情。比如系统设计要求响应时间是3秒,目前是两秒,你通过算法优化达到了1秒,但这并没有改变项目的业绩。
业内有一句话说的好,脱离业务讨论技术就是耍流氓。你单独说算法,也有耍流氓的嫌疑。作为程序员,首先考虑的是满足需求。至于算法和实现,可能有一百种。
现在觉大多数程序员实现功能也只是调用现有的代码库中的方法,这些类库觉大多数都能满足需求。你也不需要自己实现一个链表,一个二叉树,更不可能搞出来一个新的排序算法等。利用这些现有的代码库,怎么都能把功能做出来,而且不止一种方式,所以所谓的算法在看起来就没那么重要了。
所以,你应该先深刻了解需求,然后实现它。然后在考虑算法的问题。这应该就是你主官的本意吧。
3这也是我国软件开发的现状,我国大部分程序员的工作基本上就是面向业务进行编程,还有做些系统集成,用到的算法也都是比较常见的那一类,技术难度不大,要求的是知识的广度和对业务的熟悉程度。结果就是我们的程序员的职业生涯貌似到了三十几岁如果不能升任管理岗位就会感到职业危机。如果是想走技术路线的程序员,算法就是必修,同时必须学好,这个世界一直在快速变化,系统架构在不断演进,业务也在不断变化,但算法的变化却少之又少。人的精力是有限的,我们很难一直保证自己有快速的学习能力,年轻时掌握不变的东西是延长职业生涯极其有效的方式。
4这说法在java要遭打,他们天天研究算法,最拿得出手的恐怕豆是算法了
5因为大多数工作内容是处理业务逻辑,搞清楚业务流程就行,算法用的不多都是简单的,网上找找贴上去就行。绝大部分应用产品没有什么难度大的算法。除非你做数学建模,图形图像,生物计算等,否则基本上流程图就是工作的全部核心
6任何技术的理论都需要相应的土壤,才能发光发亮。其工作内容是通过算法或大数据等手短实现功能和优化解决方案,只要在能够提供这类工作的企业工作,才能谈得上深入研究,否则都是自己琢磨,这样学习的成本过高,达到的效果不好。作为前辈的程序员建议保守的方案当然是正确的。
其次算法是程序员行业的一个小工种而已。大多数是面向业务进行逻辑代码书写的。对于多数人多数情况而言只有逻辑代码写好了,才有可能获得算法工程师的工作。
单纯盲目的追求算法的学习,很多可能落得纸上谈兵,浮漂起楼的窘态。
7不为什么,你的主管没说错
8算法是如何高效解决问题,实际上是先解决业务需求。有需求才有算法改进的要求。社会是需求驱动的
9大部分开发你不需要自己整什么复杂的算法,都是写逻辑