读者,你好
今天我们先来谈一谈学习知识和技能的方法。
传统教育
在大学接受计算机专业的知识学习,我称之为自顶向下的学习过程,什么是自顶向下?我的本科专业是软件工程,开设科目包括高等数学、线性代数、高等代数、离散数学等数学课程,当时我就特纳闷,我报考的不是数学专业,怎么还要学数学,数学老师也没解释软件专业为什么需要数学知识,可能他也不清楚,导致学习数学的时候就特别抵触,后来接触到算法才第一次意识到数学在计算机领域的重要性,计算机本来就是数学家发明的,数学能不重要嘛。计算机大学教育就是把所有涉及软件领域的知识都学一遍,然后学生在根据自己的兴趣选一个方向深入学习,这种方式的优点就是学习的知识面广,但是效率低,存在学生经常会有不知道为什么而学的困惑。
速成教育
工作的时候,有个长辈觉得软件开发的工资挺不错,就把大学刚毕业的小表弟(非计算机专业)送到我这要我带他学编程,我肯定不能按传统的方式花四年时间,我想的办法就是先让他照葫芦画瓢手把手教他实现一个很小的功能(一两天搞定),让他先有点成就感,不要有挫败感,然后慢慢的一点点增加功能复杂度,比如增加数据库查询功能,数据库查询效率问题再引入索引,索引再引入缓存,一步步的把知识从点向面扩展,从基础开发到理论学习引导,半年的学习最后也找到一份不错的开发工作,这个过程我就称之为自底向上的学习过程,这种方式的优点就是学习的知识面窄,但是效率高,知道为什么而学。
工作中的学习
工作中不像大学有那么多的时间,对知识的学习方式,往往追求效率高,恨不得一天就把某个知识点全部学透,而且成年人的注意力都很差,所以这个系列文章采取的是自底向上的学习方式。
程序员的CRUD困境
通过在公司的观察,发现一个很有意思的现象,80%程序员的主要工作就是增删改查,也就是圈子里流行着一种说法:面试造航母,工作拧螺丝,但凡存在即合理,业务的本质就是对数据的增删改查,搬砖活在每一个互联网公司都不可避免,如何能有效提高这80%程序员的代码质量和工作效率,就相当于能提高整个技术部门的总体代码质量和开发效率,进而保证业务的开发进度,降低开发者的工作强度,避免996工作制,这是笔者一直在思考的一个问题。
通常情况下,三年和十年工作经验的程序员写的CRUD代码基本区别不大,这也是很多老程序员的迷茫点,每天做着重复的工作,复制重复的代码,在现在互联网大环境不好的情况下,觉得自身的可替代性太强,在公司没有安全感,面临随时被裁走人找不到下家的风险,希望本系列文章能让大家理解CRUD业务也能写出技术含量很高的代码,找回信心,写出好代码,做好自己的本职工作,让自己不可替代,做CRUD专家。
计算机书籍和教程的问题
面向对象的书籍和教程,我也看了很多,总结下来往往有两个极端:
大谈理论:懂的人看了之后自然可以理解,觉得总结的很棒,不懂的人看了之后就是不明觉厉。
太过入门:网上的教程很多类似这样,基类Animal,子类Cat、Dog,Cat喵喵喵,Dog汪汪汪,道理是讲通了,但是在实际开发中怎么应用还是一头雾水。
课程目标
我希望通过一个实际案例,先从最简单的逻辑开始,不断的增加业务复杂度,让读者在这个过程中对比面向过程和面向对象的应对需求变化的优缺点,同时一步步引入设计原则,慢慢理解设计原则在编程中的重要性,读者根据自己的业务需求思考如何在项目中灵活应用,再结合自身的知识学习,进而提高自己编码水平,希望本系列文章能在理论和入门这两个极端找到一个平衡点,大家一起加油。
一 :案例实现及分析
二 :贫血模型和充血模式
三 :业务升级
四 :案例中的设计原则
五 :返利逻辑实现
六 :库存检查逻辑实现
七 :VIP价格实现
八 :增加计算价格逻辑的复杂度(一)
九 :增加计算价格逻辑的复杂度(二)