我所理解的工程师简单描述是指“能根据实际问题选择适当的方法、适当的工具较好的达到既定的目标”这样一类人,下面是我自己归类的一些认识工程和解决问题的一些思路,背景是嵌入式+linux类问题的解决。
1.认识对象
这一步的全称应该叫认识对象、考虑需求、确立标准,我刚开始决定学习嵌入式linux的原因是为了找一份较好的工作,在linux大环境下的服务器、ARM驱动or内核开发薪资待遇都是不错的,而且有较好的上升空间,同时不想软件那样无休止的加班学习,但是后来一根筋扎进去学了一阵子后发现开始迷茫了,因为平时做项目的话我有一个分析对象,我还有用户,我可以较好的建立工程并构思一些IDEA达到用户需求,但是现在呢,我的用户需求变成了找份好工作,对象是ARM+LINUX学习,于是陷入了一个学习无底洞,因为目的不够清晰,同时变化较大,就比如说驱动开发,不同行业背景的要求不同、人才偏向不同导致招聘要求相当多,我从来没见过这么麻烦的用户,于是在我崩溃之前我决定好好思考为什么会产生这样的一个bad loop。在整个过程中我的“用户”不成熟,同时具有很强的功利性,同时我确定“用户”的时候也不够真诚,起码脱离了我自己所认可的工程师的“品行”,经过一系列的自问自答后我做了如下的一些确定:
我希望的是成为一名工程师
我希望在某一类专业中具有较好的专业素养
在以上基础下在考虑工作问题
因此,我的对象变成了做一个ARM(及类ARM)+LINUX(及类LINUX)方向的驱动开发工程师,这就是我所要解决的问题,也是我所面对的对象。
2.建立框架
全名是根据需求建立框架,要达到前面的标准,首先我需要选择一款ARM,并以此种结构作为了解以后相似结构的基准,针对LINUX也是一样的,于ARM来说,以后工作可能会遇到ARM的其他系列,也或者有DSP等等,系统方面可能还会遇到一些针对特定用户的类LINUX系统,又或者我们接触最多的Andriod,既然都是一脉相承,那核心不变也就是一些小的规则、一些处理问题的约定发生变化,相对来说并不会很难,因此以ARM+LINUX的某个内核作为基础,以此来学习这个行业、掌握一种处理问题的方法是可行的。
如果把ARM+LINUX确定了,那么就需要根据这个对象来建立我的框架,我们可以确定一条主线,在主线的基础上添加附件,我把主线确定为LINUX系统,在学习整个系统及移植的过程中,添加对ARM架构的学习,包括:建构相关硬件资源的原理及使用。
3.实施方法
一个LINUX系统我们可以将之分为u-boot、Kernel、Drivers三个部分,后面两个部分其实是一体的,作为一名工程师,我们的目的就是解决我们的问题,因此在一个大型工程中,我们不能面面俱到,我们需要其他人的帮助,那么这个时候就确立了两条基准:1.学习(学习方法、笔记、书籍资料、官方说明)、2.委托,所谓的委托就是我们在解决一些大问题时往往不用完全理解事情的处理细节,只要该种方法能够合理的达到我要的技术标准那么我就直接使用,比如我要使用手机打电话,那么我并不需要知道手机是如何打电话的,这一部分我留给硬件方面的人才,但是这也不是绝对的,当我们涉及到一些委托的部分出现问题时就需要深挖了,而如何判断哪些需要深挖哪些需要委托呢,这个完全就是经验了,要么是一个技术骨干告诉你这里可以不用考虑,是全球通用的,要么就是自己的经验之谈了,总而言之,对付一个大工程,我们需要简化他,但是所委托的部分我们必须知道给了他什么,他做了什么,达到了怎样的结果,这样就够了,人力有限,不管是谁都需要有自知之明。
前面委托说的很清楚了,委托其实也算是一种学习,只不过始终宏观学习,而学习这一步,就尽可能多的去了解了,在学习搜集资料的过程中,我们基本按照如下方法,1.他是谁?2.来自哪里?3.将要做什么?4.怎么做,只有深刻的了解了对象的各种形式的特征,我们才能更好地操作他,把握他的变化,采取应对措施。
最后还需要添加一点,关于笔记的,我们未来需要处理很多的对象,使用很多相关的芯片、架构、系统,那么针对不同的特征尽量有个笔记记录,人的记性毕竟有限,而记录的标准我们可以既定为:有价值、花费自己一定时间才思考出的。
4.优化
我们假定在第三部就完成我们的目标了(当然,实际会还有一些过程),任何一件事如果认真做,一直做,都会做到“得心应手”,那么这个时候我们可以考虑进一步的升华,也就是优化,比如编写的大型程序,我们可以优化代码段,调整局部实现思想,根据对结果的分析,不断的做这些是,我想一个合格的工程师总是为此感到骄傲的。
-
工程师
+关注
关注
59文章
1570浏览量
68517
发布评论请先 登录
相关推荐
评论