程序员如何学习一门新的编程语言 1. 了解该语言的 2. 掌握 3. 简单字符串处理 4. 基本面向对象或者函数式编程的特征 5. 异常、错误处理、断言、日志和调试支持,对单元测试的支持 6. 程序代码和可执行代码的 7. 基本输入输出和文件处理,输入输出流类的组织 8. 该语言如何进行callback方法调用,如何支持事件驱动编程模型。 9. 序列化和反序列化 10. 动态编程,反射和元数据编程,数据和程序之间的相互转化机制,运行时编译和执行的机制, 11. 如果有必要 12. 如果有必要 13. 如果有必要 14. 如果还有时间 15. 在工作的闲暇时间,可以着重考察两个问题,

很多程序员在学习一门新的编程语言时往往会走两种路子:

  • 1.粗粗看看语法,就撸起袖子开干,边查Google边学习
  • 2.花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作

第一种学得太少,第二种学得太多,都不合适,其实学习一个编程语言达到能够入流的程度并不需要太高深的东西,平时需要用到的大都是基础知识,集中一周业余时间学习一下完全能达到掌握的目的。

其实写程序不怕完全不会,最怕一知半解的去攒解决方案。因为你完全不会,就自然会去认真查书学习,如果学习能力好的话,写出来的代码质量不会差。而一知半解,自己动手土法炼钢,那搞出来的基本上都是废铜烂铁。

因此,即使时间再紧张,使用新编程语言进行开发之前,下面的这些内容也是必须首先完整了解一遍的。掌握这些内容之后进入实际开发,即使有问题,也基本不会伤及项目大体。而开发者本人则可以安步当车,慢慢在实践中提高自己。

  • 基本数据类型
  • 基本语法和流程控制,判断/分支/循环等
  • 主要数学运算符
  • print函数的使用

达到能够编写数学习题的程度.

2. 掌握

  • 数组和其他集合类的使用
  • 有基础的话可以理解一下泛型,如果理解不了也问题不大,后面可以补;

3. 简单字符串处理

  • 所谓简单,就是Regex和Parser以下的内容,什么查找替换,截断去字串之类的。不过这个阶段有一个难点,就是字符编码问题。如果理解不了,可以先跳过,否则的话最好在这时候把这个问题搞定,免留后患;

4. 基本面向对象或者函数式编程的特征

无非是什么

  • 继承、
  • 多态、
  • Lambda函数之类的,

如果有经验的话很快就明白了;

5. 异常、错误处理、断言、日志和调试支持,对单元测试的支持

你不一定要用TDD,但是在这个时候应该掌握在这个语言里做TDD的基本技能;

6. 程序代码和可执行代码的

  • 组织机制
  • 运行时模块加载
  • 符号查找机制

这是初学时的一个难点,因为大部分书都不太注意介绍这个极为重要的内容;

7. 基本输入输出和文件处理,输入输出流类的组织

这通常是比较繁琐的一部分,可以提纲挈领学一下,搞清楚概念,用到的时候查就是了。到这个阶段可以写大部分控制台应用了;

8. 该语言如何进行callback方法调用,如何支持事件驱动编程模型。

在现代编程环境下,这个问题是涉及开发思想的一个核心问题,几乎每种语言在这里都会用足功夫,

  • .NET的delegate,
  • Java的anonymous inner class,
  • Java7的closure,
    C++ OX的 tr1::function/bind,

五花八门。如果能彻底理解这个问题,不但程序就不至于写得太走样,而且对该语言的设计思路也能有比较好的认识;

9. 序列化和反序列化

掌握一下缺省的机制就可以了;

10. 动态编程,反射和元数据编程,数据和程序之间的相互转化机制,运行时编译和执行的机制,

有抱负的开发者在这块可以多下些功夫,能够使你对语言的认识高出一个层面;

11. 如果有必要

可了解一下线程、并发和异步调用机制,主要是为了读懂别人的代码,如果自己要写这类代码,必须专门花时间严肃认真系统地学习,严禁半桶水上阵;

12. 如果有必要

可在这时研究regex和XML处理问题,如无必要可跳过;

13. 如果有必要

可研究一下该语言对于泛型的支持,不必花太多时间,只要能使用现成的泛型集合和泛型函数就可以了,可在以后闲暇时抽时间系统学习。
需要注意的是,泛型技术跟多线程技术一样,用不好就成为万恶之源,必须系统学习,谨慎使用,否则不如不学不用;

14. 如果还有时间

最好咨询一下有经验的人,看看这个语言较常用的特色features是什么,如果之前没学过,应当补一下。比如

  • Ruby的block interator,
  • Java的dynamic proxy,
  • C# 3的LINQ和extension method。

没时间的话,我认为也可以边做边学,没有大问题。

15. 在工作的闲暇时间,可以着重考察两个问题,

  • 第一,这个语言有哪些惯用法和模式,
  • 第二,这个语言的编译/解释执行机制。

至此语言的基本部分就可以说掌握了,之后是做数据库、网络还是做图形,可以根据具体需求去搞,找相应的成熟框架或库,边做边学,加深理解。
掌握了以上的内容,就给练武术打好了基本功,虽然不见得有多优秀,但是肯定是根正苗红,将来不必绕大弯子。就算是临时使用的语言,把上面这个提纲精简一下,只看重体字的部分,大致能在几天到一周内搞定,不算是太耗时,而且写出来的代码不会太不靠谱。

以上提纲未设及内存模型。对于C/C++,这个问题很重要,要放在显著位置来考虑,但对于其他语言,这个问题被透明化了,除非你要做hardcore项目,否则不必太关注。