form 左耳听风
入门
编程技能:
- 编程技巧 《代码大全》
- 编程语言 go
- 操作系统 linux私房菜 深入理解计算机系统 现代操作系统
- 网络协议
- 数据库设计
- 前端 js
- 字符编码 ASCII 和 UTF-8
编程工具
- IDE
- Git
- 前端调试工具
- 数据库设计工具
当能够独立完成一个项目时,就算正式入门了。开始选择一个方向开始深入,但基础知识和原理的修炼是要持续的。
很多技能型的知识是边打仗边学习的,较为功利性,要用到就去看文档。但一些基础知识和原理性的内容就不能用功利性的心态去学习,很可能暂时用不上,但要理解背后原理,为技能提供基础支撑。
修养
- 英文
- 找答案-Google能力
- 代码
- 注释
- code review
- unit test
- 安全
有修养的程序才可能成长为工程师,没有修养的就会沦为码农。
基础
语言
工业级语言:
- C 整个软件的世界就是在C之上运行的
- C++ 核心架构,底层架构基本都是C++的天下
- Java 企业级应用的首选
- Go 完善了C和C++,在服务层应用很不错,云服务
顺序: Go -> C/C++ -> Java
理论知识
计算机科学专业所主修的领域:
- 算法 《算法图解》 LeetCode
- 数据结构 《数据结构与算法分析》
- 网络模型 《计算机网络》
- 计算机原理 《现代操作系统》
系统知识
系统知识是理论知识的工程实践
- Linux 《深入理解计算机系统》(必读)《Unix高级环境编程》《Linux C 编程一站式学习》
- TCP/IP 《TCP/IP详解》《The TCP/IP Guide》《TCP/IP网络编程》
无论上层怎么玩,是Nginx还是Nodejs,都逃脱不了下层的限制
软件设计
解决的是如何更优雅的实现功能
一般需要在实践与理论中螺旋式学习,需要在大量实践中反复推敲。
编程范式
- 结构化编程
- 面向对象编程
- 函数式编程
相关原则
- DRY don’t repeat yourself 更好的维护性
- KISS keep it simple,stupid 更好的维护性
- Program to an interface, not an implementation 面向接口编程
- YAGNI you ain’t goona need it 只实现必须功能,避免过度设计,避免增加复杂性
- LoD Law of Demeter 迪米特原则,最少知识原则。之和朋友通信,不和陌生人说话。在软件设计中,一个类对另外一个类知道的越少越好。
- S.O.L.I.D 面向对象五原则
- SRP Single Responsibility Principle 职责单一原则,即一个类专注于完成一件事
- OCP Open/Closed Principle 开闭原则,对扩展开放,对修改封闭。维护旧代码
- LSP Liskov substitution principle 里氏代换原则,子类可以替换父类
- ISP Interface Segregation Principle 接口隔离原则。多个专门的接口好于单一总接口
- CCP common closure principle 共同封闭原则,为相同目的而同时修改的类应该放在同一个组件中。封装变化
- CRP common reuse principle 共同重用原则
集成了组件A,但组件A依赖了组件B、C。即使组件B、C 你完全用不到,也不得不集成进来。这是因为你只用到了组件A的部分能力,组件A中额外的能力带来了额外的依赖。如果遵循共同复用原则,你需要把A拆分,只保留你要用的部分。
REP、CCP、CRP 三个原则之间存在彼此竞争的关系,REP 和 CCP 是黏合性原则,它们会让组件变得更大,而 CRP 原则是排除性原则,它会让组件变小。遵守REP、CCP 而忽略 CRP ,就会依赖了太多没有用到的组件和类,而这些组件或类的变动会导致你自己的组件进行太多不必要的发布;遵守 REP 、CRP 而忽略 CCP,因为组件拆分的太细了,一个需求变更可能要改n个组件,带来的成本也是巨大的。优秀的架构师应该能在上述三角形张力区域中定位一个最适合目前研发团队状态的位置,例如在项目早期,CCP比REP更重要,随着项目的发展,这个最合适的位置也要不停调整。
- Hollywood principle 好莱坞原则,don’t call us,we call you.所有组件都是被动的,初始化和调用都是通过容器,而非直接调用
- High Cohesion & Low Coupling 高内聚低耦合
- 高内聚:组件内部各元素的结合程度要提高
- 低耦合:不同组件之间的结合程度要降低
从而实现组件的可复用和可替换
- CoC Convention over Configuration 惯例优于配置
- SoC Separation of Concerns 关注点分离,也就是将问题分解成小问题,便于分工与解决
- DbC Design by Contract 契约式设计
- ADP Acyclic Dependencies Principle 无环依赖原则,健康的依赖是一个有向无环图,打破循环依赖就要避免直接依赖:
- DIP 依赖倒置原则
- 创建新的包,将共同部分抽出来存放到新的包