如何学习一门新的语言二——方法与步骤

之前发表过一篇文章,也是谈如何学习一门新的语言《如何学习一门新的语言》,这篇文章主要的关注点是心态。

今天这篇文章主要的关注点是具体的方法和步骤,是我学习C++和python的一些经验,整理出来和大家一起讨论。另外,我主要针对的已经掌握了一门编程语言,再学习一门新的语言的情况。

先简要介绍下我是如何学习c++的。

出发点:工作两到三年内,我的主要开发语言是c。后来由于工作的需要,要实现一个流程引擎(属于预研项目)。在研究的过程中发现使用c语言处理这种逻辑比较复杂的程序有些力不从心,我想尝试使用面向对象的方式处理这个问题,所以我想到了c++。现在回想起来,其实当时自己也就是想使用c++的面向对象特性,我现在也基本只使用了c++的一个子集:面向对象。

起步:当时我们公司没有人使用过C++,我也是在大学的时候接触过,后来也没有用过,所以整个过程困难还是比较多的。因为有c的基础,所以我没有看c++的入门资料,比如《C++primer》(其实我到现在也没有从头到尾读过这本书,c++的很多特性我也没有使用过。),我直接使用c++来编写程序。中间遇到很多低级的问题,比如如何定义一个类的static成员变量;虚函数如何定义,如何使用;stl中string,list如何使用;c++如何调用c的库等等。这些问题都比较好解决。

最大的障碍:从c到c++,最大的障碍不是语法的障碍,而是思维方式的转变:由面向过程到面向对象的转变。这个转变时一个漫长的过程,我现在仍在进行。当时开发是为了更好的使用面向对象,快速的浏览了一下《设计模式》中的23个设计模式。现在想想,如果能够找一份开源的c++代码看看也许效果更好。

深入与提高:最终我还是用c++实现了我的目标。不过,这个程序在高层设计上采用的是面向对象,在中层和底层设计上仍然使用的是面向过程的思路。在这个过程中,我对c++和面向对象有了更深入的理解,也积累了一些经验。这个时候我没有选择全面的学习一些c++的语法,而是选择学习《effective c++》。这本书对外影响很大,让我知道如何去更有效的使用c++。学习的过程中也许会遇到一些不会的语法知识,查一下资料就可以解决了。后来又在几个项目中使用了c++,慢慢的有些得心应手了。

下一步计划:对于c++的语法,我的观点是用到了在学。我下一步的计划是学习《more effective c++》,《c++ 沉思录》,《深入理解c++对象模型》,以求对c++有更深入的理解。另外,再深入的学习一下《设计模式》。还有就是google的c++编程规范。对于是否要涉及c++的其他子集,比如模板,我会继续观察,看有没有这样的需求。当然,有一点很重要,就是要在工作中去用它解决问题。

 

关于python学习

出发点:这门语言我刚开始学,还没有学多长时间。我没有想完全抛弃c++,但是我想找一个更加方便高效的工具来完成某些任务。我以后可能会考虑将python和c++混合使用。选择python的另一个原因是google也在用它。

起步:找了一个入门的资料《简明python教程》学习了一下,对python语法有了一个基本的了解。然后选择《diveintopython》深入学习,目前还没有学完。不过现在感觉有些问题,自己好像陷入到了这些细枝末节中。所以准备做一些调整。

下一步计划:1)快速预览《diveintopython》;2)找一个开源代码学习一下;3)开始使用python来解决问题;4)后面深入提高。

 

最后总结一下:

1、把握重点与主线:什么是学习一门新语言是的重点?我认为这应该是这门语言异于或优于你原有语言的地方(出发点不同,答案可能不尽相同)。对我来说,c++的重点就是面向对象,python的重点就是动态语言特性以及高效性。

2、不要陷入语言的细枝末节中:刚开始学习一门语言时,要避免过早陷入语言的细枝末节中(比如语法,技巧等)。并不是说这些东西不重要,而是这些东西可以在后面的实践中慢慢的去学习的。那要怎么做?看下面。

3、开始行动,而非等待准备就绪:不要等你把一门语言完全掌握了再开始行动。把握重点之后,马上开始行动,用它来解决问题,在解决问题的过程中,完成对语言的完善和更深入一步的学习。

posted @ 2011-07-24 13:24  常高伟  阅读(2868)  评论(8编辑  收藏  举报