成功的软件工程师所需要具备的技能

作者:

日期:2023-12-07

成功的软件工程师所需要具备的技能

profile-avatar
万物云联网2023-12-07 23:29

题记

从表面上看,软件行业看起来非常引人注目:许多国家对该行业中的职位需求旺盛没有失业,薪资优渥,同时总是有成长的空间,经常涉及出差,并且可以选择在办公室里甚至是在自己家里的沙发上工作,启动个人创业的条件要求也不高。 那么为什么不是每个人都致力于软件开发?

事实是,虽然这个领域看起来很有趣,但进入并不那么容易。在现实世界时,软件行业不仅很难进入,而且令人恐惧和不受欢迎。

找到第一份软件开发人员的工作也可能具有挑战性; 大多数寻找入门级工程师的公司要求他们要么具有一些最新框架和技术的经验,要么了解许多高级概念,例如设计模式、软件开发最佳实践和版本控制。 然后他们会提出一些模糊的要求,例如拥有出色的“人际交往能力”或了解其他 IT 相关领域的知识。

优质的学习资源中心cloudioe:关注我们,持久地阅读学习,投资您自己、提升您的能力和格局,改变您的生活!

公司对软件工程师技能的常见要求

软件工程师的技能要求

我们根据互联网上的多个样本编制了以下初级软件开发人员职位技能要求列表:

  • 相关领域的学士学位以及至少一年类似职位的经验
  • 具有安全软件开发知识
  • 具有与软件设计、开发、修改和部署相关的中级技能,包括面向对象编程的技 能
  • 其他 IT 相关领域的知识
  • 具有软件存储库技能证明
  • 具有有效沟通和人际交往能力
  • 有上进心,独立工作
  • 具有解决问题能力
  • C#、ASP.NET MVC、SQL Server、TypeScript 和 React.js 的中级技能
  • 具有使用 Git 和 GitHub 的经验

看到这份名单,想进入这个行业的人怎能不感到害怕呢? 任何看到该职位发布的人都会认为他们至少需要两年以上的经验才能被HR认真对待。

但是如果你只是正在寻找第一份软件开发工作的新人,你怎样才能获得经验?

这些问题可能是任何想要开始职业生涯的新软件开发人员都会遇到的问题。 但问题是:这些问题很正常。 你并没有意识到自己适不适合成为一名软件开发人员——你只是在经历初级开发人员的经历。

从基础知识开始:作为一名软件开发人员,你到底需要什么? 互联网上有很多噪音,在谷歌上问这个问题可以找到很多不同的文章。 每个人都有自己的看法,大多数人倾向于关注功能技能——这些技能是你在考虑申请软件开发工作之前需要学习的。 根据资深软件开发人员的经验,它们不是最相关的技能,也不是最重要的技能。 如果有必要的话,你会通过其它的生活阅历来掌握这些经验。 优秀开发人员(即使是一生中从未工作过的开发人员)真正重要的品质不是技术性的。

成为一名成功的软件工程师所不需要的条件

软件工程师的技能要求

1.成功的软件工程师并不一定需要计算机科学学士学位或相关学位

从本质上讲计算机科学学士学位或相关学位是要接受四年或更长时间的正规教育。而这种教育只是形式化了许多基本的编程概念。现在的情况完全不同了; 任何想要学习如何编码的人都可以利用世界上的知识。 这并不夸张; 有免费的在线资源,其中包含从零到成为一名优秀的编程人员所需的一切知识。 你也可以选择网站的付费课程,这些课程的费用比大学学位低很多,并且可以让您访问虚拟教室、问答环节与老师联系,并与遇到与您相同问题的其他学生联系。

这些资源中的任何一个都可以为您提供开始编码所需的实用知识,虽然许多人确实重视在简历中提及大学学位,但许多公司却不太关注这一点。 诚然,这在某些国家可能不那么真实,但软件工程师的职业确实是一个非常国际化的职业,因为他们可以为世界任何地方的公司工作。 当这种情况开始发生时,大学学位的价值就会随着时间的推移而开始减少。

2.成功的软件工程师并不一定需要了解软件开发的生命周期

一个典型的软件项目必须经历一个开发生命周期:

1).您首先需要进行需求分析,以准确了解您需要做什么。

2).然后,您继续规划您的项目,以了解何时需要做这些事情以及需要多少时间。

3).设计项目架构排在第三位。 一旦您知道“什么”和“何时”,您就必须开始思考“如何”,架构将为您提供蓝图。

4).然后才能开始编写代码。 这是大多数开发人员倾向于关注的步骤,但正如您所看到的,这不是您通常要做的第一件事。

5).接下来测试您的代码和产品。 在进行下一步之前,必须确定上一步是否产生了正确的输出。

6).部署产品是最后一步。 此时您将其提供给用户,以便他们可以开始测试它并向您提供反馈。

因为这是一个循环,所以你可以从第 6 步获取反馈并重新开始,但你明白了。

如果您以前从未参与过软件项目,则您无需应用其中的大部分概念,这完全没问题。 你不需要了解任何这些知识就能获得第一份工作。 是的,这些步骤将成为您任务的一部分,您每天都会应用这些知识。 但将其变成初级开发人员角色的入门级要求就像要求代理外科医生领导他们的第一次手术一样。 最终他们将能够做到这一点,并且他们可能已经读过相关内容,但你不希望他们在第一天就这样做。 对于作为开发人员的你来说也是如此。 不应该期望您在第一天就理解所有这些步骤的真正含义——无论如何您都不会负责执行这些步骤。 你会了解它,因为你将成为这个过程的一部分。

软件工程师的技能要求

3.成功的软件工程师并不一定需要数学、物理或类似的学位

很多大学在软件工程系的学生学习编码的同时教授他们微积分和代数。 这是一个错误吗? 从长远来看,没有,但它对你获得第一份开发人员的工作没有任何帮助。

数学、物理或其他科学不会帮助你理解编程。 其中一些要求您理解抽象概念(例如无穷大或数字 pi),当您需要为要编写的算法创建心理模型时,这可能是一个很好的实践。 然而,你不会在第一份编程地工作中解决困难的数学问题或实现困难的物理模拟,即使你碰巧发现自己陷入这样的难题,你也很有可能会使用别人的代码库。

那么,在跳槽到计算机科学领域或者初级程序开发人员角色之前,你应该去获得数学学位吗? 其实一点都不需要。 最终,您可能会发现编程和这些其他科学之间的共享概念(例如许多编程语言中的集合的概率),或者您可能会发现自己在代码中实现了其他领域的概念(例如在平台游戏上实现了重力的概念),但是在开始编码之前,都不需要这方面完整的学位。

注意初级数据科学家的角色可能要求您拥有数学或科学学位。 该要求不是为了理解如何编码,而是为了教会你如何对您要解决的问题进行建模。

4.成功的软件工程师并不一定需要进行技能认证

对自己的编程能力进行认证固然很有吸引力,因为它们具有“不像正规教育那么长但仍然有用”的氛围。 它们确实有其优点,但它们并不是软件开发人员获得工作的硬性要求。

在你的软件初级开发人员简历中列出你所通过的认证表明你关心你的学习和提高你的技能。 这确实是一件好事,但这不是一个要求。 您不会找到要求通过特定认证的初级开发人员的职位列表。 相反,他们将寻找有关一组技术的知识,而通过在线课程或者参加训练营更容易实现这一点。

我在这里想说的是,如果您必须在投资通过认证或者参加在线课程之间做出选择,请选择后者。 在开始缩小某个特定主题的知识范围之前,先接受更广泛的教育。

软件工程师的技能要求

5.成功的软件工程师并不一定需要适应在快节奏的环境中工作

您可以在许多职位列表和基本软件开发技能集中找到此要求。 但“快节奏”在这里到底意味着什么? 它几乎可以意味着任何事情,但此处假设这意味着你必须对在一个变化很大的行业工作感兴趣,即技术、工作方法、项目重点,甚至项目本身都发生了变化。

这听起来可能很可怕,尤其是对于那些还没有工作的人来说。 但可以确认的是你可能是一名软件开发人员,但仍然讨厌“快节奏”的环境。 并不是每个人都喜欢改变技术,甚至改变项目。 你也不必这样做。

诚然,初创公司通常都是这样工作的,因为他们必须这样做。 他们通常需要快速成长并适应变化。 承包商也是这样工作的。 有些公司会雇佣你在项目期间成为某人团队的一员,完成后,你就会转向下一个客户。 如果您发现这些场景很有趣,请继续申请。 您很可能会喜欢在那里的工作。

但还有其他公司——那些多年来一直致力于其产品的公司——往往拥有更稳定的环境。 事实上,最好的例子就是银行。 他们拥有来自众多客户的大量数据,因此对他们的技术堆栈进行更改非常困难。请记住,仅仅因为我们行业的某个部分“快节奏”并不意味着您需要喜欢这种工作氛围或者正在寻找这种氛围。

6.成功的软件工程师并不一定需要经验

向软件初级开发人员寻求经验不仅违反直觉,而且简直是愚蠢的。当你看到一份招聘具有不同技术经验的初级开发人员的职位列表时的感觉: 您正在阅读职位要求清单,试图找到一份工作,以便获得经验。 这是先有蛋还是先有鸡的问题。

此处的建议是你可以忽略职位列表中的这一部分。 毕竟这没有任何意义。 如果您对其他一些要求感到满意或者您觉得可以快速掌握它们,那么请勇敢申请该职位。如果您正在申请这份工作并且担心经验部分,您可以展示您所拥有的经验类型:

  • 如果您已经完成了某种在线课程的学习,您可以在简历中列出。
  • 如果您在某个地方(在 GitHub 或其他地方)发布了一个或多个个人项目,您肯定会想在简历中列出它。
  • 如果您曾作为志愿者参与过与 IT 相关的工作,请在简历中列出。

成为一名成功的软件工程师的有用技能

软件工程师的技能要求

1.耐心

没有什么比花三个小时调试一段代码,只是为了找出问题是中间某个地方缺少逗号更能说明“我是一名软件开发人员”了。 你会经历很多次这样的事情,但这并不表示你“资历浅”或缺乏经验。 即使在软件开发经历过这么多年的今天,许多资深软件工程师还是会时不时地经历同样的过程。

理解别人的代码需要时间和精力; 研究如何解决问题需要时间和精力; 编写代码并使其运行需要时间和精力。 对于开发人员来说,耐心不是一种美德,而是一种必须具备的品质。 从互联网上复制和粘贴代码只能成功一半。 其余的需要由您来完成,并且涉及大量的尝试和纠正错误。

2.恒心

与耐心相一致的是恒心——你必须明白软件开发这不是一个容易的职业。设定正确的期望是避免旅途中发生不好的事情时灰心丧气的关键。

事实上,软件开发职业将充满障碍,一旦解决一个障碍,问题有可能就会变成十个。 你会遇到需要几个月才能解决的错误,而每一种情况都会成为你放弃的理由。许多软件工程师都会时不时地想退出编程。,搬到偏僻的地方,远离科技,在沙漠里种植西红柿的想法吸引了这个行业的许多开发者。 这是软件开发行业出现问题的迹象吗? 虽然不是,但这证明软件的职业有时会令人沮丧。

这就是为什么恒心是开发人员必须具备的技能,并且可以随着时间的推移而增强。 在你面临挑战的情况之前,很难知道你是否有足够的决心,但如果你已经是一个有决心的人——一个知道第一次尝试就不会放弃的人——你会做得很好,因为 一名开发商。

3.永恒的学生心态

对每个新软件开发人员提出的一项硬性要求是,他们应该终生学习,或者至少对学习的想法持开放态度。 虽然您确实不必喜欢快节奏的工作环境,但软件行业始终在变化。 有时它前进,有时它倒退,如果你不密切关注这些变化,你就会被抛弃。你应该接受这样一个想法:你现在使用的工具和你现在知道的事情并不总是常态。 如果你不接受这一点,你会发现自己在两年内无法在职业生涯中前进。

科技推动科技前进; 就是这么简单。 您今天使用的工具将与明天使用的工具不同。 新技术的发展将开辟新的研究领域、新的数据处理方式以及与用户交互的新方式,当这种情况发生时,开发工具将必须适应。 如果你不适应它们,你就会被抛弃。

软件工程师的技能要求

4.接受批评并从中学习

编程不是一个单独的职业。 即使您正在考虑成为自由职业者,您也必须以一种或另一种方式与其他开发人员互动。 这种互动的一部分是通过反馈发生的。

例如,代码审查是软件开发中非常常见的做法。 它通过让一组开发人员审查其他人编写的代码来确保代码质量。 如果您从未经历过,这可能听起来很奇怪,但如果双方正确执行,这对双方来说都是一次成长的经历:

在审查端,阅读代码的开发人员团队需要了解他们的工作是通过发现逻辑问题、缺失遗漏甚至一些错误来改进代码的。

在接收端,您需要了解他们给您的反馈不是针对个人的。 为这种审查展示你的代码感觉就像一场噩梦,你意识到你已经在课堂上,赤身裸体,在所有人面前,但为时已晚。 但请相信,代码审查人将他们多年的经验供您使用。 接受他们的反馈,确保你理解了他们为什么给出反馈,你会学到很多东西。

在其他情况下,反馈也会发挥作用。 有时您会期待它,例如性能评估,而有时则不会,例如当您的开源项目报告问题时。 如果你不愿意从中学习,那么要在负面反馈中幸存下来,尤其是在意料之外负面反馈的情况下,可能会很困难。

负面反馈中总蕴含着智慧; 你只需要忽略它周围的负面涂层,直接切入核心信息和从中吸取的教训。 您应该将其余的视为噪音。

5.懂得如何沟通

这是一个困难的问题,因为开发人员(即使是经验丰富的开发人员)中一个非常普遍的问题是他们不知道如何与人进行良好的沟通。 有时,我们过于专注于学习如何为机器编写逻辑代码,以至于我们的软技能容易消失。 机器不需要我们写出雄辩的句子,它们并不真正关心同义词或隐喻和比喻演讲的使用。 他们需要清晰、不容置疑的逻辑。 然而,作为开发人员,您还需要与人类合作,与机器不同,人类更喜欢所有这些带有情绪的表达方式。

当您需要向同事寻求帮助并解释您遇到的问题时,或者当您必须解决别人的问题时,您需要从“机器可理解的语法”切换到“人类可理解的表述”设置 。 这就是为什么在申请第一份工作之前具备沟通技巧会让你比其他处于你这种情况的人更有优势。 当你的面试官发现你能够有效地沟通时,你就已经成功了一半。

如何培养这项技能? 一种方法是通过写作,尤其是学习如何更加雄辩地写作。 你可以说你开始寻找人类友好的方式来解释概念,知道如何与他人进行良好的沟通是一项重要的技能。

举例:一个开发面向健康服务应用的初创公司对软件工程师的技能要求

一个开发面向健康服务应用的初创公司对软件工程师的技能要求

该公司的软件开发团队的资格开发小组的人物是构建一个框架,用于根据身份、访问和风险控制来评估客户在APP应用程序上执行操作的资格。 其目标是提供一种自助方式来配置自定义资格标准,并轻松集成来检查相应的标准。 作为资格小嘴的服务器工程师,您的贡献将影响公司的系统决定是否允许数百万客户访问他们所需的健康服务的质量,并减少App扩展到新市场的开销。 作为平台的所有者,与其他开发团队的协作并解决歧义至关重要。

作为该公司健康资格小组的高级软件工程师,您将:

  • 设计、构建和支持用于管理App 资格的核心系统
  • 帮助定义和实施扩展路线图
  • 构建和设计一个可扩展、安全且优雅的资格平台
  • 大规模创造性地解决具有挑战性的技术问题
  • 良好的好奇心并喜欢为复杂问题构建创造性的解决方案
  • 在需要数据一致性和可用性的系统上工作
  • 对之前的项目采取了技术主动行动
  • 具有在跨职能团队中协作工作的经验
  • 计算机科学学士学位或同等经验

该初创公司所使用和教授的技术:

  • Java、Kotlin、Armeria
  • HTTP、JSON、gRPC 和协议缓冲区
  • 开放策略代理/Rego
  • MySQL、DynamoDB
  • 亚马逊网络服务
  • 事件驱动架构

该初创企业是一个成长型企业,公司的成长确实帮助人们实现了许多他们认为在其他地方无法实现的职业目标,或者至少在未来 10 年内无法实现,因为对于大多数人来说,成长和发展是一个渐进的过程!该公司正在寻找愿意犯错误、愿意学习、愿意教导他人的人。

《成功的软件工程师的技能》的内容简介

《成功的软件工程师的技能(Skills of a Successful Software Engineer)》

本书提供从独立编码员成长为软件开发团队高效成员的技能,从重构到面试的各个方面的经验丰富的建议。

在《成功软件工程师的技能》一书中,您将能学到:

  • 在软件开发团队中取得成功所需的技能
  • 编写可维护代码的最佳实践
  • 测试和注释代码以供其他人阅读和使用
  • 重构不是你写的代码
  • 技术面试过程中可以期待什么
  • 如何成为技术领导者
  • 绕过技术社区的把关

《成功软件工程师的技能》是软件开发团队取得成功的最佳实践指南。 这本书揭示了如何优化你的代码和你的职业生涯,从实现良好的工作与生活平衡到编写专业人士提供的无错误代码。 您将掌握作为独立编码员可能没有学到的基本技能,包括有意义的代码注释、单元测试以及使用重构来加速功能交付。 关于在面试中取得好成绩和为自己奠定领导地位的永恒建议将在您的整个职业生涯中为您提供帮助。 打开这本独一无二的指南,您很快就会以软件经理期望的专业方式工作。

作为一名成功的软件工程师需要技术知识、灵活性和毅力。 知道如何与其他开发人员有效地合作可能是令人满意的职业生涯和陷入令人窒息的陈规的区别。 这本精彩的书将指导您掌握在软件工程团队中生存和发展所需的基本技能。《成功软件工程师的技能》介绍了协作处理软件项目的技术。 在其中,您将培养技术技能,例如编写简单的代码、有效的测试和重构,这些对于在团队中创建软件至关重要。 您还将探索软技能,例如如何保持最新知识、与团队领导互动,甚至如何找到自己喜欢的工作。

本书的内容包括:

  • 编写和记录可维护代码的最佳实践
  • 测试和重构不是您编写的代码
  • 技术面试中会发生什么
  • 如何在开发团队中茁壮成长

本书适合正在工作和有抱负的软件工程师阅读。