软件工程职位描述中缺少的部分?
一位优秀的软件工程师是一位富有创造力的问题解决者
全球大约有1,820万软件开发人员 ,到2019年,这个数字有望增长到2,640万。要从这个人才库中寻找一名好的工程师并不容易,尤其是当我们没有适当的指标时。 在访谈中,我们最终会询问有关线程池,算法,难题和系统设计的问题,而且很少有两次访谈能得出相同的结果。 那么,软件工程师职位描述中缺少的部分是什么?
我觉得有一个误解,认为软件工程师的职责只是编写代码:您流失的卡越多,您就越好。 有时,这与您学习和记忆算法的能力有关。 如果守门员的工作是停止进球,谁是更好的守门员,谁阻挡了50个进球却输掉了球队,还是谁停止了3个进球又赢得了球队?
优秀的软件工程师可以解决客户的问题。 他或她通过与人们合作并提供可靠且可维护的软件来做到这一点。
我指的是任何试图解决软件问题的客户。 当我问一些开发人员为什么要使用卡或功能时,他们说:“我的经理/产品/客户要求我进行此工作,”或“我必须学习机器学习。” 由于开发人员(而不是客户)构建软件,因此构建的是工程师的理解。 您如何解决不了解的问题?
因此,第一不可协商的质量是为客户提供协作式问题解决方案 。 这并不意味着您仅提供所需的内容。 下面是一个示例:客户可能会假设为100,000个用户使用的软件将为1000万人无缝地使用。 我相信要了解甚至50%的客户需求并不是一件容易的事。 协作更多是关于质疑和消除假设并很好地理解问题。 最终,它可以为客户提供创造性的解决方案 。
客户受时间和成本的限制。 因此,下一个重要的事情是设定期望值 。 当有人告诉我他或她超出了期望时,我会向他们进行钻探,以检查他们是否对期望有所了解。
当您无法理解期望时,您如何超出期望?
期望会随着时间而改变。 首先,您应该豁达接受变更。 然后,保持正确的通信 。 交流不是要召开更多或更长的会议,也不是在谈论行话。 为了使客户和团队保持一致,这是一种持续的努力。 它的舒适性问题的假设,NO说的东西,无法传递, 主动召唤出的东西,得到延迟,大胆地说,你不知道 , 寻求帮助 , 给予和接受反馈 ,推背功能,为客户不会有用,创建一个安全的讨论场所,注意细节并提出问题以做出明智的决定 。
您不断交付 ,获取反馈并不断改进 。 随着时间的流逝,任何项目的复杂性都会增加。 保留了较旧的服务并添加了新功能,从而使软件在生产中的可预测性降低。 使用高峰,软件腐烂,旧许可证到期,而新许可证需要升级。 发生生产事件,尤其是在计划的个人时间内。 您拥有问题并在管理交流的同时解决了问题 。
使事情保持简单是最困难的,尤其是随着时间的推移。
您拥有的服务相对较容易调试,并且更容易修复,而不会破坏其他系统。 因此,优秀的工程师努力降低复杂性 ,重构现有代码并编写可维护的软件 。 所有这些都是在管理新功能交付压力的同时完成的。 您采用好的做法来交付可靠且易于维护的软件。
好奇心是关键 。 如果人们说他们对技术充满热情,我会询问他们的学习情况,并且基于答案,我知道他们是否充满激情。 不断的学习和实验有助于做出正确的决策并构建更好的软件。 此外, 谦虚地表现自己的能力有助于协作和权衡取舍 。
随着时间的流逝,系统变得越来越复杂,很少有人能完全理解它。 您可以通过组建团队和共享知识来减轻负担。 而且,您喜欢与很棒的人一起工作,因为尽管有他们的经验,但您还是要向他们学习。 您负责建立团队。 好的工程师花时间在招聘上 。 在招聘期间,您花时间了解一个人的优点和缺点。 自定义新团队成员的入职时,了解现有系统和团队动态将有所帮助。
仅编写任何人都不会使用的代码,您如何才能成为一名优秀的工程师? 完美是进步的敌人。 就像30分钟的锻炼和均衡的饮食可以使您的健康看起来简单,但这并不罕见,优秀的软件工程师并不常见。
至少,一名优秀的工程师可以共同理解问题并使用技术来提供创造性的,可维护的解决方案。
From: https://hackernoon.com/the-missing-part-of-the-software-engineering-job-description-d905725db84d