加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 评测 > 正文

程序员必读经典长文:用十年时间自学编程

发布时间:2019-07-30 00:34:12 所属栏目:评测 来源:skura
导读:副标题#e# 本文转自雷锋网,如需转载请至雷锋网官网申请授权。 相信很多做技术的同学都自学过,也看过「Teach Yourself Programming in Ten Years」这篇文章。虽然离初次发表已经好几年了,但所有试图自学编程的人都应该发自内心的同意它的说法(除去少数过

与其他程序员一起做项目。在某些项目上你是最好的程序员,而在某些项目上你是最差的程序员。当你是最好的时候,你可以锻炼主导一个项目的能力,并用你的远见激励别人。当你是最坏的时候,你可以学习大师们做什么,观察他们不喜欢做什么(因为他们会让你为他们做自己不喜欢的事情)。

  • 接手其他程序员的项目,理解别人写的程序。当原来的程序员不在时,学习需要怎样理解和修复程序。想想如何设计你的程序,让那些在你之后的人维护它们更容易些。

  • 学习至少六种编程语言。包括一种强调类抽象的语言(如 Java 或 C++),它强调函数抽象的语言(如 Lisp 或 ML 或 Haskell),一种支持句法抽象的语言(如 Lisp),一种支持声明性规范的语言(如 Prolog 或 C++模板),一种强调并发性的语言(像 Clojure 或 Go)。

  • 记住「computer science」中有一个「computer」。知道计算机执行一条指令、从内存中提取一个字符(有或没有缓存)、从磁盘中读取连续的字符以及在磁盘上寻找新的位置需要多长时间。

  • 参与语言标准化工作。它可能是 ANSI C++委员会,也可以是决定你自己的本地编码风格是有 2 个或者 4 个空间缩进。无论哪种方式,你都可以了解到其他人对一种语言的喜好,他们的感受有多深,甚至可能了解他们的感受。

  • 有很好的判断力,尽快适应语言的标准化

  • 考虑到这一切,仅仅通过书本学习你能走多远是个值得怀疑的问题。在我的第一个孩子出生之前,我读完了所有的「How To」类型的书,但仍然觉得自己像个笨手笨脚的新手。30 个月后,当我的第二个孩子出生时,我重新学习了那些书本知识吗?不,相反,我依靠的是我的个人经验,这比专家们写的几千页书更有用,更让我放心。

    Fred Brooks 在他的论文《No Silver Bullet》中指出了寻找优秀软件设计师的三个步骤:

    1. 尽早系统地发掘顶级程序员。

    2. 指派一名职业导师负责指导他,并谨慎对待履历。

    3. 为成长中的程序员提供相互交流和互相激励的机会。

    这假设一些人已经具备成为一个伟大的程序师所必需的素质,那么你的工作就是适当地哄骗他们。Alan Perlis 的说法更加简洁:「每个人都可以学会雕刻,但 Michelangelo 必须学会如何不雕刻。对伟大的程序员来说也是如此。」Perlis 认为,伟人有一些超越训练的内在品质。但是这些品质是从哪里来的呢?是先天的吗?或者他们是通过勤奋养成的?正如 Auguste Gusteau 所说:「任何人都能学会做饭,但只有无畏的人才是伟大的。」我认为这更像是愿意将一生中大部分时间投入到某种实践中,但也许无畏是总结这一点的一种方式。或者,正如 Gusteau 的批评家 Anton Ego 所说:「不是每个人都能成为伟大的艺术家,但伟大的艺术家可以来自任何地方。」

    所以继续购买 Java/Ruby /JavaScript /PHP 书籍吧,你可能会从中得到一些有用的东西。但是它们不会在 24 小时或 21 天内改变你的生活,也不会教会你作为一个程序员所需要的所有专业知识。何不努力工作,在接下来的 24 个月内不断改进?

    参考书籍

    1. Bloom, Benjamin (ed.)《Developing Talent in Young People》, Ballantine, 1985.

    2. Brooks, Fred,《No Silver Bullets》, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

    3. Bryan, W.L. & Harter, N.《Studies on the telegraphic language: The acquisition of a hierarchy of habits》. Psychology Review, 1899, 8, 345-375

    4. Hayes, John R.,《Complete Problem Solver》Lawrence Erlbaum, 1989.

    5. Chase, William G. & Simon, Herbert A.《Perception in Chess》,Cognitive Psychology, 1973, 4, 55-81.

    6. Lave, Jean,《Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life》, Cambridge University Press, 1988.

    前面问题的答案

    典型 PC 上各种操作所需要的大致时间:

    • 执行典型指令:1/100000000 秒,即 1 纳秒

    • 从一级缓存中提取:0.5 纳秒

    • 分支预测失误:5 纳秒

    • 从二级缓存获取:7 纳秒

    • 互斥锁/解锁:25 纳秒

    • 从主存储器提取:100 纳秒

    • 通过 1Gbps 网络发送 2K 字节:20000 纳秒

    • 从内存中按顺序读取 1MB :250000 纳秒

    • 从新磁盘位置(SEEK)获取:8000000 纳秒

    • 从磁盘中按顺序读取 1MB:20000000 纳秒

    • 将数据包发送到欧洲并返回:150 毫秒,即 150000000 纳秒

    附:语言选择

    有人会问,他们应该先学什么编程语言。这里没有标准答案,但请考虑以下几点:

    • 参考你的朋友。当被问到「我应该使用什么操作系统,Windows、Unix 或 Mac?」我的回答通常是:「使用你的朋友使用的任何东西。」你从朋友那里学到的优势将抵消操作系统或编程语言之间的任何内在差异。还要考虑你未来的朋友:程序员社区的人,如果你继续的话,你将成为其中的一员。你所选择的语言有一个大的正在成长的群体还是一个小的正在消亡的群体?有书、网站和在线论坛可以得到答案吗?你喜欢那些论坛里的人吗?

    • 简单实用。诸如 C++和 Java 这样的编程语言是由有经验的程序员团队设计的,这些程序员关心他们代码的运行时效率。因此,为了应对这些情况,这些语言有些地方是很复杂的。你关心的是学习编程。你不需要那么复杂。你需要的是一种语言,它对于新手程序员来说也可以可以很容易地学习和记忆。

    • (编辑:常州站长网)

      【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读