相信你一定听过一句话:语言只是编程的工具,而算法才是程序的灵魂!
无论是学习、面试、还是工作中,懂算法的程序员都要吃香很多!而数据结构与算法差的程序员,经常会遇到各种头疼的问题。
01从未得到过重视的问题
每个程序员的困境都不尽相同,但都可以归纳成一句话:数学算法不好,干什么很费劲!
不懂算法的程序员,在开发过程中,一定也因为不懂算法而遇到过这些问题:
学习:目前,新的前沿技术基本都跟算法沾点边,尤其是AI智能,不懂数据结构和算法,估计连入门都不行!
面试:现在很多程序员面试都会考算法题,要是算法差,这一关基本就过不了!
工作:程序员不懂算法,那在使用接口、类库时只能做堆砌;
工作:写的程序越来越卡,运行效率越来越低,但你却始终搞不懂为什么,无法快速评估代码性能、资源消耗;
工作:代码千万行,根本理不清程序运转逻辑,同样的一个需求,在懂算法的程序员手中,或许1行代码就搞定了,而在不懂算法的程序员中,至少得写10行…
而上面所说的问题,90%的程序员都遇见过!可糟心的是,从未得到过重视!
02问题出在了哪里?
遇到这些问题,真的是我们能力差吗?其实不是。
究其原因,就是因为努力的方向错了,没有掌握“算法”这项核心基础,才导致你与懂算法的程序员差距越拉越大。
在初学编程时,很多程序员都过分关注功能的实现,而忽略了代码的底层逻辑,而所有的代码,其核心原理都是架构和算法。
或许有些人会觉得,自己貌似能理解很多数学算法的基础概念,但是在编程时依然无法建立与之相应的联系;
实际上编程所需要的绝对不仅仅是基础数学算式,更重要的是底层架构逻辑!
03如何锻炼底层架构逻辑?
最重要的一点就是锻炼架构的推导思路,锻炼架构的推导思路主要有两种方式:一是自顶向下的方式,二是自底向上的方式,两种方式往往是相互结合来产出最合适的结果。
1)自顶向下的推导的关键在于问题定义,如果问题没有被准确的定义,那么自顶向下就无法推导出正确的结果。
2)自底向上的方式则是采用总分总的结构,整个过程就是一个抽象和架构的过程,这个推导路径是有序的,每个步骤都包含了大量的操作技巧,前一步做好,后一步才有可能得出正确的结果,这也是架构逻辑的重中之重。
自底向上包括几个重点:
第一:分析阶段,也是我们常说的问题空间领域建模,关键的一步是业务概念模型的输出,而业务概念模型输出的前置条件是从需求中分解出合理的用例集合。
第二:设计阶段,也是我们常说的解决方案空间建模,以及应用逻辑架构。
第三:架构逻辑,做架构不能拍脑袋,需要推导出主要的思维路径,这都是根据严密的逻辑推导出来的,而这个严密逻辑基本是一个自底向上的推导过程,底层的模型是通过建模方法演绎出来,逻辑架构中的各个模块是通过归纳的方法推导出来
基本上应用逻辑架构的推导有4个子路径,分别是:
第一:业务概念架构,来自于业务概念模型和业务流程
第二:系统模型,来自于业务概念模型
第三:系统流程,来自业务流程
第四:非功能性的系统支撑,来自对性能,稳定性,成本的需求
掌握一门面向对象语言,特别是需要熟悉它的语法规则和常用包。
熟悉常见的架构逻辑,并且熟悉这个架构在你的语言中的使用规则。
当你已经熟悉了语言语法规则和常见的架构逻辑,就为后续的算法打下了非常好的基础。