对于一门编程语言,我们到底学的是什么?1、基础语法首先要是语法,比如数据类型、标识符、关键字、运算符、注释、流程控制语句等等。如果你之前学过一门编程语言,再学一门新的语言,你会发现这些语言在基本的语法层面上并没有太大的区别。因为它们都是命令式编程语言,程序员需要准确地告诉计算机使用哪些指令来做事情,这是计算机硬件的一种抽象。命令式程序本质上是冯诺依曼机的一系列指令。如果您正在学习函数式编程,那就完全不同了。对于命令式编程,存在三种基本类型的控制语句:序列、分支和循环。当然,不同的语言在这个基本的流程控制上会有一些变体,比如do...while,switch..foreach等等,但是本质是一样的。对于基础语法,相信很多人都能很快掌握。2.基本数据结构试想一下,假设Java中没有集合框架,一切都需要自己来做,写程序会是多么的累啊!除了基本的语法,现在的语言都会内置强大的数据结构,方便程序员编程。这些数据结构中最常见的有这些:(1)Strings实际代码中会有很多对字符串的操作,目前的语言都有很好的支持,需要学习相关的API。(2)可以动态增长的数组这也是一种很常见也很有用的数据结构,在Java中是ArrayList,在Python中是list,在Ruby中是array。由于它的应用范围很广,一定要学会如何使用它。特别值得一提的是,很多动态语言都提供了很多对数组的强大操作,可以很方便的用作栈和队列。(3)key-value等值对的集合。Java中的映射、Python中的字典和Ruby中的哈希表属于大多数此类程序。以上三种数据结构是经常用到的,另外还有没有重复元素的集合(Set)等。3.面向对象看完语法和数据结构,就可以看出这门语言是如何实现面向对象的了。对于命令式编程,面向对象只是标准配置。没有面向对象的支持,简直就是尴尬和别人打招呼。有人说面向对象已死,但实际情况如何呢?大多数软件还是建立在面向对象的基础上的,所以不要听信风吹雨打,老老实实去学封装、继承、多态吧。如果你已经掌握了面向对象的设计和编程的思想,那么OO学习一门新的语言真的太简单了,基本上就是语法上的一点点区别。比如继承,Java用extends,Ruby用“<”,Python用括号来表示,都差不多,只不过有的语言只支持单继承,有的支持多继承,比较复杂.对于封装,每种语言都是相似的。一般有private、protected、public三种保护级别,表现形式也不同。对于多态性,这是很多静态语言的专利。动态语言使用DuckTyping,比多态更灵活。您需要仔细弄清楚与多态性的区别、优点和缺点。(码农注意:见《小张的Duck Typing》)4.内存的突破学完这个,你应该可以用这门语言写程序了,但是很快你会发现程序只能在内存里折腾,顶多它可以输出到无聊的控制台,而无需访问硬盘和网络,这也是编程语言必须提供的重要功能。不同的语言对硬盘和网络的抽象非常不同。例如,Java试图将一切都称为IO,抽象出一套优雅但不太好用的API。相比之下,像Ruby、Python这样对硬盘文件的操作就简单多了。XML和JSON的操作是必备技能,因为它们的用途非常广泛。对于网络编程,至少要了解Socket和HTTP,一个是传输层,一个是应用层。各大语言都对Socket和Http编程有很好的支持。(见《张大胖和Socket》、《IE为什么把火狐和Chrome打伤了》、《对浏览器村的第二次采访》)5、多任务并发执行线程的概念对于初学者,或者没有计算机基础的同学来说有点难,因为需要理解什么是进程,什么是线程,为什么会有进程和线程,有点偏向计算机底层。并发编程会涉及到线程间的同步和通信,如何加锁,防止死锁,线程池等等很多烦人的知识点。虽然在实际工作中是封装的,在业务编程中很少用到,但是一定要理解概念。对于每种语言,良好的线程支持也是标准配置。要了解相应的API,你至少可以用它们来编写小程序。(见《我是一个进程》《我是一个线程》)6.语言特点每种语言都有自己的特点,比如Java反射/范式/注解,Ruby块,元编程,javascript原型/闭包/函数等等。这些特点对于编写优雅漂亮的程序有很大的帮助,必须掌握。7、GUIGUI泛指桌面编程和手机编程的图形用户界面,各大语言均支持,但Android(Java)、iOS(Objective-C)和微软语言(C#、VB.NET...)另外,其他直接写GUI的语言比较少。Java的Swing和AWT的应用领域比较狭窄。我所知道的也只是在金融领域,ERP,IDE中用到,不用好好学习。如果是做桌面编程和移动编程,需要注意以下几点:(1)接口是如何描述的?界面上有哪些控件?如何布局页面?(2)如何获取数据?现在的程序基本上都是联网的,很多数据都是从服务器端来的,这就涉及到上面提到的网络编程。(3)如何绑定接口和数据?因为数据一般都是外部的,变化多端,需要在GUI上展示,所以将数据绑定到界面上是必不可少的。(4)GUI中如何处理用户的操作?现在基本都是事件驱动的,比如用户点击某个按钮时,就会调用onClick函数。总的来说MVC在GUI中用的比较多,需要掌握和学习。8.Web终于到达了Web编程。这是一个很大的话题。实际上,它已经超出了一门语言的范畴,涉及到HTTP、XML、Javascript、JSON、Servlet、JSP等基础知识。更重要的当然是框架。(码农注:见文章《掌握了这几点,你就学会了Web编程》)9、学会了吗?知道这些之后,大部分人还是很迷茫。他们觉得语法、OO、线程、IO、Web都看过了,但是还是没有头绪。不知道有没有学会。这个时候一定要找个项目来做。做项目才能把知识联系起来运用,帮你查漏补缺,不断前行。【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获得授权公众号coderising】点此查看该作者更多好文
