您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

七个编程习惯,让你在竞争中遥遥领先

时间:2023-10-05 13:37:12  来源:51CTO  作者:

编译丨千山

 

我和很多杰出的软件工程师们一起工作过,他们有的来自FAANG之类的大公司,有的来自正处于创业阶段的小公司。

 

这些工程师中有人自主创业,也有人在大型科技公司领导了数十亿美元的项目。在我与他们一起工作的时间里,我注意到他们绝大部分人的一些共通的编程和工作习惯。我想,或许正是这些习惯让他们成为了行业金字塔中最顶尖的那1%。

1、成为一名工程师,而不是码农

 

工程是为了解决问题而诞生的。

 

最好的工程师将代码视为达到目的的手段。

 

虽然写代码是一种乐趣,但没有目的地写代码是没有意义的。代码应该用于为用户设计解决方案。

 

某种意义上,编程是一种创造性的追求。创造力在约束下茁壮成长。添加要解决的明确问题的“约束”,允许工程师以他们认为合适的方式自由地探索和创建解决方案。

 

我所知道的最好的工程师都是有产品意识的:首先考虑为人类解决问题。说到这里,就引出了下一点。

2、为人而不是为机器编写代码

 

“任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员编写人类可以理解的代码。”

 

代码是为人类编写的,而不仅仅是为计算机编写的。

 

代码是为团队中的工程师准备的,他们会阅读、维护并在代码的基础上进行构建。

 

代码是为用户准备的,不管是用手机的孩子,还是调用API的开发者,或者是你自己。

 

         

七个编程习惯,让你在竞争中遥遥领先图片

 

我认识的最好的工程师总是为所有受众评估他们代码的价值。

 

如果他们没有打动某个受众,则该代码就不会投入生产。

3、与代码本身分离

 

优秀的工程师不依附于代码本身。

 

即使他们已经完成了90%,如果改变意味着最终的结果会更好,那么他们不害怕删除代码并重新开始。

 

代码不是个人的,所以反馈是从容的。

 

代码并不完美。没有人关心完美的代码。他们关心的是带来变化的代码。

 

教会自己不依附于代码的最好方法是认识到,在20年内,你的大部分代码很有可能成为技术债务、被弃用或被重写。

4、使用一致的标准

 

编写代码时,请坚持一致的编码标准和风格。一致性使代码更容易被未来的你和你的团队成员阅读和理解。

 

一致的风格指南可以让团队和代码库更容易扩展。这就是为什么Meta和google这样的公司能够快速发布如此多的代码,而不会随着时间的推移使代码库变得不可读和不可维护。

 

七个编程习惯,让你在竞争中遥遥领先图片

 

我认识的每一个优秀的人都内化了团队的代码标准,并尽可能严格地遵循它,洞悉它的好处。

5、写简单干净的代码

 

我认识的每一位精英工程师都编写了一些代码,这些代码编写起来可能很复杂,但最终阅读和理解起来都很简单。我能想到的最好的词就是他们的代码很美观。

 

他们的代码干净、有条理、合乎逻辑。在他们的代码中做出的每个决定都是有意义的,当有些事情没有意义时,它会在代码中被很好地记录下来。

 

编写干净代码的一个好方法是遵循原则,比如SOLID原则。虽然它们最初是用面向对象编程(OOP)设计的,但它们可以扩展到通用编程:

 

  • 单一责任:一个类只能有一个责任。
  • open-closed:软件对象(类、模块等)应该开放扩展,但关闭修改,允许可预测、可维护的代码。
  • Liskov 替换:子类型必须可替换其基本类型,而不会影响程序的正确性。
  • 接口隔离:代码不应该依赖于没有使用全部接口的大型接口。相反,包应该包含并允许更小的、特定的接口被导入。
  • 依赖反转:高级模块不应依赖于低级模块;两者都应依赖于抽象,从而促进更灵活和解耦的系统设计。

 

这方面的一个例子是命名。好的命名没有神奇的值、明确的区别、描述性的函数名称和可理解的变量。

6、不要让意外发生

 

代码不应该产生意外。这是通过遵循代码原则和编写适当的测试来实现的。

 

好的代码是可预测的。

 

测试强制代码清晰和可预测性。他们提供信心。良好的自动化测试允许团队对代码进行更改,而不必担心会破坏一些看不见的东西。

 

七个编程习惯,让你在竞争中遥遥领先图片

 

一些类型的测试包括:

 

  • 单个组件和独立功能的单元测试。
  • 用于多个组件之间交互的集成测试。
  • 端到端测试,从用户的角度评估整个系统的功能

 

测试应该很简单。在阅读失败的测试时,应该很容易识别出哪里出了问题。

 

知道什么不应该测试也很重要。

 

例如,如果端到端测试的工作量超过了程序的实际收益,那么测试将被周全的文档、监视和向正确的人(例如代码所有者)发出警报所取代。

 

测试也不应该测试代码中的实现细节,比如测试前端代码中的某些css选择器,而不是使用数据属性或只是屏幕截图测试。

7、经常沟通

 

伟大的系统不是单独建立起来的。优秀的工程师会进行设计审查,征求反馈,并继续对他们的初始设计进行迭代。

 

每个人都有知识盲区,可以由其他人来填补。新的视角通常可以帮助代码变得更清晰,或者提供以前可能没有想到的新方法。

 

最好的工程师既善于沟通又善于合作——为了更好的最终结果,他们不怕花时间一起工作。

 

这可以很简单,比如让团队成员快速检查文档,或者为重要的拉取请求添加额外的代码检查人员。

8、慢,即是快

 

我所知道的最好的工程师通过慢编码来快速完成项目。听起来很奇怪,对吧?

 

其实,上述所有这些原则和习惯都增加了首次编码的时间。但它们允许工程师一步一步地推进项目的进展。

 

通过花时间使用标准、适当地测试、使用原则和经常沟通,从长远来看,他们可以节省更多的时间。

 

当我还是一名实习生和初级工程师时,我亲身经历过另一种选择,我相信很多人也有过这种经历,那就是向前冲3步,撞到一个障碍物,然后不得不后退5步。

9、不要盲目循规蹈矩

 

以上的“规则”和“原则”只是指导方针。并不是所有的东西都能很好地符合指导方针。

 

有时候,你写的代码是一个正方形,不能放进那个圆圈里。没关系。

 

七个编程习惯,让你在竞争中遥遥领先图片

 

在这种情况下,请确保记录代码以某种方式编写的原因。

 

如果你不这样做,那么有人,比如未来的你,可能会在未来看到当时的代码时觉得“哇,我当时真笨。为什么不符合我们的标准呢?”

 

然后,他们会花20个小时重新编码,以符合标准,只是为了得到和以前相同的结论。听起来是不是很熟悉?

 

软件开发的现实是,并不是所有的代码都是干净的或完全遵循规则的。

 

但是,它可以是一致的、干净的、可理解的、可测试的和有价值的。

10、写在最后

 

此外,我还注意到:这些工程师的行为模式还包括:

 

至少在一个领域有深厚的领域知识。我所记录的每一位工程师如今都是各自领域的顶尖人物,因为他们专注于某一领域,并成为了该领域的专家,无论是前端基础设施、分布式系统还是简洁的UI。

 

经常适当地推销自己。这些工程师并没有藏匿于幕后。他们团队中的每个人以及与他们一起工作的每个人都知道他们的价值和专长。这是通过适当地营销自己和从事高影响力项目的结合而实现的。

 

参考链接:https://engineercodex.substack.com/p/7-simple-habits-of-the-top-1-of-engineers



Tags:编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
“不懂编程就是文盲”?别用焦虑论调裹挟家长
据3月17日中新网报道,随着科技的发展和社会的进步,科创教育逐渐走入千家万户,少儿编程作为代表,近年来更是备受瞩目。然而,“未来的文盲,就是不懂编程的人”的论调也甚嚣尘上。必...【详细内容】
2024-03-19  Search: 编程  点击:(9)  评论:(0)  加入收藏
编程二十年,38岁谷歌程序员的16条建议,涉创业、技术淘汰、拿大厂offer……
以能够让项目自负盈亏,并在这一约束下优化其增长的方式来管理和调整项目,这是这个世上最厉害的本事。距离我正式开始编程的工作已经过去二十年了。在这些年里,我有以下收获: 获...【详细内容】
2024-03-10  Search: 编程  点击:(4)  评论:(0)  加入收藏
C#异步编程:Task.Run vs. async-await,掌握基础与高级用法
概述:C#中的异步编程有两主要方式:Task.Run用于在后台线程执行同步操作,而async-await更适用于清晰表达异步流程。基础用法展示了它们的简单应用,高级用法则演示了它们的结合使...【详细内容】
2024-03-09  Search: 编程  点击:(23)  评论:(0)  加入收藏
C++多线程编程:解锁性能与并发的奥秘
今天我们将深入探讨C++中的多线程编程,揭示多线程如何解锁性能潜力,提高程序的并发性能。什么是多线程?在计算机科学中,多线程是指一个进程(程序的执行实例)中的多个线程同时执行...【详细内容】
2024-02-03  Search: 编程  点击:(69)  评论:(0)  加入收藏
主流编程语言哪个更容易学?
主流编程语言哪个更容易学?在当今数字化时代,编程语言已成为一项重要的技能,越来越多的人开始学习编程。然而,对于初学者来说,选择一门容易入门的编程语言是至关重要的。在本文中...【详细内容】
2024-01-31  Search: 编程  点击:(128)  评论:(0)  加入收藏
用于人工智能开发的主流编程语言都有哪些?
在人工智能开发领域,编程语言的选择至关重要。目前,主流的编程语言主要包括Python、Java、C++、JavaScript和Swift等。这些语言各具特色,适用于不同的人工智能开发场景。首先,Py...【详细内容】
2024-01-31  Search: 编程  点击:(129)  评论:(0)  加入收藏
不容错过的4款宝藏GPTs:程序员新宠,让编程不再枯燥!
原文来源:硬 AI自从GPT Store“开业”以来,我们就一直在使用不同的GPTs,尝试自动化一些重复繁琐的日常工作。在浩如烟海的GPTs中,虽然真正有用的并不多,很多GPTs的功能都比较局限...【详细内容】
2024-01-24  Search: 编程  点击:(45)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  Search: 编程  点击:(105)  评论:(0)  加入收藏
在 Rust 编程中使用泛型
本文的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。1.摘要Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以...【详细内容】
2024-01-09  Search: 编程  点击:(89)  评论:(0)  加入收藏
Go编程中调用外部命令的几种场景
在很多场合, 使用Go语言需要调用外部命令来完成一些特定的任务, 例如: 使用Go语言调用Linux命令来获取执行的结果,又或者调用第三方程序执行来完成额外的任务。在go的标准库...【详细内容】
2024-01-09  Search: 编程  点击:(101)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(6)  评论:(0)  加入收藏
站内最新
站内热门
站内头条