Posted on:
Last modified:
最近在同时学习和复习好几门新的语言:
- Rust - 想做一个搜索,显然 Python 的性能是不行的
- Swift(UI) - 公司项目
- Lua - 想写几个 neovim 的插件
- TypeScript - 公司项目和个人博客
学每一门新的语言,其中必有共通之处,拿出来对比学习,应该能够事半功倍吧。如果能回答以下问题,
并写出代码,应该基本算是上手了。
语言特性
考虑语言自身的特质。
- 是否是强类型的?是否是动态类型?
- 是有 GC 的语言,还是需要手工管理内存?支持 JIT 吗?
- 字符串是如何实现的?基于 bytes 还是 unicode char?
- 有没有方便的 REPL 环境作为学习实验之用?
- 更倾向于面向对象还是函数式编程?
基础语法
- 如何定义一个变量或是常量?
- if 语句是怎样的,是否可以用作表达式?
- falsy value 有哪些?if 语句是否只支持 boolean?
- 是否有 switch 语句,需要 break 吗?
- 是否有 match 语句?
- while 循环是怎样的?
- for 循环有哪几种风格,是否有 foreach 语句?
- 如何打断点和日志?
- 如何处理异常?是哪种风格?
类型系统
- 是否支持泛型?
- enum 类型是什么样的?不同语言和语言之间差异特别大
- Null 类型是什么样的?处理 null 有哪些最佳实践?
集合类型
- tuple 类型,以及是否支持解构赋值语法糖?
- 定长数组类型是什么样的?
- 变长数组类型(vector)是什么样的
- 字典 / 哈希 / Map 类型分别是什么样的?
- 集合类型是什么样的?
- 有链表类型吗?有内置队列吗?线程安全吗?
- 有迭代器类型吗?
- 如何排序?
- 有 range 类型吗?
- 有 slice 类型吗?
工程化
- 如何创建一个新项目,标准文件布局是什么?
- 包管理器,如何引用第三方库?
- 如何编译构建项目?
- 如何发布自己的库?有没有语言的中央仓库?
- 有没有标准的代码风格规范工具?
函数与闭包
- 是否有内置的 map/reduce 方法?
- 是否区分函数和闭包?
- 函数的默认参数支持什么风格?
面向对象
- 是否支持类?
- 支持继承,还是原型?
- 类的方法可见性 (private/public) 如何实现?
- 是否支持接口,何种风格?
- 内置的接口有哪些?包括约定的方法名
并发
- 是否支持多线程?
- 是否支持多进程?
- 是否支持协程?协程模型是什么样的?支持 async/await 吗?
- 是否有内置的线程安全的队列?
基础库
- 如何管理内存,对于有 gc 的语言相应的入口在哪里,没有 gc 的语言最佳实践是什么?
- 时间和日期的解析和格式化?
- 正则表达式怎么使用?支持各种断言吗?
- json/yaml/toml 等常用数据格式的解析,以及简单的 csv 处理等库有吗?
- 如何执行常见的文件操作,路径操作?
- http 请求,标准库有吗,最常用的第三方库如何使用?
- 常用的数据库,如 redis 和 mysql/sqlite 的 driver 和 orm 有哪些?
- 单元测试框架有哪些?
- 有内置的命令行参数处理库吗?
- 有内置的随机数库吗?
- 标准编码风格和自动格式化工具有吗?
- 环境变量和信号等如何处理?
- web 框架有哪些?是什么风格的?
- 性能测试 (profile) 框架有哪些?
TODO
突然想起来我们之前一个经验比较丰富的同事告诉我,他学习的方法就是一件事情先找到方法给干掉,
先知道怎么用,再系统的看书学习,借此和大家分享。
写完这篇文章,我发现我的 TypeScript 和 Swift 水平已经还可以了,Lua 和 Rust 还需要再多加学习 =_=b
在实际上手代码之前,以上问题并不需要都能回答。只要基础知识牢固,并且大部分问题有个概念即可。
很多知识只有在实践过程中才能引起兴趣并牢固掌握。