可以先从抄开始,然后做题,基础学完做项目。
只要在抄代码的时候,带着脑子,就可以从抄的过程中理解并掌握代码的工作原理和基本概念,抄代码可以让我们了解一些常见的编程模式和技巧,帮助我们更好的理解编程语言和框架的用法,加深对编程概念的理解。
一、抄代码要注意三点
理解:不管是跟着教程,还是开源项目抄代码,都要以理解为主。不然就跟学生时代抄作业一样,抄半天考试出一样的题都不知道怎么写。
验证:跟着敲出来代码,验证别人说的对or不对,很多时候照着抄也会出错。最后输出结果和预期不一样的时候,我们是否可以解决?——我见过很多抄源码的遇到问题就问我怎么办,我想说你不自己调试,永远不会。
demo:或者是说输出,把别人的变成自己的这是一种本事。这样可行,换一种方式呢?
关于抄代码这个事情,给你们分享Openresty的作者受访时候说的:
回过头看,抄书是我自学编程的法宝。话说抄书这种学习方法是我意外间发现的。初三时,我酷爱化学,总是缠着当时的 初中化学老师提各种奇怪的问题,老师拗不过,借给我一本他当年大学时用的课本《 分析化学》。我如获至宝,爱不释手,但借的书总要还,但又不能立马消化,于是我便抄书,抄了整个暑假,结果意外地发现了抄书的奥妙——那就是延缓阅读速度,不至遗漏每一个重要的细节:眼到,手到,心到。 其实不仅书抄得,代码也抄得。记得我刚进入淘宝时,想学习 Nginx 源码。于是白天上班就对着 Kindle 抄 C 源,同时就已暗记于心;晚上回家在房子里来回踱步,在脑海中反复回放白天抄过的源码,直至融会贯通,深得其奥妙。
二、边学习边做题
《笨办法学Python》,大家对这本书都不陌生吧,其实这本书中所说的笨办法就是强调大家动手练习的能力,通过大量的练习来掌握编程语言。这种方法看着很简单,其实一点也不笨,可以说每天坚持练习是学编程的不二法门。
这里只是用这本书举例,黑马程序员的每一套基础入门教程当中,每一个知识点,均有配套的习题。学习资源如下:
前端:不得不学的是HTML+CSS+JS;后面还要学习热门框架vue等,和后端相关的Node.js;
前端的学习应该怎么规划?38 赞同 https://www.zhihu.com/question/265374511/answer/2217655227
后端:编程语言是基础,建议选择Java,额外掌握另一门语言的应用推荐Python、Go语言;
全新Java学习路线图275 赞同 https://zhuanlan.zhihu.com/p/352898163
数据相关:大数据开发相关建议学习Python;数据分析相关主要学习Python+5个数据库;
零基础怎么学Python?要学多久?29 赞同 https://zhuanlan.zhihu.com/p/426762954
另外很多人觉得C语言和C++是一个开发的必学内容,大家可以看:
C++学习路线以及知识整理汇总381 赞同 https://zhuanlan.zhihu.com/p/372962992
三、做项目
每一个阶段的学习结束后,我们都会建议学生以项目作为收尾。首先可以通过项目查漏补缺,其次可以通过项目了解业务-熟悉部署-从问题中学习。
关于GitHub上的Java项目
- mall(电商项目):
- 项目地址:https://github.com/macrozheng/mall
- 简介:mall是一个基于SpringBoot+MyBatis的电商系统,包括后台管理系统和前台商城系统。项目涵盖了电商项目的大部分功能模块,如商品管理、订单管理、会员管理等。
- Hospital-Reservation-System(医疗预约系统):
- 项目地址:https://github.com/CJWang123/Hospital-Reservation-System
- 简介:这是一个基于SSM(Spring、SpringMVC、MyBatis)框架的医院挂号预约系统。包括患者预约、医生排班、医院管理等功能。
- jeecg-boot(低代码平台):
- 项目地址:https://github.com/zhangdaiscott/jeecg-boot
- 简介:jeecg-boot是一个基于Spring Boot的低代码开发平台,提供了代码生成器、报表工具和工作流等功能,可以帮助您快速构建企业级应用系统。
- seata(分布式事务解决方案):
- 项目地址:https://github.com/seata/seata
- 简介:Seata是一个分布式事务解决方案,用于确保在微服务环境中的数据一致性。虽然它不是一个具体的业务项目,但对于了解分布式事务在实际项目中的应用非常有帮助。
- Mindustry(游戏项目):
- 项目地址:https://github.com/Anuken/Mindustry
- 简介:Mindustry是一个基于Java的开源沙盒策略游戏。通过学习这个项目,您可以了解Java在游戏开发中的应用,锻炼自己的编程技能。
篇幅有限,我们暂时先分享Java的,需要其他总结整理的小伙伴可以直接私信我。
四、如何学项目,看源码
1、在准备看一个开源项目源码的时候,需要先了解项目的背景、功能以及相应的API。这步就是为了理解整个项目的功能做准备的,也是为了后面重点看哪些模块做准备的。
2、查看项目的REAME.md文件。有些项目把设计文档和架构图放到md文件上面,这样可以让我们对项目有一定的宏观认识。比如:immer
3、查看项目的整体文件结构。比如下面提到一些重点需要查看的文件:
- package.json,可以从这个文件看到整个项目的入口文件、开发/测试/发布编译的各种命令,也可以了解到项目的依赖库、工具以及框架等等。
- webpack/gulp/rollup配置文件,从这个文件里面可以看到项目整体的工具配置,也包含入口文件以及编译之后的代码文件,以及一些配置项的功能
4、知道一些默认莫名的文件规则,比如:
- dist,表示编译之后的源文件
- src,源代码文件
- index.xx,一般会用来作为前端的入口文件
- app.xx、server.xx,一般会用来做后端的入口文件
- static,静态文件,前端项目一般都会用来作为给浏览器运行的入口文件
- test,测试用例文件夹
- e2e,端对端测试
- unit,单元测试
- …......
这期间哪怕你遇到一些文件你不知道有什么用,有2个方式可以了解到
1、直接用google搜该文件名,往往能找到相关答案,比如.eslintrc.js:
2、进去看文件内容,一般会有注释,如果都没有的话说明这个文件往往不是很重要,可以先忽略。
Google查找这个开源框架的官方介绍,了解以下信息
- 框架有几个模块
- 模块的作用
- 模块之间的联系
- 每个模块的核心类(在阅读源码的过程中,着重看核心类)
对哪个模块感兴趣就去写个小demo,先了解一下这个模块的具体作用。
debug进入看具体实现。(这里面可以充分使用IDEA的调试功能)
- 第一遍是走马观花,简略看一下调用逻辑,都用了哪些类;
- 第二遍需有重点地debug,看看这些类担任了架构图里的哪些功能,使用了哪些设计模式。
- 第三遍debug,把主要类的调用时序图以及类图结构画出来,对着时序图分析调用流程
注意的点:
阅读源码时,最好画出时序图和类图
注释是一手资料,好的注释往往已经说明了它们的设计原理和使用场景
快来和黑马程序员一起来学编程吧,主打一个有问必答,免费答疑。如果你想找到一起自学的小伙伴也可以通过我找到组织哦!