跨语言学习大纲
前言
因为经常会要学习到新的语言,新的框架,不同的语言与不同的框架,均有一些不同的框架、或者语言特色,在对一门语言不熟悉的时候,如何快速上手这一门语言和相当的框架就非常重要了。
大纲
经过自己的整理,我觉得学习一门语言,可能通过下面的这个大纲来学习,会更快的上手。
20190215更新:经常自己的实践,上述大纲确实有益于快速掌握一门新语言,如果以后有新学习语言,本文也会继续更新。
| 分类 | 知识点 |
|---|---|
| Basic | 基础语法,如何运行 |
| 编程模式(同步、异步、结构、类等) | |
| 代码的组织 | |
| 包管理器及包的引入 | |
| 代码的编译 | |
| 面向对象编程(OOP) | |
| 语言的常见应用领域 | |
| Builtin | 常用的数据结构,如列表、字典(哈希表)等 |
| 字符串处理方法 | |
| 时间方法 | |
| IO、网络方法 | |
| 多进/线程 | |
| ThirdPackages | 常用的第三方包 |
| Testing | 单元测试 |
| 数据伪造 | |
| 集成测试、代码覆盖 | |
| Programming | IDE |
| 静态检测、自动格式化 | |
| Deployment | 部署方式 |
| 日志 |
Python
由于我主要是用于web开发,因此下面罗列的会较偏于web框架较多一点。
| 分类 | 知识点 | Python(2.x) |
|---|---|---|
| Basic | 基础语法,如何运行 | 可以python进入shell直接交互,也可以简单的执行文件 |
| 编程模式(同步、异步、结构、类等) | 可同步,可异步 | |
| 代码的组织 | 第三方包默认安装在site-package目录下,项目组织没有固定模板,具体可以根据使用框架来定 |
|
| 包管理器及包的引入 | 通常使用pip |
|
| 代码的编译 | python不需要编译,但也有p2exe及pyinstaller将python打包成可执行文件 |
|
| 面向对象编程支持(OOP) | metaclass, class等 |
|
| 语言的常见应用领域 | web开发,爬虫开发,运维开发,测试,大数据开发 | |
| Builtin | 常用的数据结构,如列表、字典(哈希表)等 | list, dict, tuple, set |
| 字符串处理方法 | string |
|
| 时间方法 | datetime, time |
|
| IO、网络方法 | open, urllib,网络库也推荐使用第三方库requests |
|
| 多进/线程 | multiprocessing, threading |
|
| ThirdPackages | 常用的第三方包 | django, tornado等 |
| Testing | 单元测试 | pytest, unittest等 |
| 数据伪造 | mock |
|
| 集成测试、代码覆盖 | 参考第三方库等 | |
| Programming | IDE | 推荐pycharm |
| 静态检测、自动格式化 | pyflake, pystyle, autopep8, flake8等 |
|
| Deployment | 部署方式 | web项目通常由web服务器(nginx或apache) + wsgi服务器启动,进程守护一般用supervisor |
| 日志 | 一般用logging |
Javascript && NodeJS
nodejs = commonJS + io.js,是在基于javascript的V8引擎上,增加了能够执行文件IO、网络IO功能。传统的Javascript相对于nodejs来说,少了io.js,但是能够处理dom。
| 分类 | 知识点 | Javascript(ES6+) |
|---|---|---|
| Basic | 基础语法,如何运行 | 可以浏览器内运行,也可以使用node启动shell |
| 编程模式(同步、异步、结构、类等) | 只能异步,异步库有不少,如promise, await等 |
|
| 代码的组织 | nodejs与js的组织略有区别 | |
| 包管理器及包的引入 | npm, yarn等 |
|
| 代码的编译 | js不需要编译 | |
| 面向对象编程支持(OOP) | ES6的语法才支持一些class, extends等 |
|
| 语言的常见应用领域 | js通常用于前端,nodejs也能作一些服务端应用 | |
| Builtin | 常用的数据结构,如列表、字典(哈希表)等 | Array, Object |
| 字符串处理方法 | 自带的功能较少,一般会用一些第三方库,如dash等 |
|
| 时间方法 | 自带的功能较少,一般会用一些第三方库,如moment等 |
|
| IO、网络方法 | nodejs才支持io,网络有不少,如fetch, request等 |
|
| 多进/线程 | 不支持 | |
| ThirdPackages | 常用的第三方包 | express, dash, sequelize等 |
| Testing | 单元测试 | mocha, chai |
| 数据伪造 | sinon |
|
| 集成测试、代码覆盖 | mocha |
|
| Programming | IDE | 推荐WebStorm |
| 静态检测、自动格式化 | jslint等 |
|
| Deployment | 部署方式 | 一般使用nginx做个转发就行,一般使用pm2守护 |
| 日志 | 一般用log4js |
除了上述的语言基本以外,JS本身分前后端,在各自的领域也相关较大,因此有些知识点下面单独列出。
前端开发框架
1. jquery,封装了dom操作; 现在流行的如react, angularjs, vue等
后端web开发框架
1. web框架: express, egg.js等
2. ORM: sequelize, bookshelf, moogoose等
3. 配置:config
Golang
| 分类 | 知识点 | Golang(1.10.x) |
|---|---|---|
| Basic | 基础语法,如何运行 | golang是编译型语言,通常需要go build编译后再执行,单个文件也可以通过go run执行 |
| 编程模式(同步、异步、结构、类等) | 支持异步,关键词defer, select |
|
| 代码的组织 | web项目推荐如此组织 | |
| 包管理器及包的引入 | golang的包管理最开始是必须放在$GOPATH/src下面。现在也能使用vendor目录的机制了,自带的go get可以安装,也有dep这样的包管理工具 |
|
| 代码的编译 | go build |
|
| 面向对象编程支持(OOP) | golang对面向对象的支持并不多,使用interface, struct等能实现一些面向对象的特性,但是对于继承、多态等,支持并不太好。 |
|
| 语言的常见应用领域 | 常用于web领域,对于网络请求的处理及重cpu型的计算,也有一定的优势。 | |
| Builtin | 常用的数据结构,如列表、字典(哈希表)等 | Array, Map |
| 字符串处理方法 | String |
|
| 时间方法 | Date, Time |
|
| IO、网络方法 | 见os |
|
| 多进/线程 | 进程模块见os.Process, golang似乎没有对线程的支持,倒是可以使用协程代替 |
|
| ThirdPackages | 常用的第三方包 | gin, gorm等,详细参考 |
| Testing | 单元测试 | go test |
| 数据伪造 | gomock |
|
| 集成测试、代码覆盖 | go test已支持 |
|
| Programming | IDE | 推荐Goland |
| 静态检测、自动格式化 | golang.org本身也提供了工具,golint, goreturns等 |
|
| Deployment | 部署方式 | 编译后启动可执行文件即可 |
| 日志 | Logger |
Java (待完成)
java在组织web服务器的代码的时候,通常会按这样的职责划分清晰:
Controller —> 负责接收请求,解析请求数据,调用真正的接口,并返回。 DTO/Plain Class —> DTO是数据转换类(data transfer object),和基本的get/set IAction —> 负责定义接口类 ActionImpl —> 负责定义接口的实现
maven,算是java里的一个包管理器吧。 类似于npm,包括安装包依赖,打包等。
tomcat,运行war(类似于jar包,但包含一些静态资源)包的web服务器。部署方式是把war包放在对应的目录就行了。