Skip to content
Go back

学习基础知识,而非框架

我们开发者喜欢新事物,大多数人都是早期adopter。当某个新技术出现时,我们会急于尝试,查看教程,做”Hello World”示例。这种感觉很好,因为我们学到了新东西。

问题在于,我们行业中的大部分知识生命周期很短。大多数框架在2到5年之间达到顶峰。当你真正精通某项技术时,它可能已经成为遗留系统了。

随着AI代码生成器的兴起,这个过程加速了。人们在使用从未真正学透的技术进行”氛围编程”。

另一方面,那些投资于基础知识的人可以快速适应新技术,因为他们理解底层原理。所以,与其急于学习本月的新框架,我们应该花更多时间学习那些不会改变的东西。

框架的生命周期确实很短

如果你在这个行业待的时间足够长,你会看到许多流行框架的兴起、巅峰和衰落,整个过程只需几年时间。还记得GWT、Apache Tapestry、Backbone.js或Knockout.js这些框架吗?它们在当时非常流行。

Stack Overflow对JavaScript框架流量的分析清楚地显示了这一趋势。崛起、达到顶峰、然后逐渐衰落,整个过程只需几年。2011年左右,Backbone、Knockout和Ember是”当红”框架。到2015年,Angular 1.x不再受支持,Angular 2.0要求开发者重写应用程序。

技术寿命也有层次结构:编程语言的选择可以持续10年以上,数据库7-10年,后端框架3-5年,而前端框架大约只有18个月。

代码半衰期的数据也证实了这一点。Erik Bernhardsson分析了26个以上的开源项目,计算出的中位半衰期为3.33年。前端框架如Angular处于这个范围的极短端,只有0.32年,而Linux的数字是6.6年。越往技术栈上层走,生命周期就越短。

基础知识为什么重要

当你理解基础知识时,你就理解了各种框架和编程语言运作的原理和概念。这帮助你在编程中变得适应性强、灵活,可以使用各种技术,或者当你使用的框架无法实现某些功能时能够应对。

编程语言各不相同,但设计缺陷在所有语言中都是相似的。糟糕的命名在所有语言中都是糟糕的。框架不同,但设计模式相似。技术栈不同,但并发、数据结构、分布式系统和整洁架构的原理是相似的。

对基础知识的良好理解帮助你更高效地使用这些框架,因为你知道如何让这些框架适合你的需求。你不只是在跟随教程,而是理解底层发生了什么。

举个例子,假设有一个允许用户上传/分享图片的Web应用程序。也许你用流行的Web框架(如Ruby on Rails)快速编写了它,一开始运行良好。但随着用户群的增长,你遇到了性能问题。现在该怎么办?找出根本原因并不容易,你需要了解代码如何在基础设施上运行,那里发生了什么,如何读取日志等。懂得基础知识的开发者可以识别这样的瓶颈并提出解决方案,比如使用CDN、优化图片分享、添加合适的缓存、使用不同类型的存储等。

解决方案不是来自文档或代码助手,而是来自对事物如何运作的深刻理解。

AI放大了基础知识的价值,也暴露了基础知识的缺失

据估计,如今AI工具生成了所有代码的41%,你可能会认为基础知识不那么重要了。为什么要费心了解底层,如果AI可以写代码的话?

因为AI写代码,但你要承担责任。

AI编码助手擅长语法、样板代码和模式建议。但它们不擅长理解上下文。它们不会参加高级领导团队讨论成本与性能的会议。它们不理解客户服务系统必须设计为五个9的可用性,而内部仪表板可以容忍停机时间。它们无法在有人说应用程序必须快时读懂言外之意,实际上他们的意思是”让它便宜”。它们无法把这些点连接起来。

统计数据也显示了风险:48%的AI生成代码存在高安全漏洞风险,在没有适当审查的情况下,AI生成代码中发现缺陷的可能性是1.7倍。只有33%的开发者完全信任AI生成的代码。这意味着大多数AI代码需要像初级开发者代码一样的审查。必须有人足够理解它,才能发现错误。

因此,调试、审查和验证AI代码已成为关键技能,没有坚实的基础你做不到这些!

没有基础知识,调试AI编写的代码几乎是不可能的。你无法解释为什么程序能工作,程序何时会失败,甚至无法调整程序以适应未知场景。你的AI助手可能会帮忙,但它也可能把你引向错误的方向,修复的代价会太高。

AI时代最有价值的开发者不是那些能生成最好提示词的人,而是知道底层发生了什么的人。能够接受AI的输出并改进它,使其能抵御长期失败的人。

没有基础知识的AI是一种负担。

成为专家型通才

程序开发的每一次重大进步都遵循相同的模式。早期的汇编语言程序员被告知编译器的存在会让他们落后。相反,编译器使他们能够在更高的抽象层次上开发。运维工程师被告知云计算会让他们的职业消失。相反,它催生了新项目、新公司和工程工作的爆发。

AI也是如此。降低进入门槛并不会消除对技能的需求,反而会增加需求。随着AI做越来越多的代码工作,留给人类的工作越来越少,但都是硬核工作:理解系统、做架构决策、权衡取舍、表达意图。

这可以用杰文斯悖论很好地解释。1865年,经济学家威廉·杰文斯观察到一个有趣的现象:随着蒸汽机燃烧煤炭的效率提高,煤炭消费量上升了。为什么?效率释放了新的用例。突然间,煤炭对之前负担不起的行业来说在经济上变得可行。

这种效应现在在科技行业显现。随着AI token成本下降10倍,使用量上升了100倍。公司现在每个任务使用更多token,因为他们能负担得起更高的准确性。

正如Werner Vogels在他的文章《文艺复兴开发者的黎明》中所指出的,在这个AI增强的世界中表现出色的开发者必须将自己重塑为通才。他们意识到系统是活生生的、动态的环境,不断变化,影响服务、API、数据库、基础设施和人际互动。他们是所生产内容的主人,在质量、安全和意图方面。他们在AI无法协助的领域也很有知识。

我们需要通过提高好奇心、系统思维、系统设计、架构、沟通技能、主人翁意识、商业敏锐度等来成为专家型通才。此外,我们需要擅长代码验证和审查,因为当AI犯错时,我们需要知道如何处理。

“专家型通才”可以被认为是能够走进一个混乱的新问题,快速理解系统,识别正确的杠杆,并在没有手把手指导的情况下解决问题的工程师。不是万事通,而是在所有重要领域都有深度的高能动性连接者。

学习的80/20法则

那么,你应该如何安排学习时间来实现这一目标?有一个强大的启发式方法可以考虑:80%的学习时间应该花在基础主题上,20%花在框架、库和工具上。

为什么?因为你可能最终会在工作中学习所有这些框架,处理实际问题。没有人会在工作中教你分布式计算模式、整洁代码和良好的系统设计。这些都要靠你自己。

当你开始学习某样东西时,想想林迪效应如何影响它。这个效应指出,某样东西使用的时间越长,它继续被使用的可能性就越大。C、SQL、HTTP和REST已经有几十年的历史了,但仍然无处不在。那个炙手可热的新框架可能两年内就会消失。所以不要急于学习每一个新工具。

记住,时间是你最好的过滤器。投资于可以跨工作、团队和领域迁移的基础知识。让炒作沉淀下来。能够存活下来的才值得学习。

值得投资的基础知识

经典书籍推荐

如果你真的想投资于基础知识,以下书籍经受住了时间的考验:

总结

下次当你想花周末时间学习最新”热门”框架时,退一步问问自己:五年后这还会相关吗?

框架来来去去,JavaScript有一个过度拥挤的框架墓地。AI正在以分钟为单位生成代码,虽然一些开发者被限制在严格按照特定框架规则编程,但他们很快就会被超越。不是被AI超越,而是被那些掌握底层原理的其他开发者超越。

学习框架是必要的,因为要交付产品。但真正的内核应该是基础知识。这是跨公司、团队和数十年都能迁移的东西。它们不会过期。在AI为你编写代码的时代,基础知识是让你具备适应性和韧性的唯一东西。

记住,框架会来来去去,但良好设计的底层原理永远存在。专注于基础知识。它们不会过期,而且会让学习新工具变得容易得多。


Tags


Next

生产环境中监控 .NET 应用程序的完整指南