放弃精耕细作式的编程吧

放弃精耕细作式的编程吧

是时候放弃精耕细作的写代码方式了。

我们更应该站在宏观的、高阶的、更广阔的视角来审视整个项目:最根本的目标是什么?为了达成目标,我们真正需要什么?而不是纠结于某一处技术细节该如何实现——这类问题,已经可以交给 AI 来协助解决。

若仍执着于事无巨细地掌控每一行代码,即使用上 AI,能带来的提升也相当有限。无非是从挥锄头换成了开拖拉机,效率或许能提升五倍、十倍,但本质上我们依然在「耕地」,而不是「想清楚要种什么、怎么收成」。我们只是换了一件更趁手的工具,却没有换一种角色:从执行者,变成能看见更大图景、设定更高目标的人。

接触 Vibe Coding 的过程

2022 年下半年,我在 GitHub 上了解到 Copilot。在 VS Code 里启用之后,光是「光标后自动补全代码」这一项能力,在当时就让我很受震撼。

在此之前,一旦遇到不熟悉的内容或需要查资料,就不得不把注意力从编辑器切到浏览器,整个写代码的过程不断在「打断 → 恢复 → 再打断 → 再恢复」里循环,非常消耗精力。这种模式贯穿了我 2022 年之前几乎所有的编程时光。但 Copilot 能做的有限:它只能在光标之后做顺序补全,无法在任意位置跳转补全,实际带来的效率提升并不算大。

阅读更多
用 Cursor 快速搭建软件原型

用 Cursor 快速搭建软件原型

Cursor 是一款使用 AI 能力加持的代码编辑器,或者说得更大一点,文本编辑器。正如它在官网所说的那样 Built to make you extraordinarily productive, Cursor is the best way to code with AI. 使用它能够让在编程时更加高效,几倍地提升编码效率,将工程师从平常繁琐、简单、机械、重复的代码编写工作中解放出来,更加专注于分析、建模和解决关键的问题。

但需要说在开头的是,Cursor 无法让零基础的用户变成专精的软件工程师,以能够解决所编写代码中发生的各种疑难杂症,但能让他们轻松搭建出一些有意思的应用,例如简单的网页,便捷的脚本等,真正遇到问题需要定位和调试的时候,往往是需要人类提供指导方案的。Cursor 能够做的是让有一定编程基础的用户更加高效地编写代码,让专业的软件工程师更加专注于解决问题本身。简而言之,让零基础的人玩得起来,让有基础的人更加高效。

本文介绍了我如何使用 Cursor 在业余时间独立完成了一个软件系统的原型搭建、后续演化以及最终部署上线的。

阅读更多
一起来做类型体操吧!😊

一起来做类型体操吧!😊

类型重要吗?

长话短说,类型很重要。

类型的重要性

静态检查

在编程中,类型往往是我们的第一道防线,它可以帮助我们在编译阶段就发现一些潜在的问题,避免一些不必要的错误。在过去,由于 JavaScript 是弱类型、解释型语言,所以在编译阶段无法发现一些类型相关的问题,这就需要我们在运行时进行一些类型检查,这样就会增加一些不必要的开销。而 TypeScript 则是由微软推出的、基于 JavaScript 的强类型语言,它可以在编译阶段就发现一些类型相关的问题,这样就可以避免一些不必要的错误。

当然也不是说用 JavaScript 就一定会出问题,但这要求编程者有更高的责任心和编程能力,能够在编码阶段就提前规避问题,但对于大型项目来说,这是不现实的。不要完全相信任何人的代码,即使是自己的代码。因为人是会犯错的,需要加以约束。在 Web 应用开发过程中,JavaScript 代码如果访问了一个空对象的字段则会导致异常,如果程序有限定错误边界,那么这个错误可能会被忽略,但是如果没有限定错误边界,那么这个错误可能会导致程序崩溃,也就是页面白屏。而使用 TypeScript 配合 IDE 的类型检查、其他静态检查工具,可以在编码、编译和代码合并时就发现并修复这些问题。

类型即文档

另外,用弱类型语言编写的项目一旦涉及到多人协作(甚至是对于现在的自己和过去的自己来说也是如此),就会变得难以维护和协作,因为弱类型语言无法提供足够的信息,所以在多人协作时,很容易出现一些问题。而强类型语言则可以提供足够的信息,帮助我们更好地理解代码,提高代码的可维护性。所以我也认为“类型即文档”。

现在很多语言都有相关工具可以通过类型信息来生成文档,例如 openapi-generator、TypeDoc、JSDoc 等等,通过代码自动生成文档可以帮助开发者省去很多写文档的时间,同时也可以极大程度地提高交流效率。

阅读更多