成为软件工程师所具备的技能和证书是什么?

2024-11-19 20:10:48
推荐回答(1个)
回答1:

若要成为一个好的软件工程师,需要的技能可以参考以下:
如果是想参加培训或详细了解,可以百度下“长沙东塘实力”进网站了解

1、技术是核心,必须的,是王,然而只懂技术是万万不能的。还需要具有相当的soft skills。我把技术类和soft skills类中所包含的,任何一个工程师应当具备的几点归纳一下,并对于这些技能的重要程度做点评估。如下:

技术类

A、计算机体系结构基础:这是最基本的,但只需要对其有个总体的概念。如果一个软件工程师对计算机体系结构没有概念,那他就不是一个合格的工程师。对于硬件体系结构设计师,或者是OS内核及设备驱动工程师,那么需要更加深入的研究。
B、操作系统原理基础:OS原理可以帮助engineer更好地理解程序设计的含义。很多应用软件都借鉴了OS的思想。可以说理解OS原理能帮助engineer设计出更好的软件,或者其中的component。当然,对于OS内核及设备驱动工程师来说,需要更加深入的研究。
C、数据结构与算法基础:掌握一定的知识能够使工程师对于自己要解决的问题产生影响,并促使他们设计实现出更加高效、优美的程序。同样,对于应用程序开发者来说,根据问题领域的不同,所需要的掌握程度有差别。加/解密、图像处理、视频/音频处理对于算法的要求高一些。
D、汇编语言基础:现在汇编语言在程序设计中的比例越来越少,然而这并不能影响其地位。一个严肃的工程师应当了解一些汇编语言的知识。驱动、OS内核开发对于汇编要求高一些。而某些时候视频/音频、图像处理对于汇编要求也很高。
E、C语言:不了解汇编?没关系,能够理解C就行,毕竟它比较贴近汇编语言——虽然是高级语言。任何一个严肃的工程师都应当了解C,并能使用其基本的功能集合设计程序。
F、能够在至少一种OS平台上开发应用程序:程序不能独立于操作环境而存在。虽然我们致力于开发portable程序,但至少应当对一种平台的特性比较了解。
软件工程知识:不懂工程知识还算的上工程师吗?比如软件开发过程。
G、OO知识:必备。不必详述。
H、设计模式:不一定要知道所有模式,但至少要知道程序设计的原则:对接口编程。还要清楚使用他们的目的是什么,不能为了模式而模式。
I、流行的文档工具的使用:熟练使用文档工具能够让你更好地向大家表达自己的观点,并将其记录在案以供查证。
J、IDE的使用:不是必须的。但掌握了一种IDE能够提高一些效率。
K、tool chain的使用:相信大多数Linux平台的工程师都会至少一种:gcc + make + binutils。

L、CM工具的使用:如clearcase,或者cvs。不仅要会使用,还要清楚使用他们的目的是什么。
正则表达式:很多时候工程师的日常工作包括处理大量的日志文件,等等。掌握正则表达式意味着效率的提高。
M、至少一种脚本语言:如perl、UNIX shell、python中某种等。日常工作中经常会用到的。
N、编译原理基础:无需多说。如果你连自己写的程序怎么从文本到可执行文件没有基本的概念,那就卖烤羊肉串去吧,比你当工程师有前途多了。
O、数学知识:无需太多太高级。但搞数学计算或算法研究等的工程师则需要高级的数学知识。

2、Soft skills

A、团队精神:无须强调。个人英雄主义的时代一去不复返了。团队合作才是生存之道。

B、沟通技巧:这包括最基本的——能够清晰地表达自己。任何人都不愿意和没有沟通技巧的人打交道。具有良好的沟通技巧的团队将会更高效。
C、抽象能力:如果不能从一个广义的、更高的层次来思考问题,那么你将永远停留在写代码阶段。
D、良好的文档能力:3和4其实也暗示了这一点。不必达到作家的水平,但应该能够熟练运用工作语言(比如母语),简明扼要并且清晰地表达问题。谁都不愿意看裹脚布式的文档。
E、分析解决问题的能力:与3有一定的关联。这就需要有大量的知识及足够的经验,这就得到了:
F、持续学习能力:不光要能学习新知识,还要能够善于总结经验教训。归纳起来,就是学习+总结。
G、谦虚谨慎:谁都不愿意与骄傲自大的人工作,不是吗?谦虚使人进步,不用我多说。
开放:乐于与人分享知识、和其他人沟通。不用担心你把知识分享给别人导致被别人超过或者替代。要记住:是你的特质(或者说个人魅力),而不是你所掌握的知识,使得你与别人不同。分享知识也能使你对知识的掌握更加牢固。
H、热爱生活:艺术源于生活,但高于生活。编程也是门艺术。
I、勤奋踏实:饭要一口一口吃,知识要一点一点学,工作要一项一项干。不要跟时髦,也不要看什么技术挣钱多就学什么——急功近利最要不得。搞软件跟搞学问一样。
J、善于偷懒:不是不做,而是要想方设法让计算机帮你做。
K、逻辑思维能力:这是任何一个人都应当具备的——软件工程师更应当具备较好的逻辑思维能力。
L、管理能力:就算不是领导,也需要——因为管理自己的工作、时间、知识库也是一种管理。
M、异想天开:创新源于此。
N、乐观:不要总抱怨别人差,别人的软件/文档差——没有人能够做到完美。
O、认真但不较真:认真对待每件事,每个决定。所有一切都是reasonable的。认真但不较真能够较好的将问题控制住,而不是陷入无休无止的讨论、扯皮。有时需要trade-off,但要有strong reason for trade-off。

逐项检查,看自己算不算一个合格的软件工程师。