优秀软件工程师的能力要素有哪些?

开发工程师是当今社会的热门职业,各大IT企业和非IT企业,都有不同程度的软件工程师的需求。特别是在信息化速度加快的今天,软件开发工程师更是成为了一个高薪的岗位。

那么,如何成为一名优秀的软件开发工程师?想要胜任这一高薪职业,我们应该具备什么样的素质呢?

根据调查,想要成为一名优秀的软件开发工程师,就必须具备以下能力:

作为一个驱动工程师,很多时候不是完全从头开发一个完整的子系统,而是针对特定硬件和平台移植驱动,增加功....

计算机开发工作,是一种以年轻为资本的工作,说句通俗点的话是“吃青春饭的”,嗯,这句话好像在一种特别的....

我的生活实践 现在是一名算法工程师,在矛盾和老干妈有矛盾的公司使用,年薪甚至超过50万! 但是工作了....

单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等,这些都离不开单片机....

硬件测试所需的5个流程(硬件开发工程师也应该掌握)

徐工,软件开发工程师,从事汽车传感器的测试测量工作,利用LabVIEW开发上位机测量软件,在数据采集....

嵌入式系统说白了就是硬件和软件相结合,嵌入到整机里使整机实现智能化的一个系统。

全栈工程师是他们最细化的工程师,同时也是价值最大的,

近几年随着互联网移动端的快速发展,移动开发已经是必不可少的了。由于国内iOS开发起步相对较晚,人才培....

随着智能硬件的发展,大家对智能生活的追求,越来越多的童鞋开始学习并从事嵌入式相关知识,那么如何才能成....

在具体谈论Java知识点之前,我想先跟同学们聊聊Java 语言自身的一些特点、生态系统以及适用的场景....

科技的发展产生了程序员这个职位,从这些年各大互联网公司曝光的一些员工收入水平来看,程序员的工资还是相....

Java工程师如何赢在起跑线?晋升路线是什么?对于一个刚入门的Java人员来说了解职位晋升路线可以帮....

嵌入式硬件开发工程师需要学会的基础技能:

在CM工作了6年11个月,见证了公司发展壮大的历程,自己也从一名初级Android工程师成长为一名高....

今天讨论的问题可能会引起很多争议,但我还是坚持做有争议的敢说真话的人

8 月份开始到现在,进行了一个多月的实习,岗位是 Java Web 后端开发。这过程学到的知识着实比....

在学习Java编程完之后,学员们面临的就是就业问题。作为一名Java开发工程师,企业在招聘的时候,也....

作为测试工程师,在日常工作中接触最多的当然是团队中的开发工程师,如何和开发工程师进行有效的交流是测试....

感谢伟大的Web2.0概念、产品概念、用户体验概念、jQuery插件,是它们在中国日渐成熟才解放了一....

估算解决问题所需要的时间。不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小....

技术不同,简单的可以理解为:初级中级的只关注代码,编程。高级的就要考虑系统的架构,整体框架。

轻量级,同样起web 服务,比apache 占用更少的内存及资源 ,抗并发,nginx 处理请求是异....

如今,“Java”作为所有编程语言中最热门的技术,也是第一编程语言,可以说它几乎无处不在。目前全球有....

不请自来。做电赛出身的程序猿一名,目前从事嵌入式Linux驱动开发。还有单片机从51到意法Ti都做过....

先给前台开发工程师的工作下个一句话定义:运用前端技术,实现体验的良好传达。如果在前面加上 Web,那....

Java已经存在很长时间了,当你使用不同的软件模式,请确保你清楚你的代码如何影响生产。请考虑的更全面....

随着互联网的迅猛发展和普及,一个新型的行业和新兴的职位正在上升到技术的层面:web前端开发

对于一个Java开发来说,编程技能毋庸置疑是很重要的。

软件开发过程中最艰巨的任务是什么?达内软件开发部的工程师们发现他们大部分人认为在软件开发过程中最艰巨....

互联网相关产品开发,项目开发,系统维护等

随着测试在软件开发周期中越来越受到重视,国内测试的缺口一直比较大,各种软件和互联网公司都大肆招收测试....

如果选择了这条路,您可能会称自己为前端开发人员。您将学习如何使用Web技术(即HTML,CSS和Ja....

参与系统的需求调研和需求分析,详设概设,撰写相关技术文档;

HTML5开发不同于网页设计,是网页设计的深化,更关注于网站如何交互和浏览。web前端开发人员使用的....

互联网日新月异,各种应用程序如雨后春笋般冒了出来。生活节奏的加快,大众的消费意识,也发生了很大的转变....

对于那些想改变自己的朋友们来说,还是需要看清楚一些东西,有一些经验也想和大家分享。同样是职场人士,我....

架构师是程序员的职业生涯发展的一个方向,很多架构师都是从开发人员逐步过渡来的,程序员想要成为架构师,....

如果你是一位专业的iOS开发工程师,你应该为自己感到自豪。因为你能在强大的iOS系统下,一展身手实现....

从最初不会编程到能够完成具体的的业务实现,再到独立负责一个项目迭代,觉得还是有进步的。但是入行3年,....

Python 是一种面向对象的解释型计算机程序设计语言,在设计中注重代码的可读性,同时也是一种功能强....

目前,企业对于html5前端开发人才需求量非常大,小到企业网站、个人主页,大到政府部门,都是通过网站....

作为一名专业开发人员,你的工作不仅仅是阅读需求说明书和编写软件代码。你还应该知道项目在现实中是如何使....

在我的代码旅程和编程经历中,已经遭遇很多奇特的对手,还有更为奇特的盟友。我至少发现有5种代码勇士,有....

干了将近7年的软件开发,我开发实现了很多有趣的东西。最近,我开始投身销售,研究营销技术——为了我的新....

我在Twitter和Stripe这两家公司工作期间会负责一些前端开发者的面试。在面试过程中我们有很大....

当你运营着一个成长中的咨询公司,会做很多招聘工作。我们主要招聘Hadoop。我们寻找的是一些具有基本....

我是一名新手项目经理,转项目管理岗1年半。在做管理之前,我是一名开发。也就是说,我是最常见的技术转管....

Web前端开发工程师是一个很新的职业,在国内乃至国际上真正开始受到重视的时间不超过7年。Web前端开....

随着电子科技的发展,科学的广泛应用,各行各业都在不断的推广自动化办公软件,一方面是为了节省更多的人力资源,另一方面是为了更高效的管理,为公司赢得更高的利润。
软件开发工程师?首先是对操作系统的认知
大家都是知道,不管什么应用软件,都必须依靠一个操作系统,只有在一个操作系统上,它才能很好的运行;我们常用的操作系统最多的当数微软的windows操作系统了,最近微软推出的是win8操作系统;由于是刚刚推出,它还不能被用户所接受,目前大多用户还在用win7和windows xp操作系统。所以,我们应该掌握在win7和windows xp操作系统下进行软件开发的技巧。如果你对操作系统的认知不够全面,那么,你所开发出来的软件兼容性一定会有问题,对操作系统的认知是对一个软件开发人员最低的要求。
其次是对开发语言的掌握
软件开发,通俗的说就是写程序,就是把一串一串的命令组合起来,让它来替我们完成某种特定的任务。如果你从事的是java软件开发,那么你重点必须精通java语言,你要懂得java的特性,java语言的语法,java语言的算法等等;你也要懂C/C++方面的知识,一个好的软件开发工程师必须要熟练掌握两种以上的开发语言。如果你想从事 .Net软件开发,那么你还得懂得C#和VB语言;如果你基本的开发语言都不熟悉,更不用说能开发出好的软件了。、第三是对开发工具的使用俗话说:磨刀不误砍柴工,要想开发出一个好的软件,对开发工具的熟练应用是非常重要的,它可以让你事半功倍;java软件开发常用的开发工具有:开源的Eclipse和收费的MyEclipse,.Net软件开发工具有:微软的VisualStudio,Pascal软件开发工具:Delphi。
第四是对TCP/IP网络协议的了解
有了TCP/IP网络协议,使网络得到了飞速的发展;从早期的C/S结构的运行模式到现在主流的B/S结构的完美转变,TCP/IP协议是功不可没的,未来更是离不开TCP/IP协议;要想成为一名优秀的软件开发工程师,特别是手机软件开发工程师,你不仅仅要知道ISO有哪几层组成,你更要知道,每层的功能和作用。
第五是对数据库的熟练应用
数据库对软件的影响是不容小视的,因为我们做的工作都是心数据为中心,重点部分就是操作数据,如果没有数据库,那么软件的作用也就会大大降低;目前常用的都是关系型数据库,主流的有:甲骨文公司的Oracle、微软公司的sqlserver、IBM公司的DB2,还有一些小的数据库,如mysql,Access等;我们一定要熟练掌握SQL语言,它是操作数据库的关键。
第六是对软件工程的了解
》中每个阶段所要用的技术,如客户需求,市场调查,可行性分析,需求分析,详细设计,最后的软件测试等等,这些都是你应该了解并掌握的,如果你要是不懂软件工程,那么你要补习一下喽;在软件开发公司,这一些是相当重要的。
第七是要有勇于探索,勇于创新的精神
一个优秀的程序员,不能总是原地不动,不去思考,要多去想一想为什么要这样做,如果不这样做会产生什么样的后果;要努力学习新的知识,因为软件行业是一个更新速度非常快的行业,如果你的知识2年都没有更新的话,那么,你在这个软件开发行业的前景就不容乐观了;每天都要抽出一定的时间学习新知识,只有这样,才能走的更好,更远,更稳。
一起讨论,里面也有一部分关于java软件开发、.net软件开发和delphi软件开发的知识,共同学习。

下载百度知道APP,抢鲜体验

使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。

本文最初发表在 Medium 博客上,经原作者 Hugo Rocha 授权,InfoQ 中文站翻译并分享。

这种尴尬和紧张的关系,一方面是在完成赫拉克勒斯(Hercules,希腊神话最伟大的半神英雄,男性的杰出典范,伟大的赫拉克勒斯后裔祖先)的 12 项“不可能完成的”任务后成为英雄,另一方面是在马戏团训练过的动物毫无意义地连续跳呼啦圈,我们轻描谈写地称之为求职面试。我们都讨厌面试,然而,面试却是我们职业生活中无法回避的事实。

当我第一次天真地、冒险地进入软件工程面试这一令人不舒服的、不友好的世界时,没过多久,我就觉得我在 2~3 个小时内判断软件工程师的能力就像法医一样精准。

然而,我总是想知道坐在另一边的人是什么样的人,需要什么才能知道一个工程师是否适合这个角色。在过去的几年里,我进行了 100 多次软件工程技术面试,尽管每家公司都有自己独特的面试流程,但还是有一些人们容易犯的常见错误。下面是我关于如何避免犯下这些错误的忠告。

对于优秀的软件工程师,并没有唯一的定义。它关系到公司对角色的需要以及公司的多样性和成熟度。一家刚刚起步的初创公司无疑需要很短的上市时间,而如果一家成熟的公司已经拥有庞大的客户群,那么有可能会面临规模和架构方面带来的挑战。在理解对业务有何意义的同时,构建产品与解决复杂的技术难题是不同的。细致的完美主义工程师不同于快速迭代的工程师。你需要了解公司想要的是什么,然后将你的行为和言论框定在这种思维中。不要去写一份适合所有人的简历,而是要根据实际情况改写简历。如果你不得不推销自我(以某种方式,你总是要以正式的或其他方式进行推销),你要用一种你将如何成为特定公司的资产的方式进行推销。你应该理解这个角色所要满足的需求,并扪心自问,这个角色是否能够激励你,如果确实如此,那么就接受它吧。你应该弄清楚“优秀”的定义在公司的背景下是什么样子的,并表明你的知识、经验和态度是如何符合这个定义的。

在对公司一无所知的情况下参加面试,就像约会只谈论自己一样,这并不意味着不会有第二次约会,但也不会给人留下好印象。要努力去了解企业,它的目标、它的使命、战略和成果。我绝不会因为一个人对此一无所知而让他失望,但这也暗示了他的动机。同时,这也是 HR 倾向于评估的标准。除了企业目标之外,如果他们有技术博客的话,一定要查看他们的博客,并了解他们的技术栈。应聘者通常不会对公司表现出应有的兴趣,但一旦他们表现出来,这就是脱颖而出的绝佳方式。

在我的职业生涯中,我遇见过很多杰出的技术专家,他们都是各种各样的人。尽管如此,他们至少都有一个共同点:都是那些挑战现状,使流程和技术都得到改进的人。很多求职者在被问到是否有问题提问时,却没有什么可补充的。回避提问就是在浪费机会,要抓住这个机会,询问公司的技术决策和他们面临的挑战,并讨论每种技术的利弊。

  • 他们是否正在考虑迁移到 HTTP/3?
  • 他们是否正在转向事件驱动的微服务架构?
  • 他们使用什么类型的消息代理?为什么不用 Kafka 来代替 RabbitMQ?
  • 他们使用什么样的数据库技术?用例是什么?在这个用例中,ElasticSearch 是 SQL 很好的替代方案吗?

诸如此类。对技术决策的质疑将会表明,你不仅了解这些技术,并且可以争论何时应该使用它们,而且你还可以进行批判性的思考,并最终关心如何改进你所使用的任何应用程序。

Einstein,犹太裔理论物理学家,创立了现代物理学的两大支柱之一的相对论。)

当前技术面试状态的忘恩负义和直截了当的不公平现象令人震惊。大多数过程都涉及到解决与计算机科学基础相关的某种问题,比如图搜索或排序算法。我发现一件轶事,求职者必须用最少的资源占用实现一个树遍历算法,这样当他得到这份工作时,首先要做的调试是一个十年前的庞然大物。作为一名应聘者和面试官,我觉得这种自命不凡的企图美化我们工作的复杂性令人沮丧。这些类型的挑战很可能会让那些头脑中没有这些新概念的高级开发人员不屑一顾,即使他们在这个角色中可能有非常丰富的经验。

我同意这些类型的练习并非完全无用;快速解决小问题的能力与解决复杂问题的能力有关,这些复杂问题需要几天的时间才能解决,但它们从根本上是不同的。面试过程应该尽可能地反映日常工作的实际情况。一些过程包括在真实应用程序上寻找和修补 Bug、结对编程,或者实现自动化测试,我觉得这些都比深奥的算法问题要充分得多。对于这种类型的情况,一定要适应公司的语言选择,不要害怕提问,这样你才能了解挑战的全貌。

不过,对大多数过程来说,你都会面临某种算法或数据结构的问题,除非你具备良好的计算机科学基础知识,否则无法绕过这些问题。像《程序员面试金典》(Cracking the coding interview)这本书、Leetcode 网站、Pramp 网站等这样的资源都是很好的参考资料。

不管怎样,一定要大声解释你的理由。通常,问题是相互叠加的,如果你在其中一个问题失败了,也没有关系,只要你能解决其余的问题。如果你陷入困境,面试官会帮助你的,关键是要看到应聘者能不能从一个不太为人所知的问题中恢复过来,并在其他方面做得很好,这才是至关重要的。另外,当你遇到困难时,经验丰富的面试官可能会从提问转变为教学,所以不要将这种转变解读为失败;环境的变化有助于疏通大多数人的障碍。

记住,面试官既是来帮助你的,也是来评价你的,而不是评判你。你要把面试官看成一个在问题上指导你的老同事。一定要跟他讨论各种解决方案和折衷方案;这将显示出你对这一问题的了解程度。

我曾经遇到过一名这样的求职者,他在面试中表现得特别不自信,没有把握的样子。尽管他缺乏安全感,也很怀疑自己,但由于他做得很好,所以他还是被录用了。但是,在安顿下来后,在日常工作中,他信心十足,能够领导讨论,并在技术课题上指导团队。后来有一次,我问他为什么在面试的时候他看上去如此不自信。他跟我解释说,在那次面试之前,他经历了一连串惨败的面试,当时他还不能很好地应对面试被拒绝的情况。遭到拒绝是求职过程的一部分,你不能让它影响到你。

要在几个小时内评估与软件工程师相关的每一项能力是不可能的。每个过程都会为公司选择相关的流程,并尽可能以最好的方式对其进行评估。这些可以是你所擅长的,也可以不是。糟糕的招聘对公司来说很难,特别是在士气方面来说,他们加入的团队更是如此。他们也付出了巨大的代价。再加上许多公司没有一个标准化的流程(重点是比较候选人,因此每个面试官都应该处理相同的问题,而且应该有一个明确的流程,对每个面试官都是一样的),这样你就会留下相当比例的错误否定。在面试中表现糟糕并意味着你就是糟糕的人。而意味着你所表现出来的能力在那个特定时间里并不是那个过程中最好的。

我知道,当我失败了,看到或听到类似这样的东西时,我总觉得那都是胡说八道。我一生都在努力成为一名斗士。然而,有时候我也会输掉太多的战斗。总是输的斗士只不过是一个出气筒。但是有时候,你必须找到内心的力量,才能将自己从屈服的残骸中拉出来。站起来,举起你的手,再战斗一次,不要让失败影响到你。

你的工作将会占据你人生中的一大部分,同时能够让你真正满意的只有做你认为是好的工作,而且要想做伟大的工作只有你喜欢你所做的工作。如果你还没有找到,继续寻找。不要安定下来。事实上,当你找到你心中就会知道。并且,就像任何好的关系也会随着一年一年地过去而变得越来越好。所以要一直寻找直到你找到。不要安定下来。(Your work is going to fill a

当我们在日常生活中的困惑和混乱中前行时,我们渴望那些清晰的时刻,当我们在挑战或任务中迷失自己时,时间会弯曲,现实会消失。在那些超越的时刻,你的一生都会在你不经意间流逝。这就是编程对于我和我们中的许多人来说的意义。那就是刻在我们内心深处的永恒而坚定的激情。而同样的激情也是成功的秘诀。

我看到应聘者在我们的面试过程中表现出色,但他们在应聘职位上表现一般。他们并不差,才华横溢,知识渊博,但他们只是表现平平。有时候,你擅长那些你并不真正关心的事情,但正是这种激情会驱使你走向成功。要评价一名软件工程师的热情并不容易。但是,如果我问你有什么副业项目,或者你曾经做过的最好的项目是什么,你可能会在整个下午热切地讨论几个项目。不管它是一个坐拥数百万用户的平台,还是一个几乎不起作用的副业项目,都无关紧要。一个充满激情的程序员会满怀热情地描述他应用的每一种模式、他征服的每一个挑战,甚至每一次破解和失败。这样,任何面试官都会知道,坐在他桌子对面的那个家伙跟他一样,也是一个对编码充满无限热情的程序员同事。

这是一个非常真实的反应,你几乎可以从他们的眼神和肢体语言中看出。要么你对它充满热情,要么你对它一点热情都没有。如果你有激情的话,一定要谈论那些能打动你的项目,这可能是一次普通面试和一次优秀面试之间的区别。

我一直觉得,作为一名应聘者,压力最大的部分是知道我需要得到这份工作,并证明自己是足够优秀的。而面试官的角色也并非完全没有压力,他们需要确保有充分的理由批准或否决某人,这样做出来的结果经得起审查,就我的情况而言,总是如此,尤其是凭良心。

大多数面试官都会不得不在某些时候接受面试,所以他们很有可能是有同情心的。我希望我这篇文章能够帮助你从另一个角度看待问题,我真诚希望,我的建议能够帮你谋得你真正想要的工作。

我要回帖

更多关于 软件工程师所具备的知识和能力 的文章

 

随机推荐