编者荐语:

大家好,我是你们的朋友 朋哥,今天聊聊算法,你了解算法为什么这么重要吗?为什么面试少不了算法?为什么算法这么难?带着这些疑问看下面文章把。

什么是算法?

我们先不要给算法是否重要就轻易下了一个结论. 到这先不着急给算法下定义做解释. 我们现在先来看看一种现象:  哪种语言是开发者们可以高高兴兴的用来编程的?近日,一位美国的开发者通过Twitter对开发者们进行了一项调查 :你是否喜爱XX语言 调查结果分析图:

基本上每个月都会有一些相关对语言使用程度做了一个排名. 大家业见怪不怪了. 编程语言又能体现出算法相关价值,也许你会好几种语言, 但随着工作时间增加和对技术深入研究你会发现:  不是具体的技术而是算法这些基本的东西成为了技术深入的软肋, 特别是在紧要关口 这个软肋往往就会更疼.

起码我认为自己目前工作创造性东西比以前少了很多.  很多算法已经被包装到了语言和工具中, 作为一个开发者也就不想以前那样费力去学习. 而往往有些算法只适用于本语言或工具而且只能解决某些问题,移植到别的情况下则无法使用, 这也是我在开始学习Ruby后才感到算法适用范围有所不同. 最为别扭的是你发现以前在用Asp.NET和Visua4l Studio开发工具中对于有些问题已经界定好思路.

人都是懒惰 既然有现成的东西不用 为何要费力去创新.  这也就导致长期适用单一编程开发者视野上狭隘.  开发者很难有属于自己的思维方式. 这就是为什么有些人说自己做到一定程度后成了熟练“代码工人”也不难解释. 起码这个问题让我感到很悲哀.

Ruby之父松本行弘[日本同行]就曾表示,注重的是算法而不是工具, 如果没有自己的思维方式和编程逻辑,很容易对某种具体的技术或者工具产生依赖性, 而这些编程工具和技术往往是国外开发. 假设有一天我们没有这些现成的工具 和技术  我们该怎么办? 岂不是成了一穷二白了吗?但是如果有了稳固的算法思维 编程世界里东西都不可怕.

算法是一种本质的回归.

今天出了JAVA 明天出了一个C#. 后天还不知道要出了一个什么 XXX¥¥语言和新技术. 于是乎你也成了那赶潮大军中一员 一路疲惫被人牵着鼻子走,  到头来你发现越深入步伐走得越慢. 越是吃力.往往技术了解得越多、做得东西越深,这样的体会越明显, 借用一位网友的话说就是"内功”不到位. C# java Ruby 只是两个你用来练习武功的招式, “内功”则是这些花哨武功招式后本质, 招式可以很多种  如果没有 ”内功” 招式变换再多也只是表面文章 罢了. 注定你是成不了一个名副其实的”武林高手”

看完了这个现象后 在回头来说算法定义. 算法(Algorithm)说白了就是是解决问题的步骤.可以把算法定义成解决一个分类问题的任意一种特殊的方法.

编程世界中 算法+数据结构=程序.

而数据结构往往是封装在不同编程语言中. 求解一个给定的可计算或可解的问题,不同的人可以编写出不同的程序,来解决同一个问题,这里存在两个问题:一是与计算方法密切相关的算法问题;二是程序设计的技术问题。算法和程序之间存在密切的关系的.

说到算法先简单讲讲面试。

在讲算法之前咱们先几句话聊聊面试,这是大家从学校走向社会的重要一步。校招和社招的面试,一般来说有2-3轮技术面试和1轮HR面试。技术面试可能现场也可能电话,HR面试有些公司还不一定有,这种情况就是三轮技术面,当然可能有的公司面试跟上面说的不太一样,但正常来说是这样的。

对于技术面试来说,基本可以这样讲:技术面试=基础知识和业务逻辑面试+算法面试。所谓基础知识和业务逻辑面试,就是对你应聘岗位进行相关知识的考察,通俗地讲就是看你有没有干这份工作的专业能力。比如你要应聘前端岗位,那js、css、html和 jQuery的一些问题肯定会问。第一步如果你过了的话,那就来到了算法面试,通常会以代码的形式考察,很少会单讲算法。

算法为何重要

从上面的:技术面试=基础知识和业务逻辑面试+算法面试 来看,对于业务逻辑知识层面的,那没的说,你想从事这个岗位的工作,那这一部分知识是必备的。但我们可以看出算法的普遍性,这也正是算法重要的原因之一:它是一种通用的考察点,不管你应聘哪个岗位都可以进行考察;

另外考察算法的另一个非常重要的原因是:它包含了太多的逻辑思维,可以考察你思考问题的逻辑和解决问题的能力;这一点也是面试官比较看重的,因为它可以反映出你的潜力,我曾经听阿里一位资深面试官这样讲过:当一个人逻辑思维和能力不错的情况下,你还会担心专业的业务知识方面他不行或者学不会吗?”管中窥豹,算法的重要性我想大家都应该明白了。

自己的一些思考

其实想说的算法重要的原因是:它是你扎实基本功的反映之一,这些东西很大程度上会决定你未来在IT这条路上到底能走多远。

现实点说,由于现在互联网行业薪酬较高的实际情况,很多人会报班或者半路出家去学IT,其实这变相拉低了广义上程序员的门槛,似乎大家都可以通过这条路来寻求高薪。那作为想或者已经从事这个行业的我们,如果你是科班的,那再好不过了,请珍惜这个机会;如果你不是,但也想干这行,在竞争越来越激烈的今天,必须要有点硬功夫,而上面说的算法就是其中之一,当然还包括类似于数据结构、汇编、组原、计网、数学等等,如果这些学好的话,它们是和别人竞争的一项无形的资本,也就是我们说的会让你有区分度。

因此,朋友们,重视它吧,也许有一天你真的会因为它pass掉竞争对手。至于算法包括哪些怎么学的问题,因为篇幅原因在这里就不讲了,看后面找时间专门写一篇如何学习算法的总结。好了,就写到这里吧,感谢大家的耐心阅读。

算法适用范围?

很多人疑惑我的日常编程中很少用到算法. 我个人认为,好的算法是每个程序都应该尽力去实现的, 也许一个程序百分之90以上被项目UI和实现业务逻辑给占据了. 但是总是有那么一部分决定你的产品核心竞争力.

为什么你没有用到算法?

人们之所以说算法很重要,是因为任何的程序,任何的软件,都是由很多的算法和数据结构组成的。从这点上说算法确实很重要,但是这不意味着算法对于每个软件设计人员的实际工作都是很重要的。其实,软件行业是可以分为算法密集型典型的比如一个搜索引擎 Cache底层,/三维场景中实时渲染算法.例如Google。每天Google的网站要处理十亿个以上的搜索,GMail要储存几千万用户的2G邮箱, Google Earth要让数十万用户同时在整个地球上遨游,并将合适的图片经过互联网提交给每个用户。如果没有好的算法,这些应用都无法成为现实

业务逻辑密集型,典型的比如一个CRM/ERP业务系统 项目中我们把更多的时间放到业务逻辑的实现和UI层数据呈现上 至于算法使用只有在性能受到限制或是出现性能访问瓶颈时加以算法优化。这通常的情况,而对于基于运用实际问题 往往面临问题较多  使用算法地方也就相对偏多.

使用体验密集型,典型的比如娱乐行业Silverlight站点 注重的使用用户体验上快捷。所以并不是每个软件开发者都要求有很好的算法功底。关键是看遇到问题解决问题的能力,算法在一定程度积累思维模式上经验.。这也是很多程序员说自己到了 30岁 在技术上创新陷入瓶颈.

每个项目特点和需求特殊也导致算法运用场景上不同. 有人说过算法重要,但不是最重要 这句话在某些特定运用场合时可以讲得通的 得灵活使用 。

推荐阅读

  1. ● 职场 | 职场我们如何寻找自己的定位
  2. ● 工具 | IDEA激活码
  3. ● 副业 | 程序员开启副业之路经验之谈!
  4. ● 敏捷 | 【万字长文】 说透 如何学习敏捷开发流程和运用
  5. ● 副业 | 作为技术人这几个副业绝对适合你
  6. ● 陆家嘴一程序员加班吐血,吐完继续加班。。
  7. ●字节跳动《Vim 中文手册》火了,完整版 PDF 开放下载
  8. ●Java性能优化的100+小技巧。

另附资源下载:关注 “程序员漫画编程

  1. 后台回复:学习资料”,可获取一份3TJava学习视频资料。
  2. 后台回复:“小抄”,可获取 最新 字节跳动算法资料。
  3. 后台回复:“面试1000”,可获取 1000多道面试题。
  4. 后台回复:“面试”,可获取 总结的 几十本Java各个类型面试电纸书。
  5. 右下角点击 联系我 ->「加群」拉你进讨论群一起学习。

算法 | 你知道算法为什么这么重要吗?相关推荐

  1. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  2. SURF算法与SIFT算法的性能比较——图像特征点检测与提取算法分析

    图像特征点提取算法的算法研究(SURF和SIFT算法) 1. 摘要 计算机视觉中,很大一部分研究集中在图像特征提取和特征生成算法上.对图像的优化,不同于一般数学问题的优化方法,图像的优化是对像素点,在 ...

  3. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  4. 标准K-means算法的缺陷、K-mean++初始化算法、初始化算法步骤、Kmeans++算法实现

    标准K-means算法的缺陷.K-mean++初始化算法.初始化算法步骤.Kmeans++算法实现 目录 标准K-means算法的缺陷.K-mean&

  5. Apriori算法、FP-Growth算法、顺序分析、PrefixSpan算法

    Apriori算法.FP-Growth算法.顺序分析.PrefixSpan算法 目录 Apriori算法.FP-Growth算法.顺序分析.PrefixSpan算法 Apriori算法 FP-Grow ...

  6. Java-JVM虚拟机内存垃圾回收机制gc入门:引用类型,对象标记算法,回收算法,常见的 garbage collector

    文章目录 GC的优缺点 引用的四种类型 对象标记算法 引用计数法 可达性分析法 回收算法 标记-清除算法(Mark-Sweep) 复制算法 标记-整理算法(Mark-Compact) 分代收集算法 常 ...

  7. 「AI科技」机器学习算法之K-means算法原理及缺点改进思路

    https://www.toutiao.com/a6641916717624721933/ 2019-01-03 08:00:00 K-means算法是使用得最为广泛的一个算法,本文将介绍K-mean ...

  8. floyd算法_最短路径的算法:Floyd算法

    点击箭头处"蓝色字",关注我们哦!! 算法 最短路径的算法-Floyd算法 ● ○ ● Shortest Path Algorithm - Floyd Algorithm ● ○ ...

  9. 【算法】模拟退火算法解决TSP问题的matlab实现

    [算法]模拟退火算法解决TSP问题的matlab实现 参考文章: (1)[算法]模拟退火算法解决TSP问题的matlab实现 (2)https://www.cnblogs.com/wenyehoush ...

  10. 运动想象系统中的特征提取算法和分类算法

    目录 特征提取算法 分类识别算法 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 特征提取算法 (1)时域方法:这是比较早期的EEG信号处理方法,主要通过提取E ...

最新文章

  1. 【AI初识境】深度学习中常用的损失函数有哪些?
  2. matlab识别图像,基于MATLAB神经网络图像识别的高识别率代码
  3. linux如何修改网卡序号,CentOS双网卡时改变网卡编号和配置静态路由的方法
  4. linux_ls命令详解
  5. 【codevs1073】家族,胡写并查集
  6. Android安卓|安卓概述、安卓开发、安卓入门、安卓架构
  7. vue ui创建项目报错:Cannot read property ‘indexOf‘ of undefined解决方法
  8. azure上传excel_使用MS Excel访问Azure中的关系SQL数据库
  9. 绵阳创客开发长语音识别平台 1小时语音10分钟转化为文字
  10. Camtasia卡点相册视频教程
  11. 一套适合入门的Oracle学习视频
  12. 发言倒计时器_单面会议计时器 会议发言倒计时器
  13. Chrome插件:OneNote Web Clipper 搜集和整合碎片信息的神器
  14. 计算机办公小知识,工作常用电脑知识技巧大全
  15. ubantu下部署python
  16. 小米note3的开发者选项在哪里?怎么进入开发者模式?如何显示布局边界?
  17. JAVA作业三:教练与运动员案例
  18. python读取以及保存gif图
  19. 编写1个JSP页面,在JSP页面中使用Java程序片输出26个小写的英文字母表。
  20. go环境编译singularity失败报错:checking: host Go compiler (at least version 1.13或17)... not found!

热门文章

  1. 计算机的防呆接口,PC接口全释:防呆口很重要,小心硬插烧硬件!
  2. reflets 第零课 课文涉及内容介绍及翻译
  3. 微型计算机的基础知识
  4. |flutter仿微信界面聊天室
  5. 项目应当经历的四种开发环境
  6. ERROR Deployer not found: git
  7. Java基础(二)集合
  8. airsim-使用Image api保存机载摄像机的图片
  9. 江南爱窗帘十大品牌 | 推荐3种简单的窗帘上色方法
  10. Linux中的rm指令