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

随着越来越多的企业和组织依赖数字产品和软件,对有能力的软件工程师的需求在许多行业中变得越来越重要。继续阅读以了解有关成为软件工程师所需的所有基本技能的更多信息。

编程除了精通高等数学和统计学外,软件工程师还需要跟上各种不断发展的语言、工具包、平台和体系结构。技术文档和开源技术都可以帮助软件工程师掌握与其工作相关的内容。

以下是一些最流行的语言和工具。它们共同构成了所有软件工程师所需的基本硬技能。

软件工程师使用的几个基本程序

所有软件工程师都需要精通以下一种或多种编程语言。

Java:作为另一种通用编程语言,Java作为面向对象的基础语言和软件工程师需要掌握的最重要技能之一已有近两年的时间。Java因其在安全性方面的优势而特别受软件工程师的信赖。同样与平台无关,Java为软件工程师提供了一种可靠、安全且设计友好的语言,几乎可以在任何地方找到工作。

SQL:现在已有30多年历史,SQL是最广泛使用的数据库语言之一。软件工程师通常不负责维护或组织数据库,但他们确实需要了解如何导航数据库,以便他们可以构建与数据库对话的程序。

Ruby:Ruby最初于2011年开发,是另一种面向对象的语言,软件工程师利用它来高速构建Web应用程序。通常,Ruby与Ruby on Rails框架搭配使用。同样是开源的,Ruby还利用自动内存管理(或“垃圾收集”)来支持多种编程范式或功能。

软件工程师应熟练使用以下操作工具和平台。

云平台:随着技术继续转向大数据,软件工程师继续在AWS(亚马逊网络服务)和GCP(谷歌云平台)等云平台上磨练自己的技能。云平台允许公司和产品扩展,并要求软件工程师具有使用云原生应用程序的经验。促进数据科学、人工智能或机器学习优势的产品或平台都利用云平台。

容器:容器允许软件工程师针对多个操作系统进行优化。容器将工程师开发的软件捆绑成可以与各种不同操作系统交互的虚拟包。精通Docker或Kubernetes是软件工程领域越来越受欢迎的技能。

版本控制工具(Github):当软件工程师编写代码时,他们会将其存储在一个称为“源代码控制”的平台中。如果软件工程师团队都在为同一个产品或应用程序编写代码,版本控制工具允许他们在不干扰彼此工作的情况下进行协作。Github非常流行,是软件工程初学者最好的版本控制工具。

软件工程师的重要软技能

软件工程师的技术技能并不是软件工程所需的唯一技能。各种人际交往能力对于软件工程师来说也是必不可少的。由于软件开发人员通常在团队中工作,因此了解如何在这些团队中运作以及如何与同行沟通对于成功的工程师取得成果至关重要。

这里有一些软件工程师必备的软技能。

协作和沟通:程序化通常看起来很孤立,但实际上,情况恰恰相反。软件工程师通常会在开发冲刺期间交流进度、在项目上进行协作并管理其他人。任何协作或沟通问题都可能威胁到可交付成果或截止日期。

多任务处理:掌握多任务处理能力是成为软件工程师所需的最基本技能之一。软件工程师在截止日期驱动的冲刺中工作,通常让他们同时处理多个项目。软件工程师了解优先级排序和时间管理的基础知识,以便他们能够通过多任务处理走向成功。

冲刺项目管理:虽然通常由产品经理或项目经理管理,但软件工程师必须学习冲刺计划的操作框架。通常,软件工程师的工作是通过带有截止日期的冲刺计划分配给他们的。了解如何在项目管理氛围(例如敏捷)中工作是软件工程师需要掌握的一项关键技能。

以上就是动力节点小编介绍的"软件开发工程师要学些什么?掌握哪些基本必要技能",希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为您服务。     

}

本文最初发表在 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

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

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

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

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

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

}

我要回帖

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

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信