看懂别人的代码,只是成为高效程序员的第一步!

作者 | SeattleDataGuy

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

在为面试做准备的时候,很多软件工程师都花费了大量时间做编程题和完善简历。

最终在找到一份工作后,无论是在创业公司、Google、亚马逊或是其他地方工作,他们会发现之前为这份工作而学习的技能其实在日常工作中根本用不上。

在本文中,我们将根据自身的心得呈上高效程序员的七大技能。

学习如何阅读他人的代码 

只要不是自己编写的代码看起来都不顺眼。

所以说,能够理解他人的代码是一项伟大的技能,而且你可以从中受益良多。 

不论前一位工程师的代码多么杂乱或思虑不够周全,你仍然需要仔细阅读所有的代码。毕竟,这是你的工作。何况那位工程师可能就是一年前的你。

这项技能有两种好处。第一,能够阅读别人的代码,这是了解什么是不良设计的绝佳机会。在浏览其他人的代码时,你可以了解哪些代码有效,而哪些无效。更重要的是,你将了解哪类的代码方便其他工程师理解,而哪类的代码很难理解。

你需要尽可能多地阅读别人的代码。如此一来,其他工程师就会知晓你是一名高级工程师。

同时在阅读时,你需要指出有关代码可维护性以及良好注释的重要性。这可以进一步彰显你在编程领域的主导地位。

你的代码应该设计得井井有条,不需要任何文档。实际上,如果你是一名优秀的程序员,则应该不需要编写有关代码的任何文档。编写文档很浪费时间,你应该把时间花在编程和参加会议上。

能够读懂他人凌乱的代码也可以方便你在必要的时候进行修改。有时这意味着你需要修改并不熟悉的代码。例如,我们曾将脚本从Powershell转换到Python,再转换到Perl。我们的Perl经验很有限,但是我们仍然有足够的背景信息来弄清楚该如何编写脚本并进行必要的改动。

这是因为我们很了解现有的代码,而且还能够阅读Perl脚本。

阅读他人的代码能够提升自身的价值,因为你遵循的都是精心设计的系统,而其他人可能不太理解。


感知不良项目

 

有很多技能需要付出大量的时间才能学会。我们认为值得学习的技能之一就是了解哪些项目不值得做,以及哪些项目显然是死路一条。

大公司的项目往往更有可能顺利完成,而且影响力也更大。有些项目可能没有任何业务意义(至少对你而言没有意义),有些项目则管理不善。但并不是说如果你不同意就可以否认项目。然而,如果利益相关者自己都解释不了项目的最终结果,那么该项目可能就不值得做。

此外,有些项目可能过于关注技术而不是解决方案,因此从一开始就很明显不会产生太大影响。在真正能够理解什么是不良项目之前,你需要经历很多不良项目,才能培养起这种技能。因此,不要花费太多时间在甄别每个项目上。

等到职业生涯达到某个点时,你自然而然就能拥有良好的直觉。

 

避免会议

无论你是软件工程师还是数据科学家,会议都是不可避免的,因为你需要与项目经理、最终用户和客户互通有无。但是,会议常常会塞满你的整个日程。因此我们要学会如何避免不必要的会议。或许这里使用“管理”比“避免”更为妥帖。目标是确保你花在会议上的时间能够推动决策并帮助团队前进。

最常见的方法是,在每天的日程安排上留出两小时的固定会议。很多人都会在他们认为合适的时间段设置例会,然后利用这段时间来抓紧时间赶开发工作。

还有一种避免会议的方法是提前到公司。就个人而言,我们喜欢早到公司,因为通常这个时段办公室比较安静。大多数早到的人都和你一样,只想完成工作,所以没有人会打扰你。

对于独立工作的人来说这很重要,因为我们的工作需要专注,而且不需要与其他人交谈。虽然有时候你需要与他人合作来解决问题,但一旦问题得到解决后,你只需要编写代码。在精神高度集中的时候,你的大脑高速运转,处理当前工作的各种复杂想法。如果你经常被打断,那么就很难拾取被打断的记忆重新开始。

 

Github…说起Git就头疼?

有些计算机科学专业的学生一生下来就开始使用Git。他们了解每一个命令和参数,甚至超越了一些专业人士。

而有些人则在第一份工作中才开始尝试Git。对于他们来说,Git是一堆非常费解的命令和进程。他们从未百分百确定自己的做法是否正确(因此Git命令大全非常受欢迎)。 

无论你的公司使用哪种代码存储系统,只要使用正确都会很有帮助,但如果使用不当则会成为阻碍。看似只是一次简单的推送或提交,但不经意期间就很有可能会演变成一场多个分支和分叉的混战。此外,如果你经常忘记拉取最新的版本,那么还需要为处理合并冲突而头痛不已。

如果有必要的话,还是保留一份Git命令大全吧,或者其他能够减轻你负担的资源。

编写易于维护的代码


https://xkcd.com/974/

年轻的工程师常常希望在一个解决方案中实现他们所学的一切。在这种愿望的驱使下,你学习了面向对象编程、数据结构、设计模式以及所有新技术,并希望在你编写的每一段代码中使用所有这些技术。这种思想会导致不必要的复杂性,因为这很容易在过去使用的解决方案或设计模式之上画蛇添足。

你需要寻求复杂的设计概念和简单的代码之间的平衡。设计模式和面向对象的设计理应简化总体方案中的代码。但是,随着越来越多的流程被抽象化、封装和黑盒化,调试的难度则越来越加剧。

学会说不和排列优先顺序

 

无论你是财务分析师还是软件工程师,所有工作岗位的人员都需要学会说“不”和排列优先顺序。尤其是技术岗位,因为似乎每个人都需要他们提供帮助。如果你是一名数据工程师,则可能需要承担开发数据流水线之外的工作。有些团队需要数据提取,有些需要负责仪表板,而有些则需要为数据科学家提供新的流水线。

虽说排列优先顺序和说“不”可能是两种不同的技能,但是二者紧密地交织在一起。排列优先顺序意味着你需要将时间花费在对公司有重大影响的工作上,而说“不”则意味着避免应该由其他团队处理的工作。对于所有岗位而言,二者都是同时发生的。

做到这一点很难,因为我们都希望处理好每个请求。尤其是刚刚毕业的大学生。你不希望让任何人失望,而且希望手头有大量的工作。

在大公司,工作似乎没有尽头。关键在于只接受能够完成的工作。

很多技能在实际的面试中根本不会被问及,甚至大学也不会教。大学生未能接触实际开发环境中的问题往往是因为受到了环境的限制,而不是说他们没有这种欲望。

运营设计思维

在大学学习期间,有一项技能很难在面试中体现和复制成功,那就是思考最终用户会如何错误地使用你的软件。通常我们称之为运营设计思维。

然而,这个词的背后含义是你要编写怎么用都不会出问题的代码。

例如,由于许多编程都属于维护工作,因此常常需要修改与其他代码高度纠缠的代码。即使是简单的更改也需要调查对象、方法和/或API可能会被引用到的所有地方。否则,就很容易导致意外的模块被破坏。即使你只是修改了数据库中的某个数据类型也是如此。

此外,你还需要在开发之前仔细考虑边缘情况,以及整个高层设计。

在开发新模块或微服务时,情况就更复杂了,重要的是你需要花时间仔细考虑所构建内容的运营场景。考虑一下将来用户可能会如何使用新模块,他们可能会通过哪些错误的方式使用新模块,可能需要哪些参数,以及将来程序员是否可能通过其他方式使用你的代码。

保持代码的简单性只是问题的一部分。创建能够在你自己的计算机上良好运行的软件很容易。但是部署代码会出现各种错误。一旦投入生产,就很难确保代码的使用方式以及原始的代码中会添加哪些代码。从现在开始的五年后,程序员可能会对这段代码的局限感到失望。

原文:https://medium.com/better-programming/7-habits-of-highly-effective-programmers-563ee3b63f33

本文为 CSDN 翻译,转载请注明来源出处。

推荐阅读
  • 浅谈分布式存储中的网络通信

  • 138 张图带你 MySQL 入门!

  • 如何在 Kubernetes 上配置 Jenkins?

  • 突发!印度封禁抖音、微信、快手等 59 款中国 App

  • 厉害!国内大学生计算机编程第一人,一人挑战一个队,百度最年轻 T10,现创业自动驾驶

  • Balancer因通缩代币STA遭遇闪电贷攻击,价值50万美元资产被黑

  • 浅谈分布式存储中的网络通信

真香,朕在看了!

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

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

相关文章

响应速度不给力?解锁正确缓存姿势

阿里妹导读:响应时间长,遇到性能瓶颈时,开发者第一个想到的总是性能优化。《什么技能产品经理不会提,但技术人必须懂?》讲到了什么时候需要使用缓存。但缓存的用法是什么?一旦缓存使用不当,或稍…

Spring Boot2 集成 jasypt 3.0.4 配置文件敏感信息加密

文章目录1. 导入依赖2. yml中添加配置文件3. 加解密工具类4. 敏感信息替换5. 编译打包6. 启动项目1. 导入依赖 <!--敏感信息加密--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifa…

技术直播:1小时突击Java工程师面试核心(限免报名)

后疫情时代&#xff0c;连程序员这个多金的职业也遭受到了一定程度的打击。从各大招聘网站和多次面试经历中&#xff0c;相信大家已经意识到&#xff0c;面试官对程序员技能体系和项目经验考核似乎更严苛了。你在面试中常常为什么苦恼呢&#xff1f;简历撰写&#xff1f;数据算…

重塑云上的 Java 语言

音乐无国界&#xff0c;但是音乐人有国界。 云原生亦如此。虽没有限定的编程语言&#xff0c;但应用所使用的编程语言已经决定了应用部署运行的行为。 Java 诞生于20年前&#xff0c;拥有大量优秀的企业级框架&#xff0c;践行 OOP 理念&#xff0c;更多体现的是严谨以及在长…

5分钟带你看懂 GCanvas渲染引擎的演进

本文内容大纲&#xff1a; 1、轻量级图形渲染引擎与应用 2、渲染引擎演进与优化之路 3、渲染引擎未来的发展方向 GCanvas 的定位是遵循 w3c 标准的跨平台的轻量级图形渲染引擎。有清晰的定位和目标&#xff0c;并且紧贴现有的业务&#xff0c;为业务提供丰富表现形式。 GCa…

免费技术直播:唐宇迪带你一节课了解机器学习经典算法

常常有小伙伴在后台反馈&#xff1a;机器学习经典算法有哪些&#xff1f;自学难度大又没有效果&#xff0c;该怎么办&#xff1f;CSDN为了解决这个难题&#xff0c;联合唐宇迪老师为大家带来了一场精彩的直播【一节课掌握机器学习经典算法-线性回归模型】。本次直播将帮大家了解…

Centos7 安装Go环境

文章目录1. 下载2. 解压 和目录创建3. 配置环境变量4. 刷新环境变量5. 验证1. 下载 https://golang.google.cn/dl/ wget https://golang.google.cn/dl/go1.17.1.linux-amd64.tar.gz2. 解压 和目录创建 tar -zxvf go1.17.1.linux-amd64.tar.gz -C /usr/local/ mkdir gocode3…

深度学习在商户挂牌语义理解的实践

​导读&#xff1a;高德地图拥有几千万的POI兴趣点&#xff0c;例如大厦、底商、学校等数据&#xff0c;而且每天不断有新的POI出现。为了维持POI数据的鲜度&#xff0c;高德会通过大量的数据采集来覆盖和更新。现实中POI名称复杂&#xff0c;多变&#xff0c;同时&#xff0c;…

云计算与星辰大海的结合——不要回答,来自百亿光年外的未知信号

作者 | 硬核云顶宫责编 | Carol出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09;今年在疫情的影响下&#xff0c;各国的经济发展都遇到了一些困难&#xff0c;甚至除中国以外的主要经济体都会进入了负增长的情况&#xff0c;不过越是这样的时候&#xff0c;越…

让大数据分析更简单,4步教你玩转MongoDB BI Connector

MongoDB使用BI Connector支持BI组件直接使用SQL或ODBC数据源方式直接访问MongoDB,在早期MongoDB直接使用Postgresql FDW实现 SQL到MQL的转换,后来实现更加轻量级的mongosqld支持BI工具的连接。 安装 BI Connector 参考 Install BI Connectorhttps://docs.mongodb.com/bi-conne…

谷歌排名第一的编程语言,收下这份资料,小白也能学的会!

学习 Python 的过程中你是否有过这样的问题&#xff1a; 应用方向太多了&#xff0c;不知道该选择哪个&#xff0c;也不知道学习路径是什么。 入门简单&#xff0c;但是精通很难&#xff0c;每次学完做练习项目时都头疼&#xff0c;没思路&#xff0c;甚至怀疑自己不适合编程。…

SpringBoot2 集成xJar插件 动态解密jar包,避免源码泄露或反编译

文章目录一、集成1. 官方介绍地址2. 添加仓库和插件3. 编译打包二、安装go环境和编译2.1. 安装go2.2. 编译三、运行3.1. 正常运行3.2. 二次加密运行3.3. 测试结果四、IntelliJ IDE 反编译测试4.1. 将加密的jar进行解压4.2. 打开解压后的文件夹4.3. class文件查看4.4. 配置文件反…

每秒7亿次请求,阿里新一代数据库如何支撑?

阿里妹导读&#xff1a;Lindorm&#xff0c;就是云操作系统飞天中面向大数据存储处理的重要组成部分。Lindorm是基于HBase研发的、面向大数据领域的分布式NoSQL数据库&#xff0c;集大规模、高吞吐、快速灵活、实时混合能力于一身&#xff0c;面向海量数据场景提供世界领先的高…

拼不过 GO?阿里如何重塑云上的 Java

阿里妹导读&#xff1a;Java 诞生于20年前&#xff0c;拥有大量优秀的企业级框架&#xff0c;践行 OOP 理念&#xff0c;更多体现的是严谨以及在长时间运行条件下的稳定性和高性能。反观如今&#xff0c;在要求快速迭代交付的云场景下&#xff0c;语言的简单性似乎成了首要的要…

android studio打包纯H5项目(集成5+SDK)

下载地址 http://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/103 我们下载5SDK直接复制demo出来 可以自行修改名字&#xff0c;上面两个dome都可以使用 使用Android Studio打开后 默认目录结构如下 替换HTML文件 找到目录下app/src/main/assets/apps/HelloH5/www…

Apache Flink CEP 实战

本文根据Apache Flink 实战&进阶篇系列直播课程整理而成&#xff0c;由哈啰出行大数据实时平台资深开发刘博分享。通过一些简单的实际例子&#xff0c;从概念原理&#xff0c;到如何使用&#xff0c;再到功能的扩展&#xff0c;希望能够给打算使用或者已经使用的同学一些帮…

图神经网络(AliGraph)在阿里巴巴的发展与应用

背景 为什么做GNN? 在大数据的背景下&#xff0c;利用高速计算机去发现数据中的规律似乎是最有效的手段。为了让机器计算的有目的性&#xff0c;需要将人的知识作为输入。我们先后经历了专家系统、经典机器学习、深度学习三个阶段&#xff0c;输入的知识由具体到抽象&#xf…

实用!五款新型 Linux 命令行工具

作者 | Ricardo Gerardi译者 | 弯月&#xff0c;责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在Linux/Unix系统的日常使用中&#xff0c;我们需要使用很多命令行工具来完成工作&#xff0c;以及理解和管理我们的系统&#xff0c;例如使用du来监视磁盘…

从零开始入门 K8s | 手把手带你理解 etcd

导读&#xff1a;etcd 是用于共享配置和服务发现的分布式、一致性的 KV 存储系统。本文从 etcd 项目发展所经历的几个重要时刻开始&#xff0c;为大家介绍了 etcd 的总体架构及其设计中的基本原理。希望能够帮助大家更好的理解和使用 etcd。 一、etcd 项目的发展历程 etcd 诞生…

minio 单机安装、部署 centos7环境

文章目录一、默认模式下载运行1. 下载2. 访问minio控制台3. 创建目录3. 上传文件二、企业自定义模式2.1. 指定用户密码2.2. 配置目录2.3. 控制台端口2.4. 启动2.5. minio控制台登录2.6. 效果图一、默认模式下载运行 1. 下载 官网地址&#xff1a;https://docs.min.io/docs/ …