1995年《书呆子的胜利》(一部关于微软崛起的纪录片,原名《The Triumph of Nerds》)节目组采访乔布斯乔布斯在一个采访中表达了一个观点——所有人都应该学习编程。
虽然他并没有指定具体是哪种语言,避免了所谓的语言之争,而且更多指的是编程这种与机器交流的方式,以及锻炼程序化的思维。但在当时说出这句话的那个时候,在系统编程领域内如日中天的还是C和C++这两个老大哥。 这两种语言高效、稳定、强大,几乎可以做出任何想做的事情,可缺点也很明显——对于那些刚开始想要学习编程的初学者不太友好。稍微上网搜索一下编程小白们的困惑就会意识到这一点,对于非英语母语编程者更甚。 当然了,这些都是小问题,毕竟谁学编程一上来顺利呢。谁没碰到过几个拼写、环境变量、空/野指针、死循环、网络、bug、并发……等问题呢,但这些不过是编程路上的沟沟坎坎,相比于编程学习路上的艰难险阻不值一提。比如,有个鸿沟一样的问题摆在编程初学者的面前,那就是如何一直保持学习编程的兴趣。毕竟大部分人都是从c语言的黑底白字的“Hello world”开始学起的,但不少人并不是因为想在命令行打印“Hello world”来学编程的,吸引他们学习编程的原因可能是游戏、网站、应用, 又或者是高薪、高端、高效,但大概率不是黑乎乎的命令行输出的一通不知所云的warning和error。 大部分编程初学者都会遇到这样一个瓶颈期,即在练完了两数之和、大小写转换、闰年判断、水仙花数、各种排序等传统编程练习题之后,抬头拔剑四顾心茫然。虽然听说c/c++很强大,从操作系统到网络开发到处都有,但要一个刚入门的小白写个linux最小系统练手?或者写个最简单的chrome?或者写个盗版的《穿越火线》?可仔细想想就知道不可能。 那编程初学者还能做什么?可以写个基础版的贪吃蛇,有多简单呢,简单到没有任何图像,只有方块和圆点等基础符号构成的画面。虽然已经如此基础了,但对于小白而言,各种碰撞检测、边界检测、计分规则等问题都能难住他们一天。
情况更糟糕的是,编程不像做饭,网上有各种教程,遇到问题和村口大娘们都能唠两句。每个人的代码都不同,每个人的环境、设置、版本都不同,遇到问题可能也很难及时在网上得到帮助。在这种经常遇到问题或错误,又得不到及时解决,一个bug查一天的情况下,很多刚还因为打印出“hello world”的激情就逐渐消退了,毕竟外面的世界是真精彩,而代码是越看越无聊。
虽然各种其他语言的出现使得这些问题在一定程度上得到了缓解,比如 Go 更简洁,Java 更通用,Python 更简便,Rust 更安全,JavaScript 更随意,但对于小白而言,遇到的问题只多不少,因为编程的本质还是使用机器能看懂的语言与机器交流。我曾在几年前和学计算机的同学讨论过自然语言编程的可能性,当时 GPT 还未出现,他们的自然语言处理研究课题还前途未卜。几番讨论后,我们认为自然语言编程困难重重,几乎不可能实现。然而,大模型的出现从另一个角度解决了这个问题,我们今天正在看到自然语言编程的初现。 以前,等你看完了某种语言的关键词,你以为已经学会了该语言,其实还只是脚指头刚接触到门槛。但现在,即使你还不知道某种语言的关键词,你就能直接开始用cursor、trae、通义灵码、copilot等AI编辑器,或者gpt、腾讯元宝、字节豆包等在线大模型,直接通过打字或口述的方式让其帮你实现一个编程任务。 虽然在 C++ 或 Java 等大项目尤其是编译型语言上的效果还没那么好,但对于 Python、JavaScript、HTML 等无需编译直接运行的编程语言,大模型甚至可以直接完成写代码、执行、检查、修改、部署的流程,只要任务在千百行代码内且没有很复杂的算法或任务,就能在几分钟内得到一个可以直接运行、观看、演示的初版,在一小时内得到一个七八十分效果的修改版。
自此,写代码不再是从 import、include 开始写起,而是从 “我需要完成…… 任务,需要哪些功能,以下是…… 参考” 开始写起,最后也不是花半天时间才在黑乎乎的命令行打印出几个简单字词,而是能够做出完整的带网络、文件输入、图像 / 文件 / 音频输出、图形界面、动画的程序。虽然可能花里胡哨没太大用处,但正是这样的一个一个小成就,激励着更多的人能在学习编程、利用编程、理解编程这条路上走得更远。
从此,debug 不再是苦苦在日志中寻找、在搜索结果中逐一浏览,不再是深夜一个人孤单挣扎,不再是长时间毫无结果。因为 AI 可以从漫长的报告中查找重点,从互联网上快速提取有效信息,在你困惑抓狂时耐心给你建议。编程不再是苦苦对着计算机严格准确冰冷的终端思索,而是在 AI 简约细腻温暖的对话窗口中循序渐进地讨论。
|