第三次作业

一、如何让自己符合“职业”要求

在邹欣老师的著作《构建之法》一书的“工程师能力评估和发展”一书中,讲述了一个职业的软件工程师应该具备的自我修养,也详细地为我们阐明了一名软件工程师应该走的一条职业发展之路。看了这部分后,我感到受益良多,联想到自己所做的第二次课的作业和之前参加的一个比赛的经历,也对文中所说的很多地方十分赞同。作为一名将来可能要从事到软件开发中的学生来说,这本书在很多地方都对我也很好的启发和参考意义,下面我结合书中这一部分内容和我的经历谈一谈,我应该怎样让自己真正地达到“职业”的要求。

1.1 什么是真正的“职业”

所谓“职业”,就是以某一件事为自己终身的事业,最简单来说就是自己安生立命的根本,是一个神圣的词汇,绝不能敷衍对待。梁启超先生在《敬业与乐业》一文中说过“敬业乐业”四个字,是人类生活的不二法门。我尤为赞同这句话,对于自己所从事的职业,必须要有足够的敬畏,而且要足够的兴趣与热情,才能真正对得起“职业”二字。我国的高等院校在职业教育方面一直不够重视,甚至存在只重视科研而不重视培养学生的职业素养的问题,导致很多学生对自己未来将从事的职业缺少清晰而具体的规划,也缺乏真正做一名“职业XX工程师”所应具备的能力和素养。

1.2 “职业”软件工程师的标准

那么做一名软件工程师到底需要哪些必备的能力和素养呢?邹老师用NBA职业球员的各项能力评估来说明,无论什么职业,评判一个人是否真正做到了 “职业”,都是可以通过很多可以量化的数据进行评判的,比如职业球员的上场时间、命中率等等,对于一名软件工程师而言也有评判标准,即:知识,经验,设计思想、工程思想以及职业技能。

1.3 自身情况分析及职业规划

目前,在软件开发方面我还处于知识尚未完全积累充分,软件开发经验欠缺,设计思想、工程思想更是没有成型的阶段,在职业技能方面,我的表达和交流能力,与人合作能力还有所欠缺。因此对我而言,走向“职业”之路还任重而道远。因此在现阶段,我会以提高自己的知识基础和技术能力为主,找机会多投入于一些实际软件项目工作,在实践中提升自己的经验和能力。

首先是知识方面,一名职业的软件工程师需要打下哪些方面的知识基础呢,这里我结合科大讯飞公司(国内在语音识别、图像识别方面做的比较好的公司)在图像识别相关岗位的招聘要求,说明应该具备的知识基础和技术能力要求。

首先,在知识基础方面,需要具备数理统计、模式识别、图像处理等理论知识,目前我们实验室老师也给我推荐了几本书,《机器学习》(周志华)、《数字图像处理》(冈萨雷斯)、《模式分类》等,让我先行打好知识基础。我认为自己的计算机底子还有所欠缺,于是在自己的书单中加上了《数据结构》,同时,在认识到大一的数学基础的重要性后,我准备再去温习大一的《线性代数》和《概率论与数理统计》。数学功底是看的懂算法的基础,也是一切研究活动和工作的基础,把基础打牢再去谈之后的提高。

至于如何打好知识基础呢,首先在数学基础方面,在大一大二的几门数学考试中我考得都还不错,但自己心里其实明白,考试并没有真正地反映情况,在实际数学建模解决问题方面,我的能力还有所欠缺;在大一学习时,我对书上一些基本的理论推导也是处于一种一知半解状态,并不算真正地学懂了书本上的知识。所以在这一方面,我会加强实践性的学习,经常运用Matlab等工具进行数学建模, 并在温习之前课本的过程中,对重要的基础理论自己加以推导,而不能再满足于那种不求甚解的状态了!(回顾自己大一的时候学数学还像高中那样学,感到十分惭愧)。在看老师推荐的基本图像识别方面的基础知识理论书时,我同样也要做到不能只满足于理解书本知识,对书中的算法和理论还要自己多进行推导和编程实践,同时多去看一些相关的优秀论文,争取构建起自己的知识网络,只有这样,知识基础才能真正打牢。

在基本技能方面,需要有较好的C/C++/python编程能力、代码开发的经历、中英文学术调研能力以及从事研究项目的经历等等。首先在编程方面,虽然在大一学习了C++程序设计,也通过了计算机二级,但我认为自身的编码能力还处于一个较弱的水平,在上次的编程作业中,我也是在其他同学已经编好的情况下,看了别人的编程思路,才完成的,并未能做到完全独立自主编程。这源于自己之前实际做项目的经历少有很大关系,同样也和自己在学C++的过程中缺乏上机实践有关。目前,我也在重新学习C++,抛弃了之前用的谭浩强版本,而用《C++primer》,这本书更注重对编译原理的理解和编程实践,书的每一节都会有很多编程题目可以做。同时,在github上也有很多优秀的开源代码,在自己实践过程中,多去看看别人写的好的源码非常有助于自身代码风格的改善。在学习的过程中,还要积极主动地去找老师、同学交流讨论,交流编程思想,对自己的设计思想和工程思想水平的提高也很有帮助。

对于招聘要求中所提到的研究型项目的经历,我认为自己应该在打好以上知识基础、技术能力基础的前提下,积极地从事到实验室的科研项目中,努力跟上实验室老师、师兄们的步伐,扎实走好每一步路。

二、基于模型的设计流程的优缺点

2.1 什么是基于模型设计

《Managing Model-Based Design》电子书的第一章介绍了基于模型设计流程,提到:基于模型的设计是一种以模型为中心的方法,应用于开发控制、信号处理、通信等动态系统的发展中,用一种模型贯穿于始终,而非运用物理模型、文本规范等。该模型包括与系统相关的每个组件行为算法、控制逻辑、物理组件和知识产权(IP)。一旦模型被开发(详细阐述),它就变成了许多输出的来源,包括报告、C代码和HDL代码。基于模型的设计支持系统级和组件级的设计和仿真,自动代码生成,和持续测试验证。

基于模型的设计基于八个核心概念:

•可执行的规范

•系统级仿真

•假设分析

•模型精化

•虚拟样机

•持续的测试和验证

•自动化

•知识获取和管理

2.2 基于模型的设计在不同方面的优点

在《Managing Model-Based Design》这本书中,不同章节,从不同的方面介绍了基于模型的设计方法的作用,并运用了很多实际开发的案例,表现了基于模型的设计的优越性。
首先基于模型的设计可以支持几乎任何组织类型,而且它已经在许多不同的开发中成功地实现了工作流。如何实现它取决于大小、结构和工作组织文化,以及正在开发的系统以及目标市场的需求。可以选择采用基于模型的设计企业范围,改变整个开发的过程;也可以选择性地将其应用于一个特定的挑战,如工作流瓶颈,突然的变化设计要求,或增加系统复杂性。

其次基于模型的设计提供了一条简化许多方面的途径的发展,基于模型设计可以帮助:

•管理复杂的系统

•自动化耗时和容易出错的任务

•快速探索新的想法

•创造一种能促进交流的公共语言

•获取并保留知识产权

•提高产品质量

•降低风险

在实施精益开发方面,基于模型的设计是对精益开发需求的直接响应,它的8个核心概念是精益开发发展的原则

在改进开发方法方面,基于模型的设计可以帮助适应任何的发展方法来更好地满足当前的需求;可以帮助组织完成仪式要求不减缓开发的过程;还可以使开发方法在一个非常简单的形式下引入更多形式,而不降低其优越性。在chapter 4 Improving Development Methodologies with Model-Based Design中,介绍了waterfall,V-model,IID等模型,其中瀑布模型将开发分解为五个阶段:需求、设计、实现、验证和维护,每一步都必须在下一次开始前完成

对于V-model模型而言,V-model使用的步骤与瀑布基本相同,区别在于,它不是一条线形式进行的步骤,在实现(编码)阶段后向上弯曲,每个开发步骤都有一个相应的测试阶段

基于模型的设计在许多方面增强了瀑布方法、v型模型的方法

•自动化使处理一些变化变得更容易。

•系统级的仿真使管理复杂性变得更容易

•假设分析可以促进团队成员尝试创新快速而无风险地提出新想法。

•系统级建模和仿真使开发成为可能,整个系统在开始时即使在不知道关键元素情况下,也不会打断开发流程,因为这些元素可以稍后添加。

2.3 基于模型的设计的缺点

首先,基于模型设计的开发流程相比起其他的设计模式来说更为复杂。

其次,团队管理模型库需要较大的成本,也需要很多经历去维护,要考虑的因素很多,更难于理解,对于基础不够的团队来说难以做好这些。

原文地址:https://www.cnblogs.com/zss19951231/p/7641220.html