我是一名程序员而且我很蠢

来自Anton Zhiyanov文章:
我写代码赚钱已经有 15 年了:我尝试过其他角色--产品管理、分析、测试--但都没有坚持下来。这些年来,我发现自己很笨。

我没有被诊断出患有任何特殊疾病,但我的智力非常有限。我发现即使是简单的 Leetcode 问题也很有挑战性。阅读有关基本共识算法的内容会让我头痛欲裂。我无法真正理解代码库中复杂的依赖关系。我学不会 Rust 这样的花哨语言(我试过,但说实话,太难了)。我讨厌微服务和现代前端,因为它们有太多可移动的部分,我无法一一掌握。

那我该怎么办呢?

我使用最简单的主流语言(Go)和最基本的 Python。我编写易于理解和维护的简单代码(尽管有时很冗长)。我避免深度抽象,总是选择组合而不是继承或混合。我只在绝对必要时使用泛型。只要有可能,我更喜欢扁平数据结构。

我尽可能少地引入外部依赖性(理想情况下为零1)。我设计的模块具有清晰的 API(不是罗伯特-马丁定义的 "清晰"),但几乎从不将其提取为微服务。我使用 JSON-over-HTTP API,但从不使用 GraphQL。我花时间学习 SQL,并经常使用它2。我采用基本的弹性模式,如超时、断路器和反向压力。

我尽量少用软件组件。理想情况下,只使用应用程序本身、SQLite 或 PostgreSQL 进行数据存储,以及 Docker 和少量 shell 进行部署。根据需要使用 Nginx/HAProxy。无 API 网关、无分片、无分布式缓存、无消息队列、无 NoSQL/NewSQL/Graph/whatever 数据库、无服务发现、无join、无云原生、无 FAANG 级最佳实践。

我画依赖关系图和顺序图来理解遗留代码。我写注释来提醒未来的自己,为什么某个函数要这么做,或者为什么某个 if 分支是必要的。我编写文档,力求简洁易读。我写例子,写很多例子。有时甚至是交互式3。

我构建的软件似乎还能正常运行。它不会给谷歌工程师留下深刻印象,这是肯定的。但它能很好地为用户和企业服务。

所以,做个傻瓜对我来说也挺好。

网友:
1、这篇文章坦率地探讨了作者自认在理解复杂编程概念方面的局限性,尽管他已有 15 年的经验。作者承认自己在高级算法、依赖性和 Rust 等语言方面有困难,但他们在工作中强调简洁性。他们使用 Go 和 Python 等主流语言,避免深层抽象,尽量减少外部依赖性,从而编写出易于理解和维护的代码。作者还重视清晰的模块设计、基本的弹性模式和详尽的文档。尽管他们的工作简单,但他们开发的软件却能有效满足用户和业务需求,这证明了接受自身的局限也能带来成功。

2、考虑到其主张,本文的标题具有误导性。所描述的所有做法并不愚蠢,它们实际上对于小规模操作来说非常聪明且有意义。到目前为止,作者在其职业生涯中从未需要设计一个服务于非常大的用户群或具有 99.99% SLA 的系统。

https://www.jdon.com/73425.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Burpsuite CA证书导入浏览器、导入本地

前言 为什么要导入证书,因为要获得浏览器的信任、本地的信任;才能抓包 导入浏览器 1.从bp导出证书 然后打开火狐浏览器 打开bp,设置好代理 火狐浏览器foxyproxy开启代理 访问https://www.baidu.com 可以抓到https的包 本地导入CA证书 可能某一天你要…

AIGC实战——基于Transformer实现音乐生成

AIGC实战——基于Transformer实现音乐生成 0. 前言1. 音乐生成的挑战2. MuseNet3. 音乐数据3.1 巴赫大提琴组曲数据集3.2 解析 MIDI 文件3.3 分词3.4 创建训练数据集 4. MuseNet 模型4.1 正弦位置编码4.2 多输入/输出 5. 音乐生成 Transformer 的分析6. 多声部音乐分词6.1 网格…

牛客NC195 二叉树的直径【simple DFS C++ / Java /Go/ PHP】

题目 题目链接: https://www.nowcoder.com/practice/15f977cedc5a4ffa8f03a3433d18650d 思路 最长路径有两种情况: 1.最长条路径经过根节点,那么只需要找出根节点的左右两棵子树的最大深度然后相加即可。 2.最长路径没有经过根节点&#xf…

JavaSE——常用API进阶二(8/8)-Arrays、Comparable、Comparator(Arrays类提供的的常见方法、用法示例)

目录 Arrays Arrays类提供的的常见方法 用法示例 Comparable、Comparator Comparable Comparator 本篇学习Arrays,不算作是重点知识,但是为学习后面的Lambda表达式打一个基础,或者说,作为铺垫。 Arrays 用来操作数组的一个…

初见-响应式编程-002

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace #Reacti…

lnmp架构

目录 环境 步骤 下载nginx源码包,并解压 安装依赖包 进行预编译 、编译安装 安装php、设置开机自启 配置nginx让其支持php服务 浏览器测试 安装mariadb 部署discuz论坛 简介 LNMP架构是一种常见的Web服务器架构,由Linux、Nginx、MySQL和PHP组成。它…

高级数据结构—线段树(一)

学线段树的原因是因为cf的一道题目始终想不出来怎么优化,后来知道区间查询和修改要用到线段树。。。 原题:Iva & Pav 线段树的作用 区间最值查询:可以高效地找到给定区间内的最大值、最小值等。 区间和查询:可以高效地计算…

Leetcode算法训练日记 | day34

专题九 贪心算法 一、K次取反后最大化的数组和 1.题目 Leetcode:第 1005 题 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个…

关于Spring事务管理之默认事务间调用问题

由事务的传播行为我们知道, 如果将方法配置为默认事务REQUIRED在执行过程中Spring会为其新启事务REQUIRES_NEW, 作为一个独立事务来执行. 由此存在一个问题。 如果使用不慎, 会引发org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back bec…

ACE框架学习

目录 ACE库编译 ACE Reactor框架 ACE_Time_Value类 ACE_Event_Handler类 ACE定时器队列类 ACE_Reator类 ACE Reactor实现 ACE_Select_Reactor类 ACE_TP_Reactor类 ACE_WFMO_Reactor类 ACE库编译 首先去ACE官网下载安装包,通过vs2017或者2019进行编译&#x…

【洛谷 P8605】[蓝桥杯 2013 国 AC] 网络寻路 题解(图论+无向图+组合数学)

[蓝桥杯 2013 国 AC] 网络寻路 题目描述 X X X 国的一个网络使用若干条线路连接若干个节点。节点间的通信是双向的。某重要数据包,为了安全起见,必须恰好被转发两次到达目的地。该包可能在任意一个节点产生,我们需要知道该网络中一共有多少种…

10.接口自动化测试学习-Pytest框架(2)

1.mark标签 如果在每一个模块,每一个类,每一个方法和用例之前都加上mark标签,那么在pytest运行时就可以只运行带有该mark标签的模块、类、接口。 这样可以方便我们执行自动化时,自主选择执行全部用例、某个模块用例、某个流程用…

数据分析专家能力模型

招式:懂商业(业务能力) 外功更偏重于技能,首先需要懂招式,即懂商业,数据分析最终是为业务服务的,无论是互联网企业准求的用户增长和UJM分解,还是传统企业追求的降本增效和精细化运营…

appium相关的知识

>adb shell dumpsys window | findstr mCurrentFocus adb devices # 实例化字典 desired_caps = dict() desired_caps[platformName] = Android desired_caps[platformVersion] = 9 # devices desired_caps[deviceName] = emulator-5554 # 包名 desired_caps[appPackage] …

重建大师出现“密集匹配失败”的情况是什么原因?

答:一般出现密集匹配失败的情况,就是瓦块连接点过少,空瓦块边缘瓦块等原因导致。遇见这种情况,确定是边缘瓦块导致后,就可以不用管,不是模型主体,不影响成果。 重建大师是一款专为超大规模实景三…

MySQL__索引

文章目录 😊 作者:Lion J 💖 主页: https://blog.csdn.net/weixin_69252724 🎉 主题: MySQL__索引) ⏱️ 创作时间:2024年04月23日 ———————————————— 索引介绍…

消消乐算法总结

前言 最近在工作中遇到一个问题,做一个消消乐的demo项目,连续相同数目超过四个后就要消除。我在网上看了很多解决方案,有十字形,横向,纵向,梯形搜索。越看越迷糊。这不是用一个BFS就能解决的问题吗&#x…

MySQL数据库进阶篇一(存储引擎、索引)

目录 一、存储引擎1.1、MySQL体系结构:连接层,Server层,引擎层,存储层1.2、存储引擎1.2.1、存储引擎:InnoDB(MySQL 5.5后默认的存储引擎)1.2.2、存储引擎:MyISAM (MySQL早期默认存储引擎)1.2.3、存储引擎&a…

数据可视化———Tableau

基本认识: 维度:定性—字符串文本,日期和日期时间等等 度量:定量—连续值,一般属于数值 数据类型: 数值 日期/日期时间 字符串 布尔值 地理值 运算符 算数运算符:加减乘除,%取余,…

【Flask】Flask中HTTP请求与接收

一、接收http请求与返回响应 在Flask中,可以通过app.route装饰器来定义路由函数。 app.route(/BringGoods,methods [POST, GET]) GET请求:使用request.args.get(key)或者request.values.get(key)来获取URL中的参数。 POST请求: 使用req…
最新文章