17611538698
webmaster@21cto.com

“硬核”程序员都是啥样的人?

技术人生 0 663 2024-08-12 07:18:44

图片

在软件开发和编程的世界中,存在一种奇特的现象,人们称之为“硬核主义”或者“硬核程序员”。这个术语描述了对软件开发工具和实践发展的顽固抵制。

以前,资源稀缺而宝贵,这要求程序员必须非常地聪明,才能充分利用系统的每一滴能量。这种必要性形成了习惯和思维模式,在某些情况下,这些习惯和思维模式的存在远远超出了它们的实际用途,变成了一种职业的民间传说。

640K 对任何人来说都足够了。

这句“名言”出自比尔·盖茨之口,尽管他本人现在矢口否认说过,但它却恰如其分地代表了许多“铁杆”程序员对技术创新的态度。

图片

对于这些程序员来说,使用先进的 IDE、图形调试器或 AI 助手等现代工具,几乎就是“异端邪说”,违反了“真正”编程的基本原则,是“软弱无能”的表现。

历史的源头


在计算机发展的早期,当计算机由穿孔卡驱动时,编程就意味着要使用内存和处理器有限的系统。


而那个时代的程序员必须是真正的程序优化大师,能够编写既实用又高效的代码。


也就是这个时代诞生了许多天才杰作和实践,它们在资源受限的环境中依然存在:你曾经尝试过为微控制器或嵌入式系统编程吗?在这里,每个字节的内存和每个时钟周期都很重要,优化的艺术仍然非常活跃,即使一些裂缝开始显现。


随着时间的推移和硬件的发展,许多限制已经消失,但“用更少的资源做更多的事情”的道德观念仍然深深植根于编程文化中,有时甚至转变为一种抵制可以简化和加快开发工作的工具和实践的态度。


"The most efficient code is the code you don't have to write"

代码语言:JSON / 带注释的 JSON  ( json )


“硬核主义”宣言


为了了解你是哪种类型的程序员,这里有一个小测试来评估您的“纯粹性”。试着衡量您对以下说法的同意或不同意程度:


IDE 一点用处也没有


序员应该是斯巴达式的勇士:所用工具越少,能力越强。

"To write code, all I need is Notepad (or Vi) and the CLI"

代码语言:JSON / 带注释的 JSON

这种说法往往带着骄傲和怀旧的情怀。支持这种说法的人似乎想传达:“我是一个真正的程序员;我不需要任何帮助。”

这种立场刻意忽视了现代 IDE 提供的优势。我见过程序员使用如下命令:

copy con: pippo.prg

代码语言:CSS  

他们就像在学校取得高分的人一样感到自豪。

但是我们也不要低估现代 IDE 的优势,首先请让我们摆脱 IDE 只是花哨的文本编辑器的想法。

它们是集成众多功能以提高生产力和代码质量的强大工具:

  • 调试:断点、实时变量检查和改变、逐步代码执行、调用堆栈等。

  • 重构:只需单击即可重命名整个项目中的变量或函数、提取方法或安全地重新组织代码。

  • 静态分析:在执行之前识别潜在的错误、样式违规或有问题的模式。

  • 与版本控制系统集成:直接从 IDE 界面管理分支、提交和合并。

  • 对框架和库的支持:自动完成不仅针对基础库,还针对项目中使用的框架提供具体建议。


这些只是当我进入 70 年代发明的编辑器时,感觉像失去了一只手臂的一部分原因。

说实话,我们不能否认在某些情况下,IDE 可能有点过头了,例如在进行快速更改或在资源有限的远程系统上工作时。在这些情况下,最小的编辑器或任何可以打开文本控制台的东西可能是最好的选择。

对于日常工作和复杂项目,断然拒绝使用现代 IDE 意味着剥夺自己可以显著提高代码质量和程序员生产力以及整个团队的工具(是的,因为代码不仅仅是你的,而是属于所有使用它的人)。

CLI 是解决所有问题的方案


我们不要自欺欺人了;CLI 具有不可否认的魅力。


多年来,黑客弯腰坐在机械键盘上,黑屏上写着绿色文字的电影塑造了一代又一代的程序员。还有什么比通过输入文本命令来控制计算机更强大呢?


这种方法虽然具有高中迷恋的魅力,但它有一系列经常被人忽视的局限性:


  • 学习曲线:记住几个命令很容易;对于新手和不每天使用 CLI 的人来说,记住数十或数百个命令及其所有选项可能会很困难。

  • 数据可视化:某些信息以图形方式呈现时更容易理解。

  • 复杂的操作:某些活动,例如管理 Git 存储库中的分支,通过可视化表示可以变得更加直观。


Git 是 CLI 和 GUI 如何共存并相互补充的一个很好的例子。虽然 Git 的 CLI 提供了精细的控制和通过脚本自动执行操作的能力,但 VSCode 集成等 GUI 工具可以使复杂的操作更易于访问,例如:

  • 使用分支图查看提交历史记录

  • 执行交互式 rebase

  • 使用可视化差异工具解决合并冲突


一如既往,真相就在中间,最明智的方法是掌握这两种工具。使用 CLI 进行快速操作并创建自动化脚本,但如果 GUI 可以提供更清晰的视图或更高效的工作流程,请不要犹豫切换到 GUI。

我们不用 Windows,因为真正的程序员使用 Linux(或 MacOS)


我也记不清有多少个夜晚花在阅读和评论操作系统的“宗教战争”上。



"Winzoz" doesn't work
Linux is great with its 200 versions, all incompatibleForget it, with MacOS everything worksLook, Apple charges you twice what that computer is worth代码语言:HTML、XML (xml )


人们可以永远争论不休,制造充满仇恨和无知的论战,但现实是每个操作系统都有其优点和缺点,声称一个系统优于其他系统是错误的。

程序员应该超越这些酒吧闲聊。这并不会限制他们在某个系统上感到舒适的自由,但戴上眼罩并忽略除首选操作系统之外的其他操作系统的存在是适得其反的。

让我们考虑一下每天在不同平台上工作的好处:

  • 跨平台:在多个平台上开发和测试可确保软件能够为广大用户群正常运作。“一次编写,随处运行”是许多应用程序的重要目标,即使语言确保这一点可以实现,但每个程序员都会尽自己的努力来确保事实并非如此。

  • 灵活性:许多公司使用混合环境,适应能力是一种竞争优势。

  • 理解差异:在不同的系统上工作有助于更好地理解每个系统的特性,提高调试和优化技能。


不要教条地坚持使用单一的操作系统,而应该选择适合正确工作的正确工具,并保持在必要时在不同平台之间移动的灵活性,这是一种更有效的方法。

调试器是为弱者准备的


让我们拆穿一个谣言:

A "real programmer" writes perfect code on the first try

代码语言:JavaScript

这个故事在编程界流传多年。几乎所有著名的程序员都为自己塑造了这样的形象,我们每个人都准备在晚上喝完啤酒后讲述这个故事。

现实情况是,调试和测试是软件开发过程中必不可少且不可避免的部分,这种抵制使用调试工具、将其视为“拐杖”的心态是需要克服的。

我接手过无数次被认为“完成”的软件,这些软件充满了工作测试,但问题逐渐显现,用例、分析和设计问题层出不穷:不,认为程序的初稿可以生成完美的软件,并且测试足以了解什么有效、什么无效,这种是幻想,只是一种幻想。

在这些情况下:日志、调试和新测试变得必要,以了解什么不起作用以及如何修复它。

代码全在我的脑子里!


分析、知识共享和文档是编程中经常被忽视的方面。

I have it all in my head

没有比这更没有成效的短语了,它扼杀了任何形式的讨论和合作。

有一种浪漫的叙事,认为程序员是孤独的天才,能够在自己的头脑中掌握整个复杂系统,并像尼奥看到黑客帝国一样看待他们的软件。


这种方法有一个本质缺陷:人类的大脑虽然很神奇,但它能保留的信息量是有限的。

我们中并非所有人都是丹尼斯·内德里 (Dennis Nedry),那个熟记侏罗纪公园所有代码的程序员,即使我们都是,也让我们记住他的遭遇。

忘记过去是大脑为避免发疯而激活的一种保护形式。这就是为什么记录代码、分享知识和团队合作如此重要。

但即使人的大脑容量无限大,“头脑中的代码”也会成为一个问题,原因如下:

  • 协作:如果代码的功能只有编写代码的人清楚,那么其他人就很难为项目做出贡献或维护该项目。

  • 容易出错:如果代码中没有清晰的文档或注释,很容易忘记重要的细节或做出错误的假设。

  • 入职培训复杂:新团队成员将难以理解和为项目做出贡献。


因此,“铁杆”程序员需要意识到代码是协作的产物,不共享信息不是保住工作最好的办法,而是失去工作最好的方法。

让我们鼓励这些程序员记录文档、编写 Wiki、进行代码审查、使用图表和示意图来分享知识。

重视文档和知识共享的方法不仅使项目更加健壮和可维护,而且还有助于整个团队的专业成长。

程序员不使用 ChatGPT


让我们面对现实吧:人工智能根本不是智能。

Look at how many mistakes ChatGPT makes; it can't replace a programmer


AI会产生一种幻觉,尤其是对人工智能的错误和肤浅使用,导致许多程序员认为它们是无法使用的工具。

不,人工智能不是搜索引擎;它们是可以学习我们工作背景的语言聚合工具,应该这样使用它们。

与这一理论相重叠的是,一种越来越流行的理论认为,未来人工智能将取代程序员。
铁杆程序员不使用这些工具,因为他们不需要它们,因为它们不起作用,因为“我更优秀”。

这些都没错,但只是部分正确。事实是,人工智能是一种可以帮助程序员更快、更少错误地编写代码的工具,但实现这一结果并不需要一小时;需要数周的使用才能了解如何最好地使用这个工具并快速识别它的优点和缺点。

人工智能应该被视为一种增强工具,就像现代 IDE 自动完成功能的演变一样,但能够将完成功能扩展到更广泛、更复杂的环境。

我最近看了电影《阿特拉斯》,很多人可能认为,这不是为了詹妮弗·洛佩兹,而是为了用可能的未来的新形象丰富我的思想。在这部电影中,人工智能被视为人类工作的补充,两者相互改进和增强,共生共存。

对于那些在童年的下午观看《星际迷航》的人来说:这是瓦肯人心灵融合或特里尔共生体的进化。

程序员生活的许多方面都受益于人工智能:

  • 样板生成:AI 可以快速生成基本的代码结构,让程序员专注于更复杂、更有创意的方面。

  • 辅助调试:ChatGPT 等模型可以帮助识别代码中的错误并提出可能的解决方案。

  • 探索新技术:AI可以为程序员不熟悉的框架或库提供解释和使用示例。

  • 优化:提高代码效率或可读性的建议。

  • 测试:生成自动测试来验证工作是否正确运行。


程序员不应该拒绝使用人工智能,而应该将其视为可以提高生产力和工作质量的工具。

结论


编程中的“硬核主义”虽然源于历史的原因,是独创性和优化的象征,但却有可能成为现代软件开发领域创新和效率的障碍。


更为平衡的方法承认传统和经验的价值,但对可以改进开发过程的新技术和方法持开放态度。


经验丰富的程序员的真正标志不是教条地遵循过去的实践,而是批判性地评估和采用最适合每种具体情况的工具和实践的能力。


我钦佩那些铁杆程序员的毅力,但我相信,如果他们有更多的勇气,他们就能从重新评估自己的立场中获得更巨大的利益。

作者:洛逸

评论