标题和内容是两个问题啊喂…… 掌握(实用的)编程语言往往分为两大块,语言本身和周边类库/框架,这两块相辅相成缺一不可 就语言本身来说,最重要的是理解这门语言的抽象机制/编程范式:早期的语言可能相对单纯,纯过程式,纯面向对象,而多数现代通用语言往往是多范式的,往往即支持面向对象又支持面向过程,还有或多或少的函数式,这种混合的比例和风格决定了整门语言的风格。有的语言会有一些“核心概念”,拿掉以后会直接洞穿整个根基的重要概念/机制(比如JS的原型,Java的接口,C的指针),那么抓住这些核心概念突破是个好主意;而另一些语言可能没有这样明显的核心,这类语言往往混合多种其他语言的特色,那么可以通过他借鉴了哪些特性,做了哪些调整,又没有借鉴哪些特性来入手。重要的是“味道”,写Java就要有Java味道(而不是试图用Java实现一个动态语言的子集),写JS就要有JS的味道(而不是试图搞接口,封装之类)。而有一些味道是所有语言共通追求的比如可读可维护(恕我排除了brainfuck……),这也可以成为突破口(比如这门语言的哪些特性增强了可读性?) 另外一块就是周边类库包括工具集了,我经常用学英文打比方,前面那块可能对应语法,而类库就相当于词汇了,这门语言的主要应用场景在哪里,在这些场景下有哪些内置或开源的类库可以用,不同类库之间的优缺点如何,怎么选择合适的类库,怎么让几个不同的类库在一起融洽地工作。什么样的代码适合抽离成类库,自己写类库的时候要注意什么。这门语言有哪些常见的辅助工具。 我觉得学好一门语言的主要标志就是它从你的思考中消失了,你发现你考虑如何写代码的时候的思维过程和这门具体的语言没有关系,“怎么用XX实现YY”之类的问题从来没有出现,更没有打断你的思路
掌握这些: 语言的背景和理念 这个语言是为了解决哪些问题而发明的(写操作系统?科学计算?验证理论?软件工程?) 当时的编程行业处于什么历史时期,情况怎样(实验室,桌面,WEB) 受了哪些语言影响,吸收了哪些特性,创造了哪些特性 基本语法和概念 从 hello world 开始,到小作品,小应用。 应用开发框架 了解常见框架 为应用创造框架 技巧和陷阱 性能优化技巧 逻辑陷阱 语言的实现 进一步加深对语言的理解。
标题和内容是两个问题啊喂……
掌握(实用的)编程语言往往分为两大块,语言本身和周边类库/框架,这两块相辅相成缺一不可
就语言本身来说,最重要的是理解这门语言的抽象机制/编程范式:早期的语言可能相对单纯,纯过程式,纯面向对象,而多数现代通用语言往往是多范式的,往往即支持面向对象又支持面向过程,还有或多或少的函数式,这种混合的比例和风格决定了整门语言的风格。有的语言会有一些“核心概念”,拿掉以后会直接洞穿整个根基的重要概念/机制(比如JS的原型,Java的接口,C的指针),那么抓住这些核心概念突破是个好主意;而另一些语言可能没有这样明显的核心,这类语言往往混合多种其他语言的特色,那么可以通过他借鉴了哪些特性,做了哪些调整,又没有借鉴哪些特性来入手。重要的是“味道”,写Java就要有Java味道(而不是试图用Java实现一个动态语言的子集),写JS就要有JS的味道(而不是试图搞接口,封装之类)。而有一些味道是所有语言共通追求的比如可读可维护(恕我排除了brainfuck……),这也可以成为突破口(比如这门语言的哪些特性增强了可读性?)
另外一块就是周边类库包括工具集了,我经常用学英文打比方,前面那块可能对应语法,而类库就相当于词汇了,这门语言的主要应用场景在哪里,在这些场景下有哪些内置或开源的类库可以用,不同类库之间的优缺点如何,怎么选择合适的类库,怎么让几个不同的类库在一起融洽地工作。什么样的代码适合抽离成类库,自己写类库的时候要注意什么。这门语言有哪些常见的辅助工具。
我觉得学好一门语言的主要标志就是它从你的思考中消失了,你发现你考虑如何写代码的时候的思维过程和这门具体的语言没有关系,“怎么用XX实现YY”之类的问题从来没有出现,更没有打断你的思路