作为一个程序开发人员强烈建议阅读:

一下转自孟岩老师博客,大家一起学习吧

现在的开发工作要求我们能够快速掌握一门语言。一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查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项目,否则不必太关注。

转自:http://blog.csdn.net/myan/article/details/3144661

大师的话一语道破.强烈建议阅读相关推荐

  1. 【JAVA工作项目日报管理开发-王大师开发-阮大师指导-鑫哥建议-国庆哥教导-项目组成员使用】

    本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,<Java王大师王天师>作者 公众号:山峯草堂,非技术多篇文章,专注于天道酬勤的 Java 开发问题.中国国学.传统文化和代 ...

  2. 「普通人VS程序员」电脑还可以这样关机,神操作 建议阅读

    导语 ​​ 哈喽!大家好,我是梦雅. 无论家用电脑还是公司的电脑,定时开关机都是一个非常实用的功能,只是一般都不太受关注.定时关机不仅能延长电 脑的使用寿命,还能节约超多的电费呢~哈哈哈哈 ​​ 嗨~ ...

  3. 名编辑电子杂志大师教程 | 名编辑电子杂志离线阅读(ipad/iphone)

    为了解决销售人员外出向客户展示产品目录,因为没有网络,而无法打开H5翻页电子书的状况,名编辑电子杂志大师开发出了新功能:ipad/iphone离线阅读电子书. 提示:旧版本的名编辑电子杂志大师输出的z ...

  4. 从0到1开发自动化测试框架(硬货太多,建议阅读)

    随着项目版本的快速迭代.APP测试有以下几个特点: 首先,功能点多且细,测试工作量大,容易遗漏: 其次,代码模块常改动,回归测试很频繁,测试重复低效: 最后,数据环境多样,用户场景复杂,功能回归覆盖难 ...

  5. 【不建议阅读】电脑上腾讯会议录屏:OBS

    今晚有一个重要的在线讲座,没有时间去听,打算用录屏后后续查看. 知乎上提供了多种录屏方法,但是通常只要使用一种就够了.我之前用过OBS软件,还挺好用的.OBS软件:下载地址. 本打算写使用教程的,结果 ...

  6. 如果你也被pyinstaller折磨,建议阅读,pyinstaller打包教程。

    最近打算把自己写的程序用pyinstaller做一个打包,以便在其他电脑上使用,本来以为挺简单的事情,没想到搞了两天时间才搞定,期间遇到诸多坑,忍不住要骂娘了. 平心而论,搞不定只能是自己学艺不精,所 ...

  7. Java内卷真相揭秘!强烈建议阅读!

    [此文章转自乐字节] 最近很多人都来问小编对 2022 年秋招 Java 后端开发岗一片红海的情况怎么看. 在我看来,既然是红海,说明有利可图. 后端职业路径没有明显天花板,上可 CEO,下可打工人. ...

  8. 软件设计领域没有银弹,但代码大师MaxKanat-Alexander的建议绝对能给你带来启发...

    导读: 如何让简约设计始终贯穿在编程工作中,以及如何在编程工作中取得成功? 复杂的软件设计有哪些特征--如何构建杰出软件? 程序员为何会感到力不从心,应该如何持续改善? 成为明星程序员的秘密是什么? ...

  9. 阅读开源源码的正确姿势建议

    关于如何阅读开源社区源码,最近陆续有同学过来问我这个问题.前段时间,在HBase技术交流群里,大家也讨论过一些零散的方法,但都不系统.借着这个问题,我也认真回顾了一下自己所用过的一些方法,觉的有必要整 ...

最新文章

  1. 时间序列(五)股票分析
  2. flv文件转换,完美解决
  3. MySQL数据库应用第3章操作数据库
  4. scrapy-redis
  5. requests模块的入门使用
  6. 面向对象1(super、this)
  7. Elasticsearch DSL中Query与Filter的不同
  8. 服务器LIMIT是什么信号,Postfix添加milter-limit配置方案
  9. typecho和wordpress模板了解、开发流程介绍、前台后台前端后端区分
  10. 修复Oracle9i中DBA的密码
  11. es6 async函数的基本用法
  12. java web中的重定向和转发,forward和sendRedriect
  13. php输入一个字符串 输出所有组合,C++_C语言实现输入一个字符串后打印出该字符串中字符的所有排列,本文实例讲述了C语言实现输入 - phpStudy...
  14. 微软edge如何退出登录_Microsoft Edge:评论
  15. PHP字符串常用函数
  16. Excel怎么快速提取图片的主色调?
  17. 开源项目之Android繁体中文输入法
  18. 不负春光不负卿,听康大厨讲讲OpenStack重要组件的那些事儿
  19. Android APK签名总结-- V1签名和V2签名使用和区别
  20. 内存溢出————举例分析dump下的hprof文件

热门文章

  1. 华为系统更新后sim无服务器,华为手机系统更新后太卡怎么办? 原因及解决方法详解...
  2. 程序员的520花式绘制爱心代码大全
  3. Probability
  4. window游戏编程1
  5. 《CUDA高性能并行计算》----1.4 推荐项目
  6. java交易撮合怎么实现_「康力电梯002367」“股票实时交易系统如何实现高并发撮合交易?最好有java架构“java 股票分析工具-京东方a小-seo金融...
  7. 封装建立-SMD封装
  8. 零基础学习前端-从bootstrap开始(一)
  9. 免费的模拟贝斯合成器-Togu Audio Line TAL-Bassline Free WiN-MAC
  10. 从《9败1胜》了解王兴如何10年创业带领美团上市!