一. 前言
最近很多小伙伴儿咨询我关于学习技术方面的问题,我都一一回复了。这里也专门出一个总结,关于我个人这些年入门新的编程语言和框架的经验和技巧,来跟大家分享一下,希望能够所有帮助。
本次分享分为两个时期:
- 有编程经验时期
- 新手时期
二. 有编程经验时期
当我有了一定开发经验后,去学习一个新的编程语言或者框架,我会注意如下两点:
1. 寻找共性
编程语言
所有的编程语言或者框架,都不是凭空产生的。当前比较流行的语言,大都是类C语言,比如我们常见的Java、Python、JavaScript、Golang等等。
所以,我们学习的编程语言,除了特有的特性,大都是相似的,也就是它们的共性。我们只要理解和掌握这些类C语言的共性,就可以很快地掌握一门新的编程语言。
那么,哪些是共性呢?比如说变量、常量、运算符、判断、循环、函数、面向对象等等。
我们在学习一门新的编程语言的时候,是不是必然要学习如上这些共性的知识点?
那么,当你已经有一个编程语言的基础后,当你在学习和写代码的时候,这些共性可以直接使用你已学会的编程语言的知识去代入。
举个例子,比如我已经会Go了(不过,当你先学Go的话,可能不太知道面向对象是什么/狗头),要去学一下Python。
我需要做的就是代入:
-
Go语言声明变量是
a := 1
,考虑到Python没有强类型,那么就直接a = 1
就完事了。 -
Go语言声明函数是
func aFunction(username String) {}
,那么Python不过是换了个关键词,去掉了强类型,变成def aFunctino(username):
,当然Python如果要申明类型也是可以的,写成def login(username: str):
。 -
其中,比如运算符大都是一样的,判断也是类似。
-
但是突然你发现,怎么Python的循环不一样,然后发现Python的循环好方便,但是其实原理还是和Go一样的。甚至,当你遇到不知道怎么处理的时候,直接来一波
for (i := 0; i < count; i++)
。当然,Python没法这么写。
除了我举的这些例子,还有比如正则、数据类型、数据结构等等,都可以作为共性来代入。
框架
其实,框架也是如此。此处以web框架为例,比如Python的Flask、Django、FastApi,Go的Gin,Node的express,Java的SpringBoot等,都是比较熟知的框架。
这些Web框架,都是依托于网络的,大都是http(s)请求,甚至其他TCP请求。我们可以只在网络层面来看,它们共性就是request和response。所以在网络层面就可以理解为,后端web框架就是一个接收request和response的东西。
那么,看具体框架的功能上,可以抽象出路由、中间件。
所以,对于一个web框架,其共性为request、response、路由、中间件。
因此,我们不管是使用Flask、Gin还是SpringBootd等,可以使用我们已有的框架知识去代入:
- 如何接收request,比如获取request body、headers等
- 如何使用中间件处理,比如使用中间件鉴权、传递上下文等
- 如何配置路由,让接口对外暴露
- 如何返回response,比如返回http status code、json等
那么,就可以完成一个新的web框架的入门了。
其它
除了编程语言和框架,其实还有很多别的都是拥有共性,可以快速入门的,比如Nginx和Apache,比如Linux发行版本,比如Kong和ApiSix,比如不同的数据库等等。甚至最近我发现,wasm并不是前端特有的,EBPF也在用wasm。
2. 看官方文档
编程语言的情况还比较少,更多是学习框架时,一定要看官方文档。
网上虽然有很多教程,但是毕竟是二次加工的,可能存在信息遗漏、版本更新等等问题。
官方文档可能比较生涩,但是它是最全最新的一手文档,会非常有助于少走弯路。
再次强调,一定要看官方文档!
二. 新手时期
当我还是新手的时候,我其实也常常苦恼于入门——教程看了好多遍,跟着教程敲了一遍又一遍,感觉还是只会基础,自己想写点什么却不会。
后来,当我入门一段时间后,我返回去想一想,才想明白一些技巧。
所以,以我的经历,总结如下步骤:
1. 仅学基础
一开始的时候,我也是不停地啃教程,不管是文档还是视频,但是发现我还是只会基础理论知识,那些高级特性案例都敲了,却并不明白什么意思。
后来,我就发现,对于我而言,并不需要学太多,只要学会基础即可,甚至基础也不用太深入。
2. 自己构思写一个项目
跟着教程敲代码,效果甚微。
要自己构思一个项目,比如写一个TODO,写一个命令行聊天工具,写一个博客等等简单的程序。最好是自己感兴趣的领域。
但是,需要注意的是,一定要自己去构思如何写:
- 你准备写一个什么程序?要达到什么效果?
- 写这个程序有哪些功能?
- 这些功能都应该怎么实现?
然后,直接开始写代码!哪怕只是创建了几个文件。
只有自己思考的,才能深刻理解和记忆。
3. 不会就去学,不懂就复制过来用
当然,因为仅仅学了基础,你会发现很多功能并不会,甚至比如如何读取一个文件都不会。
如果这时候,遇到不会的,就当场去学,哪怕是高级特性,学到把不会的这个点能做出来为止。
如果一个功能不懂什么意思,搞不明白,那么直接复制过来,调试到能满足功能为止,然后将这段代码和这个场景记住。
4. 多写代码,迈过门槛
我一直觉得写代码有一个门槛,在迈过门槛前,学习会非常困难,但是,一旦迈过这个门槛,你就会发现,学起来异常轻松,你所学的技术可以(相对)融会贯通。
那么迈过这个门槛的方法就是:重复2和3两个步骤,多写代码,多思考。
是的,不断重复,然后可能某一天,当你对你学的技术恍然大悟的时候,那么其实就是迈过了那个门槛。
然后,之后便是更深入地学习了。
三. 总结
一路走来,我觉得最重要的是“多写代码,多思考”。不少代码写到最后甚至都是肌肉记忆了,但是代码还是会变的,自己思考的方式和过程,自己沉淀的知识才是最宝贵的,足以支撑我能够不断学习新的技术,适应新的模式。