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

今天上班的公交上看到一篇文章,叫《学习编程语言时,我们在学习什么》,想想自己这几年的学习经历,觉得文中的许多观点说的很有道理,于是整理成文,仅供参考。
在程序员这条路上,我们注定会面对或者学习多种不同的语言,对于一门编程语言, 我们到底学习什么东西呢?

1、基本语法

首先肯定是语法, 像数据类型、标识符、关键字、运算符、注释、 流程控制语句等等。如果你之前学过一门编程语言,再去学新的语言,会发现在基本的语法层面, 这些语言都差不太多。因为都是命令式编程语言, 程序员要精确的告诉计算机用何种指令做事情, 是对计算机硬件的抽象,命令式程序本质上就是一个冯诺依曼机的指令序列。如果你学的是函数式编程, 那就大不相同了。对于命令式编程, 最基本的控制语句就这么三种: 顺序、分支、循环。当然不同的语言, 对于这基本的流程控制会有一些变体, 例如do ... while, switch .. foreach 等等, 但本质都是一样的。
对于基本的语法, 我相信很多人都能迅速掌握。

2、基本的数据结构

想象一下, 假设OC中没有集合框架, 什么东西都需要自己来做, 那写起程序来该有多累!现在的语言除了基本的语法之外 ,都会有内置的强大的数据结构, 方便程序员来编程 。这些数据结构中最常见的是这几个:

字符串

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

可以动态增长的数组

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

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

Java 中的Map , OC 中的字典, ruby的hash 表均属此类。
绝大部分程序,经常使用的也就是上面三个数据结构, 其他的还有无重复元素的集合(Set)等等。

3、面向对象

看完语法和数据结构, 接下来可以看看面向对象在这个语言中是怎么实现的,对于命令式编程, 面向对象简直就是标配, 没有面向对象的支持, 简直就不好意思和别人打招呼。
有人说面向对象已死, 实际情况呢? 绝大部分软件还是以面向对象为基础构建起来的, 所以不要听风就是雨, 老老实实地去学封装、继承、多态吧。
如果你已经掌握了面向对象的设计和编程的思维, 那对于学习新语言的OO来说, 那真是太简单了, 基本上就是一点点语法的区别。
例如继承, Java用extends , OC用“:”, Ruby 用“<” , Python 用 括号来表示, 大同小异, 只不过有些语言只支持单继承, 有些支持多继承, 更加复杂一些。
对于封装, 各个语言也是差不多,一般都有private , proteted , public 这三个保护的级别,也是表现形式不一样。
对于多态, 这是很多静态语言的专利, 动态语言用的是Duck Typing , 比多态更加灵活, 需要仔细揣摩下和多态的区别, 优势和劣势。

4、突破内存

学到这里, 你应该可以用这门语言来写程序了, 但是你很快就会发现,程序只能在内存中折腾,最多能输出到毫无趣味的控制台上, 还无法访问硬盘和网络, 这也是编程语言必须提供的重要特性。不同的语言对硬盘和网络的抽象大相径庭, 例如Java 试图把所有的东西都称为IO, 抽象出了一套优雅但是不太好用的API。 相比而言像Ruby 和 Python 对硬盘文件的操作就简单的多。对XML 和 JSON的操作是必须要掌握的技能, 因为他们的用途实在是太广泛了。对于网络编程, 至少要理解Socket和HTTP, 一个是传输层,一个是应用层, 各大语言对Socket和Http 编程都有很好的支持。

5、让多任务并发执行

线程的概念对于初学者,或者说没有计算机基础的同学们学起来有点难度, 因为要理解什么是进程, 什么是线程 ,为什么要有进程和线程, 有点偏向计算机的底层了。并发编程会涉及到线程之间的同步和通信, 如何加锁,防止死锁, 线程池等很多烦人的知识点, 虽然说在实际工作中都封装好了, 业务编程中用的少, 但是要理解概念。对于各个语言来说, 良好的线程支持也是标配, 要了解相应的API, 至少能用他们写出小程序来。

6、语言特性

各个语言都有自己的特性, 例如Java 的反射/范型/注解, OC 的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 等基础知识。 当然更重要的是框架。

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,262评论 2 35
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,046评论 25 707
  • 如何成为一个很厉害的人 我们应该怎样对待时间 态度 一个人如何对待他的时间,决定了他可以成为什么样的人。 郑重 不...
    lashengcheng阅读 1,043评论 1 1
  • 来荷兰这么久了,但是除了上课之外基本上都是在公寓度过的。这开学四周以来,周末我基本上除了窝在公寓玩游戏,看书,做作...
    钤鱼摆摆阅读 104评论 1 1
  • “看,那个女孩,她是光头诶,脸那么大,还没有头发,好丑啊。” “没关系的,我已经习惯了不是嘛。”小郁苦笑了一声便默...
    方方不圓阅读 789评论 19 10