ThePrimeagen的编程人生与技术观点

从挣扎到成功,从编程到创业,一位技术专家的深度思考与人生感悟

ThePrimeagen是谁?

身份与背景

ThePrimeagen是一名成功的软件工程师和受欢迎的在线人物,曾在Netflix等公司工作,现在是内容创作者和创业者。他的真名是Michael Paulson,以其技术专长和独特的个人风格在编程社区中广受欢迎。

他的职业生涯从传统的编程工作转向内容创作和创业,通过分享自己的技术经验和人生感悟,影响了众多开发者。

软件工程师 内容创作者 创业者 直播者 咖啡商

"ThePrimeagen"这个昵称的由来

这个昵称来源于ThePrimeagen年少时非常喜欢的一款Nintendo 64游戏《Turok 2: Seeds of Evil》。

  • 这是一款1998年发行的第一人称射击游戏,以其较大的关卡、更具挑战性的谜题和更致命的敌人而闻名
  • 他得到的是一个黑色的游戏卡带,这让他觉得这款游戏非常特别
  • 他花了大量时间(每天约10小时,连续一个月)最终成功通关了这款极其困难的游戏
  • 在《Turok 2》中,最后一个也是最终的Boss就叫做ThePrimeagen
  • 五年级的他觉得用游戏里大反派的名字作为自己的互联网昵称非常"酷"

这个名字很独特,容易被人们记住,也代表了他想要打破传统、保持创造力和乐趣的态度,可以被视为一种"反抗机器"的象征。

早期生活与个人成长

童年与家庭经历

ThePrimeagen的早期生活经历了许多坎坷,这些经历对他产生了深远影响,塑造了他后来的人生观。他的童年和家庭环境充满了挑战,但这些经历也成为了他成长的重要部分。

父亲早逝

父亲在他很小的时候就去世,导致他感受到一种长期的缺失和渴望拥有父亲的感情。这可能导致了他早年在社交上的不安全感和对他人认可的渴望。

哥哥的毒瘾

他的哥哥在父亲去世时正处于一个非常糟糕的年龄(11或12岁),并因此染上了毒瘾,且一直未能摆脱。这让他亲眼目睹了毒品对人生的毁灭性影响。

早期接触不良内容

很小的时候接触到色情制品,这对他产生了长达数十年的负面影响,几乎每天都会想到。他认为这是一种"占据思想、消耗时间和精力的东西"。

高中社会经历

高中时期对社会等级制度持有负面看法,认为那种等级制度是基于一些非常肤浅的因素,例如家境。他认为那样的环境并不能真正识别出有潜力的人。

人生转折点:迷幻剂经历与价值观转变

感觉就像我没有任何底线是我不愿意跨越的。一切都很好,但在那一刻,我突然感到一种深刻的恐惧和理解,我正走在一条路上。这真的是你想要走的路吗?
— ThePrimeagen,描述他的顿悟时刻

ThePrimeagen人生中的一次服用过量迷幻剂的经历,意外地成为了他生活轨迹的转折点:

  • 在一个夜晚,他服用过量的迷幻剂后,突然对观看色情制品和吸食大麻这两种行为产生了前所未有的强烈羞耻感
  • 他将这次体验描述为获得了"良知",这种突如其来的负罪感和道德意识的觉醒,是他之前从未体验过的
  • 这次"顿悟"对他产生了深远的影响,直接促使他开始反思自己的生活和行为
  • 他意识到自己过去的生活方式并非他真正想要追求的,并下定决心要改变自己的生活轨迹,追求更积极的生活

这次经历让他意识到,真正的幸福和满足感不能依赖于外在的刺激或药物,而是来自于内在的自我发现和成长。

对色情制品的看法

扭曲人的价值观

  • 色情制品将人视为满足个人欲望的工具,从而扭曲了对异性的看法
  • 色情制品会使人不再尊重他人的价值,导致贬低人性
  • 他很小的时候就接触到色情制品,这"占据思想、消耗时间和精力",从小就困扰着他

破坏亲密关系

  • 色情制品最终会导致人际关系中的物化和缺乏真正的亲密感
  • 他强调,真正的亲密关系建立在深厚的信任之上,而色情制品会破坏这种信任
  • 他结合自身的经历谈到,在他没有做出摆脱色情制品的努力之前,他不可能拥有现在这样良好的关系

宗教信仰的影响

ThePrimeagen坦诚地分享了宗教信仰对他生活产生的深刻影响。他提到自己成长在一个功能性的无神论环境中,很少去教堂,与宗教没有很强的联系。

信仰的转折点

19岁左右经历的顿悟(与迷幻剂经历相关)是他信仰的转折点。他认为深入描述上帝本质很容易陷入基督教异端,但他个人体验到的是,信仰给了他获得幸福的机会。

信仰带来的自由

信仰让他不再需要为了获得认可而去追求世俗的成功,让他感到一种前所未有的自由。他体验到了一种"标准已被偿还"的感觉,这让他不再需要努力去符合某种外在的标准。

宽恕与内心解放

信仰让他第一次真正感受到被原谅,并且能够原谅那些曾经伤害过他的人。他提到自己长期背负着高中时期不愉快的经历所带来的怨恨,但通过信仰的体验,他写下了所有让他耿耿于怀的人的名字,并最终放下了这些负担。

他相信,宽恕是偿还仇恨的方式,而爱是宽恕的动力。这种宽恕带来了内心的解放,对他而言,这是一个非常基础和重要的体验。

编程职业生涯

早期编程经历

在上学期间,ThePrimeagen曾为政府编写机器人程序。他的老板Hunter Lloyd只是给了他电脑、机器人、连接方式和一些手册,让他自己去解决问题,包括编写flash驱动、以太网驱动和行星齿轮电机驱动。

在那个时代,他并没有先进的集成开发环境(IDE)和图形化调试工具可以使用。与现代编程不同,当时能够直接与硬件交互并获取程序运行状态的方式非常有限。

Printf调试的重要性

在代码中插入printf语句来输出变量的值和程序的执行流程,成为了他了解机器人内部状态和代码行为的唯一有效途径。他必须通过不断地打印信息,来"摸索"代码的运行情况,就像在黑暗的房间里四处摸索以了解房间的结构一样。

这种早期对Printf调试的依赖,使得ThePrimeagen养成了通过观察程序输出来推断问题所在的能力。这让他能够快速地追踪代码的执行路径,判断哪些地方出了问题。他自己也说,他因此变得"非常擅长通过打印来解决问题"。

Printf调试的价值

问题可视化

让不可见的程序状态变得可见

通用性

在任何环境中都能使用

培养思考

锻炼推理和分析能力

在Netflix的工作经历

Falcor系统与"Repulsive Grizzly Attack"漏洞

ThePrimeagen在Netflix开发了一个名为Falcor的数据获取库,该库在移动端、电视端和Web端都有运行。他发现了一个被称为"Repulsive Grizzly Attack"的严重漏洞:

漏洞详情
  • 一个精心构造的请求可以同时针对系统的内存和CPU资源,导致系统崩溃
  • 只需要一个请求,来自一台机器,就可以使UI完全停止响应
  • 虽然视频流服务可能仍然可用,但用户无法进行任何操作来选择或播放视频
从这次经历中学到的经验:
深入理解系统工作原理

理解系统内部的机制,包括数据请求、内存管理和CPU使用等方面,对于预测和应对意外情况至关重要

警惕边界情况和恶意输入

即使看似简单的功能,在极端或恶意的使用下也可能导致灾难性的后果

大型代码库的复杂性

在大型项目中,代码审查、安全审计和充分的测试至关重要

沟通和协作的重要性

不同团队之间的有效沟通和协作对于解决复杂问题至关重要

Netflix的复杂性案例

ThePrimeagen分享了在Netflix工作时,仅仅为了颠倒《黑镜》的季度顺序,就需要协调20位工程师的经历,这体现了大公司的复杂性。

《黑镜》季度顺序调整

需要20位工程师协作完成

大型组织的复杂性

即使简单任务也需要多团队协作

创业经历

短信营销初创公司

在2010年创立了一个短信营销的初创公司,但因为当时智能手机普及率不高而失败。这与他父亲在90年代初尝试电话卡公司的经历相似,都属于超前于时代。

长期创业尝试

他曾花了一到两年半的时间构建自己的初创公司,尽管最终失败了。这段经历体现了他内心深处拥有一颗创业的心,希望能够创造属于自己的事业。

内容创作转型

从传统的编程工作转向内容创作,通过分享自己的技术经验和人生感悟,影响了众多开发者。

Terminal Coffee

目前他涉足咖啡业务"Terminal Coffee",这个独特的想法源于他与朋友Teej的一次对话。

Terminal Coffee的独特之处

咖啡与技术的结合

"Terminal Coffee"的独特之处在于其将ThePrimeagen对技术的热爱,特别是对命令行工具的熟练运用,与咖啡这种日常消费品巧妙地结合起来。

  • 最初的想法来源于他和Teej对NeoVim的热爱,他们开玩笑说可以做一些与NeoVim相关的事情
  • 他们注意到咖啡是许多开发者都喜欢的饮品,这为他们将技术背景与实际产品结合起来提供了一个切入点
  • 咖啡产品的包装上使用了许多与开发者相关的术语,如"Devy"、"shop"、"server"、"web"等

SSH订购方式

最独特的是,订购"Terminal Coffee"的唯一方式是通过SSH (Secure Shell)。

$ ssh shop@terminalcoffee.com

Welcome to Terminal Coffee!

Please select an option:

1) Browse coffees

2) Place an order

3) Check order status

4) Exit

_

网站设计也模仿了终端的界面。用户在网站上看到的不是传统的购物界面,而是一个类似命令行的提示符。

他甚至开玩笑说,如果你不会使用SSH,可能就不太适合购买他们的咖啡。

编程理念与技术观点

编程的乐趣

ThePrimeagen将编程的乐趣定义为构建复杂系统的过程。即使通过简单的规则和局部交互也能涌现出无限的复杂性,这能带来极大的乐趣。他认为这种乐趣与细胞自动机的复杂性有相似之处,在细胞自动机中,每个单元只与邻居交互并遵循简单规则,但整体却能展现出令人惊叹的复杂性。

在他的访谈中,当被问及最热爱编程的什么时,ThePrimeagen回忆起他在大学二年级学习数据结构时,他的老师Ray Babcock在讲解链表时,他第一次感受到了编程的乐趣和兴奋。这表明,即使是看似基础的数据结构,也能让他体验到构建编程系统的乐趣。

他提到了"链表情境"的说法,指的是像链表一样,通过简单的局部规则和邻居之间的交互,可以构建出复杂的全局行为和系统。

编程乐趣的来源

构建复杂性

通过简单的规则创造出意想不到的复杂行为

早期体验

在学习基础概念时就体会到的乐趣

为他人赋能

为其他开发者构建有用的工具

为开发者构建工具的价值

ThePrimeagen早年热衷于为开发者构建工具,这种工作对他而言如此有价值和令人满足,主要是因为:

提升效率

能够帮助其他开发者更高效地工作,使其工作更加便捷,是一件非常有价值的事情。

有价值的反馈

他的用户是其他程序员,他们能够理解他的工作并提出有价值的需求,带来成就感。

长期兴趣

他在职业生涯早期就从事构建开发者工具的工作,例如JavaScript的构建系统以及在Netflix期间为开发者构建内部工具。

总而言之,ThePrimeagen早期专注于开发者工具是因为他享受通过技术帮助他人提升效率的过程,并且与能够理解和欣赏他工作的同行交流互动让他感到满足。

学习编程的方法

ThePrimeagen分享了多种学习编程的有效方法:

通过实践学习

通过实际操作和Google搜索来解决具体问题,快速构建东西。

"我早期构建自己的短信营销初创公司时,就是通过这种方式,遇到问题就去Stack Overflow提问。"

优点:快速看到成果,建立信心
缺点:可能停留在表面,缺乏深度理解

系统地阅读语言参考

系统地阅读编程语言的官方参考手册,深入理解语言的特性和设计理念。

"仅仅通过实践可能无法获得对语言全面的理解,而阅读官方文档可以填补这个空白。"

优点:全面理解语言特性和设计理念
缺点:耗时较长,初期可能缺乏实践应用

参与实际项目

通过参与实际项目来学习和提升编程技能,将理论知识应用于实践。

"在Netflix期间,我的老板让我通过PlayStation 3学习代码并修复bug。我还在直播中构建各种项目,例如用ASCII玩Doom。"

优点:实战经验,解决真实问题
缺点:可能需要一定的基础知识

借鉴他人的经验

学习他人的代码、设计思路和建议,即使有时不喜欢别人的做事方式。

"即使有时我不喜欢别人的做事方式,我仍然认为观察其他人如何解决问题是有价值的。"

优点:学习多种解决方案,避免重复错误
缺点:可能过度依赖他人的思路

提升编程技能的策略

ThePrimeagen在访谈中分享了多种有效提升编程技能的策略:

理解大型代码库

投入大量时间去理解和学习他人编写的代码,通过Printf调试等方法深入了解现有系统的工作原理。

从零开始学习基础

从头开始构建一些基础组件,例如HTTP服务器,以更深刻地理解底层原理,例如为何需要等待文本请求等。

重视代码质量

将警告视为错误,确保代码在编译时没有任何警告,以提高代码质量。

培养专注力

避免不必要的"副任务",深入理解所使用的工具,例如文本编辑器。

确定性模拟测试

通过运行大量的随机数据并使用断言进行确定性模拟测试来验证软件的正确性。

持续学习

通过尝试不同的编程语言来保持学习的热情和探索新的技术。

总而言之,ThePrimeagen认为有效的编程技能提升是一个实践与理论相结合、深入理解工具和基础原理、并持续探索和学习的过程。对于初学者,通过实践快速上手建立信心很重要;对于有经验的开发者,系统学习语言特性、理解大型代码库和注重代码质量则更为关键。

断言(Asserts)的重要性

ThePrimeagen在开发中非常重视"断言"(asserts),认为它们在保证代码质量方面扮演着关键角色:

尽早发现错误并崩溃程序

在错误发生的第一时间就发现并崩溃程序,防止错误在系统中悄无声息地扩散,避免后期出现更难以追踪和调试的问题。

强制开发者更仔细地思考代码

通过设置断言来验证特定点的状态,迫使开发者更深入地思考代码逻辑和边界情况,这有助于在编码阶段就预防潜在的bug。

提供丰富的错误信息

当断言失败时,它会提供关于程序状态的详细信息,使开发者能够快速定位错误的根源,并更容易理解问题发生的原因。

确保软件质量的有效方法

广泛使用断言是一种确保软件质量的有效方法。他受到John Carmack和NASA的实践的启发,他们会在代码中大量使用断言,以便在程序状态不应出现时立即将其崩溃。

在模拟测试中的应用

ThePrimeagen尝试构建了一个使用大量断言的反向代理,并结合确定性模拟测试来验证软件的正确性。这表明他认为断言在自动化测试和确保代码行为符合预期方面也至关重要。

虽然他强调了断言的重要性,他也提到在Web开发中需要考虑总是崩溃服务器的潜在影响,这可能需要在错误处理和用户体验之间进行权衡。但是,他对断言作为一种提高代码质量和尽早发现错误的核心工具的看法是明确的。

对"努力工作胜过聪明工作"的看法

ThePrimeagen对"work smarter not harder"这句格言持有强烈的反感,他认为这句格言中蕴含着一些他非常不同意的假设。

他反感这句格言的原因:

  • 这句格言暗示着人们应该已经知道什么是更聪明的工作方式,并且事情本身应该是容易的,不需要付出太多的努力
  • 他的经验告诉他,学习如何聪明地工作,唯一的方法就是非常努力地工作,并且认识到没有捷径可走
  • 这句格言轻视了努力的重要性,好像努力工作是一种低效的行为
  • 这句格言会让那些努力工作但仍然感到挣扎的人觉得自己是失败的
  • 那些最终"聪明"工作的人往往忘记了早期的艰辛,从而给出"找到简单方法"这种不切实际的建议

他提出了更准确的说法:"努力工作,变得聪明(work hard, get smart)",强调只有通过持续不断的努力和实践,才能逐渐理解什么是更有效率的方法,最终实现真正的"聪明"工作。

ThePrimeagen的替代观点

"努力工作,变得聪明"

(work hard, get smart)

只有通过持续不断的努力和实践,才能逐渐理解什么是更有效率的方法

坚持 实践 成长

编程的精通之路

ThePrimeagen将编程中"精通的代价"理解为掌握任何技能,包括编程,都需要投入大量的时间和精力:

精通的错觉

一项技能的精通,例如柔术、柔道、钢琴或吉他,最终会让人感觉简单。然而,达到精通的道路对于大多数人来说都是艰辛的。

持续的努力

真正的进步和精通来自于持续的努力和实践,从而逐渐积累知识和技能。编程的精通并非一蹴而就,需要程序员付出持续的努力和时间。

精通的旅程

虽然最终掌握技能后可能会感到轻松自如,但通往精通的道路是充满挑战的,需要大量的投入。ThePrimeagen强调,没有捷径可走,只有通过不断的努力和实践,才能真正掌握编程技能。

编程语言与工具

JavaScript作为初学者的理想语言

ThePrimeagen认为JavaScript是初学者的理想入门语言,即使这个观点可能会引起一些争议,主要是因为它具有以下优点:

表达能力强,入门门槛低

JavaScript可以用非常小的努力表达很多东西,这对于初学者来说非常重要。

视觉反馈快速

初学者可以快速地画出一个框并使其移动,这种视觉上的即时反馈能够带来学习的乐趣和动力。

广泛的应用场景

JavaScript可以用于前端开发,也可以编写后端代码,甚至可以用于嵌入式开发。

易于上手后端开发

在掌握一些前端基础后,初学者可以轻松地使用JavaScript构建后端,进行数据请求、数据库操作以及在屏幕上展示数据等,从而全面了解编程的基本流程。

丰富的可能性

JavaScript还可以用于创建动画、进行2D或3D渲染等,提供了广泛的探索和实践空间,能够激发初学者的兴趣。

ThePrimeagen承认他的这个观点可能会引起争议,因为通常他给人的印象是"讨厌JavaScript"。但他强调,JavaScript本身是一种"美丽的语言",并且具备很多非常适合初学者的特性。他认为,对于那些对编程一无所知的人来说,JavaScript提供了一个友好的起点,能够让他们快速上手并看到成果,从而建立对编程的兴趣和信心。

虽然他认为最终需要学习更深入的知识,但他仍然坚信JavaScript是进入编程世界的绝佳敲门砖。

Rust语言的独特之处

ThePrimeagen在访谈中对Rust语言在内存管理方面的独到之处以及他个人对Rust的印象进行了分享。

Rust在内存管理方面的独到之处

Rust在内存管理方面最主要的独到之处在于其不依赖垃圾回收,而是采用了"所有权系统"和"借用检查器"的机制来保证内存安全。

所有权 (Ownership)

Rust中的每个值都有一个被称为其所有者的变量。在同一时刻,一个值只能有一个所有者。当所有者离开作用域时,这个值将被自动丢弃。

借用 (Borrowing)

为了在不转移所有权的情况下访问数据,Rust引入了"引用"的概念。引用就像一个指针,允许你访问数据但不拥有它。

生命周期 (Lifetimes)

当涉及到引用时,Rust需要知道引用的有效时间,即"生命周期"。借用检查器会确保引用的生命周期不会超过被引用数据的生命周期,从而防止悬垂指针的出现。

这种所有权和借用机制完全在编译时进行检查,因此不会产生运行时的性能开销,这与需要垃圾回收的语言不同。这使得Rust既能保证内存安全,又能实现接近C和C++的性能。

ThePrimeagen对Rust的印象

内存释放与栈直接关联

他喜欢Rust中内存的释放与变量离开作用域直接相关联的机制,这既不是像垃圾回收那样不确定,也不是像C语言那样需要手动调用free。

强制指定可变性

ThePrimeagen认为Rust要求显式地指定变量是否可变是一个非常好的特性,提高代码的可读性和可维护性。

安全性与性能的平衡

Rust强调性能、类型安全和并发性,这些都是ThePrimeagen欣赏的方面。

Zig语言的潜力

ThePrimeagen对新兴编程语言Zig表现出了浓厚的兴趣。他认为Zig相较于C和Rust有以下潜在的优势:

相对于C的安全性提升

Zig拥有Optionals(可选类型)的概念。这意味着如果一个变量可能为空,你需要在尝试使用它之前显式地进行检查。

这有助于避免C语言中常见的空指针解引用和段错误问题。在C语言中,默认情况下指针可以是空指针,开发者需要自己处理这些情况。

安全性与灵活性的平衡

相对于Rust,Zig在安全性和灵活性之间提供了一个中间地带。Rust被描述为一种"超安全语言",有些在C语言中可以表达的操作在Rust中甚至无法表达。

而Zig则在提供一定程度安全性的同时,更接近C语言的灵活性。你可以在Zig中编写安全的代码,也可以在需要时编写不安全的代码。

简洁统一的元编程

Zig的元编程方式更加简洁和统一。在Rust中,当你创建宏时,你需要使用特定的宏语法。

而在Zig中,元编程就是语言本身。你可以像编写普通代码一样进行元编程,只需要添加comp time关键字来指定代码在编译时执行。

总的来说,ThePrimeagen认为Zig的吸引力在于它试图在C语言的极致灵活性和Rust语言的极致安全性之间找到一个平衡点,并且其元编程的简洁性也给他留下了深刻的印象。他认为Zig的设计理念非常吸引人。

NeoVim的优势

ThePrimeagen对自己使用的文本编辑器NeoVim情有独钟,他认为NeoVim相比其他编辑器(比如Emacs)的独特优势在于其核心的Vim motions的卓越性。他认为,无论人们对哪个编辑器是最好的持有何种看法,都无法否认Vim motions在文本操作上的优越性。

卓越的Vim Motions

Vim motions提供了一套精心设计的语言来描述文本中的移动,其主要操作模式就是为了操控和编辑文本而生。这套动作经过优化,可以高效地处理代码等文本。

例如,在VS Code中删除三行代码可能需要使用鼠标,手离开键盘。而使用Vim motions,可以通过简洁的按键组合来描述动作,例如D加上一个motion(如F(用于删除到下一个开括号),就能实现更快速的操作。

鼓励学习高效编辑方式

ThePrimeagen认为,包括Emacs和VS Code在内的许多编辑器也能实现类似的功能,但Vim和NeoVim的设计哲学鼓励用户从一开始就学习最高效的编辑方式,并严肃对待编辑这门"艺术"。这种强迫性的学习曲线最终会带来长期的效率和使用乐趣。

与Emacs的比较

尽管Lex Fridman是Emacs的爱好者,ThePrimeagen还是坚持认为Vim motions更胜一筹。他曾使用Emacs一年,包括DoMacs和SpaceMacs等发行版,但他似乎并未像喜爱Neovim那样喜爱Emacs。他认为Emacs是一个很棒的操作系统,但对其是否是一个好的文本编辑器表示怀疑。

NeoVim配置和使用技巧

  • 一年一次的RC文件编辑规则

    每年只编辑一次他的NeoVim配置文件,避免频繁调整配置而分散注意力。

  • 优化的启动和项目管理

    使用Tmux来管理终端会话,设置自动打开包含NeoVim的会话。

  • 键盘优先的工作流

    整个工作流程都以键盘为中心,使用快捷键快速切换应用程序。

  • Harpoon插件

    自己开发的NeoVim插件,允许快速切换访问常用文件。

  • 键位映射

    将Escape键映射到Caps Lock,方便模式切换。

  • "够用就好"的理念

    不追求完美的编辑器配置,满足于一个"足够好"的状态。

对技术趋势的看法

对DevOps的看法

ThePrimeagen对备受讨论的"DevOps"概念持有一定的怀疑态度。他认为,人们通常将DevOps理解为管理服务器及其生命周期和可靠性。

他经常听到有人说"DevOps不是真实的",认为可能更准确的术语是"平台工程师"、"云工程师"或"基础设施工程师"。在他看来,DevOps的核心职责是确保当一个服务上线后,它能够持续运行,并且负责大规模运营的各种后端工作。

DevOps的必要性

他认为,对于一些简单的网站,例如使用PHP和WordPress构建的小型商家网站,可能并不需要复杂的构建、部署流程,因此DevOps的需求并不明显。只有当业务需要扩展时,才需要雇佣DevOps这样的人。

他还提到,确保服务不宕机也可以认为是SRE(站点可靠性工程师)的工作。他指出,在这个领域,人们对于术语非常讲究,例如区分基础设施工程师和站点可靠性工程师。但他认为,总的来说,当人们想到DevOps时,会想到那些管理服务器及其生命周期和可靠性的人。

最后,他以一种调侃的方式提出了"Vercel是否杀死了DevOps?",暗示云计算服务可能正在改变传统的DevOps角色和需求。这表明他认为DevOps的本质和未来发展是一个被讨论的话题。

DevOps的核心职责

服务器管理

管理服务器及其生命周期,确保服务器正常运行。

服务可靠性

确保当一个服务上线后,它能够持续运行,不会突然消失。

大规模运营

负责能够大规模地运营某些东西的骨干工作。

未来趋势?

"Vercel是否杀死了DevOps?"云计算服务可能正在改变传统的DevOps角色和需求。

对AI代码辅助工具的看法

ThePrimeagen对GitHub Copilot这类AI代码辅助工具的看法是复杂且矛盾的。尽管他最初对这类工具的潜力感到兴奋,但随着使用,他也发现了一些潜在的问题。

积极看法与潜力

  • 最初印象深刻: 当他首次获得GitHub Copilot的早期使用权时,对其能够正确预测if语句感到非常震惊。
  • 提高某些任务的效率: 当处理非常可预测的任务时,AI非常有用,例如与YouTube API交互。
  • 辅助完成枯燥任务: AI可以帮助完成那些不重要但又不得不做的任务,从而减少拖延。
  • 提供不同的代码思路: AI有时会提出与他不同的方法,这让他觉得很酷。
  • 可能提高编程乐趣: 他承认与AI一起编程可能更有趣,尤其是在处理一些孤独的任务时。

潜在问题与担忧

  • 容易进入"自动驾驶"模式: 过度依赖AI会牺牲知识的获取速度,并可能导致一代不称职的程序员。
  • 削弱批判性思考: 在使用Copilot的过程中,更多的是在审查AI生成的代码,而不是真正参与编写。
  • 难以处理复杂技术: AI在处理不熟悉或文档较少的领域(如新兴编程语言Zig)时表现不佳。
  • 可能被用于恶意目的: AI可能被用来生成虚假的bug报告,对开源维护者造成"注意力拒绝"式的攻击。
  • 信任度问题: 高度信任AI的输出是很天真的,应该对其保持怀疑态度。

无法真正"关心"代码质量

AI仅仅是完成任务,而不会像人类开发者那样真正关心代码的质量和改进。AI不具备人类的"品味",无法判断何时代码达到了"恰到好处"的状态。

调试能力不足

他和Lex Fridman都认为,AI在进行复杂的逻辑错误调试方面表现很差,这突显了人类在这一方面的独特能力。

总的来说,ThePrimeagen认为AI代码辅助工具在特定场景下具有提高效率的潜力,但他对其可能带来的负面影响,尤其是在学习、深度思考和代码质量方面,表示担忧。他强调开发者不应过度依赖AI,而应将其视为一种辅助工具,并持续提升自身的核心编程技能。他目前更倾向于将AI应用于非编程领域,例如理解Twitch聊天和进行角色扮演。

对科技公司的看法

ThePrimeagen对科技公司的看法是相对复杂的:

对微软的态度

他对微软的一些产品表示认可,例如VS Code,但对其商业动机可能持保留态度。在谈到Steve Ballmer的"Developers, Developers, Developers"的著名口号时,他只是开玩笑带过。

VS Code "做得很好"。

对大型科技公司商业模式的思考

他认为"公司本身没有好坏之分,它们在道德上是中立的"。真正决定公司行为好坏的是"运营这些公司的人以及他们做出的决定"。

"我们应该始终保持怀疑态度"

对大公司组织结构的观察

在讨论大型公司的组织结构时,他以Netflix和YouTube为例,指出随着公司规模的扩大,各个团队之间需要协调,这可能会影响开发速度。他也提到,一些在早期充满激情和创新的人可能会随着时间的推移而变得懈怠,只是为了舒适的生活而工作,这似乎暗示了他对大型科技公司可能失去创新活力的担忧。

总的来说,ThePrimeagen对微软持有一定的积极看法,至少认可其部分产品。对于大型科技公司的商业模式,他似乎更关注其可能带来的负面影响,例如创新能力的减弱和过度商业化,但他并未对所有大型科技公司一概而论地进行批评。他似乎更关注实际的产品和使用体验,以及公司领导者的决策对产品和用户的影响。

职业转变与内容创作

从传统编程工作到内容创作的转变

ThePrimeagen的职业生涯从传统的编程工作转向内容创作和创业,是由多种因素共同驱动的:

对开发者工具的热爱

他一直很享受为开发者构建工具的领域,这种为他人创造价值的渴望可能促使他转向更直接地面向开发者的内容创作。

创业的渴望

他曾尝试创建自己的初创公司,虽然失败了,但体现了他希望创造属于自己事业的愿望。

工作模式的思考

他提到了在Web Filings工作期间需要每周工作60小时,工作与生活平衡不佳。

价值观的转变

通过内容创作,他能够分享自己的经验和见解,影响和启发更多的人。他在播客中展现出的积极性和感染力表明他享受与他人交流和分享的过程。

个人品牌的形成

他意外走红的胡须成为了他的个人标志。这种独特的形象可能为他从事内容创作提供了辨识度和记忆点。他也认识到,一个独特的"奇怪"的名字更容易被人们记住。

总的来说,ThePrimeagen的职业转变反映了他对工作意义的深入思考,以及对创造性表达和个人自主性的追求。通过内容创作,他不仅能够分享自己的技术知识,还能够表达自己的价值观和人生哲学,同时保持工作与生活的平衡。

有趣的项目与经历

ThePrimeagen分享了一些他最喜欢的项目和有趣的经历:

ASCII版《毁灭战士》

他创建了一个Go程序,将《毁灭战士》转换为ASCII艺术,并通过Twitch聊天控制游戏角色,甚至用自定义的压缩算法优化数据传输。

"这是我最喜欢的项目之一,将游戏转换为ASCII艺术,并通过Twitch聊天进行互动。"

"那个Dict的家伙"

在一次会议上,一位Stack Overflow的员工仅通过他的外表就认出他是之前在网上讨论过"dict"(字典)这个词不雅缩写的那个人。

"这让我感到非常惊讶和有趣,仅仅通过外表就被认出来。"

Ligma恶搞

他和他的朋友Teej以及Pirate Software如何用网络恶搞词语"Ligma"捉弄别人的有趣经历,以及他一开始禁止在聊天中使用这个词,但最终不得不"拥抱这个梗"。

"最初我试图禁止这个词,但后来发现这个梗太流行了,我不得不接受它,甚至开始与之互动。"

推荐与建议

编程学习建议

学习方法

  • 通过实践学习:在缺乏指导的情况下,通过阅读手册、试验和错误来解决问题
  • 系统阅读语言参考:深入理解语言的特性和设计理念
  • 参与实际项目:通过参与实际项目来学习和提升编程技能

语言推荐

  • 第一门编程语言: 对完全的新手推荐JavaScript,因为入门门槛低,视觉反馈快速
  • 值得探索的其他语言: Swift, Elixir, OCaml, Odin,特别是Elixir和OCaml,因为他缺乏扎实的函数式编程语言基础

提高代码质量的实践

警告视为错误

确保代码在编译时没有任何警告,以提高代码质量

使用断言

使用断言来尽早发现代码中的错误,防止错误扩散

确定性模拟测试

通过运行大量的随机数据并使用断言进行确定性模拟测试

编程时的习惯

  • 培养专注力,避免不必要的"副任务"
  • 深入理解所使用的工具,例如文本编辑器
  • 学习Vim motions等高效操作,通过实际操作来学习,例如如何高效地复制和修改代码行

工具推荐

文本编辑器

NeoVim

一个现代化的、可高度定制的文本编辑器,并且强调学习Vim motions以提高效率。ThePrimeagen认为Vim motions在文本操作上的优越性是无可比拟的。

键盘

Kinesis Advantage

他认为其凹面设计和拇指按键群组非常重要,甚至"拯救了他的职业生涯"。这种人体工学设计有助于减少手腕和手指的疲劳。

显示器与操作系统

一个主显示器 + Linux

他倾向于使用一个显示器并利用快捷键在不同任务之间切换。操作系统选择Linux,主要是因为他想要一个好的窗口管理器(他使用的是i3)。

生活与工作态度

关于"工作更聪明而不是更努力"的看法

"work smarter not harder"

"work hard, get smart"

他不完全赞同"work smarter not harder"这个说法,认为应该是"努力工作,变得聪明"。他认为,只有通过持续不断的努力和实践,才能逐渐理解什么是更有效率的方法。

关于"旅程比目的地更重要"的看法

"Journey > Destination"

"Enjoy journey, celebrate destination"

他不喜欢"旅程比目的地更重要"这个说法,认为应该是"享受旅程,庆祝目的地"。这表明他认为过程和结果都很重要,应该在享受过程的同时,也为达成目标而感到自豪。

给年轻程序员的建议

如果编程能带来乐趣,仍然应该学习编程,即使AI在不断进步。他认为编程的乐趣在于构建复杂系统的过程,这种乐趣不会因为AI的发展而消失。

选择游戏

选择那些可以适度享受并成为"终身伴侣"的游戏,而不是让人沉迷并失控的游戏,并提到了《Baldur's Gate》作为一个例子。这反映了他对平衡和适度的重视。

延伸阅读

如果你对ThePrimeagen的思想和技术观点感兴趣,以下是一些推荐的相关书籍和资源:

Pragmatic Programmer

《程序员修炼之道》

作者:Andrew Hunt, David Thomas

这本经典著作探讨了如何成为一名更好的程序员,强调实用主义和持续学习的重要性,与ThePrimeagen关于编程精通之路的观点相呼应。

Clean Code

《代码整洁之道》

作者:Robert C. Martin

这本书讲述了如何编写易于理解和维护的代码,与ThePrimeagen对代码质量的重视和使用断言确保代码正确性的观点相契合。

Rust Programming Language

《Rust编程语言》

作者:Steve Klabnik, Carol Nichols

官方Rust语言指南,深入探讨了Rust的所有权系统和内存安全机制,与ThePrimeagen对Rust语言特性的欣赏相关。

Practical Vim

《实用Vim》

作者:Drew Neil

这本书介绍了Vim的高级使用技巧,帮助读者提高文本编辑效率,与ThePrimeagen对NeoVim和Vim motions的推崇高度相关。

Atomic Habits

《原子习惯》

作者:James Clear

这本书讲述了如何通过微小的改变积累巨大的成果,与ThePrimeagen关于"努力工作,变得聪明"的理念相呼应,强调持续努力的重要性。

在线资源