软件工程师的角色

评估软件工程师需要做的五件事。

作为在该领域拥有大约9年经验的软件工程师,我想根据我的个人经验来解释软件工程师的角色。

0.编码很难。

许多软件工程师可能只是认为他们唯一需要做的就是代码,但有趣的是,经过很多人一生的努力工作,他们终于通过了Big Company面试并进入公司。 ,那时他们通常只是一名入门级软件工程师。 这是最低限度的最低要求,事实证明,成为软件工程师不仅要简单地知道如何通过白板和面试问题,还需要在简历中包含一些项目,这还有很多。 实际上,这仅仅是个开始,我知道很多人可能会认为这是一个很高的标准,但实际上实际上更高。 人们仍然缺少许多技能,要使他们真正成为一名优秀的软件工程师,人们可能需要数年甚至数十年才能真正掌握其中的一些技能。
我要说的是,事实上,软件工程师将要评估五种不同的事物。

真正使软件工程师与众不同的五件事,如果可以的话,请掌握这五件事。

1-技术复杂性

假设您的目标是构建一个送餐应用程序。 大多数工程师要做的第一件事就是开始编写此应用程序的代码,然后您可以考虑一下这些应用程序的外观,UI的外观,后端的外观以及编程语言,考虑一下您将要构建的所有很酷的功能,很容易就可以开始构建它了,它很有趣,但这就是诱惑。 那就是大多数程序员都会尝试做的宝石,因为程序员通常天生就是解决问题的人。 如果我们看到一个难题,那就像是我们只需要进入游戏并尝试解决它的游戏,那就太有趣了。 它的优先级最高吗? 实际上有午餐的途径吗? 或者,您可能会发现还有很多其他问题需要解决。 例如,确定项目范围,截止日期是什么,您将如何获得市场份额? 您要跟踪哪种类型的指标? 您将如何找当地的兽医来推广您的服务? 各种各样的事情,所以我们可以这样说。 一方面只是编写代码,这很好。 那是最重要的,通常该任务将分配给一些初级软件工程师。 甚至可能是一些实习生,也可能是外包给某人或一家公司,但是如果这是您唯一可以做的事情,那么您就不会在这个行业中走得太远,因为公司实际上正在向软件工程师寻求更多的东西。 这部分称为技术复杂性,可能存在问题,可能需要某种算法,某些类和体系结构思想,并且不一定必须对您的解决方案进行过度设计或复杂化,实际上与解决方案的复杂性有关您要在此处解决的问题。 您想要做的是围绕它进行一些复杂而抽象的处理,并使它变得更易于使用和使用。

2-公司相关的复杂性

第二类复杂性与人有关,而这与您有关。 也许您在一家公司工作,并且产品的构建不是那么困难,但是困难的是要在许多不同人员之间跨多个跨职能团队工作并设法获得适当的批准。 与人交谈,与人交流,并确保所有人都参与其中。 有共识,但是人们可以一起解决这个问题。 很多时候,最困难的部分应该在代码中,而不一定是代码本身的构建,而是与许多不同的工程师之间的一致性有关,以达成共识,这就是应该构建代码的方式或功能的实现。您应该在许多不同的人之间,在许多不同的设计师,产品经理乃至更高层次的人们之间进行交流,只是为了让所有人都相信此功能应该以某种方式向前发展。 在原型中,这与在许多人之间进行有效的通信并以协作的方式进行通信有关,您可能会发现,通常这可能是软件工程师工作的很大一部分。 不仅仅是说,软件工程师坐在她/他的计算机上并输入代码。 您实际上需要运送产品。 也许教团队,导师团队,写出说明如何更快上船的文档。 所有这些事情可以使团队效率更高。 这将涉及人员组织复杂性部分。

3.歧义

实际上,存在第三种复杂性,这与歧义有关。 很多时候人们甚至都不知道要建造什么。 这个问题甚至不一定很清楚。 解决方案尚不明确,只是有一个主意。 也许这些想法已经坐了好几个月了,没有牵引力,也没有动静。 此功能可能很容易构建,但技术上并不复杂,也许也没有很多人阻止您使用该功能,但是尚不清楚如何启动它,要花多少钱,进行范围界定以及人们真的不知道这是什么样子,或者一个好的解决方案是什么样子。 只是不清楚。 这与模棱两可有关。 解决此问题的一种方法是构建原型,进行范围界定,进行一些项目研究,查看示例,编写文档,也许是演示,咖啡会议,介绍您的发现并推动该项目前进,并帮助制定路线图。为了它。 因此,有趣的是,许多我们在学校没有学到的东西。 您有组织上的复杂性和歧义性。 学校并没有真正教你这些东西。 他们并没有真正教您如何在许多不同的人群中进行协作,也没有教您如何解决模棱两可的问题。 通常,他们只是把您排除在问题之外,而您实际上不必与太多的人一起工作。

4.领导能力

另外,软件工程师还有第四件事要做,那就是领导才能。 什么是领导力? 我认为很多人会误会领导。 许多人认为这是通过告诉别人该做什么并强迫他们去做来控制别人。 假装您对所有这些事情都有信心。 因此,领导力真的是一回事。 它是关于主动性 。 有时很难采取主动性,因为这是要看我们的工作内容,并说这是不正确的,这里可以做很多事情,有很多方法可以使它变得更好。 它不喜欢坐在椅子上,等待人们为您分配工作,然后您就去做。 那样就不会很有效,因为人们常常不知道该怎么做。 如果您可以进行更多自我管理,那将是非常理想的。 主动性实际上是一种完成工作的态度。 您需要一个能够推动项目,推动其完成,推动其发展并提出所有正确的想法,正确的部分,召开会议,提案集,创建路线图,原型,设计以及将要完成的工作的人员。 我们在这里试图做的是确定一个痛点,问题和机会,并围绕此建立一个项目。 这样可以为每个参与的人创造机会和晋升,您可能会发现,一个好的领导者就是可以识别这些机会的人,每个人都想加入并尝试解决这些问题,但可能会为公司带来很多收益。

5.影响

影响确实与您驾驶的最终结果有关,这又是学校根本不会教您的。 学校会告诉您,您为努力付出了A effort。 在现实世界中,努力是一件好事,人们对此表示赞赏,但是您真正获得的收获却正在产生影响。 这可能涉及为公司创造收入,可能吸引更多用户,提高性能,但是这种结果与真正成为项目所有者有关。 同时了解与之相关的所有障碍。 放宽对这张图的所有关注,这就是我所说的“闪亮对象综合症”的意思,人们通常只是试图做项目中最有趣的部分。 实际上,项目的许多部分可能看起来并不那么有趣,看起来并不那么有趣,相反,它们相当乏味且无聊。 您知道只是清除了一系列障碍,与人交谈,消除了歧义,主动采取行动,最终推动了这种影响并达到了底线,从而带来了是否想要的指标。 我知道许多工程师只喜欢开始半熟的项目,而他们从来没有真正完成它们。 他们只是想学习一个新的框架,也许会安慰从Objective C到Swift的整个代码库。 很好,但是会带来什么影响。 它实际上并没有为那里的任何人做任何事情,但是很有趣。 从技术上讲,这是一个有趣的挑战,技术工程师也很有趣,但这是重要的,要时刻注意业务方面,好的软件工程师才能做到这一点。 您经常听到很多关于进入Big Company的工程师的信息,他们觉得他们没有充分利用。 没什么可做的,没有有趣的项目。 他们花了所有的时间在学校里,学习如何进行二进制搜索,并用对数时间中的最短路径进行遍历,然后发现实际上并没有真正可以遍历的二进制搜索树,人们对此感到失望。 他们觉得这项工作太聪明了,但实际上并非如此,因为技术部分(技术复杂性)实际上只是真正的软件工程师的一小部分。 实际上还有更多的事情需要别人去做。

包起来

我们通过技术,组织和歧义的不同类型的复杂性来获得复杂性。 然后我们有了领导或主动权,然后就产生了影响。 软件工程与执行有关。 这涉及到在这五个轴上的执行,因此,如果您坐在那里,感觉自己的技能没有得到充分利用,那么这只是其中一个轴,也许您应该在组织,歧义和技术复杂性之间进行导航,最重要的是关于领导力方面。 找到一个可以自己调用的项目,在代码库中找出他们公司中存在的问题,并有远见并将其推动到实际的影响。 这些是软件工程师的实际职责,并且常常很难想出一个真正好的主意。 很难弄清楚该跟谁说话。 编码的速度,知道的数据结构数量和算法的数量并不是真正的多。 实际上,这只是您实际工作的一小部分。