目前技术圈的发展速度可谓是有目共睹,尤其是前端,每隔一段时间就出新的技术,可以说让很多初学者非常畏惧,没有一个明确的方向不知道从何学起。
同时也有很多人,只局限于使用手头已掌握的技术,而不愿去尝试新技术。举个例子,如今 vue3 都已经正式发布,但仍还有停留在 vue2 不愿尝试 vue3 的开发者。而 java 都发布 18 版本了,可还有很多人都还使用着 java8,这种现象可以说是非常常见了。
这里说说我个人编码经验与看法,仅作为个人观点,没别的意思。
熟悉我的人应该都知道,我对很多新鲜的技术有一种难以用言语表达的情感,又哭又笑。属于是那种看到感兴趣的就会开始尝试,在之前也许更强烈。
驱使我去接触的原因无非就以下几点:
- 开发体验、性能提升
- 对已有技术的厌倦感和对新鲜事物的好奇心
- 更多机会与方向
- 对未来技术趋势有更好的了解
写不完的代码
首先要知道一点,在任何的软件开发迭代中都没有最终形态的代码。说白话就是代码都是不断更新的,永远写不出最好的代码。
你能看到如今很多开源项目或者商业项目都在不断新增代码或者功能,除非作者不维护了,不然这份代码可以说写到世界末日。
究其原因还是因为社会不断在发展,硬件升级,性能提升,不断的业务需求。毕竟人都在进步,社会难道还不能进步。所以必然会有新的技术出现,只是出现 的时间快慢,与技术难点突破。
开发体验、性能提升
毋庸置疑,在购买方面,肯定是买新不买旧,同样的在技术(软件更新)方面也是则从用新不用旧。驱使软件和框架更新的原因也就是新增了某些功能(特性),对用户(开发者)的体验有所提升。一般而言比较少的会存在反向更新的操作,这里除了某些国产软件~~(如某信,某 Q 等等)~~
就我对此的看法也是如此,假设一个开发工具启动花费了 5s 钟启动,而在它的最新版只需要 1s 钟就能够启动,你会选择更新尝试吗?。再比如一个框架原先的代码需要 10 行代码才能实现的功能,由于新版本提供一个语言级别的语法糖,使该功能只需一行。
并且我对开发体验非常在意,尤其是不好用,或者不好配置的东西,我基本秉持能不用就不用的原则,像 vue2 与 webpack 就是这样,我跟愿意使用 vue3 或 vite。诸如此类的替换有非常多,便不一一列举。
要我肯定毫不犹豫的更新去使用,但有些人可能对此提升不是很在意,又或者是升级的成本相对较高,也可能是因为这个开发工具(框架)他用的比较少,更新的意义自然就不大。
对代码厌倦和对新事物的好奇心
我写代码时常处于三分钟热度的状态,有些东西可能也就一开始的时候感觉比较新奇,然后就不了了之了。我对此的看法主要还是容易对代码产生厌倦感, 不想写代码,不愿意学习。当厌倦感产生了,自然而然就放弃编写,也就是三分钟热度的状态。不过也能侧重体验一点,那就是肯定我对此不是那么感兴趣,既然不是那么感兴趣的东西,又何必在写下去呢?
接着过段时间又遇到了一个新的技术,冲击了我的好奇心,开始尝试。 如此重复,就会发现啥都学了一点,但实际是啥都没学到。但至少,让我肯去学习,而不是在原地踏步。而从心底里就想接触的新鲜事物,每次接触到就能满足自己内心的好奇心,就这一点我便知足了。
重构的艺术
如果回头看看自己 1,2 年前写的代码,会发现原来自己也曾写过丑陋不堪的代码,也成为过自己所讨厌的样子。如果这份代码我将来还会用到,那么我就尝试去重构,也许在当时还不支持某种特性,代码就无法简化。基于现有的水平,便会发现很多代码都有可改善的地方,可以化繁为简。代码重构属于将杂乱摆放的东西,收拾的整整齐齐的样子。重构是在提升观赏度和舒适度的同时,还减少 bug 的诱发概率。
在编程语言级别水平上,也就是我为什么会想去使用最新的版本(ES2022,TypeScript 4.9),即便是兼容性的问题,我也会去使用,就是因为能够满足我对代码的舒适度,这便足以。
生态与解决问题方面
我是很感谢新技术的出现,他实实在在的解决了一些我已有的痛点,提升了我的开发体 验。当然它也让我踩了无数的坑,也折磨过我。但不可否认的是,我的自我解决问题的能力也在不断提升,如果我学的是一门比较流行的技术,那么我所遇到的问题,很有可能别人也遇到过,并将他的解决方案分享出来。而我就很容易根据报错描述找他的解决方案来解决我的问题。但在新技术下,用的人自然而然就少了,所分享的问题解决方案也就少了,所以在这种环境下,我就需要自行翻看源码,查阅文档,提出 issues 才能够解决问题。自然而然解决问题的能力也就有所提升。
像流行框架能有这么有问题解决方案,就是因为强大的生态,同时这也是生态好处之一。
因此也有很多人顾忌使用新技术,就是因为遇到问题不知如何解决。包括我也是,但通常我会观察一段时间,等成熟了我才去尝试,而不是直接上手,避免踩一些不必要且耗时的坑。
总是活在舒适圈
在圈内有着熟悉的环境,与认识的人相处,做自己会做的事,所以会感到很轻松、很自在。但是当踏出这个圈子的界限的时候,就马上会面对不熟悉的变化与挑战,因而感到不舒适,很自然的想要退回到舒适圈内。
我在阅读英文博客的时候,我也时常感到不舒适,阅读不下去。我也很想回到舒适圈,使用翻译软件来翻译但是这样就会导致我非常依赖翻译软件,就间接失去了一次英文环境与英语能力的提升。
长时间待在舒适圈,会让自己过得很舒服,但是却很难提升自己。不过想想也是,提升的过程不就是苦尽甘来。
以目前来看有一种这样的学习趋势,别人学什么,当下什么技术火,就去学什么。我其实特别反感这种现象,也不推崇这种学习理念。我会做出我的解释:
首先,什么技术会火就学什么,这固然没什么问题,如果一门技术没有热度,没有生态,那么学了的意义不大,一是难有长久稳定的技术发展,二是不能将技术变现。而绝大多数人之所以选择火的技术,有很大一点是因为有前人给他铺了很多“路”,如学习指南,思维导图,视频教程仿佛跟着学就能成为编程大牛似的。可一旦没有这些,就不知道该如何下手。始终都是跟着别人步伐学习,思维很难扩散出去。
并且这种现象必然会导致内卷,首先看看国内的技术,Vue 和 Spring boot 的可以说 10 个 web 开发程序员中有 8 个技术栈是这套,比麻花还是卷了,可薪资呢?
这里我并不想贴相关的薪资图片,你完全可以自行去了解,但是我可以肯定且直接告诉你,React 的薪资普遍会比 Vue 高上一截,而 Java 后端开发,如果技术只停留在 CRUD 的层面,工资普遍也高不了多少。
如果你不去拓展自身的技术栈,不多去了解一些未来的可能会火的技术,还停留在当下,活在舒适圈。那么薪资大概率不变,并且自身会有很大被劝退的概率。
与时俱进,这是我认为不断学习新技术,提升自身技术栈,非常重要的一点。过得舒服,反而过得难受
更多的机会与方向
技术更新迭代越来,也带来越多的机会,这对于接触前端的我感到尤为明显。假设当下又出了某某技术,那么必然会引起软件开发者的关注,于此同时就带 来了维护者,贡献者,甚至是一些金主投资商。像 Tailwind CSS 与 Vercel 就是一个很好的例子,两个前端明星项目,有兴趣可以了解它们的故事。
不过这种机会在国内不太多见,反而在国外特别普遍。
但必须要承认的一个事实,如今技术发展过于迅猛,加上目前就业行情不容乐观,当别人了解过的东西,你却不了解,那么别人所能遇到的机会自然就比你多。说的难听点也就是没有对技术提升的想法,今后项目迭代的过程中使用到一些前沿技术就难以胜任。
没有目标的学习,等同于乱学
没有一个明确的目标,学任何(新)技术都是乱学,充其量也就只比不学好一点。
我相信很多初学者也会遇到类似的问题,不知道学什么,想学好找工作的但是薪资不高,想学感兴趣的但又不知如何下手。说实话,要我回到当初,我也难以抉择。也有可能处于摆烂状态或是乱学一同,到头来啥都会一点点,但是又好像啥也不会的样子。
这里我是奉劝先定一个短期的目标,为了这个目标我要去学习哪些技术知识。这里就说我未来一年的目标为例:我未来一年想写开源项目,为开源社区做一份微薄贡献,乃至从事开源行业。那么我就需要了解写开源我需要那些预备知识,例如 Github 的使用,项目规范,英文交流等对应开源项目的技能知识,这才是我所该学的,并且能够实实在在用到的,且对我未来有用的 。
对未来技术趋势有更好的了解
**当你了解的技术越多,你就越能知道自己适合哪些技术。**并且当你去尝试过后,更能加深你对某个技术的信仰。
在未来技术只会越来越多,因为当下要解决太多问题,有太多的业务需求开发。只要不断有需求,就不断会有技术更新。但技术更新必然是朝着好的方向去发展,即技术趋势方向。而了解的越多,能看到技术趋势也就更远,方向就更难偏移。
像我目前就比较看好未来 js/ts 的发展,这也是使我从逆向和爬虫转到 Web 开发行业上,并且将会长期发展下去。
但很多程序员就缺乏这种对技术的认可,甚至眼光比较浅薄,认为自己当下所学的就足以,可没却从未到真正的”外面”去看过。
当有了对未来技术趋势的了解,自身就有相对明确的目标学习,而不是漫无目的学习,跟风学习。
我是如何了解到这些技术的?
也许有些人并不在意新技术是否学习,而是好奇我是如何知道这些技术的。这个问题非常好,我自己简单总结通过那些途径来获取到这些相关技术的新闻。
主要有以下几种来源:
- 多加技术群,不定时看群聊
- 多刷技术大佬文章(推特),或者是技术公众号和掘金(最多的也是最有效的)
- 订阅一些技术周刊,或订阅某个项目