在上篇文章中,我提到从事工业产品嵌入式软件开发的朋友们,在整个职场成长路上,可能会碰到三道比较难迈过的坎,包括:
1. 从学校知识教育到企业产品思维的转变;
2. 能负责一款可卖的产品;
3. 带领团队负责一个产品系列,并努力成长为一名架构师。
复盘自己这些年的成长经历,一路走来,反反复复,曲曲折折,经常有种在迷雾中挣扎的感觉。我在想,如果能将自己的成长经历展现出来,并按照层次结构整理成一套职场成长教程,应该能帮助到一些人。
提起学习,我们大多数人立马会头大,脑袋中习惯冒出如下场景:一帮同学坐在教室里,老师在讲台上谆谆教导,而学生们在下面装模作样。
可能是受多年的学校教育影响,很多刚毕业的大学生初入职场时,但很快就会迎来职场闷头一棒,常见的场景经常是这样的:
1. 领导期望你来承担某项工作,如修改某个C程序模块,但考虑到你刚入职,基础薄弱,会先和你强调,有空加深一下C语言,回头有活干。
2. 一听说有活干,你立马兴奋起来,在网络上寻找C语言书籍,大家都给你推荐《C Primer Plus》,然后你就捧着一本厚厚的书开始发呆,有疑问但感觉身旁的人都在忙,你也不好意思问,更不知从何问起,只好硬着头皮一边看一边忘一边磨时间。
3. 一段时间后,你好不容易耐着性子看了三分之一,领导忙里偷闲想起你了,认为你应该学的差不多了,就将一个软件模块和文档扔给你,简单交代一下就去忙其他事情了。
4. 突然面对一大坨缺文少档的代码,你会发现你的那一点点C语法根本应对不了,更何况还涉及到很多专业知识。陌生的代码,陌生的专业,陌生的一大堆东西,让你无从下手,内心奔腾着一百头草泥马。
5. 又不知过了几日,你还耐着性子努力折腾中,领导认为你应该做的差不多了,一问才发现你刚做了一点点,甚至可能任务都没理解清楚而南辕北辙,领导开始不耐烦,而你内心满是委屈。
6. 一次,在一次,你在领导心目中可能已经是一个难成才的人了,要知道企业是流水的营盘,初入职员工很容易被放弃的,而你也有可能颓废人生,或跳槽,或转岗,岁月蹉跎。
如果你是职场人,上述这段场景描述是否有点熟悉的感觉,虽然有点极端,但类似的情形却在频繁上演,不仅揭露了学校环境和职场模式的诸多差异,也透着职场成长的艰辛。
◇◇◇
大多数公司是没有专门的职业培训体系的(我的经历,可能会片面),基本上都遵循着老人带新人的模式,这样很容易受到个体的影响。受限于传统的研发模式,老人一般会很忙,因此各类培训工作都是顺带的、零碎的,导致新人的成长缓慢,不容易迈过槛,一些人熬不住不小心就死掉了。
很多新人刚开始参加工作还是蛮有斗志的,想学这个想学那个,但因为不同工作结合,经常是捧着一本厚厚的大神推荐的书籍,但顶多三天热度,效率很低,不仅浪费时间,更打击信心。
如何破解这样的困局呢。
我在跨国公司中看到一种体系化的培养策略,深受感触。他们的培训体系会结合具体的产品,借鉴虚拟设备或测试网络等辅助手段,同时融入具体工作中,几乎构建出一套从入门到领域专家或架构师的成长之路。
不同于大学教育侧重于知识灌输,职场教育一般会采取任务模式,有点类似翻转课堂。将成长的各阶段提炼成一个个小的任务,新人通过“完成任务——检查审核”持续迭代成长。
受此启发,我的整个课程也会采取类似的理念,将职场成长的三个槛对应为完成三款产品,然后将每一款产品的构建过程在细分成一系列的小任务,而随着任务的完成,个人也将获得蓦然回首般的成长体验。
结合自己多年的职场培养新人经验,我的课程中还会额外的注重以下几点:
首先,课程设计要充分尊重人性。我们人类在学习一项新知识时,不是说学过就ok了,而是存在一个反复迭代持续深入的过程,因此一开始就抱着大神书籍从头看到尾是不可取的。
课程在设计时会充分考虑这一点,如编程规范,刚开始仅要求最基本的“四条半”编程规范,在此基础上后续会迭代加深代码审核训练、白盒测试训练,并构建个人的软件规范库等,直至某一天,将编程规范内化为你的下意识行为。
其次,为了真实模拟职场培训,我的课程中不使用仿真板,一开始所有的任务就是基于真实产品进行的。当然为了适用范围广且便于教学,该真实产品有点四不像,会结合工业PLC和电力设备,仅需要大家了解少许电路和自控知识即可,自动化专业一般都具备。
在学习时,极容易发生的情况是“学了一堆道理,依然过不好这一生”。为了克服这个问题,我们在设计课程时,希望通过一步步迭代实践,最终能构建出一整套工业产品研发框架,并且融入了先进的研发理念。因为工业产品的诸多相似性,很多软件模块甚至可以直接复用,而且受其研发理念潜移默化的影响,有可能走到比较高的层次。
再次,依据我多年的职场培训经验,想靠一个人的兴趣和意志去完成一整套知识体系的学习几乎是不可能的,太反人性了。如何克服呢,我总结出来的最好策略是陪伴,需要同行者才可能走的下去。大家一起完成目标,一起分析其中存在的问题,这样一群人可以走的很远,而不是传统的网络教学模式,仅仅做一些课件或视频放到网络上,这样基本是无效的。
因此,我们会采取“课件(或书籍)+迭代产品+互动交流群”的模式。
◇◇◇
课程的第一部分对应第一个门槛,主要帮助职场新人快速入门,巩固各种基础知识,完成从学校教育模式到企业产品思维的转变过程。
课表如下:
1. 跨越C语言入职陷阱;
2. 软件规范起步;
3. 开始调试芯片;
4. 做一款毕业设计产品;
5. 总结,并思考和真实产品之间的差距。
目前的大学教育模式,大多数学生的C语言能力是不够的,很多人甚至没写过稍微大一点的程序。凭我多年工作经历,一个人如果没有编程兴趣,仅将其当做工作,后期会很苦的,因此我的第一门课就是程序感知培养,巩固基础知识。然后在编程规范初步训练的基础上学习真实芯片的调试。
做完这些基础知识准备工作后,会按照一个产品的过程:需求,设计,编码,测试等步骤,做一款简单的毕业设计产品,此时会用到一些电路的基础知识。
最后是总结,并分析我们所完成的产品同真实的可卖产品之间存在哪些差异,为下一部分课程做铺垫。
◇◇◇
第二部分衔接第一部分,对应第二道门槛,用于帮助大家体验真实可卖的产品,并构建完整的产品化思维。
课表如下:
1. 学会站在用户角度思考产品;
2. 重新进行整体设计;
3. 驱动进阶,熟悉C语言嵌入式开发环境,增加boot模块;
4. 增加对外规约,并做一款维护软件;
5. 人机接口;
6. 产品现场运行异常怎么办,增加异常处理和日志模块;
7. 探讨可制造性,增加工装和车间调试模块;
8. 用户使用说明书;
9. 营销宣传ppt;
10. 总结,思考传统研发模式的痛点,思考如果产品种类繁多,人员流动频繁时会发生什么。
刚入职的朋友经常因为知识积累不够,思考问题片面,如因为熟悉某款芯片,做任何产品都想依赖。这部分课程开始首先要协助大家会从用户角度思考产品,而非仅从自己的能力角度。然后基于这样的前提,对第一阶段的产品进行重新设计。
后续,会进一步完善同用户感知密切的模块,如便于工程维护、对外通讯规约、人机接口、异常分析及快速应对机制、车间生产、说明书等模块,持续的构建出一个可卖的真实产品。
最后,对整个学习过程进行总结,并思考这种传统研发模式存在的痛点,如果面临产品种类繁多,人员流动频繁的真实职场环境时,会发生什么情况。
◇◇◇
第三部分课程对应第三个门槛,协助大家走到架构师的层次。这部分内容是我多年工作经验的精华部分,是在多年反复模拟跨国巨头的实践活动中总结出来的。
课表如下:
01. 总结工业产品系列化研发的难点和痛点,并鸟瞰跨国巨头的研发模式;
02. 整理需求,确定目标,并完成整体架构设计;
03. 由软件规范引发的血案,深入理解软件规范,并构建代码审核机制、白盒测试机制和软件规范库;
04. 软件静态架构,分层,分块,分布和抽象;
05. 软件动态执行架构,先侧重win虚拟和弱实时系统;
06. 驱动层抽象,构建虚拟设备节点;
07. 数据模型层抽象,配置软件提炼;
08. 模块胶水,脚本系统;
09. 日志类模块;
10. 强实时分布,基于can的分布机制;
11. 功能分布,基于消息的分布机制;
12. GUI框架;
13. 维护软件框架;
14. 构建高级应用开发环境;
15. 低维攻击,让产品具备持续迭代的核心泵;
16. 研发类文档的撰写和使用策略;
17. 测试用例及测试框架构建;
18. 构建融入产品内部的培训体系;
19. 谈产品世界的创新;
20. 听到,看到,用起来,结合自己的产品,开启新的人生;
首先要清醒的认识到传统研发模式存在的困局,然后鸟瞰跨国巨头所采取的模式,形成强烈的对比,激发走下去的决心。
然后参考跨国巨头先进的研发理念,对前两阶段完成的产品重新定位需求,并进行整体设计。
此时的程序架构已经有点庞杂,不太容易切的很清晰,只能先了解大概,然后反复迭代。一开始将整个架构分为静态和动态两部分,分别叙述,如静态分层结构会衍生出驱动抽象层,配置软件,高级应用开发框架等。
研发模式诞生于技术,但会慢慢的超越技术本身,如文档、测试、培训、创新等如何同日常的研发工作有机融合为一体。实际上,我构建的整个培训课程,就是在模仿跨国巨头内部的培训机制。
至此,程序框架基本构建完毕了,但缺乏细节,然后依赖各种真实情景进行纵向穿插,如将动态执行框架移植到ucos和linux上,如基于虚拟设备和win仿真系统的采样精度分析,如基于高级开发环境和GUI的用户自定义界面开发……
最后,希望大家能意识到,这个层次已经没有固定的招式,但如果能听到、看到、并亲身经历一场成长之旅,相当于站在了巨人的肩上,在以后漫长的职场生涯中,如能结合自己的产品方向,一定会闯出一片精彩的世界。
◇◇◇
总览整个课表,大家是否意识到,我的课程同常规的培训课程不一样。目前很多教育课程仅仅是将书本内容搬到网络上,还是侧重传统知识的灌输,如C语言语法等。
实际上,我接触到比较优秀的研发模式后,经常有一种感觉,我们拿着传统研发模式同人家竞争,就像拿着刺刀在枪林弹雨中冲锋一般,怎么可能赢。
我个人是三体迷,尤其喜欢里面各种跨越维度的攻击,与此类似,这门课程也侧重于不同维度的提升,因此,我给自己的这门课程起名为:异维设计——我的嵌入式软件成长之路。
后续会详细的介绍课表中每一门课程的内容,《跨越C语言入职陷阱》已经制作完毕,可通过公众号子菜单浏览。
需要注意的是初期我可能侧重于服务企业,课程构建也不是按照顺序进行的,而是按需构建的,而且随着实施持续推进,整个课表可能会反复调整。
我是小马儿,一个渴望良知与灵魂的嵌入式软件工程师,欢迎您的陪伴与同行。
◇◇◇
注1:这篇文章是我的《异维设计——我的嵌入式软件成长之路》课程部分内容节选,线下课程内容会更加有血有肉一点,而且会增加很多产品演示和交流环节,如您的公司有兴趣,可以加我微信,备注《异维设计》即可。我的微信号:nzn_xiaomaer。
注2:我经常谈及的“代码复用”可能并不等同于你的直观理解,下篇文章会用一个例子描述,如感兴趣可关注我微信公众号。 |