从嵌入式到桌面的可重用知识
在从事嵌入式电信系统开发(C、MAKE、Symbian、100 编译器等)大约 8 年之后,我正在考虑“稍微”改变我的道路,进入桌面开发(VC++、MFC、C# 等)。
然而,我担心的是,我在嵌入式系统方面的经验在进入桌面开发时可能并没有给我带来太多价值。 例如,我已经工作了很长时间的领域特定问题和环境仍然没有给我太多可以协商工资的机会,因为它在桌面上几乎没有什么价值。
我认为这个地方可能适合对此提出意见。
所以,问题:
如果您忽略编程语言级别上明显的通用经验,请举一个您在嵌入式系统中学到的东西的例子,您可以在桌面环境中重复使用这些东西。 PS
: 我应该指出,我不是桌面领域的初学者 - 因为很多年前我所有的爱好项目都集中在桌面开发上。
I'm thinking about switching my path "slightly" by going into desktop development (VC++, MFC, C#, etc) after about 8 years within embedded telecom systems development (C, MAKE, Symbian, 100 compilers etc, etc).
My concern however is that my experience within embedded systems maybe doesn't give me much value when going into desktop development. For example that the domain specific problems and environments I've worked with for so long still doesn't give me much to negotiate salaries with since it bares little worth on the desktop.
I think this place might be good for input on this.
So, the Q:
If you disregard the obvious generic experience on programming language level, give an example of something you have learned working with embedded systems that you could reuse when working in a desktop environment.
PS:
I should note that I'm no beginner in the desktop area - since many years back all my hobby projects are focused around desktop development.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
一般来说,嵌入式工程师在验证操作和处理有限资源时往往更加自律。
这也可以转化为尽早提出异常处理策略。
典型的示例是检查 malloc 的返回值。 我见过很少有桌面软件持续检查它,但它在嵌入式环境中很常见。
Embedded engineers in general tend to be more disciplined when it comes to validating operations and dealing with finite resources.
This can also translate into coming up with an exception handling strategy earlier on.
The quintessential example is checking the return value of malloc. I have seen very few desktop software consistently check it, but it's commonplace in embedded environments.
拥有一套干净、组织良好的源代码的纪律是很好地转化为“桌面体验”的关键技能。 -- 我注意到我编写和挑选的嵌入式项目通常比桌面项目干净得多。
Discipline of having a clean, well-organized set of source-code is the key skill that translates well to the "desktop experience". -- I've noticed that the embedded projects I've written and picked up are often WAY cleaner than their desktop counterparts.
许多只使用桌面的开发人员可以从制作适合 128K 闪存和 32K SRAM 的程序的经验中受益,更不用说仅通过一两个 LED 和几个按钮与用户进行有意义的通信了。 提出这一要求可能会减少应用程序行业中一些普遍存在的代码膨胀。 :-)
即使您不转向直接应用程序开发,嵌入式体验也可以很好地转化为驱动程序开发、低级实用程序和长期运行的服务。 所有这些领域中,对于成功的嵌入式开发人员来说几乎是第二天性的学科仍然很有价值。
Many desktop-only developers could benefit from the experience of making a program fit in 128K of FLASH and 32K of SRAM, not to mention communicating meaningfully with a user through only an LED or two and a couple of buttons. Making that a requirement might reduce some of the endemic code bloat in the applications industry. :-)
Even if you don't switch tracks to straight application development, the embedded experience translates well to driver development, as well as to low level utilities and to long running services. All of these are also domains where the disciplines that are nearly second-nature to a successful embedded developer remain valuable.
在切换到嵌入式环境之前,我担任了近 5 年的桌面开发人员。
我发现在嵌入式环境中工作更具挑战性,因为我们必须处理内存限制、CPU 速度慢、交叉编译问题等。
在学会了很多耐心、纪律和低级复杂性之后,桌面开发应该像下面一样简单在公园散步。
I was a desktop developer for almost 5yrs before switching to an embedded environment.
I find working on an embedded environment more challenging as we have to deal with memory limitations, slow CPU speed, cross-compilation issues, etc.
Having learned a lot of patience, discipline and low-level intricacies, desktop development should be as easy as a walk in the park.
嵌入式系统上的状态机/事件驱动编程与桌面上的事件驱动编程没有什么不同。 您对嵌入式系统(尤其是电信嵌入式系统)上的这些编码技术的丰富经验应该使您成为一名出色的桌面程序员。
同样,您对通信协议的体验应该可以很好地转移到桌面上。 大多数桌面应用程序都与网络有一定的关系。
State machines/event driven programming on embedded systems is not that different from event driven programming on the desktop. The depth of experience you have of these coding techniques on embedded systems, especially telecoms embedded systems, should make you a great desktop programmer.
Similarly, your experience with communications protocols should transfer nicely to the desktop. Most desktop applications have some involvement with the network.