初学者摸索之算法学习

此文转自我我的微信公众号,时间虽然过去已经四个多月了,可是我我的认为仍是可以给你们带来启发意义,因此借这个时间分享给你们,微信公众号分享比较有限,并且时效性也比较差,而博客时效性比较好,并且还能集思广益,欢迎朋友在评论区留言,俗话说,众人拾柴火焰高。git

原文以下:程序员

春节的假期在家待了10天。明天就要回北京了。github

微信公众号文章也停更了两周。感谢天天新关注的朋友们,同时也感谢一直关注和支持的朋友们。2019年争取输出更多的技术干货或者其它非技术干货(不过我对于个人微信公众号定义主要仍是以技术导向为主,非技术可能会少一些)。算法

 

算法对我来讲,用一句诗歌来讲,“蜀道难,难于上青天”。后端

本来以前想着用一年时间来攻克,如今看来可能性不大。缓存

身处在一线城市于我而言,不只仅须要经过闲暇时间学习算法,同时我也还要学习最新的技术,同时也还要时常补补计算机相关的基础(当年不努力,太过对本身放松所形成的后果)。微信

 

春节假期中,不只仅放松玩了玩,好比跑得快、王者、看电影及其和几个好哥们聚会,同时也刷了下知乎,在知乎中东看看西看看,看了好几篇于我目前而言比较感兴趣的文章,如何学好算法。负载均衡

 

于我目前而言算法并无给我带来实际的利益,至少没有其它软件工程技术那样给我带来直观的利益(好比使用shiro我能够轻松的完成接口权限控制、使用Nginx作负载均衡、使用Redis缓存数据等这样的例子数不胜数)。工具

 

由此能够推断出算法对我而言实际利益并不大,但我为何要坚持要学呢?学习

 

以拉勾、boss直聘等招聘网站来讲,一些上市大公司和大部分中小公司所要求的主要是丰富的项目经验和对开发经常使用技术掌握的很是熟练、某些特定领域的经验,好比银行、医疗、办公等,对于算法方面的能力并不十分看重(固然了,若是是在校参加过acm比赛获奖、刷过算法题的或者是github上有过开源项目的也是一项优点)。

好比下图所示:

图一:

图二:

 

 图三:

若是要说给出的理由的话,我以为可以说服我本身的最大的理由是我不想成为一名码农(我对码农的定义的是将脑力劳动变成的体力劳动,通过这一年多的开发,我发如今工做中,有一半是体力,有一半是脑力,其实那一半体力是能够靠脑力解决的)。

 

另外研究算法的也是为了更好的读懂Java源代码和Spring源码相关的,做为一名Java后端开发,不深刻了解源代码的实现思路是很难混的好的(主要指靠技术吃饭)。我以为一个算法能力强的人读Java源代码和Spring源码及其其它相关的软件源码要比算法能力弱的人效率高的多。尽管二者之间不必定是正比。

 

关于算法学习(我做为初学者就很少说太多了,参考前辈们的经验)

 

固然了,虽然说不说太多,可是仍是要说的。

 

我对我目前的要求,只有一条。

一道算法题目,将思路想清楚想明白了将其攻克,再继续下一道题目和尽量不借鉴其它已知的解决方案(参考很多知友的回答加上以本身1月份的作题经验来讲,没有通过深度思考尝试屡次解题直接去参考现成答案,收获过小,效率不高,感受太浪费时间了)。

 

知友们给出的观点(如何学好算法),以下图所示:

图一:

图二:

图三:

看了这篇知友的回答,我点击该连接:

https://visualgo.net/en

这个连接的效果图,以下所示:

点击其中的一个,以排序为例(它会以动画的形式展示,有助于更形象的感觉,能够做为算法学习的辅助工具):

图四(为何要学算法):

图五(有没有学不会算法的人):

 

这让我想起曾经看过的一篇文章,说的是一位十几岁就出来打工,快三十岁或者三十岁以上年龄咬紧牙关学软件开发,最终仍是学成对的。由此看,人必需要有决心,想当初新中国创建也才十来年,自力更生造出了原子弹、氢弹等核武器,使咱们再也不受制于他国的核威胁。

 

关于刷算法题网站有不少,好比目前我经常使用的就是力扣,

力扣题库(也就是如今比较出名的leetcode,记得前段时间咱们经理招人时,特别强调这么几点,有leetcode刷题经验的、有我的github的、有我的博客的优先):

https://leetcode-cn.com/problemset/all/

 

还有一个国内挺出名的牛客网:

https://www.nowcoder.com/

 

图六:

 

 

想到我当初看书,一周一本书,然而并无什么用处。

有句话叫作,欲速则不达。

慢就是快,快就是慢。

举例说明:

以我为例,经理要求某个功能时,我在完成该功能以前,事先画个草图,仔细分析,功能拆分(一般要求的功能是一个大的功能,大的功能通常包含好几个小功能),再度确认(将列举画好的草图跟经理确认一遍,这样的好处是,肯定需求无误,减小盲目开干浪费时间)。事实上证实是很是有必要的,前期我没有这样作,盲目埋头干致使的需求没有理解透,作出的功能也不对,以致于重作(重作是一件很是痛苦的事情),不少程序员都有过这样的经历,新增功能是一件很容易的事情,可是要重构原有的功能代码是一件很不容易的事情(特别是时间过了很长,若是编码规范不是特别好的话,会致使许多问题,好比代码可读性、代码耦合性等,我以为这两个是维护代码最痛苦的事情)。

由此推论出以下:

给定需求->分析思考需求(肯定需求的合理性,功能多少,时间周期,能不能作)->跟领导肯定需求->需求肯定,撸起键盘开敲->完成后的效果,找产品经理或者领导确认。

这一个流程下来时间虽然花很多,可是想一想若是没有听清需求正确分析需求直接开敲那样的后果,你会发现这样作实际上是很节约时间的,因此正好验证,慢就是快。

 

 

今天就说到这吧,回到北京后,一切都将回到正轨。

继续个人工程师成长之路。

 

另祝2019年,你们都能实现本身的目标,也许实现目标的过程当中是一件比较痛苦的事情,可是想一想度过这段痛苦的过程后,你将会得到无比强大的力量。

 

个人微信公众号,如图:

相关文章
相关标签/搜索