很多刚入职的新人,都喜欢问一个类似的问题:“如何学习……?”,然后一些朋友就会给拷贝一大堆书籍资料,更热心的还会指导先看哪本在看哪本。

但不幸的事,很多时候就截至于此了,一大堆资料依然静静的躺在电脑硬盘里,只是在偶然的情况下才会打开翻看两眼目录。

走过一些企业,培训体系一般是这样的:

1、新人入职后,师傅会给一堆资料让看,然后新人硬着头皮看一些;
2、哪天师傅不忙了,惦记起这个新人,然后交给其一个产品,让其折腾;
3、可惜具体产品一般都涉及多个学科,面对一大堆疑问,新人会感觉腾云驾雾般难以前行;4.一段时间后部分人迈过了入职时的绝望悬崖,有了自己的积累,开始慢慢的深入接触产品,但因各种文档资料奇缺,只能一边学习一边调整;
5、数年后,新人成为了老手,同时新的产品体系也诞生了;
6、然后重复以上死循环。

长此以往,公司的产品体系变得非常的杂乱,技术难以复用,无法进行有效的积累,那种如臂使指的团队构建更是空谈。

如何才能跳出上述死循环呢?我在自己的职业生涯中进行了大量的探索尝试,有了一点感悟:不仅需要将新人的培训工作尽可能前移,尽可能体系化,而且要尽早的融入我们的设计及团队理念。因此在后续的三个C语言例子中大家会体会到很多东西不仅仅是C语法层次的内容。

前面我谈到,在公司,不可能在重复学校的填鸭式的教育模式,也不会有人手把手的教你。那么在这种情况下,如何组织培训工作,很多时候反而成了一件颇具艺术感的选择难题。

随着移动互联网的盛行,在线教育也流行了起来,网络上出现了大量的视频教程。紧随时代的脉络,我尝试过将入职需要学习的内容做成书籍和视频,但效果一般。后来细细研究这个领域,发现大多数视频仅仅是将大学课堂的内容移到了网络上,很多人也仅仅是耐着性子看个几集,然后就不了了之了,因此导致的效果不佳。关于在线教育我也有一些自己的想法和思考,后面会专门撰文描述,这儿就不深入介绍了,总之,初期的尝试是不太成功的。

C语言第一个例子:需求不明确

第一个例子:“编写一个控制台程序,已知内层和外层菱形的高度,输出一个空心菱形”。

是否看上去很简单啊,写到这儿,很是期望正在阅读的你能先停下来,思考思考,然后付诸行动,编写几行代码小试一番,然后在继续读下去,收获会更大。

这些年,我带过很多人,大部分人看到这个题目后,然后立即就开始写程序去了,自己内心多少有点小小的失望,为何?

一般通过公司层层把关招聘进来的软件人员,这个例子总是可以弄出来的,不过可惜的是,近一半以上的人不能准确的实现出来,仅一个菱形高度的理解,就是五花八门,乱七八糟的,执行如这样的:

或者这样的:

或者干脆是这样的:

为何会出现这种情况,这恰恰是该例子的第一个大坑:需求不明确。一开始就碰到挫折,对很多新人来说,这无异于当头一棒,不过记忆也最为深刻。

一个团队协作时,会存在大量的交流,而交流过程中,总是会产生或多或少的歧义,而恰恰是这些歧义会导致需求的不明确,会导致大量的返工,甚至会导致项目的失败。我给新人的第一份建议:将需求用自己的语言表达出来,和对方确认后再实施。这一点在以后的团队协作中非常的重要,因此我早早的将这一点嵌入到了入职培训中。

经过这么一折腾,第一个例子重新描述如下:“写一个控制台程序,用户输入内层和外层菱形的高度,输出一个空心菱形,菱形的高度定义为菱形的上三角形的高度,如输入5和3,输出如下:

这儿稍微补充两点:

1、菱形高度定义好似有违常理,但在编程的世界中,简洁就是常理,如果定义为整个菱形高度,那么不仅需要进行正整数判断,而且还需要奇数判断,增加了程序的复杂度。

2.、用一个例子描述,比一大堆文字管用多了,是所谓一图顶千言。

明确知道要做什么了,然后很多人又回去,然而很多情况下执行结果确超乎意料。

这儿引出了第二个很重要的概念:边界判断。给出两个数,如何简洁且完备的判断其是合理的输入,这是编程的基本功,这些内容在大学教学过程中一般不太重视,但想做出合格的嵌入式产品,这一点必须引起足够的重视。如何做出优雅的边界判断,这个例子比较简单,留给正在阅读的你吧,顺便回头想一想我前面菱形高度的定义吧。

第二次被打道回府后,很多人会有急躁情绪,菱形还没输出呢,就给灌输了一堆规则。碰到这种情况,我会给他们讲解嵌入式程序的特点(这一点留待后文慢慢描述),以及我以前的经历。我刚开始工作时,因CPU速度受限,程序还主要是汇编语言,领导让写一小段汇编程序,但每次提交后,都被劈头盖脸的骂一通,让回去整改,直到后来一行汇编语句都省不下去了,才算通过了。回头看,为了一个小小的例子,竟然将大多数汇编指令熟悉了,方才明白领导的良苦用心。现在的新人脸皮薄了一些,不敢乱骂了,只好慢慢讲道理了。

经过第二次的折腾,大部分新人态度都能稍微端正起来,而且这次写出来的例子,和需求基本吻合了,但当兴致冲冲的跑过来交差时,我反而不看程序,开始问起在实现这个程序过程中用到的调试技巧。

这个例子对新人来说有一点点的难度,不可能一次就写好的,肯定会经历一些痛苦的调试过程。但是在国内的大学教育体系下,却又不太重视基本调试技能的锻炼,期望新人一开始意识到调试是一项基本功夫,需要引起足够的重视,需要去持续的加强。

雄关漫道真如铁,而今迈步从头越,一个小小的例子还未起步,对很多人已是一场痛苦的经历。要想成为一个合格的嵌入式工程师,需要方法,需要才智,更需要背后的汗水和坚持,本系列文章会带领大家体味我的成长路,但无法代替你自己的付出和汗水。

明天继续发布,欢迎继续关注!