UP | HOME

(译) 怎样学习一门新的编程语言?

根据 水木清华上的一个贴子,找到了这篇博文 "How to learn a new programming language", 觉得有必要向大家推荐一下。翻译如后。

这儿有一些学习新的编程语言的技巧。它们的罗列无任何特别的顺序。希望至少有一个新技巧会帮助你精通下一门语言。

  1. 造一点你当前确实需要的东西。 这可以是你每天工作中会用到的工具,或者是一些在家里有用的东西。
    考虑一下这些项目……
    • 写一个简单的单元测试框架。许多新语言刚发布时并没有直接可用的单元测试框架。这个项目可强迫你使用此语言所涉及到的领域,比如反射 (reflection) 和元编程 (meta-programming). 一旦完成,它会直接用在你将来用这门语言开发的项目中。
    • 实现一个磁盘使用工具;它统计磁盘上所有目录的磁盘使用情况并输出到终端上。它不需要过度复杂的算法,但涉及了许多非常基础的内容:遍历、文件系统、命令行解析及输出格式。
    • 实现一个备份/归档脚本,带有命令行参数来排除一些特定扩展名的文件。它应该可备份到单个的 .zip.tar.gz 文件中。这个项目涉及到如下内容:遍历、文件系统、命令行解析、压缩库和正规表达式。
  2. 用新语言移植一个现有的知名程序。 因为你是在移植程序,你已经有了程序设计可用,这使得你的大脑可专注于新语言的特性上。完成之后,当与旧语言的版本相比时,你有一个好的参照。
  3. 找本该语言的正规图书,尽快读完。 目的不是为了记住所有内容,而是吸收该语言的思想与习惯。然后写一些小的但不是无意义的项目。当你卡壳时,希望可以回想起一点书中的内容,然后再回头去参考一下书本。
    奥莱利 (O'Reilly) 出版的许多“技术手册” (in a Netshell) 和“尝鲜” (Head First) 系列图书,读者的评价都很高——它们囊括了许多主流语言 (C, C++, C#, Java, Python, JavaScript, PHP).
  4. 学习 (读书/教学) 与使用并举。 用多而学少,你会得到许多低质量的代码。学多而用少,你则不会消化吸收从而抵达更高水平。
  5. 学习并参考公共源码库里的工作。GitHub 上找一个 100% 用这种语言开发的中型项目。阅读其代码并努力去理解它。要寻找那些由该语言设计者或知名专家开发的项目。
    比如,对 Go 语言,该语言标准库是用 Go 编写的并且是开源的,这儿是 strings 库 的一部分。另外, Brad Fitzpatrick 和其他一些 Go 开发组的成员在 GitHub 上还有好几个项目,你都可以阅读并从中学习,比如 Go client fo Memcache.
    [译注:国内访问 GitHub 不一定顺利。推荐一个服务器在国内的 Git 代码托管网站 GitCafe。]
  6. 投入大块的、不会被打断的时间, 至少半天时间去学习新的语言。简单地说,每周半小时的课程没什么实际用处,因为大部分时间都用在回顾以前的学习上了。
  7. 学习一门语言不该是一个人在努力。 有许多人犯过与你同样的错误,因此,当你卡壳时寻找帮助是克服困难的捷径。一些可用的在线帮助资源:语言特定的 IRC 通道, StackOverflow, Twitter, Facebook 组, Quora, Google+, Google 讨论组。当你完成一个项目时,也可以提交已经完成的代码到这些论坛里;比你有经验的人会告诉你哪些部分可以提高或简化。
    [译注:国内这样的良好的讨论环境很少见。水木的技术版块稍好些。其它大部分论坛中最常见的就是直接找人帮忙做题型的,这种风气很坏,对促进共同提高没有帮助。因此,如果你学习新语言,最好还是把英文好好练习一下,多去 StackOverflow 之类的地方。]
  8. 使用一个带语法高亮的编辑器。 经久不蓑的有 Vim 和 Emacs, 还有编辑器新秀如 Sublime Text, 它们支持不一定所有但绝大部分编程语言的特性,以及几乎所有主流的操作系统。一些语言通常与特定的集成开发环境 (IDE) 关联;学习新语言时使用这些 IDE 则是个好选择。通常有……

    • Eclipse IDE 用于 Java 和 Android 开发。
    • Xcode 用于 Objective-C 和 iOS 开发 (仅支持 Mac OS X).
    • Visual Studio IDE 用于 C#, C++, VB.NET, F# (仅支持 Windows).

    所有上面罗列的 IDE 和编辑器要么完全免费,要么可以无限制试用。

  9. 参与有实际用户和期限的实际项目 是学习一门新语言的白热化的严格考验。如果真的想快速学习一门语言,考虑换一个使用该语言的工作。一旦你得到该工作,你将别无选择不得不快速上手。
  10. 最后一条来自 "The Pragmatic Programmer"1 的技巧,技巧 #8 Invert Regularyly in Your Knowledge Portfolio (经常检查你的知识清单)

    “每年至少学习一门新语言。不同的语言解决同样问题的方式不同。通过学习几种不同的语言,你可以拓展自己的思路,避免陷入老套之中。另外,现在学习多种语言非常容易,感谢互联网上大量的自由的软件。”

脚注:

1

The Pragmatic Programmer 中译本名为《程序员修炼之道:从小工到专家》。

版权所有 ©2015: Exaos Lee | Date: [2013-02-03 日 18:59] | Generated by Emacs 24.4.1 (Org mode 8.3.2), Validate, 88x31.png

comments powered by Disqus