ifelse也好、for循环也罢,代码能够说就是对数学逻辑的具体实现。因此敲代码的程序员几乎就离不开数学,难易不一样而已。程序员
那数学很差就写不了代码吗😳?不,同样能够写代码,能够写出更多的CRUD出来。那你不要总以为是产品需求简单因此你的实现过程才变成了增删改查,每每也是由于你还不具有可扩展、易维护、高性能的代码实现方案落地能力,才使得你小小年纪写出了更多的CRUD!算法
与一锥子买卖的小做坊相比,大厂和超级大厂更会注重数学能力。数据库
2004年,在硅谷的交通动脉 101 公路上忽然出现一块巨大的广告牌,上面是一道数学题: {e 的连续数字中最早出现的 10 位质数}.com。编程
广告:这里的 e 是数学常数,天然对数的底数,无限不循环小数。这道题的意思就是,找出 e 中最早出现的 10 位质数,而后能够得出一个网址。进入这个网址会看到 Google 为你出的第二道数学题,成功解锁这步 Google 会告诉你,咱们或许是”志同道合“的人,你能够将简历发到这个邮箱,咱们一块儿作点改变世界的事情。设计模式
计算 e 值能够经过泰勒公式推导出来:e^x≈1 + x + x^2/2! + x^3/3! +……+ x^n/n! (1) 推导计算过程还包括埃拉托色尼筛选法(the Sieve of Eratosthenes)、线性筛选法的使用。感兴趣的小伙伴能够用代码实现下。微信
业务提需求、产品定方案、研发作实现。最终这个系统开发的怎么样是由三方共同决定的!数据结构
地基挖的很差,楼就盖不高架构
砖头摆放不巧,楼就容易倒性能
水电走线不妙,楼就危险了学习
格局设计不行,楼就卖不掉
这里的地基、砖头、水电、格局,对应的就是,数据结构、算法逻辑、设计模式、系统架构。从下到上相互依赖、相互配合,只有这一层作好,下一层才好作!
数据结构:高矮胖瘦、长宽扁细,数据的存放方式,是一套程序开发的核心基础。不合理的设计每每是从数据结构开始,哪怕你仅仅是使用数据库存放业务信息,也同样会影响到未来各种数据的查询、汇总等实现逻辑的难易。
算法逻辑:是对数据结构的使用,合适的数据结构会让算法实现过程下降时间复杂度。可能你如今的多层for循环在合适的算法过程下,能被优化为更简单的方式获取数据。注意:算法逻辑实现,并不必定就是排序、归并,还有你实际业务的处理流程。
设计模式:能够这么说,不使用设计模式你同样能写代码。但你愿意看到满屏幕的ifelse判断调用,仍是喜欢像膏药同样的代码,粘贴来复制去?那么设计模式这套通用场景的解决方案,就是为你剔除掉代码实现过程当中的恶心部分,让整套程序更加易维护、易扩展。就是开发完一个月,你看它你还认识!
系统架构:描述的是三层MVC,仍是四层DDD。我对这个的理解就是家里的三居仍是四局格局,MVC是咱们常常用的你们都熟悉,DDD无非就是家里多了个书房,把各自属于哪个屋子的摆件规整到各自屋子里。那么乱放是什么效果呢,就是自动洗屁屁马桶🚽给按到厨房了,再贵也格楞子! 好,那么咱们在延展下,若是你的卫生间没有流出下水道咋办?是不这个地方的数据结构就是设计缺失的,而到后面再想扩展就难了吧!
因此,研发在承接业务需求、实现产品方案的时候。压根就不仅是在一个房子的三居或者四居格局里,开始随意码砖。
没有合理的数据结构、没有优化的算法逻辑、没有运用的设计模式,最终都会影响到整个系统架构变得臃肿不堪,调用混乱。在之后附加、迭代、新增的需求下,会让整个系统问题不断的放大,当你想用重构时,就有着千丝万缕般调用关系。 重构就不如重写了!
在《编程之美》一书中,有这样一道题。求:1~n中,1出现的次数。好比:1~10,1出现了两次。
1. for 循环实现
使用 for 循环的实现过程很好理解,就是往死了循环。以后把循环到的数字按照字符串拆解,判断每一位是否是数字,是就+1。这个过程很简单,可是时间复杂很高。
2. 算法逻辑实现
如图 20-3 所示,其实咱们能发现这个1的个数在100、1000、10000中是有规则的循环出现的。十一、十二、1三、14或者2一、3一、4一、51,以及单个的1出现。最终能够得出通用公式:abcd...=(abc+1)*1+(ab+1)*10+(a+1)*100+(1)*1000...,abcd表明位数。另外在实现的过程还须要考虑好比不足100等状况,例如9八、1232等。
实现过程
在《编程之美》一书中还不仅这一种算法,感兴趣的小伙伴能够查阅。但本身折腾实现后的兴奋感更强哦!
3. 耗时曲线对比
按照两种不一样方式的实现逻辑,咱们来计算1000、10000、10000到一个亿,求1出现的次数,看看两种方式的耗时曲线。
for循环随着数量的不断增大后,已经趋近于没法使用了。
算法逻辑依靠的计算公式,因此不管增长多少基本都会在1~2毫秒内计算完成。
那么,你的代码中是否也有相似的地方。若是使用算法逻辑配合适合的数据结构,是否能够替代一些for循环的计算方式,来使整个实现过程的时间复杂度下降。
单纯的只会数学写不了代码,能写代码的不懂数学只能是CRUD码农。数学知识帮助你设计数据结构和实现算法逻辑,代码能力帮你驾驭设计模式和架构模型。多方面的知识结合和使用才是码农和工程师的主要区别,也是是否拥有核心竞争力的关键点。
学习知识有时候看不到前面的路有多远,但哪怕是个泥坑,只要你不停的蠕动、折腾、翻滚,也能抓出一条泥鳅。知识的路上是发现知识的快乐,还学会知识的成就感,不断的促使你前行。
若是你想更好的提高你的编程能力,进入到百度腾讯等大厂工做,好好学习C/C++编程知识成为高薪软件开发工程师的话!那么你很幸运~
C语言C++编程学习交流圈子,QQ群1090842465【点击进入】微信公众号:C语言编程学习基地
分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比本身琢磨更快哦!
编程学习书籍:
编程学习视频: