My name is WashMalon!大家好,我叫卧式马龙!
以下观点不针对任何人及组织,如有冒犯,请见谅。
最近公司招聘,包括一些目前的同事,大都是软件专业的。这个符合我们公司的招聘要求和期望。但是随着交流的深入及一起合作共事,我发现一些不可理解的现象。
他们大都是学习java或者C#的软件相关专业,但是竟然都没有学习过C语言,也没有学习过微机原理,有些甚至于没有学过编译原理,或者只是作为不重要的课程讲一讲。
是哪些大学我不好在这里直说,相关专业的小伙伴们,你们是不是也有类似情况?其实啊,这是很不合理的。从以下几点来看
第一点,不是每一个软件工程师都是应用工程师吧,如果学校主体培养方向都是应用类型的,那么系统层面的软件由谁来开发?软件的底层及框架部分由谁来开发?难道这个还和学校好坏的定位有关?不应该要一视同仁吗?我个人觉得,C语言是一门非常基础的语言,可能现在确实使用的不多,当然,我说的是在上位机软件层面没有Java,C#多,下位机尤其是嵌入式的底层,C语言是逃不掉的,甚至于在写bootloader相关内容的时候,汇编语言都会大量用到。C语言在当前时代,已经不是主应用层面的了,和C#及Java等在开发效率上比起来更算不上高效,没有那么多轮子或者说现成的框架。但是C语言可以让学习者了解到编程的最最最基础流程和原理,比如代码的执行流程,编译器的编译原理,我这里说的是编译产生什么,并不需要深刻了解怎么编译,那个太过专业,但是现在很多小朋友就连编译产生什么都弄不明白。一般的C语言,我们知道,编译后直接是可执行文件,一般是二进制的汇编或机器码等可执行文件,那什么又叫做机器码或者汇编?你在每天啪啦啪啦写代码的时候有没有想过,你的英文单词和各种符号,计算机怎么就可以执行了?好奇吧,学校没讲的,你得自己看明白。计算机的核心执行单元是CPU,他不是什么代码都理解的,别说java和C#了,C语言目前可以直接执行的CPU也没出现,CPU更不会理解那么复杂的语言结构,他只有一套自己的指令集,程序存储在ROM中,就是不断读取出来通过总线传送给CPU,然后CPU执行的,这就是计算机最根本的执行原理。那么从你写的代码到CPU认识的机器码之间的转换,就是所谓的编译。如果你很清楚这块,我很庆幸,因为你不是为了写代码而写代码,不去设计或者开发编译器的话,我们没有必要完全弄懂编译原理,但是这个最最基本的原理咱必须得懂。上面我只是简单说了一下编译,其实还包括链接过程,就是多个编译的文件组合,按照设计者的设计初衷组合在一起,最终形成可执行文件。那么问题又来了,C#和Java也是这样吗?
我面试的时候问过一个问题,C#编译出来的程序是什么程序,我没要求他准确说出来CLR,我只是希望他明白一些其中原理,结果说的是驴头不对马嘴。我觉得是悲哀的,自己写的代码为什么可以执行都不清楚,这有一部分教材设计的责任,我觉得他自己也有一部分责任。想弄清楚以上问题其实真的不难, 也花费不了太多时间,微机原理和编译原理的前半部分就足够了。
第二点,迎合上面第一点,一个小朋友说了,我就是不会编译原理,也不懂链接过程,也不懂微机原理,但是我就是可以做出很酷很炫的APP啊。好的,这个问题其实很难回答,我尝试着把我的担忧分享给大家。首先,应用端APP确实具备很大的市场,中国作为世界第二大经济体,在娱乐、文化、民生等方面的投入巨大,这给相关行业带来了十分可观的收入及市场,这是一件利国利民的大好事,让人振奋。但是科技尤其是工业科技是国家发展的源动力,这部分领域同样需要大量科技人才,我们既然说软件,就围绕软件科技人才来说。我觉得那些不开设C语言及相关基础课程的院校,他们的目的性是不是太强了?或者说也是受到了来自就业率指标的压力?社会上曾经弥漫着各种嵌入式、java、C#速成班,请允许我使用弥漫一词,因为弥漫对应着乌烟瘴气,我没有以偏概全一棒子打死所有相关机构。现在好多了,现在还存活着或者说发展壮大的机构都是认真研究社会需求,并且因地制宜的。曾经不是,我刚毕业那会儿,差不多13年前,1W元嵌入式速成班,我们同学好几个都去了,学的呢大部分都是如何在搭建好的linux平台上开发app,有这么多就业缺口吗?学的还算是嵌入式吗?据我所知,后来这些伙伴们工作对口的并不多。说了这么多,我想表达的就是,以应用开发为主体的教育,应当存在,但是不应该大量存在。对于学生个人,应该懂得找短板,自己补齐缺失的部分。在未来的视频中我会尽我所能,给大家讲解一下哪些知识点或者说知识体系需要咱们掌握的。学校目前教授的部分是不够的,咱们需要自己去补齐。