感觉算法在程序员中快被吹上天了,如果只是搞编程的话,是不是没必要死磕算法?
对于大多数搞自动控制的人来说,不用研究算法。对于从事AI、复杂的运动控制、CAD/CAM研发的编程人员,必须研究算法。
机械设计人员经常会用CAD画图,机床操作人员经常会用CAM生成ISO零件加工程序。CAD的复杂的3D图形,能旋转自如,明暗显示恰到好处,3D/2D轻松转换,这中间要用到复杂的线性变换。
对于5轴及更多控制轴的设备,轨迹计算是一个极其复杂的问题。要计算各种直线一直线、圆弧一直线、圆弧一圆弧的位置关系,以及进行电极半径、加工间隙等补偿后的位置关系。补偿后没有交点对如何进行过渡处理?加工复杂的异形件如何处理?
以上这些,看似简单,实际上都要用高等数学的理论来解决。高等数学、线性代数、常微分方程、数值逼近、微分方程数值解等,都有助于解决这些问题。
算法,种类很多。要把一个问题的精准的数学模型做出来,一般要花很长时间。即使数学理论是正确的,实际应用时,由于有太多的边界条件限制,也很不好实现。所以,不要把算法认为是纯数学;应当把算法当成理论、实际相结合的最终产物。
数学学的好,不代表能解决实际数学问题;数学学不好,编程要进阶,就很困难。
先说一下我的答案,算法能力对于程序员是比较重要的,而且未来会越来越重要,这一点随着大数据、人工智能相关技术的落地应用会逐渐得到体现。
编程不是目的,编程的目的是解决问题,解决问题必然离不开逻辑,而各种逻辑问题说到底就是算法问题,所以目前大厂的程序员面试,不论从事何种类型的开发,往往都会重点考察算法能力。
在云计算进入到云原生时代之后,程序开发的门槛全面降低了,即使没有任何编程基础的同学,经过一个短暂的学习之后,都能够借助于云计算平台来完成一些场景开发任务,而且可以在生产场景下应用。
对于专业的程序员来说,未来的岗位任务一定会逐渐从功能实现向价值挖掘转换,价值挖掘目前常见的方向就是数据价值挖掘和决策价值挖掘,也就是大数据和人工智能。
价值挖掘的背后就是算法,不论是采用统计学方式,还是机器学习、深度学习、强化学习等方式,算法设计都是核心,从这个角度来看,程序员还真得死磕算法。
未来判定一名程序员的重要维度一定离不开三个因素,分别是算法、场景和工具。
场景是需要积累的,不同的开发场景往往需要采用不同的算法和工具,所以在程序员进入到算法时代之后,经验的价值会逐渐得到体现,这也会延长程序员的职业生命周期。
从读研的角度来说,目前计算机领域的很多创新是离不开算法的,不论是大数据方向,还是人工智能方向,算法都是核心问题。
最后,如果有计算机领域的问题,欢迎与我探讨交流。
首先,毋庸置疑,算法还是非常必要的,在程序中,算法无处不在,所以,程序员了解一些必要的算法是必须的,尤其是算法型模块或项目。
但是,算法不是目的,很多程序并不需要死抠算法,就一个项目组十个人来说,有两三个人写写算法就可以了,大多数人只需要关注业务实现。
还有一点非常重要,很多算法大同小异,互联网上很多经典算法都被封装成库供大家调用,大部分算法都提供了源码。
整体而言,掌握一些算法对于程序员来说是必要的,也可以说是有利无害,尽管很多项目对算法并没有过多要求,但是会算法和不会算法的程序有时差距甚远。
什么是算法?算法并不仅仅是指那些经典的排序搜索算法,算法真正的含义是指解决问题的思路和方案。我们编写的每一个程序都是为了解决一个问题,那么我们编程的思路就是算法。所以算法和每一个程序员息息相关,编程学习的核心就是算法和数据结构,而编程语言反而是次要的东西。
算法的重要性毋容置疑,这也是为什么所有的IT公司面试程序员首先就是测试算法的水平,不懂算法的程序员是典型的平庸码农,写出来的代码基本上都是垃圾。
算法是程序的灵魂
我是做应用编程,普通程序真的用不上啥算法,即使有也只是一点点小地方小花招而已。不过我看人工智能的书里边都是各种算法数学公式,大学高数都还给老师了实在看不懂,太高深了。
对于多数程序员来说,掌握多少具体的算法,其实没那么重要。因为实际根本用不着——特别的岗位除外。
但程序员必须具备以下两种能力:
1、清楚自己写的代码的性能。团队中有人写出低效的垃圾代码,是屡见不鲜的。
2、知道该用什么数据结构,以及什么时候该寻求未知的数据结构。例如二维搜索,想一想就知道列表、哈希这些常见的数据结构不行。网上搜一下,会发现可以用R树。然后找一下开源的解决方案,拿来用就行了。不用知道太多细节,也不必自己造一个轮子。
当然我也不是否定算法,我也认同算法是灵魂。只是只有算法工程师等少数岗位,才需要深入研究算法。
有道理,编程不一定搞算法。当然如果彻底掌控计算机,必须样样精通。
算法只是程序员的一种技能,但是绝大部分程序员通过掌握一些算法可以更好的理解很多软件框架和技术的精髓,快速解决日常的问题。想成为一名优秀的程序员,有了算法的加成可以更加的如虎添翼,但是对于算法的理解没那么深入,在it行业也是可以做的风生水起,终究现在的it行业职位已经有了更细致的分工,做咨询,项目管理,架构等职位,具体的算法可能并没有那么的重要。
一个是根据图纸搭积木
一个是自己发明不同的积木类型
你觉得哪个逼格高?