如何成为一名有效的软件工程师

by Luis Santiago

路易斯·圣地亚哥(Luis Santiago)

如何成为一名有效的软件工程师 (How to become an effective software engineer)

When I first started my journey as a software engineer I quickly noticed the great amount of cognitive load involved when working on enterprise projects. There are many moving targets throughout the execution of a plan.

当我刚开始作为软件工程师的旅程时,我很快注意到从事企业项目时涉及大量的认知负担。 整个计划执行过程中有许多移动目标。

Clean code, tests, security, config files, performance, deployments, and many more variables commonly form part of the mental load required for successful completion of a project.

干净的代码,测试,安全性,配置文件,性能,部署以及许多其他变量通常构成成功完成项目所需的智力负荷的一部分。

I was contemplating a paradox I have seen many engineers face: trying to stay up to date with the latest trends in this ever-changing software industry while delivering great value to the company I work for.

我当时正在考虑一个我已经看到许多工程师面对的悖论:试图跟上这个瞬息万变的软件行业的最新趋势,同时为我工作的公司带来巨大的价值。

I was craving time outside Jira stories to dedicate effort to my growth.

我渴望在Jira故事以外的时间花些时间为自己的成长付出努力。

And then I started seeking tools that could help me add tremendous value to my organization, maintain growth, and become effective.

然后,我开始寻找可以帮助我为组织增加巨大价值,保持增长并变得有效的工具。

意识到什么很重要 (Awareness About What Matters)

My main source was mentorship from people in the technology industry. Especially, mentorship in book formats from authors like Gary Vaynerchuk, Cal Newport, and Edmund Lau.

我的主要资源来自技术行业的指导。 特别是,来自加里·维纳楚克(Gary Vaynerchuk),卡尔·纽波特(Cal Newport)和埃德蒙·刘(Edmund Lau)等作家的书籍形式的指导。

I identified a pattern in their advice. It was awareness — deeply understand what matters and execute towards that goal. The identification of clear goals gives us opportunities to measure them. Self-awareness allows us to recognize the things we do best and also see our weaknesses.

我在他们的建议中确定了一种模式。 这是意识-深刻理解重要的事情并执行该目标。 明确目标的确定为我们提供了衡量目标的机会。 自我意识使我们能够认识到自己最擅长的事情,也可以看到自己的弱点。

“Accept your shortcomings, and strive to become more conscious of who you really are.” — Gary Vaynerchuk
“接受自己的缺点,并努力使自己更加了解自己。” — Gary Vaynerchuk

杠杆作用 (Leverage)

In the book The Effective Engineer, Edmund Lau suggests leverage as a yardstick for effectiveness. Leverage is the return on investment for the effort that is put in. I see this as a generic definition of leverage. Combining Edmund Lau’s equation of leverage gives me a whole new perspective of its definition:

在《有效工程师》一书中,埃德蒙·刘(Edmund Lau)建议将杠杆作用作为提高效率的标准。 杠杆是投入的投资回报。我认为这是杠杆的一般定义。 结合Edmund Lau的杠杆方程式,为我提供了其定义的全新视角:

Looking at the equation above I make sense of the parameters that influence the outcome of leverage.

看上面的方程式,我理解了影响杠杆结果的参数。

Before I start developing code, I commonly have an idea of how the product implementation will produce impact to the business. Even after implementation, I can measure its true impact by tracking logs, usage, and adoption rate. This numerator, impact produced, is indirectly given to us.

在开始开发代码之前,我通常会了解产品实施将如何对业务产生影响。 即使在实施之后,我也可以通过跟踪日志,使用情况和采用率来衡量其真正的影响。 这种分子, 产生的影响是间接给我们的。

The denominator is the parameter we have the most trackability over. Time invested is the value we can measure, before, during, and after execution. Putting in effort to keep this parameter to a minimum yields a higher leverage. This means higher return on investment (ROI).

分母是我们可追踪性最高的参数。 投入的时间是我们可以在执行之前,之中和之后衡量的价值。 尽力将这个参数保持在最小值会产生更高的杠杆作用。 这意味着更高的投资回报率(ROI)。

In the case of software engineers, ROI could mean improving trust with business partners, higher rate of adoption, or reducing the time it takes to perform a certain task.

对于软件工程师而言,ROI可能意味着提高与业务伙伴的信任度,更高的采用率或减少执行特定任务所需的时间。

To achieve this, we have to get good at getting things done efficiently.

为此,我们必须善于高效地完成工作。

“Effective engineers are not the ones trying to get more things done by working more hours. They are the ones who get things done efficiently — and who focus their limited time on the tasks that produce the most value.” — Edmund Lau
“有效的工程师并不是试图通过工作更多的时间来完成更多工作的人。 他们是高效完成工作的人,他们将有限的时间专注于产生最大价值的任务。” -刘德华

In the book High Output Management, ex-CEO of Intel Andrew Grove shares three ways to increase leverage:

在《高输出管理》一书中,英特尔前首席执行官Andrew Andrew Grove分享了三种提高杠杆率的方法:

  1. Reduce the time it takes to complete a certain task

    减少完成特定任务所需的时间
  2. Increase the output of an activity

    增加活动的输出
  3. Shift to higher-leverage activities

    转向高杠杆活动

And Edmund Lau complements them with three questions:

刘德华补充了三个问题:

  1. How can I complete this activity in a shorter amount of time?

    如何在较短的时间内完成此活动?
  2. How can I increase the value produced by this activity?

    如何增加这项活动产生的价值?
  3. Is there something else I could spend my time on that would produce more value?

    还有什么我可以花时间在上面的东西可以产生更多的价值吗?

I sometimes get laser-focused on a specific coding task. However, I find it beneficial to stop once in a while and ask myself these three questions. I see them as a pulse check for effectiveness.

有时我会专注于特定的编码任务。 但是,我发现偶尔停下来问自己这三个问题是有益的。 我认为它们是对有效性的脉搏检查。

心态 (Mindset)

The perspective of our own intelligence, character, and ability deeply affects how we lead our lives.

我们自己的才智,性格和能力的观点深刻影响着我们的生活。

The adoption of a growth mindset is one of the most impactful concepts I have come across. Mostly because it is an effective tool for developing our confidence. There come times in which we feel the famous imposter syndrome creeping in. We might feel like our skills don’t line up with what “they” are looking for.

采纳成长心态是我遇到的最有影响力的概念之一。 主要是因为它是建立我们信心的有效工具。 有时候,我们会感觉到著名的冒名顶替综合症正在蔓延。我们可能会觉得我们的技能与“他们”想要的东西不符。

But when you adopt a growth mindset, you tell your story. You tell who you are, what skills you’ve built, what you are excited about doing next and why. Consciously recognizing areas of improvement and actively executing a plan of self-betterment. It means taking responsibility for each aspect of a situation that you can change.

但是,当您采用成长心态时,就会讲自己的故事。 您可以说出自己是谁,已经建立了哪些技能,对接下来的工作感到兴奋以及原因。 自觉认识到需要改进的地方,并积极执行自我改善计划。 这意味着对您可以更改的情况的各个方面负责。

Learning, just like invested money, also compounds:

就像投入金钱一样,学习也会使:

  1. Knowledge gives you a foundation to gain more knowledge.

    知识为您提供了获取更多知识的基础。
  2. The earlier you optimize for learning the more time your learning has to compound.

    优化学习的时间越早,学习的时间就越多。
  3. Even small deltas in your learning rate can make a big difference in the long run.

    从长远来看,即使您学习率的差异很小,也会产生很大的变化。

限制进行中的工作量 (Limit the Amount of Work in Progress)

Checklists can improve outcomes. They are a tool used to reduce errors in many fields. Keeping a checklist helps me transfer all the effort of remembering what I have to do next from my mind to another place. This allows me to focus my brain power on problem solving and development.

清单可以改善结果。 它们是用于减少许多领域中的错误的工具。 保留清单有助于我将记住下一步工作的所有精力从脑海转移到另一个地方。 这使我可以集中精力解决问题和解决问题。

Avoid context switching. Focus your undivided attention to one task at a time.
避免上下文切换。 将您的专心专注于一次完成一项任务。

Any form of distraction, including working on multiple tasks at the same time, takes away from my ability to become effective. When possible, I apply deep work, a skill I learned from Cal Newport’s book Deep Work. I make a conscious effort to shut off all distractions and work on developing mastery.

任何形式的分心,包括同时处理多个任务,都会使我失去有效的能力。 在可能的情况下,我会应用深度工作,这是我从Cal Newport的著作《深度工作》中学到的技能。 我有意识地努力阻止所有干扰,并努力发展掌握能力。

Cal Newport defines Deep Work as:

Cal Newport将Deep Work定义为:

“Professional activities performed in a state of distraction-free concentration that push your cognitive capabilities to their limit. These efforts create new value, improve your skill, and are hard to replicate.” — Cal Newport

“专业活动是在无专心的状态下进行的,这会使您的认知能力达到极限。 这些努力创造了新的价值,提高了您的技能,并且难以复制。” —卡尔纽波特

结语 (Wrapping up)

The practice of adopting a growth mindset toward new skills makes us better learners and more willing to stretch beyond our comfort zone.

对新技能采取成长型思维的做法使我们成为更好的学习者,更愿意超越自己的舒适范围。

Many times, I have felt excited about a new project idea. I think about the amount of value its implementation could add. Then I also think about all the things that could go wrong. I think about failure. I feel fear. I stop.

很多时候,我对一个新的项目构想感到兴奋。 我认为其实施可以增加多少价值。 然后,我还要考虑所有可能出错的地方。 我考虑失败。 我感到恐惧。 我停下。

But with a growth mindset, I understand I must reach beyond that thinking cycle. I understand I am always learning. Just like a product in beta, always in progress. Always in a constant iteration. Then I keep moving onwards along my journey to effectiveness.

但是,以成长的心态,我明白我必须超越这一思维周期。 我知道我一直在学习。 就像Beta版的产品一样,它总是在不断发展。 始终处于不断的迭代中。 然后,我会继续朝着有效的方向前进。

翻译自: https://www.freecodecamp.org/news/how-to-become-an-effective-software-engineer-b2d25b588bc8/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392948.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 高可用----keepalived+lvs

什么是高可用? HA(high availability)即高可用性;就是在高可用集群中发生单点故障时,能够自动转移资源并切换服务,以保证服务一直在线的机制。 LVS LVS:(linux virtual server&#…

用户配置相关文件

用户配置相关文件小总结 /etc/passwd 记录用户相关的信息 /etc/shadow 密码影子文件 /etc/group 记录用户组相关的信息 /etc/gshadow 密码影子文件(组密码) /etc/passwd 文件中各段的内容 第1段:用户名 第…

华为5c android n风格,华为荣耀畅玩5C的屏幕怎么样

华为荣耀畅玩5C的屏幕怎么样屏幕方面,华为荣耀畅玩5C采用了5.2英寸1080P级别GFF贴合屏幕,塑料边框采用了弧面状的设计,握感比较舒适。华为荣耀畅玩5C采用了双主天线的设计,分别在上下的塑料区域。此外,边框以及后盖的上…

spring解析配置文件(三)

一、从XmlBeanDefinitionReader的registerBeanDefinitions(doc,resource)开始 1 protected int doLoadBeanDefinitions(InputSource inputSource, Resource resource) 2 throws BeanDefinitionStoreException { 3 try { 4 …

leetcode968. 监控二叉树(dfs)

给定一个二叉树,我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 输入:[0,0,null,0,0] 输出:1 解释:如图所示,一台摄像头足…

linux系统部署war包,查看tomcat日志

1.部署war包app/tomcat/bin在tomcat/bin 目录下启动 .startup.sh,在启动过程中tomcat会对war包进行解压,形成相应的项目目录 执行命令:./startup.sh 2.实时查看tomcat的日志。首先需要到tomcat的日志目录下。我的目录供你参考app/tomcat/logs…

代码编写工具_这些工具将帮助您编写简洁的代码

代码编写工具看一下Prettier,ESLint,Husky,Lint-Staged和EditorConfig (A look at Prettier, ESLint, Husky, Lint-Staged and EditorConfig) Learning to write good code, but you don’t know where to start… Going through style-guide…

使用kibana和elasticsearch日志实时绘制图表

前言: 此文接的是上篇,上次的内容是,用python操作elasticsearch存储,实现数据的插入和查询。 估计有些人一看我的标题,以为肯定是 logstash kibana elasticsearch的组合。这三个家伙也确实总是勾搭在一块。 其实logst…

android中设置菜单栏,android – 菜单项没有显示在操作栏

我做了一个全新的项目。我已经添加了项目到菜单布局文件。这些项目不会显示在操作栏的右侧。我记得一个有三个点的图标显示出来,打开菜单。这里是我的活动public class MainActivity extends Activity {Overrideprotected void onCreate(Bundle savedInstanceState)…

leetcode617. 合并二叉树(dfs)

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接…

conda使用报错:ImportError:DLL load failed

conda安装python环境经常报: ImportError:DLL load failed 将环境变量加入path可以解决: D:\program\anaconda D:\program\anaconda\Scripts D:\program\anaconda\Library\bin 转载于:https://www.cnblogs.com/timlong/p/11122805.html

《程序员修炼之道》笔记(八)

第八章 注重实效的项目 随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的、项目级的问题。我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域。 1. 注重实效的团队 书中前面的内容都是帮助个体成为更好的程序员…

android 网络调试 源代码,Android源代码调试环境搭建

我们在调试Android应用程序的时候,有时候遇到一些莫名其妙的问题,因此我们需要查看Android内部是如何调用的。我们都知道Android是一个伟大的开源项目,因此debug的时候肯定是支持源代码级别调试的。采用源代码调试,一方面有利于发…

如何使用HTTP压缩优化服务器

鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的。其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能。数据压缩本身并不新鲜。但是&…

leetcode117. 填充每个节点的下一个右侧节点指针 II(dfs)

给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 …

cmd命令大全

遍历当前盘所有文件 dir /ad/s/b ASSOC 显示或修改文件扩展名关联。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRLC 检查。BCDEDIT 设置启动数据库中的属性以控制启动加载。CACLS 显示或修改文件的访问控制列表(ACL)。CALL 从另一个批处理程序调用这一个。CD 显示当…

mac web开发_如何设置Mac进行Web开发

mac web开发While you can build basic websites with nothing more than a text editor and browser, you may want to up your game by adding a JavaScript framework like React or Vue and useful tools like Git to your workflow.虽然可以只使用文本编辑器和浏览器来构建…

OpenGL研究3.0 多边形区域填充

OpenGL研究3.0 多边形区域填充 DionysosLai(906391500qq.com)2014-06-22 所谓多边形区域填充。就是将多边形内部区域,所有已相同色块填充。注意:这里讨论的多边形是简单多边形(即不考虑诸如五角星这样的相交多边形)。简单多边形&a…

[转]Android笔记:ScrollView嵌套ViewPager的滚动冲突解决方法

12345678910111213141516171819202122232425262728293031323334/*** 能够兼容ViewPager的ScrollView * Description: 解决了ViewPager在ScrollView中的滑动反弹问题 */ public class ScrollViewExtend extends ScrollView { // 滑动距离及坐标 private float xDistance, yDista…

android tv 乐视手机,乐视超4系列原生Android TV分享

固件:Official USA Firmware:USA BIN Firmware 5.8.050S_1028://mega.nz/#F!7PhyDI6D!TnwNlMmWXosK1uCUdpyNGg[/url]USA ZIP Firmware 5.8.056S_0420 (OTA ZIP, must be flashed only after flashing the above bin)://drive.google.com/open?id1N9...rNHVB_-VPIad…