*原文* :http://blog.csdn.net/myan/article/details/3144661

现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习;其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开始做实际工作。然而这两种方法都有弊病。第二种方法的问题当然很明显,不仅浪费了时间,偏离了目标,而且学习效率不高。因为没有实际问题驱动的语言学习通常是不牢固不深入的。有的人学着学着成了语言专家,反而忘了自己原本是要解决问题来的。第一种路子也有问题,在对于这种语言的脾气秉性还没有了解的情况下大刀阔斧地拼凑代码,写出来的东西肯定不入流。说穿新鞋走老路,新瓶装旧酒,那都是小问题,真正严重的是这样的程序员可以在短时间内堆积大量充满缺陷的垃圾代码。由于通常开发阶段的测试完备程度有限,这些垃圾代码往往能通过这个阶段,从而潜伏下来,在后期成为整个项目的毒瘤,反反复复让后来的维护者陷入西西弗斯困境。

实际上语言学习有一定规律可循,对于已经掌握一门语言的开发者来说,对于一般的语言,完全可以以最快的速度,在几天至一周之内掌握其最常用的50%,而且保证路子基本正宗,没有出偏的弊病。其实真正写程序不怕完全不会,最怕一知半解的去攒解决方案。因为你完全不会,就自然会去认真查书学习,如果学习能力好的话,写出来的代码质量不会差。而一知半解,自己动手土法炼钢,那搞出来的基本上都是废铜烂铁。比如错误处理和序列化,很多人不去了解“正路子”,而是凭借自己的一知半解去攒野路子,这是最危险的。因此,即使时间再紧张,这些内容也是必须首先完整了解一遍的。掌握这些内容之后进入实际开发,即使有问题,也基本不会伤及项目大体。而开发者本人则可以安步当车,慢慢在实践中提高自己。

以下列出一个学习提纲,主要针对的是有经验的人,初学者不合适。这个提纲只能用于一般的庸俗编程语言学习,目前在流行编程语言排行榜上排前20的基本上都是庸俗语言。如果你要学的是LISP之类非庸俗语言,或是某个软件中的二次开发语言,这里的建议未必合适。还是那句话,仅供参考。

  1. 首先了解该语言的 **基本数据类型** ,**基本语法**和**主要语言构造**,主要**数学运算符**和**print函数**的使用,达到能够写谭浩强程序设计书课后数学习题的程度;

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

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

  4. 基本**面向对象*或者**函数式编程**的特征,无非是什么继承、多态、Lambda函数之类的,如果有经验的话很快就明白了;

  5. **异常**、错误处理、断言、日志和调试支持,对**单元测试**的支持。你不一定要用TDD,但是在这个时候应该掌握在这个语言里做TDD的基本技能;

  6. **程序代码和可执行代码的组织机制,运行时模块加载、符号查找机制,这是初学时的一个难点,因为大部分书都不太注意介绍这个极为重要的内容**;

  7. 基本**输入输出**和**文件处理**,输入输出流类的组织,这通常是比较繁琐的一部分,可以提纲挈领学一下,搞清楚概念,用到的时候查就是了。到这个阶段可以写大部分控制台应用了;

  8. 该语言如何进行**callback方法调用,如何支持事件驱动编程模型**。在现代编程环境下,这个问题是涉及开发思想的一个核心问题,几乎每种语言在这里都会用足功夫,.NET的delegate,Java的anonymous inner class,Java 7的closure,C++OX的 tr1::function/bind,五花八门。如果能彻底理解这个问题,不但程序就不至于写得太走样,而且对该语言的设计思路也能有比较好的认识;

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

  10. **序列化**和**反序列化**,掌握一下缺省的机制就可以了;

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

  12. **动态编程**,反射和元数据编程,数据和程序之间的相互转化机制,运行时编译和执行的机制,有抱负的开发者在这块可以多下些功夫,能够使你对语言的认识高出一个层面;

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

  14. 如果还有时间,最好**咨询一下有经验的人,看看这个语言较常用的特色features是什么**,如果之前没学过,应当补一下。比如Ruby的block interator, Java的dynamic proxy,C# 3的LINQ和extension method。没时间的话,我认为也可以边做边学,没有大问题。

  15. 有必要的话,在工作的闲暇时间,可以着重考察两个问题,**第一,这个语言有哪些惯用法和模式,第二,这个语言的编译/解释执行机制**。

至此语言的基本部分就可以说掌握了,之后是做数据库、网络还是做图形,可以根据具体需求去搞,找相应的成熟框架或库,边做边学,加深理解。对于一个庸俗语言,我自己把上面的内容走一遍大概要花2-3周时间,不能算很快,但也耽误不了太多事情,毕竟不是每个月都学新语言。掌握了以上的内容,就给练武术打好了基本功,虽然不见得有多优秀,但是肯定是根正苗红,将来不必绕大弯子。就算是临时使用的语言,把上面这个提纲精简一下,只看蓝色重体字的部分,大致能在几天到一周内搞定,不算是太耗时,而且写出来的代码不会太不靠谱。

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

[转] 快速掌握一个语言最常用的50%相关推荐

  1. 快速掌握一个语言最常用的50%

    现在的开发工作要求我们能够快速掌握一门语言.一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习:其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开 ...

  2. 一个rshinyapp的学习视频就是2个小时,看来李刚民老师说的是对的,最重要的是快速学习一个语言并且实践的能力

    给自己10个小时 相信自己能够完成 顺便说一句 珍惜自己的独处时光 如果有两件事情的ddl,很快的,很紧密的结合在一起 我们就没有办法集中注意力 就学习不掉这个知识 也就是军事上面讲的腹背受敌

  3. R语言入门——常用函数50个

    R语言函数入门50个基本函数 0引言 1.入门准备操作及函数 1.1R版本介绍以及IDE的选择 1.2IDE及其常用的快捷键 2.空间操作以及纠错函数 2.1 ? .??.help.demo.exam ...

  4. 智能机器人c语言编程,【图片】教你快速制作一个简单的人工智能机器人(懂编程的人进来看)【科幻吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 教你快速制作一个简单的人工智能机器人(懂编程的人进来看) 本文我首发于"人工智能吧",叫做<机器人理解人类语言>和< ...

  5. go语言编写php扩展,[原创]快速开发一个PHP扩展-Go语言中文社区

    快速开发一个PHP扩展 本文通过非常快速的方式讲解了如何制作一个PHP 5.2 环境的扩展(PHP Extension),希望能够在图文的方式下让想快速学习的朋友了解一下制作过程. 需求:比如开发一个 ...

  6. 软件开发基于JavaScript实现快速转换文本语言(繁体中文和简体中文)_javascript技巧

    软件开发基于JavaScript实现快速转换文本语言(繁体中文和简体中文)_javascript技巧 一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项 ...

  7. 如何快速建立一个网络爬虫(初学者指南)

    作为一个采集新手,我搭建了一个网络爬虫,成功的从Amazon Career 网站中提取了20000条数据.如何建立一个网络爬虫并导出到数据库,最终可以将数据无成本地转变成你的财富? 跟着我我往下看吧. ...

  8. 软件开发基于JavaScript实现快速转换文本语言

    软件开发基于JavaScript实现快速转换文本语言 一般商业网站都有一个语言的需求,就是为了照顾使用正体中文的国人,会特地提供一个切换到正体中文的选项(或曰"繁体中文").传统做 ...

  9. java异常类中属于非检测异常的是_下列java语言的常用异常类中,属于检测异常的是()_学小易找答案...

    [单选题]在Word 2010的编辑状态,对当前文档中的文字进行"字数统计"操作,应当使用的菜单是( ) [单选题]客运员领带统一,领带夹夹在衬衣的( )钮扣之间. [单选题]文件 ...

最新文章

  1. Pandownload惊喜复活!下载速度惊人!
  2. java类的对象无参与有参_java无参与有参以及setter和getter方法(了解)
  3. 费解!为什么那么多人用“ji32k7au4a83”作密码?
  4. 分子动力学模拟软件_基于GPU的分子动力学软件ACEMD的简介与安装
  5. 基于.Net Remoting的项目总结报告
  6. NetBeans IDE 6.10 M1 发布
  7. xtrabackup备份还原MySQL数据库
  8. 显示lib包_Java 添加、删除、移动、隐藏/显示Excel工作表
  9. 关于APP测试用例点
  10. java+jdk+1.6+下载_jdk1.6下载_jdk1.6官方下载「32位|64位」-太平洋下载中心
  11. Hitool工具烧写程序(按分区烧写)
  12. 机器视觉硬件选型相关知识
  13. SDPT3 4.0版:半正定二次线性规划的MATLAB软件包
  14. vs2017优雅配色
  15. 2021机动车检测站签字授权人考试专业基础知识部分题库与答案
  16. 数据可视化——图表类型选择
  17. Ardunio 完成STM32板子的串口通信
  18. 周鸿祎谈: 创新与微创新
  19. 2021年西式面点师(初级)最新解析及西式面点师(初级)模拟考试
  20. 555定时器回差电压计算公式_用 555定时器组成施密特触发器 , 当输入控制端外接 10V电压时,回差电压为( ) 。_学小易找答案...

热门文章

  1. 谷歌打不开了吧,访问谷歌镜像Glgoo.com吧_我是亲民_新浪博客
  2. 计算机10秒后重新启动,电脑主机开机几秒或者几十秒自动断电关机
  3. 滚动抽奖html怎么做的,抽奖.html
  4. 程序员如何增加收入?
  5. Python类和对象以及继承多态(超详细,小白也可以懂)
  6. 服务器appcrash的问题怎么修复,Win7系统出现APPCRASH错误的修复方法
  7. 文字转语音合成器哪个好?这些文字转语音软件值得收藏
  8. 【Encoder-Decoder】
  9. 当当图书,这又是何苦。
  10. 微信小程序中层叠轮播图(仿微信朋友圈swiper样式)