我想大多数人都是从一门两门语言开始学习编程的,
慢慢地, 发现不够用了, 或者是不好用, 就开始学新的语言.
但是人们又说, 编程语言都是相通的, 几个星期就能上手其他语言(反正我没成功过...)
渐渐我看到有些知识点会在各种语言里出现, 因为写软件需要这些功能和模式.
我觉得应该有学习各种不同的编程要掌握的关键点, 我现在能想到的是:
- 高阶函数(对于清晰化代码的逻辑, 形成强大的递归非常有效)
- 面向对象方式抽象代码(不是整套语法, 但是按照 OOP 思路可以将程序合理地模块化)
- 基于事件和回调的异步编程(这种 Web 前端和后端泛滥的东西)
- Coroutine, Generator, Go Channel, Coninuation 等等异步处理的方法
- 文件处理, 正则和文本处理(操作代码日常的工作啊)
- 类型系统, 泛型(...不大确定, 但 JS 弱类型带来了大量问题)
- MVC (做图形界面绕不过的模式)
- Git(某人比喻跳伞穿的降落伞) 和包管理工具
...
以上是我个人角度列的一些东西, 完整的列表应该是什么样子的?
同意二楼。。。搞那么多列表没有太多意义吧。。先确定自己做哪个领域,然后,就有深度地学习。有时间多看技术新闻,拓展一下广度就行啦。
掌握好英文,然后多学一些编程语言就好了。
比如我学 Rust,因为同时有 C、Python 和 Haskell 基础,所以底层知识难不倒我,各种语法上不会觉得别扭(其实我也熟悉其它语言的因素),类型系统上也不陌生。
另外,Coroutine, Generator, Channel, Continuation, Process, Thread 不是异步处理的方法,而是各种对执行流程的抽象。有调度者根据 I/O 事件来调度,就可以处理 I/O 事件了。就这样子。
你的目标也不明确。你是要学习编程语言本身,还是使用编程语言做特定领域内的开发?比如你写 GUI,几乎不管用什么语言,都是一个主循环,处理各种事件的。再比如正则,虽然语法有差异,但是原理所有语言都没多大区别。而且还有像 PCRE 这种正则库。
在我看来掌握一门语言主要是
- 了解它的环境、目标平台、运行时依赖、性能(这决定你能不能用它)
- 编程范式,OO能力如何,FP能力如何(这决定你用它的姿势)
- 类型系统(剩余基本上都是怎么用它)
- 常见数据结构的体现(list/map/collection之类)
- 命名空间,代码组织方式
- 自带类库和常见操作
- 如何找第三方类库,引入第三方类库,包管理依赖管理机制
- 知名第三方框架的做法和用法和实现,解决了语言本身的哪些问题