我的编程之路
启蒙
我最早接触编程是在微机课上。
那时学的是海龟画图:输入一串代码,小海龟就会在屏幕上画出各种图案。
我学得比较快,课堂练习总是提前完成,然后开始自由发挥。
记得有一次,我画了一个自己觉得很厉害的图形,结果还被旁边的女同学夸了。
再后来,课堂上接触了 Scratch。
不得不说,这个工具在编程启蒙方面真的很适合学生。
老师还带着我们用它做过小游戏,那种“亲手做出一个能跑的东西”的成就感,让我印象很深。
迈步
当初选专业时,我就想着走计算机方向,因为我对这一领域非常感兴趣。
那时学校宣传“云计算”,我觉得计算机发展那么快,将来一定会普及,于是报了计算机网络应用专业。
课程内容的确名副其实:
- 网页设计
- 网络爬虫
- 网络攻防
- 服务器运维
- 数据库
- 云桌面、云存储、云服务
- 网络布线、网络设备
可以说凡是和网络应用相关的,都学了一遍。
不过这些大多是入门级,都是“师父领进门,修行在个人”。
入门
当时学网页设计,用的还是 Sublime Text 而不是 VSCode。
老师的教法就是放代码让我们抄,抄多了对于一些实现就有了一定的了解。
因为初学,很多地方没注意,所以抄都能抄错。
然后老师就来帮助我们解决错误,我们就记住了这个问题如何避免。
说老师会教吧,就会让抄代码。说不会吧,通过错误来教学又比干讲好多了。
不得不说,前端对初学者来说非常直观易得,于是我在前端方向深钻下去。
最初 HTML、CSS、JS 都写在同一个文件里,后来拆成三个文件,再到三个文件夹。接着学了 jQuery、Bootstrap。
那会学这些是真的动手抄过代码,因为 API 太多了,我觉得好记性不如烂笔头。
后面想通了,觉得会用会查就好,没必要死记硬背。就没手抄了。
在学 DOM 操作时,我想到:
为什么不能复用 HTML 片段?
于是我把 HTML 抽成字符串,拼接数据,再赋给容器的 innerHTML
。
这算是我第一次接触到组件化思想。
修行
有了一定基础后,我开始自学,当时也不知道看文档,用的菜鸟教程。
相比视频,我更喜欢文字教程,我觉得一句话能说清的事没必要拍成视频。
当时主要流行的三大框架是 Vue、React、Angular。
因为国内更流行 Vue,我便专注于学习 Vue。
最开始学习的时候还不像现在,各种框架,SFC ,DSL 层出不穷。我是从 CDN 链接开始的,在 HTML 中写的内嵌。就是下面这种:
<div id="app">{{ message }}</div>
<script>
new Vue({
el: '#app',
data: {
message: 'content'
}
})
</script>
那会我写了一个购物车 Demo,了解了用框架和原生实现的差异。
慢慢的学了 AJAX 请求(当时还用 XHR,不像现在有 fetch)。
在之后,我了解到了脚手架的概念,觉得很不错,通过脚手架就可以直接将项目搭建起来,而不是手动的一个个创建。
当时的脚手架还是 @vue/cli
,我也就此接触到了 Node, NPM 包管理这些。
用脚手架之后,接触了 .vue
文件,就此了解到了 SFC 概念,接着延伸出了 Babel 转译,Webpack 打包。
之后,了解到了 CSS 预处理器,当时学的 Less,体验了嵌套,混合,变量这些的强大。
初学 TS 时,我觉得很顺手:JS 太灵活,而 TS 给它加了约束。那时我甚至会写出:type JSON = { [index: string]: any }
。
然后在使用脚手架时,看见了“测试”选项,知道了测试的重要性,学习了 Jest, NightWatch 这些来做单元测试和自动化测试。
后来,我看见 React 的 JSX,想尝试一下,搜了一下就开始在 Vue 中使用了。不得不说,JSX 是真的很灵活。
转换
前端弄多了就想更进一步,于是我就想研究一下后端。
当时其实是想学 Java 的,但接触了 Node 之后,我了解到了 JS 也可以写后端。
所以就去学了 Express。然后就想写一个项目。
最初的设想好像是博客还是论坛啥的。我都是自己摸索的。然后老师和我说让我先确定需求。
于是我就开始了解项目需求文档该如何写:
- 确定需求背景。
- 项目预计期望。
- 项目术语定义。
- 技术方案选项。
- 功能模块划分。
- 用户输入输出。
- 绘制功能流程。
写了一堆,然后做项目的时候看都不看。
这也导致了写了一堆后端代码,前端不知道如何下手。
那会连接数据库还是手写 SQL,自己封装查询,用久了就觉得好繁琐,想把这些封装起来,弄成对象的形式来操作。后来接触 TypeORM 时才知道这是 ORM 思想。
慢慢的,后端写多了,我就觉得那些常用的处理很繁琐,就对那些处理进行封装。于是就写了一个 Controller
类,将常用的处理,诸如权限验证,参数校验,响应处理都封装进去了。
然后调用的时候把参数定义,路由处理绑定进去就可以了。
工作
现在我的工作技术栈是 React + Next.js。
在工作前,其实我对 React 只略有了解。
某次面试前,我临时搭了一个项目快速过了一遍。
面试官一问:“哦,你是 Hook 版本开始学的吧”,然后面试就没下文了。
后来入职了现在的公司,技术栈全是 Next.js。
框架原理其实相通,本质都是为了提升开发效率。
所以入职那天上午,我过了一下官方文档,下午就直接找带我的同事要需求做了。
公司规模较小,我来的时候后端还是二开的,搞得很多东西问就是这样的,我不了解别乱说。
但不管怎么说,当拿条数据要走十几层属性的时候,这个项目好也好不到哪去。
目前
来公司的这些时间,我也没有闲着,也有不断拓展技术栈与视野。
也写了很多技术文章来介绍这些技术。除了熟练掌握 React、Next.js 等前端框架外,还主动学习了 Rust、Go、Lua 等多种编程语言,提升了跨语言的理解能力。
了解了纯函数,约定优于配置,原子化等编程思想
在后端技术上深入研究了 NestJS 和 TypeORM,掌握了依赖注入等设计理念。
同时,我关注国际化处理,低代码设计等实际业务需求,提升解决复杂问题的能力。
通过撰写技术文章,我不仅巩固了知识,也与社区分享交流,实现了专业成长的良性循环。