软件工程的术与道
科学/工程是一项严谨的工作,本质上和文学/艺术是一种不同的思维模式 (不断完善ing...) 1.1 时间规划。 根据前人的理论,从新手到熟手过程中,项目预估用时需要✖️一个扩大因子,随着经验的逐渐丰富,这个因子从 2.4 最终无穷趋近于 1 。 1.2 原理知识。 计算机科学技术飞速发展,新技术层出不穷。但是不论是什么新语言,或者AI领域中什么新的模型,其基本理论基础大致是共通的:操作系统、计算机网络、数据结构、组成原理、设计模式、深度学习。 学习一门技术,我们大致分为4个深度层级:第一个层级,知道怎么用;第二个层级,知道背后原理;第三个层级,知道怎么改;第四个层级,知道怎么架构一个全新的技术。 当然,作为初入门者,无需把计算机专业的基础课程都看一遍,只需要专注当前的技术,并沿着以上4个深度层级发展,再加以拓宽即可。 1.3 时常总结。 根据艾宾浩斯遗忘曲线,我们对知识不可能达到过目不忘的效果,因此,需要时常总结新知识,并且经常温习,这也就是很多人写博客的目的。 1.4 系统学习。 如果想钻研某个方向的知识,最好拿一本书,而非在知乎、公众号或者博客里去获取碎片化的信息。碎片化学习的前提是,你已经掌握了该方向的基础。 1.5 重视沟通。 什么情况下1+1>2?对,就是与人沟通的情况下,1+1会大于2。学会分享,学会思考,学会质疑,这是有效沟通的三大法宝。 1.6 编写样例。 相信很多人听过“Talk is cheap, show me the code”,这并非大佬的装逼言论,而是实实在在的精髓——只有编写样例才能帮助自己/或别人理解计算机技术的思想。计算机技术并非高大上理论的堆砌,它们都是可以转化为代码的。光停留在理论基础上,只会陷入“记忆->忘记”的死循环。 1.7 注重实战。 工科是一门物理意义上,而非理论或艺术意义上的学科。形成最基本的知识体系后,最重要的任务即是项目实战。实战之前,不必对每个细节都一清二楚,也不必熟悉每个“可能”会用到的技能。以Django Web后端项目为例,它可能需要用到的技能有:编程语言Python、后端框架Django、部署工具Docker、异步框架Celery、缓存框架Redis...但实际上我们只需要有Python和Django的 最基本的基础 即可开始工作。