数据API 案例 开发者 关于
掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务
新闻动态 > 媒体报道

当我们在学习编程语言时,我们在学习什么?

有人兴冲冲地跑来告诉你出现了一门新的编程语言, 语法优美, 功能强大而灵活, 由 某某大牛设计,某大厂在后面背书,  某某知名软件就是用这个语言写的, 将来地前(钱)途大大地光明, 你被打动了, 决定马上去学一下。

对于一门编程语言, 我们到底学习什么东西呢?

1

基本语法

首先肯定是语法, 像数据类型、标识符、关键字、运算符、注释、 流程控制语句等等。

如果你之前学过一门编程语言,再去学新的语言,会发现在基本的语法层面, 这些语言都差不太多。

因为都是命令式编程语言, 程序员要精确的告诉计算机用何种指令做事情, 是对计算机硬件的抽象,命令式程序本质上就是一个冯诺依曼机的指令序列。如果你学的是函数式编程, 那就大不相同了。

对于命令式编程, 最基本的控制语句就这么三种: 顺序、分支、循环。

当然不同的语言, 对于这基本的流程控制会有一些变体, 例如do ... while,  switch ..   foreach 等等, 但本质都是一样的。

对于基本的语法, 我相信很多人都能迅速掌握。

2

基本的数据结构

想象一下, 假设Java 中没有集合框架, 什么东西都需要自己来做, 那写起程序来该有多累!

现在的语言除了基本的语法之外 ,都会有内置的强大的数据结构, 方便程序员来编程 。

这些数据结构中最常见的是这几个:

1. 字符串

实际代码中会有大量对字符串的操作,现在的语言都有良好的支持, 需要学习下相关的API。

2. 可以动态增长的数组  

这也是一个非常常见、非常有用的数据结构, 在Java 中就是ArrayList,   Python 就是列表, Ruby 中称为数组。  由于其应用的广泛性, 一定要好好学习下它的用法。

特别值得一提得是, 很多动态语言对数组提供了很多强悍的操作, 很轻松的可以把它当作栈、队列来使用。

3.  用来存储 key - value 这样值对的集合

Java 中的Map ,   Python 中的字典, ruby的hash 表均属此类

绝大部分程序,经常使用的也就是上面三个数据结构, 其他的还有无重复元素的集合(Set)等等。

3

面向对象

看完语法和数据结构, 接下来可以看看面向对象在这个语言中是怎么实现的,对于命令式编程, 面向对象简直就是标配, 没有面向对象的支持, 简直就不好意思和别人打招呼。

有人说面向对象已死, 实际情况呢?  绝大部分软件还是以面向对象为基础构建起来的, 所以不要听风就是雨, 老老实实地去学封装、继承、多态吧。

如果你已经掌握了面向对象的设计和编程的思维, 那对于学习新语言的OO来说, 那真是太简单了, 基本上就是一点点语法的区别。 

例如继承, Java用extends ,   Ruby 用“<” , Python 用 括号来表示, 大同小异, 只不过有些语言只支持单继承, 有些支持多继承, 更加复杂一些。

对于封装, 各个语言也是差不多,一般都有private , proteted , public 这三个保护的级别,也是表现形式不一样。

对于多态, 这是很多静态语言的专利,  动态语言用的是Duck Typing ,  比多态更加灵活, 需要仔细揣摩下和多态的区别, 优势和劣势。

(参见《小张的Duck Typing》 )

4

突破内存

学到这里, 你应该可以用这门语言来写程序了, 但是你很快就会发现,程序只能在内存中折腾,最多能输出到毫无趣味的控制台上,  还无法访问硬盘和网络, 这也是编程语言必须提供的重要特性。

不同的语言对硬盘和网络的抽象大相径庭, 例如Java 试图把所有的东西都称为IO, 抽象出了一套优雅但是不太好用的API。 相比而言像Ruby 和 Python 对硬盘文件的操作就简单的多。

对XML 和 JSON的操作是必须要掌握的技能, 因为他们的用途实在是太广泛了。

对于网络编程, 至少要理解Socket和HTTP, 一个是传输层,一个是应用层, 各大语言对Socket和Http 编程都有很好的支持。

(参见《张大胖和Socket》 , 《IE为什么把火狐和Chrome打伤了》,《对浏览器村的第二次采访》)

5

让多任务并发执行

线程的概念对于初学者,或者说没有计算机基础的同学们学起来有点难度, 因为要理解什么是进程, 什么是线程 ,为什么要有进程和线程,  有点偏向计算机的底层了。

并发编程会涉及到线程之间的同步和通信, 如何加锁,防止死锁, 线程池等很多烦人的知识点, 虽然说在实际工作中都封装好了, 业务编程中用的少, 但是要理解概念。

对于各个语言来说, 良好的线程支持也是标配, 要了解相应的API, 至少能用他们写出小程序来。

(参见《我是一个进程》《我是一个线程》)

6

语言特性

各个语言都有自己的特性, 例如Java 的反射/范型/注解,  Ruby 的block, 元编程,   javascript的原型/闭包/函数等等。 这些特性对于写出优雅漂亮的程序有极大帮助, 一定要掌握。

7

GUI

GUI一般指的桌面编程和手机端编程的图形用户界面, 各大语言都有支持, 但是除了Android(Java), iOS(Objective-C) 和微软系的语言(C#,VB.NET...)外, 别的语言直接写GUI的相对不多。

Java 的Swing 和 AWT  应用领域狭窄, 我知道的只有在金融领域, ERP, IDE 有所使用,所以不用下大功夫去学。

如果你是做桌面编程和手机端编程,需要关注如下几点:

1.  界面是如何描述的?

界面的控件有哪些? 如何进行页面的布局?

2.  数据如何获取?

现在的程序基本上都是联网的, 很多数据都来自服务器, 这又涉及到了前面提到了网络编程。

3. 界面和数据如何绑定?

因为数据一般是外部来的,是变化的,  需要在GUI上展示, 绑定数据到界面必不可少。

4. 用户在GUI的操作该如何处理?

现在基本上都是事件驱动,例如用户点击了一个按钮,就会调用onClick 函数。

总的来说, GUI中用MVC相对比较多, 需要掌握学习。

8

Web

终于到达Web编程了, 这是个非常大的主题, 其实已经超越了一门语言的范畴,涉及到HTTP, XML, Javascript , JSON, Servlet, JSP 等基础知识。  当然更重要的是框架。

(参见文章《掌握了这几点,你就学会了Web编程》)

9

学会了吗?

学到这里, 大部分人还是很困惑,觉得自己已经看了语法,OO, 线程、IO,  Web, 但还是心里没底,不知道自己到底学会了没有, 这个时候,务必要寻求项目来做了。 做项目才能把知识给串起使用, 帮你查漏补缺, 不断前进。

码农翻身.png

原文来自:码农翻身

掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务
新闻动态 > 媒体报道
当我们在学习编程语言时,我们在学习什么?
发布:2017-03-07

有人兴冲冲地跑来告诉你出现了一门新的编程语言, 语法优美, 功能强大而灵活, 由 某某大牛设计,某大厂在后面背书,  某某知名软件就是用这个语言写的, 将来地前(钱)途大大地光明, 你被打动了, 决定马上去学一下。

对于一门编程语言, 我们到底学习什么东西呢?

1

基本语法

首先肯定是语法, 像数据类型、标识符、关键字、运算符、注释、 流程控制语句等等。

如果你之前学过一门编程语言,再去学新的语言,会发现在基本的语法层面, 这些语言都差不太多。

因为都是命令式编程语言, 程序员要精确的告诉计算机用何种指令做事情, 是对计算机硬件的抽象,命令式程序本质上就是一个冯诺依曼机的指令序列。如果你学的是函数式编程, 那就大不相同了。

对于命令式编程, 最基本的控制语句就这么三种: 顺序、分支、循环。

当然不同的语言, 对于这基本的流程控制会有一些变体, 例如do ... while,  switch ..   foreach 等等, 但本质都是一样的。

对于基本的语法, 我相信很多人都能迅速掌握。

2

基本的数据结构

想象一下, 假设Java 中没有集合框架, 什么东西都需要自己来做, 那写起程序来该有多累!

现在的语言除了基本的语法之外 ,都会有内置的强大的数据结构, 方便程序员来编程 。

这些数据结构中最常见的是这几个:

1. 字符串

实际代码中会有大量对字符串的操作,现在的语言都有良好的支持, 需要学习下相关的API。

2. 可以动态增长的数组  

这也是一个非常常见、非常有用的数据结构, 在Java 中就是ArrayList,   Python 就是列表, Ruby 中称为数组。  由于其应用的广泛性, 一定要好好学习下它的用法。

特别值得一提得是, 很多动态语言对数组提供了很多强悍的操作, 很轻松的可以把它当作栈、队列来使用。

3.  用来存储 key - value 这样值对的集合

Java 中的Map ,   Python 中的字典, ruby的hash 表均属此类

绝大部分程序,经常使用的也就是上面三个数据结构, 其他的还有无重复元素的集合(Set)等等。

3

面向对象

看完语法和数据结构, 接下来可以看看面向对象在这个语言中是怎么实现的,对于命令式编程, 面向对象简直就是标配, 没有面向对象的支持, 简直就不好意思和别人打招呼。

有人说面向对象已死, 实际情况呢?  绝大部分软件还是以面向对象为基础构建起来的, 所以不要听风就是雨, 老老实实地去学封装、继承、多态吧。

如果你已经掌握了面向对象的设计和编程的思维, 那对于学习新语言的OO来说, 那真是太简单了, 基本上就是一点点语法的区别。 

例如继承, Java用extends ,   Ruby 用“<” , Python 用 括号来表示, 大同小异, 只不过有些语言只支持单继承, 有些支持多继承, 更加复杂一些。

对于封装, 各个语言也是差不多,一般都有private , proteted , public 这三个保护的级别,也是表现形式不一样。

对于多态, 这是很多静态语言的专利,  动态语言用的是Duck Typing ,  比多态更加灵活, 需要仔细揣摩下和多态的区别, 优势和劣势。

(参见《小张的Duck Typing》 )

4

突破内存

学到这里, 你应该可以用这门语言来写程序了, 但是你很快就会发现,程序只能在内存中折腾,最多能输出到毫无趣味的控制台上,  还无法访问硬盘和网络, 这也是编程语言必须提供的重要特性。

不同的语言对硬盘和网络的抽象大相径庭, 例如Java 试图把所有的东西都称为IO, 抽象出了一套优雅但是不太好用的API。 相比而言像Ruby 和 Python 对硬盘文件的操作就简单的多。

对XML 和 JSON的操作是必须要掌握的技能, 因为他们的用途实在是太广泛了。

对于网络编程, 至少要理解Socket和HTTP, 一个是传输层,一个是应用层, 各大语言对Socket和Http 编程都有很好的支持。

(参见《张大胖和Socket》 , 《IE为什么把火狐和Chrome打伤了》,《对浏览器村的第二次采访》)

5

让多任务并发执行

线程的概念对于初学者,或者说没有计算机基础的同学们学起来有点难度, 因为要理解什么是进程, 什么是线程 ,为什么要有进程和线程,  有点偏向计算机的底层了。

并发编程会涉及到线程之间的同步和通信, 如何加锁,防止死锁, 线程池等很多烦人的知识点, 虽然说在实际工作中都封装好了, 业务编程中用的少, 但是要理解概念。

对于各个语言来说, 良好的线程支持也是标配, 要了解相应的API, 至少能用他们写出小程序来。

(参见《我是一个进程》《我是一个线程》)

6

语言特性

各个语言都有自己的特性, 例如Java 的反射/范型/注解,  Ruby 的block, 元编程,   javascript的原型/闭包/函数等等。 这些特性对于写出优雅漂亮的程序有极大帮助, 一定要掌握。

7

GUI

GUI一般指的桌面编程和手机端编程的图形用户界面, 各大语言都有支持, 但是除了Android(Java), iOS(Objective-C) 和微软系的语言(C#,VB.NET...)外, 别的语言直接写GUI的相对不多。

Java 的Swing 和 AWT  应用领域狭窄, 我知道的只有在金融领域, ERP, IDE 有所使用,所以不用下大功夫去学。

如果你是做桌面编程和手机端编程,需要关注如下几点:

1.  界面是如何描述的?

界面的控件有哪些? 如何进行页面的布局?

2.  数据如何获取?

现在的程序基本上都是联网的, 很多数据都来自服务器, 这又涉及到了前面提到了网络编程。

3. 界面和数据如何绑定?

因为数据一般是外部来的,是变化的,  需要在GUI上展示, 绑定数据到界面必不可少。

4. 用户在GUI的操作该如何处理?

现在基本上都是事件驱动,例如用户点击了一个按钮,就会调用onClick 函数。

总的来说, GUI中用MVC相对比较多, 需要掌握学习。

8

Web

终于到达Web编程了, 这是个非常大的主题, 其实已经超越了一门语言的范畴,涉及到HTTP, XML, Javascript , JSON, Servlet, JSP 等基础知识。  当然更重要的是框架。

(参见文章《掌握了这几点,你就学会了Web编程》)

9

学会了吗?

学到这里, 大部分人还是很困惑,觉得自己已经看了语法,OO, 线程、IO,  Web, 但还是心里没底,不知道自己到底学会了没有, 这个时候,务必要寻求项目来做了。 做项目才能把知识给串起使用, 帮你查漏补缺, 不断前进。

码农翻身.png

原文来自:码农翻身

电话 0512-88869195
数 据 驱 动 未 来
Data Drives The Future