2020 年帮你加薪的 7 个小习惯

本文探讨了高效程序员应具备的七项核心技能,包括阅读他人代码、识别不良项目、避免无效会议、熟练使用Git、编写简洁可维护的代码、学会说不以及场景化思维。这些技能有助于提升工作效率,避免无效劳动。

本文经授权转载自程序员DD(ID:mhcoding)

作者 | DD小分队

责编 | 胡巍巍

软件工程师花费大量时间通过练习leet code问题和完善简历来获得更好的面试通过可能。

一旦他们最终被谷歌、亚马逊或其他公司录用,他们可能会发现:过去用来得到这份工作的技能与他们日常工作中需要的技能并不匹配。

我们的团队受到 TechLead 创建的高效程序员七项技能的启发。我们想提供我们自己对这个话题的看法。以下是我们总结的高效程序员的七项技能。

学习如何阅读别人的代码

除了你,每个人写的代码都是垃圾?实际上,能够在别人的代码之上继续工作是一项有多重好处的伟大技能。

不管以前工程师的代码是多么混乱或者考虑不周,您仍然需要能够扩展它。毕竟,这是你的工作。同时,这个“以前的工程师”也可能是一年前的你。

这项技能在两个方面对你有益。第一,能够阅读他人的代码是一个了解什么是糟糕设计的好机会。当你浏览别人的代码时,你会知道什么是有效的,什么是无效的。

更重要的是,您可以了解什么类型的代码对于其他工程师来说是容易扩展的,以及什么类型的代码难以扩展。

你需要确保在阅读他人代码时尽可能多地找出问题所在。这样,其他的工程师就会知道你是一个多么优秀的工程师。

确保您提出了关于可维护代码和良好注释的重要性观点。这进一步显示了你在编程领域的优势。

您的代码应该设计得非常好,不需要任何文档。事实上,如果你是一个好的程序员,你不需要任何文档来说明你的任何代码。这只是浪费时间,更需要你花时间的是编码和开会。

能够阅读别人乱七八糟的代码的话,也使得在需要更新的时候变得容易。这有时意味着更新您缺乏经验的代码。例如,我们曾经将一个脚本从 Powershell 更新到 Python 再到 Perl。

我们在Perl方面的经验有限,但我们仍然有足够的背景知识来弄清楚这段脚本到底做了什么,并做出必要的改变。

这一切都来自于对所有代码的良好理解以及能够阅读以往的代码。阅读别人的代码会让你变得有价值,因为这项技能甚至可以让你接手那些让别人难堪的过度工程化的系统。

 对坏项目的感觉

有许多技能需要花时间去学习。我们认为值得了解的技能之一是理解什么项目不值得做,什么项目显然是行尸走肉。

大公司总是有非常非常多的项目在进行(老板自己都不知道有多少),其中有些项目可能永远都不会完成,即时完成了,可能对公司也没有什么有利的影响。

有些可能本身就没有任何商业意义(至少对你来说不是) ,还有一些项目可能存在管理不善的问题。

这并不是说当你不认可一个项目时,你应该立即拒绝这个项目。最嗨还是看看项目干系人是如何看待这个项目的,如果他们自己都不能正确地解释他们对这个项目的最终成果会怎么样的,那么可能这个项目就不值得做。

此外,有些项目可能过于专注于技术而不是解决方案,以至于从一开始就很清楚不会有太多的影响。

这个技能需要你在知道一个糟糕的项目到底是什么之前做很多糟糕的项目。所以,不要过早地花费太多时间试图辨别每个项目。

在你职业生涯的某个时刻,你会拥有良好的直觉与意识。

避免不必要的会议

无论您是软件工程师还是数据科学家,会议都是必不可少的,因为您需要能够与项目经理、最终用户和客户达成共识。

然而,也有一种倾向,会议会突然接管你的整个时间表。这就是为什么学会如何避免不必要的会议是很重要的。

也许一个更好的词是管理,而不是避免。这里的目标是确保你把时间花在能够推动决策和帮助你的团队前进的会议上。

最常见的方法就是每天抽出两个小时的时间,这是一个持续不断的会议。通常,大多数人会在他们认为有益的时候定期召开会议。他们会利用这段时间来赶上他们的开发工作。

另一个避免开会以便完成工作的方法是在别人之前出现。就我个人而言,我们喜欢早到,因为一般来说,办公室比较安静。大多数早到的人和你一样,只是想把工作做完,这样就不会有人打扰你了。

这对个人贡献者来说很重要,因为我们的工作需要我们集中注意力的时间,而且我们不会和其他人交谈。

是的,有时候你可能需要解决问题,你可能想和其他人一起工作。但是一旦你解决了阻塞问题,你只需要编码。

它是关于进入那个区域,在那里你不断地在你的头脑中有许多关于你正在做的工作的复杂的想法。如果你总是停下来,很难从中断的地方重新开始。

使用Git

一些计算机专业的学生在他们出道的那天就开始使用 Git 了。他们不需要专业人士指导就可以理解每一个命令和参数。

其他人在他们的第一份工作中第一次体验到 GitHub。对他们来说,Github 是一个地狱般的地方,充斥着混乱的命令和进程。他们永远都不是100%的确定自己在做什么(备忘录之所以流行是有原因的)。

无论您的公司使用什么仓库系统,如果您正确使用它,该系统都是有用的,如果使用不当,则是一个障碍。

一个简单的commit或push就可以让你花上几个小时来理清一些由多个分支合并组成的大杂烩。此外,如果您经常忘记使用仓库的最新版本,那么您还将处理不那么好玩的合并冲突。

如果您需要一个 Git 命令备忘单,那么就做吧。只要能让你的生活更简单。

编写简单可维护的代码

年轻的工程师可能会有一种倾向,那就是试图将他们所知道的一切都实现到一个解决方案中。

有一种愿望,那就是把你对面向对象程序设计、数据结构、设计模式和新技术的理解用到你编写的每一个代码中。

然后,你就很有可能创建了一个不必要的复杂性,因为它很容易过度依附于您过去使用过的解决方案或设计模式。

在复杂的设计概念和简单的代码之间取得平衡。设计模式和面向对象设计应该尽可能的去简化宏观计划中的代码。进程越是被抽象、封装和黑盒化,就越难以调试和维护。

学会说不,分清主次

这一条适用于团队中的任何角色,不管你是财务分析师还是软件工程师。但对于技术角色似乎每个人都更需要学会这一条。

如果您是一名数据工程师,您可能会被要求做更多类似开发方向的事情。一些团队需要数据提取,其他团队需要仪表盘,其他团队又需要新的数据分析对接。

区分事情的优先顺序和说不,是两种不同的技能,但它们紧密地交织在一起。优先级区分意味着你只花时间在对公司有很大影响的事情上。

然而,说不有时只是意味着回避应该由其他团队来处理的工作。对于所有角色而言,它们经常同时出现。

这可能是一个很难获得的技能,因为你总是希望用自己的方式去满足每一个请求。尤其是你刚从大学毕业。

你想避免让任何人失望,而且你总是能得到大量的工作。但是,在大公司里总是有无穷无尽的工作量,所以一定要抓住关键:只承担能做的事情。

有很多技能在面试中是没有办法测试和验证的,甚至在大学里都没有教过。通常情况下,这更多的是环境的限制,而不是缺乏让学生暴露在真实环境中发展成长的愿望。

场景化思维

有一种技能在面试中很难测试,在大学学习时也很难复制,那就是思考最终用户可能会如何错误地使用你的软件。我们通常将其称为场景化操作思维。

由于大部分编程都是维护性的,因此它通常意味着更改与其他代码高度耦合的代码。即使是简单的更改也需要跟踪对象、方法和 API的每一个可能存在引用的地方。

否则,很容易意外地打破你没有意识到的模块连接。即使您只是更改数据库中的数据类型。

它还包括在进入开发之前通过边缘案例和整体化的高级设计进行思考。

对于开发新模块或者微服务的场景就更加复杂,花时间去考虑所构建的操作场景非常重要。

想想未来的用户可能需要如何使用您的新模块,他们可能会如何不正确地使用它,可能需要什么参数,以及未来的程序员是否会以不同的方式需要您的代码。

简单的编码和编程只是问题的一部分。创建一个在你的电脑上运行良好的软件是很容易的。但是部署代码可能出错的方式就会有很多。

一旦进入生产环境,就很难说代码将如何使用,以及哪些其他代码将附加到原始代码中。五年后,未来的程序员可能会对你的代码局限性感到沮丧。

本文译自:https://dev.to/seattledataguy/7-habits-of-highly-effective-programmers-inspired-by-an-ex-google-techlead-humor-4b4k

【END】

热 文 推 荐 

你抢的不是春节红包而是云!

☞无代码开发究竟是不是伪需求?

☞华为百度美团驰援抗击疫情;自由软件基金会建议开源 Windows 7;印度超越美国成第二大智能手机市场 | 极客头条

疫情严重,潜伏期也有传染性?科技公司在行动

☞程序员谈从科比的曼巴精神中,我们能学到什么?

你点的每个在看,我都认真当成了喜欢

本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心与硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
【微电网】【创新点】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文围绕基于非支配排序的蜣螂优化算法(NSDBO)在微电网多目标优化调度中的应用展开研究,提出了一种改进的智能优化算法以解决微电网系统中经济性、环保性和能源效率等多重目标之间的权衡问题。通过引入非支配排序机制,NSDBO能够有效处理多目标优化中的帕累托前沿搜索,提升解的多样性和收敛性,并结合Matlab代码实现仿真验证,展示了该算法在微电网调度中的优越性能和实际可行性。研究涵盖了微电网典型结构建模、目标函数构建及约束条件处理,实现了对风、光、储能及传统机组的协同优化调度。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能优化算法应用的工程技术人员;熟悉优化算法与能源系统调度的高级本科生亦可参考。; 使用场景及目标:①应用于微电网多目标优化调度问题的研究与仿真,如成本最小化、碳排放最低与供电可靠性最高之间的平衡;②为新型智能优化算法(如蜣螂优化算法及其改进版本)的设计与验证提供实践案例,推动其在能源系统中的推广应用;③服务于学术论文复现、课题研究或毕业设计中的算法对比与性能测试。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注NSDBO算法的核心实现步骤与微电网模型的构建逻辑,同时可对比其他多目标算法(如NSGA-II、MOPSO)以深入理解其优势与局限,进一步开展算法改进或应用场景拓展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值