MattRickard是谷歌开源Kubernetes的开发人员,他在那里构建和维护minikube和skaffold等Kubernetes开发工具。他还作为Kubeflow项目的维护者从事机器学习管道方面的工作。据马特说,他特意投入了10,000小时来训练自己的编程技能。Matt拥有大约15年的编程经验,目前在GoogleKubernetes和私募股权公司Blackstone担任专业软件工程师。在此之前,Matt大学期间的大部分时间都在图书馆为自己的项目编写程序。在此之前,他尝试过各种各样的事情——在RuneScape上运行僵尸网络、为iPhone编写拉丁语翻译应用程序、编写自己的配置语言、创建网络剪辑器或深度定制自己的桌面环境。在这10,000小时的编程培训中,Matt最近的工作与分布式系统有关,但他编写了很多技术栈的代码。在编程语言方面,他用过PHP、JavaScript、Go、Ruby、Python、C#、Java、Swift。在技??术领域,涉猎过前端、后端、移动、内核、云、运维等,也曾参与过Kubernetes等大型开源项目,维护过子项目。对于编程一万小时的反思,Matt强调,这个总结纯粹是关于编程的,不会讨论技术管理和职业发展相关的话题。以下是Matt在编程10,000小时后的31条反思:阅读源代码通常比在StackOverflow上找到答案更快工具并知道使用哪些工具来完成工作理解最常用工具的内部结构,例如git和bash当他学习Go时)如果代码看起来很丑陋,那可能是一个严重的错误如果你必须编写不是docstrings的注释,你应该考虑重构这段代码这意味着你不了解程序本身。优秀的工程师知道他们的程序如何在各种环境中工作。上面的教训也适用于构建管道。谨慎使用他人的代码。在Internet上找到的大多数代码都很糟糕。有时自己写一个更好的版本。从不直接依赖一个你可以轻松重写的小库,或者一个应该很小的知道什么时候打破规则的大库,这样会更容易。对于“不要重复自己”的规则,有时重复比依赖更好。将代码组织成模块、包和函数非常重要。知道你的API的边界在哪里是一门艺术在大多数情况下选择最有效的工具,但也要选择你所知道的。ArchLinux是现代开发人员最高效的操作系统吗?对我来说,是的,但对大多数人来说,可能不是避免圈复杂度也是一门艺术虽然很少见,但有时报错可能确实是编译器的问题小心使用深奥的语言特性,但该用的时候还是用它们的传播技术参差不齐。例如,前端开发人员可以从从事底层技术的工程师那里学到很多,云工程师可以从JavaScript开发人员那里学习用户体验和可用性。但反过来不一定正确所以不同类型的工程师看待世界的方式不同有些程序员的效率是其他程序员的10倍10倍的程序员和10倍的员工之间没有相关性(可能是负相关)良好的API易于使用但很难滥用配置七边形(Matt自己的术语)从硬编码值开始,转到环境变量、CLI标志、配置文件、模板化配置文件、DSL、通用bash脚本,直到硬编码值。开发人员应该了解这个七边形内的位置。所有抽象层都是可变的。如果遇到基本问题,有时答案是深入到抽象层,不要局限于表面/reflections-on-10000-hours-of-programming来源:https://matt-rickard。com/reflections-on-10-000-hours-of-programming/
