算法 您所在的位置:网站首页 程序员4级重要吗 算法

算法

2024-02-02 12:32| 来源: 网络整理| 查看: 265

编者荐语:

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

 

什么是算法?

 

我们先不要给算法是否重要就轻易下了一个结论. 到这先不着急给算法下定义做解释. 我们现在先来看看一种现象:  哪种语言是开发者们可以高高兴兴的用来编程的?近日,一位美国的开发者通过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岁 在技术上创新陷入瓶颈.  

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

推荐阅读

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

图片

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

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

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有