《CU访谈录——IT技术人的故事》(第十八期 诺基亚西门子软件架构师“李云”)

2021-11-12 00:00:00 软件 开发 学习 嵌入式 无风

社区ID:杭州李云

擅长领域:专注于嵌入式系统开发、软件平台与框架设计和UML建模。



无风之谷:
    hi李兄你好,欢迎参加我们的CU访谈录的采访,首先给CU的网友打声招呼,简单介绍下自己吧。

李云:
      首先,很高兴通过ChinaUnix这条途径与大家交流,也感谢ChinaUnix提供这个平台。
      在我大学毕业后前2年,是在一家电力设备厂从事电气和电子开发方面的工作,这与我大学所学的电气自动化相关专业完全对口。由于期间对软件开发很感兴趣,所以是完全从无到有自学软件开发。从1999年次跳槽进入软件行业至今,我在软件行业已有12年的工作经历了。近6年我就职于摩托罗拉杭州研发中心,目前担任软件架构师一职(注:虽然其间“被跳槽”了两次,一次是2011年4月卖给诺基亚西门子网络技术有限公司,近一次则卖给NewNet,但公司的文化、工作方法与流程却一直沿用Motorola的)。
     我早在2000年开始从事嵌入式软件开发工作,涉及的内容主要包括:操作系统内核、文件系统和IP协议栈的移植,IDE硬盘、以太网芯片和PCI总线等外设的驱动开发。熟悉x86、PowerPC、XScale处理器,以及TI DSP的5000和6400系列。源码级熟悉uC/OS、RTEMS和VxWorks实时操作系统的实现,并在这些操作系统和Linux操作系统上有着丰富的软件开发经验。

无风之谷:
嵌入式开发一直是非常火爆的技术领域,这里有很多网友比较关心的问题。
学习嵌入式开发的的开发板是否一定要买?是否有比较好的硬件模拟器? 

李云:
      我认为嵌入式软件开发的学习是一个循序渐进的过程,可以先从软件方面着手打好基础,之后再涉及硬件,这也是一种比较经济的方式。学习软件知识还是相对容易的,因为只要有一台电脑就行了,而学习硬件就不一样了,不光成本高,且知识面也更广。我建议在购买开发板之前,可以将《数字电路原理》、《单片机原理》这类书好好学习一下。与软件学习很不相同的是,对于硬件的理解和掌握更抽象一点,因为晶体管什么的都集成在芯片之内,让人看不到,只能通过理解原理的方式去掌握。不象软件,有的功能不清楚可以查看一下源代码,甚至调试调试。
     对于开发板的购买问题,其实有很多人问过我,也希望我推荐一款。我认为市面上的开发板更适合作二次产品开发,它不是真正初学者所需的“学习板”。在我看来,学习板所需满足的条件有:
     1)板子硬件质量过关。不至于让我们在学习过程中碰到难以理解的硬件不稳定问题。由于学习的特殊性,我相信市面上的大多数板子能满足这一要求。
     2)价格相对要低。对于初学者来说,不少是刚毕业的大学生,低学习成本是很重要的一个考虑因素。有的板子动则上千元,这决对不是学习板!
     3)学习资料要全面、易懂和深入。虽然市面上的学习板都配备有学习资料,但是,这些资料还离全面、易懂和深入有很大的差距。现有的绝大多数开发板买来以后,我们即使照着资料实践一遍,会发现还是有很多内容不懂,学习效果很有限。之所以造成这种局面,是因为提供开发板的厂家其目的并不是为了让我们获得好的学习效果。
     基于我对于“学习板”的定义,我认为现在市面上的开发板并不适合推荐给大家。作为一个选择建议,我认为选择开发板时不要一味地求其功能有多少,相反,应当少而精。
硬件模拟器与具体的处理器是相关的,比如ARM方面就有很好的模拟器。这些模拟器对于软件开发是很有用的,但对于学习就不一定适合。如果想在硬件学习上取得突破,必须真实地与硬件打交道。

无风之谷:
交叉编译环境的搭建需要注意的问题?

李云: 
      我个人在这方面曾碰到过一些问题,那时是使用RTEMS开源实时操作系统。所碰到的交叉编译环境搭建问题都是由RTEMS的binutils工具集不稳定造成的,相信现在很多人不会碰到这类问题。如果是使用商用的操作系统或中间平台产品就更不会碰到这类问题了。总体说来,我认为环境搭建在现实工作中不会有突出的问题。

无风之谷:
嵌入式软件在开发过程中跟基于PC的通用软件开发有什么需要注意的地方? 

李云:
      可开发性问题是嵌入式系统开发需要注意的一个点。所谓的可开发性是指,因为开发方法的低效,使得开发效率上不去。传统的嵌入式开发需要在PC主机上编译好程序,然后传送到目标机(嵌入式系统)上运行与调试,这种方式还是比较低效的。
      克服可开发性问题需要我们考虑将一些开发工作从一味依赖嵌入式设备转移到PC机上,通过在PC机上使用象Visual Studio这样高效的开发工具来实施开发工作。要做到这一步,就得运用到跨平台的软件开发技术。
      质量保证的难度更大是嵌入式软件开发需要注意的另一个点。由于嵌入式软件的资源有限,加上很多用的是实时操作系统,因此那些在PC机上能运行的质量保证工具(如动态分析和性能分析等工具)在嵌入式设备中就不再可用。这使得我们失去了一些质量保证方法。为了缓解这一问题,同样需要用到平台开发技术。在我的《专业嵌入式软件开发 — 全面走向高质高效编程》一书中更全面和细致地讲解了平台开发和可开发性设计。

无风之谷:
嵌入式软件开发远程调试的问题

李云:
      大多情形下,嵌入式软件的开发会使用JTAG这样的调试器进行非远程调试,通常JTAG调试器会比较贵,因而难以做到工程师人手一个。为此,有的实时操作系统支持象使用gdb server这样的的远程调试手段。
      不过总的说来,远程调试还是不太方便,也存在一定的调试场景限制。正因如此,造成在很多嵌入式软件开发中,工程师还使用printf()函数这种通过打印的方式进行调试,很显然这是非常低效的。对于大型项目,好能通过设计解决这类调试低效问题。比如,运用前面提到的可开发性设计。

无风之谷:
嵌入式优化时注意什么?

李云:
      无论是做嵌入式软件开发也好,或是做非嵌入式软件开发也好,我认为优化不是我们首先要关注的,取而代之的是软件设计。设计的重要性应引起软件行业的广泛关注。程序的性能应建立在工程师的职业素养上,比如我们清楚地知道函数后面的行为,和它可能带来的副作用。这是保证程序高效的基本条件。另外,合适的算法也很重要。这同样有赖于我们的职业素养。
      优化时机的选择很重要,我建议优化是在我们的确看到瓶颈以后再进行。为此,好在软件的开发过程中部署性能分析工具,并在日常工作中使用它检测新引入的源代码是否存在性能问题。
      嵌入式软件开发的优化不少与硬件资源是相关的,因此需要对处理器、乃至整个系统的硬件资源有很好的了解。比如熟悉Cache的功能和控制、了解片内外内存的性能差异,等等。优化内容视具体情况有很大的差异。比如,有的可能需要通过锁定Cache提高查找表的查找效率,有的可能需要调整代码的驻留位置提高程序的执行效率。

无风之谷:
从入职到职业发展网友一直有很多困惑,李兄又是如何看待以下问题的呢
从职业发展的角度上你是如何看待这个领域的? 

李云:
      首先,这个领域的门槛相对高,是一个软硬件结合很紧密的职业。这一方面说明要进入这个领域会比较困难,另一方面说明一旦进入这个领域后我们在软件行业的职场竞争力会更强一点。现在的嵌入式产品在生活中运用得越来越广泛,相信所需的开发工程师的数量也会更大,这意味着嵌入式领域前景还是不错的。有过嵌入式软件开发经验后,我相信能从事的工作范围会更广。
      需要注意,嵌入式开发它只是一个软件领域,它应立足于行业(比如通讯、交通等)。也就是说,在掌握嵌入式软件开发技术的同时,我们其实还得熟悉相关的行业。另外,与嵌入式软件开发所需掌握的知识相比,软件设计和开发方法论在整个软件行业都很薄弱,在嵌入式领域也不例外。

无风之谷:
要做好这项工作,作为一个刚毕业的学生,应该做好哪些准备?

李云:
      从心态方面,对于刚毕业的学生,由于没有多少工作经验,所以走向工作岗位一开始会面临不小的困难,这一点无论是进入嵌入式领域或非嵌入式领域都要做好充分的心理准备。当然,毕业生不需要过于担心这方面。一是,老手能理解新手的状况;二是,我们的能力是在克服困难中成长的,所以反而应积极面对。
      从知识方面,我认为毕业生可以复习C编程语言、单片机原理、数字电路原理等方面知识。在这些方面如有扎实的基本功,将有助于自己在新岗位上的发展。
      总体说来,我觉得软件工程师的成长速度还是比较快的,二、三年静下心来坚持钻研一个领域就可能成为那个领域的专家。毕业生在以后的道路上要注意结合自己的兴趣,并以积极主动的态度去处理自己的工作与生活。

无风之谷:
在您面试嵌入式这个职位的时候,您看重的是应聘者什么能力?

李云:
       首先,我很关注应聘者的兴趣。因为我坚信兴趣是好的老师。有兴趣的人更能静下心来钻研所碰到的问题,其技术成长性也就更好。
       其次,我也很在意应聘者是否具有积积极主动的工作态度。具有这种品质的人在职场中很受欢迎,也更容易获得成长机会。
       再次,我会重视应聘者是否有良好的学习习惯。在面试的过程中我一定会问他近读了什么书、对书中的内容有什么看法这类问题。
       当然,对于有工作经验的人,专业技能也是考察重点。大体上,我将工程师分为三大层,从低到高分别是技术知识积累层(参加工作5、6年及以内)、掌握设计方法层(参加工作8、9年及以内)和运用方法论层(参加工作10年及以上)。对于这三层的工程师我会根据应聘者的工作年份看他应处于哪一层,评估他是否达到该达到的层级,并依此选择与之交谈的话题。交谈过程中会问他做过哪些项目,找一个做过的项目要他细讲,并在过程中提一些问题看他的思考和反应能力。
      后,我会在面试过程中考察应聘者的沟通能力、思维是否清晰等。这种考察很主观,主要是根据自己的感觉和经验。

《专业嵌入式软件开发 — 全面走向高质高效编程》究竟是一本什么样的宝典

无风之谷:
听说李兄的新书已经开卖了,非常想知道的是,这本书究竟是一本什么样的宝典,面向的读者是哪些?

李云:
      总的说来,这本书试图从知识、工具、方法和思想四大方面讲解如何专业从事嵌入式软件开发。其全面、易读和深入性在同类书中相信具有优势。
IT行业的快节奏使得我们需要不停地学习新知识。然而,要真正高质高效工作需要的不只是知识,更要运用工具、借助方法和形成自己的思想,总而言之需要的是“智慧”。有些工程师整天学习各种新技术,但工作与生活质量却并没有随之“水涨船高”。造成这种现象的原因,一方面是因为没有在学习上“聚焦”,另一方面是因为学到的只是知识,没有形成自己的智慧。要形成自己的智慧,除了在学习内容上进行聚焦和坚持,还得通过实践不断地运用工具、掌握方法和形成自己的思想。
      这本书是我根据自己十多年的工作经验,将嵌入式软件开发所需掌握的知识精选后浓缩而成的。希望通过它分享所获得的浅薄智慧,让更多的IT同仁通过高质高效工作过上更好的生活。它不仅可被新手用作入门书籍,也对老手具有参考和借鉴价值。
在创作该书期间,我曾经想更改书的名称,因为这本书的内容不只适用于嵌入式软件开发工程师,还适合那些以C和C++为编程语言的工程师。由于担心名字取得太宽泛而不利于读者选书,所以放弃了这一想法。在此一提,是希望这本书能帮助范围更广的工程师们。

无风之谷:
目前市场上的类似书籍也有不少,不知道李兄是打算如何从这些书籍中胜出呢?或者说此书的优势是哪些呢?

李云:
      每本书都有作者写作的出发点,都或多或少会体现作者的真知灼见。因此,著书是一个百家争鸣、百花齐放的知识共享平台。如果真要用竞争的眼光看一本书的水准,我认为重点是作者能力和经历的比拼。
      在前面个人介绍中提到,我是通过自学进入软件行业的,学习嵌入式软件开发也不例外。在2000年互联网资讯还不是很发达的年代,我的自学经历了很大的痛苦。那时的书不光没有现在多、质量不如现在好,而且计算机的书也特别的贵。我记得当时花钱买一本300多页的书,其中真正对我有帮助的也就50来页。这些经历使得我完全理解嵌入式软件开发工程师的痛苦,也让我明白写书是一件非常严谨的事情,以及坚信所写的每页应言之有物。
      另外,前面也提到了,光掌握技术知识其实不足以让我们高质高效地工作,还得掌握工具和方法,并形成自己的思想。实现高质高效软件开发是一个系统工程,掌握知识只是这一系统工程中的一部分。在这本书中设置了设计篇,其中阐述了“设计是软件质量之本”,并探究了“质量是什么”,还介绍了几种好设计的具体实现和我的一些常用设计原则;另外,还设置了质量保证篇帮助读者实施质量,并提出质量保证需要方法论,和打造方法论应使用“单元测试为中心”、“要素有形化”和“无缝整合”这些思想。这些内容在同类书中相信具有不同的高度。
      此外,为了帮助提高读者的学习效果,我在操作系统篇中以渐进式的方式讲解了为该书量身定制的可在Cygwin环境和Linux操作系统上运行的ClearRTOS“实时”操作系统。通过为读者打造一个可以方面更改代码和调试的环境以提高学习效果,这在同类书中也同样少见。
     当然,这些都是我个人“黄婆卖瓜”的观点,书是否真的好、是否真的“胜出”是由读者决定的。  

相关文章