思考:技术的本质是什么

199 阅读7分钟

作为一名软件工程师,你是否有过这样的体会。随着时代的发展,各种新技术层出不穷,老的技术还没有学会或者精通的时候,又出一种新的语言或者技术对其取代,导致我们需要一直不断的学习各种新的技术。往往大多数情况是上班的时候需要实现公司的业务需求,没有时间或者机会去尝试使用新的技术,只有下班和周末的时间充电。倘若不持续学习新技术,慢慢的就会被淘汰,这样就导致了程序员经常会说一句话:学不动了!

当然了,笔者也陷入了如此的困境,总有学不完的东西摆在眼前,身心疲惫,但又不想这么早摆烂提前退休。就以一个例子说明:前端的构建打包工具:webpack,vite,rollup,esbuild....数十种。 我在webpack3出了的时候就在使用了,到如今升级到了webpack5很多新特性!在webpack还没玩溜的时候,又出现了vite,esbuild等等。光学这些构建工具的使用还不够,得深入原理甚至源码。为什么呢?因为面试要问。抱歉,这么多工具我确实学不动了!!人不是机器,需要休息和生活。

我时常在想如何破局,为什么这么多技术层出不穷,技术的本质又是什么。为什么需要学的东西这么多而杂,就算学会了也没有非常亮眼的产出和好的结果。

最近AI工具异常火爆,我尝试向chatgpt寻找答案

image.png

先说结论:

我结合多年的前端工作经验和自身的思考得出技术的本质:利用工具和方法,解决实际问题,体现业务价值

我在毕业后入行做程序员的时候,前端还没有单独形成一个岗位。那个时候各大企业使用的还是微软.net的一整套解决方案。随着近年来移动互联网兴起,移动web和app越来越流行,前端生态逐渐形成,前端单独形成一个岗位并需求量剧增。接下来我从技术发展的角度来聊一聊前端的发展历程。

静态网页时代

互联网的起步阶段,主要使用HTML(超文本标记语言)和CSS(层叠样式表)来创建简单的静态网页。网页内容和样式的表现力有限。

动态网页时代

为了解决用户与静态页面交互的问题,出现了JavaScript(前端脚本语言),它使得网页可以动态地交互和响应用户操作。动态网页技术如AJAX(异步JavaScript和XML)的出现,实现了异步数据加载,提升了用户体验。

jquery时代

为了解决原生js操作dom的复杂性和浏览器的兼容性,提升开发效率,以jquery库为代表的js库开始流行,如Prototype、MooTools等等

组件化、模块化、工程化时代

react和vue等框架将html/js/css抽象并封装为可重用的组件,解决了复用问题

为了解决一个js文件巨大无比难以维护的问题,CommonJS、AMD、ES Module等横空出世,解决了模块化的问题。

随着项目日益庞大,各种工程化的问题凸显出来,诸如:代码管理和版本控制、自动化构建和打包、模块化开发、静态资源管理、自动化测试、代码规范和静态代码分析、性能优化、持续集成和部署。为了解决这些工程相关的问题,npm、cli、webpack、eslint、jenkins、git等工具被广泛使用。

移动互联网时代-跨端跨平台

随着移动互联网的兴起,跨端跨平台的技术方案可以帮助开发者提升开发效率,减少重复劳动。

  • 响应式设计:采用响应式设计可以根据设备的屏幕大小和分辨率来自适应调整布局和样式,从而提供一致的用户体验。使用CSS媒体查询和弹性布局等技术可以实现响应式设计。

  • 原生跨平台开发框架:例如React Native和Flutter,它们使用JavaScript或Dart来编写应用程序的业务逻辑,并通过底层框架将应用程序渲染为原生组件。这样可以在iOS和Android等不同平台上共享大部分代码,并实现近原生的性能和用户体验。

  • 混合应用开发框架:例如Ionic和PhoneGap/Cordova,它们使用Web技术(HTML、CSS、JavaScript)来构建应用程序,并通过WebView在原生容器中运行。这样可以使用Web技术进行开发,并将应用程序打包为原生应用程序,以在多个平台上发布。

  • 小程序开发:例如微信小程序、支付宝小程序和快应用等,它们提供了一种轻量级的跨平台开发方案,通过使用特定的框架和API,开发人员可以在不同的平台上构建小程序应用。

  • PWA(Progressive Web Apps):PWA是一种基于Web技术的应用程序模型,通过使用现代浏览器提供的一系列特性(如Service Worker、Web App Manifest等),可以使Web应用程序具有离线访问、推送通知等原生应用程序的功能。

云时代-serverless云开发

Serverless云开发是一种新兴的云计算模型,它是指开发者在云平台上进行应用开发时,不需要关心服务器的配置、部署和维护等方面的问题。开发者只需要编写应用程序的业务逻辑代码,然后将其部署到云平台上,云平台会自动管理和分配资源,以满足应用程序的需求。这种模型可以让开发者专注于应用程序的业务逻辑开发,而不需要花费精力和时间在服务器的管理和维护上。Serverless云开发可以提高开发效率、降低开发成本,同时也可以提高应用程序的可伸缩性和可靠性。

Serverless云开可以让我们无需关心环境搭建、部署、运维、底层的计算、存储、网络等资源,只需要关注于核心的业务逻辑实现即可。这将是一件多么美妙的事情。

解决的问题:更快更高效的应用开发方式

低代码、0代码、可视化开发

  1. 低代码平台:低代码平台提供了可视化的开发环境和组件库,开发人员可以通过拖拽和配置的方式构建应用程序的功能模块。这种方式减少了传统编码的需求,使开发过程更快速和可视化。

  2. 无代码平台:无代码平台更进一步地简化了开发过程,开发人员不需要编写任何代码,而是通过配置和定义规则来创建应用程序的逻辑。无代码平台提供了一系列可配置的组件和功能,如表单构建器、工作流管理器和数据库集成等。

  3. 可视化开发工具:可视化开发工具允许开发人员使用图形化界面来设计和创建应用程序的界面和交互。这样的工具提供了拖拽式的界面构建和交互设计功能,使得开发人员无需编写HTML、CSS和JavaScript等代码。

解决的问题:降低了开发门槛,提升开发效率

未来AI时代

AI时代的到来,也许有一天我们真的只需要跟机器对话,就可以完成我们的需求,真正解放劳动力。

纵观前端技术的发展历程,从html/js/css三大件发展至如今的云开发甚至AI时代,每一个新的技术或者轮子都是为了解决现有的问题,进而体现到业务价值。所以学习技术的本质就是如何去学习解决问题的方法和工具。在学习新的技术之前,不妨先思考一下这些技术能解决什么实际问题,盲目的学习一堆api或者框架/库/工具,只会越来越累,因为技术的发展是无止境的,但解决的问题貌似一直都存在,比如性能/稳定性/可维护性/可扩展性等等。

今后笔者的技术文章也会从解决问题的角度去进行阐述,希望大家多多支持。