为什么大学老师教编程上课都不敲代码?
保留所有版权,请引用而不是转载本文(原文地址 https://yeecode.top/blog/37/ )。
如果你的大学老师上课不敲代码,那他并不一定是一个坏老师。当然,也有可能是。说不定他编程水平真的很烂。说不定,还是一个极好的老师。
来,我们细细分析。
我的分析将会按照下面的结构展开:
一、 软件开发的层级划分
二、 技(技术)
三、 术(架构)
四、 道(理念)
五、 老师要不要写代码
一、 软件开发的层级划分
软件开发是一个庞大的系统。我们可以类比传统工程设计领域的概念,将软件系统领域的研究由上到下地分为三层:
- 理念层面:研究软件系统开发中的理念和思想,例如研究软件的开发模型、评价指标、架构风格等。类比于传统工程领域研究建筑质量标准、研究商业区与居住区的分布关系等。
- 架构层面:研究如何协调和组织软件系统、子系统、模块之间的关系,从而指导系统实现并提升各类质量指标。类比于规划和设计建筑物的承重结构、功能结构等,并协调各结构的关系等。
- 技术层面:研究如何高效、可靠、经济地实现软件系统、子系统、模块等。类比于搭建建筑物中的楼梯、墙体、阳台等。
以上三个层面,层次逐渐降低,且上层为下层提供指导、下层为上层提供基础。
来,让我用并不优美的笔触做个板书,如下:
这其实就是我们常说的道、术、技。
接下来我们分别讨论三个层级。
二、 技(技术)
对于“技”这一层级,我们平时接触到的最多。在学生阶段,说一个人是大牛也多指其“技”高一筹。而且,技是上面各个层级的基础。
这一层级有以下几个特点:
- 上手快:学习一门编程语言是不难的,尤其是你掌握几门之后,再去掌握一门新语言,那是很轻松的事情。
- 基础依赖少:无需太多其他基础就可以。这就是为什么培训班爆发,培训班里培训的都是“技”。如果真要说基础,可能就英文不要太差吧。例如变量命名param最好不要写成canshu。
- 面很广:技术层面包含的语言十分众多,例如Java\C++\C#\Python\Lua\PHP\JavaScript\Shell……数不胜数。因此,这里的知识面极为广。
- 实在:指的是会就是会,不会就是不会,糊弄不了人。你看谁吹厉害了,就让他手写个代码出来,一下就露馅。
- 受重视:因为它实在,不虚,所以大家会拼命提升这方面的能力。因此大受重视,无论是高校学生、程序员、培训班……因为面试多会考察它,不重视不行。 一般情况在学生阶段和工作几年的程序员就处于提升“技”的阶段,可以认为是“技”崇拜阶段。谁的“技”高一筹谁就是大牛,毋庸置疑。
三、 术(架构)
这一层级大家接触的相对少一些,尤其是学生可能接触不到。工作几年后的软件开发者会接触到这些,但也不会太多。毕竟,相对于开发者而言,成为架构师的总是少数。
这一层级有以下几个特点:
- 需要技术基础:“技”是“术”的基础,毋庸置疑。因为“术”本身就是为了指导“技”而产生的。如果连被指导的对象都不了解,那还扯个啥啊?
- 需要理论知识:纯技术的积累已经不能够胜任架构工作,必须了解相关的理论知识。这些理论包括纯理论、也有一些实践经验。
- 相对虚:因为不是直接的写代码,因此相对虚一些,容易出现水货,不太容易考察。但也不是完全不能考察。
- 面更广:所需要的知识面更广。
有必要再说一下相对虚和需要技术基础这两点。几年前听说某个创业公司的CTO作为首席架构师,竟然不会写代码,还将其作为自己的特色。这种,绝对水货,都不会写代码你架构啥啊,最终东西怎么实施的自己都搞不清楚,那哪是架构啊,坑人啊。
如果感觉一个人侃侃而谈“术”,想考察他是不是真本事,而又没时间让他架构个实在的项目。那就让他写代码!一个优秀的“术人”(架构师),必定是一个卓越的码农!或许细节只是有些淡忘,但是,在编辑器的提示下,代码能力比大多数程序员厉害才对。
四、 道(理念)
谈到这一块,我接触的也比较少了,还触及不到。谁让我科研阶段也是偏实践的方向呢。当然,真正做这方面研究的人确实少,而且都是赫赫有名的大牛。
这一块的内容主要以论文或者会议演讲的形式对外输出。例如,哪个大神又写了什么牛逼的论文(说到这我怎么总是想起谷歌这个大神级公司),或者又在某个会议上提出了新的思路。
这一层级提出的思想往往会在两年左右落实到“术”上,进而影响整个软件领域的发展。
五、 老师要不要写代码
讨论完“技”“术”“道”,我们再来回答这个问题。
我们知道,大学里有很多代码课,例如Java\C等等。但是,大学这些课程本质上是在教你“技”“术”“道”的结合,而不是“技”本身。
因为,“技”很简单,你下课自己看看书就能学会。作为一个大学生,真的不难。
也因为,“技”涉及的面很广,各种语言Java\C++\C#\Python\Lua\PHP\JavaScript\Shell……所以,老师PPT上第15页第4行代码最后面是不是少了一个分号真的不重要。
以Java为例,上课老师天天写代码,也顶多只能教会你“技术”层级的“Java”中的橙色的那一小块知识。(而且我觉着我画的太大了……毕竟板书能力有限。)
而等你工作的时候,可能进入了腾讯,然后用的是C++。那橙色小块的知识迁移性太差了,对你的工作用处不大。
因此,老师极力要教会你的,是蓝色的竖线:“技”“术”“道”的结合。在这个目的下,老师写不写代码,不重要。甚至,写代码都有些浪费课堂时间。
当然,还有一个原因。老师教授的目的是“技”“术”“道”的结合,因此,可能“技”的能力不是太高。学生中可能有技高一筹的人。那老师写段代码如果出点问题,脸面也不好放啊。毕竟处在“技”崇拜阶段的学生,不太会感知到老师“术”“道”的高超。所以,有时候,不出手,更保险。
当然,以上我说的是高校。如果你参加了一个Java的培训班,就是来学“技”的,结果老师一行代码都不写,和你扯写高层级的乱七八糟,不用怀疑。那人不会写代码,退钱,走人。
好了,就讲这么多。
希望大家以更高的视角来看大学老师的授课,来看软件开发这一领域。
可以访问个人知乎阅读更多文章:易哥(https://www.zhihu.com/people/yeecode),欢迎关注。