前言

我翻阅自己之前写的博客文章,发现在 2015 年我刚开始学习编程的时候,翻译了一段 Paul Graham 关于 “How can I learn to program?” 的回答。

当时竟然没有翻译完,我就跑去 GitHub 上面收集有意思的项目去了。三年过去了,我做了 HelloGitHub[1] 这个项目 ?。

今天既然翻到了,那是时候把这个事情做完了。我觉得需要先介绍下 Paul Graham 是谁?

一、Paul Graham 是谁?

保罗·格雷厄姆(英语:Paul Graham,1964年11月13日-),哈佛大学应用科学(计算机方向)博士学位,美国著名程序员、风险投资家、博客和技术作家。

公司:他是著名的创业投资公司 Y Combinator 的创始人,这个公司有个新闻网站叫 Hacker News。

:他还写了本书《Hackers & Painters》(黑客与画家)

:最早的 Web 应用 Viaweb 的创办者之一,1998 年被雅虎以近 5 千万美元价格收购,后成为 Yahoo! Store。

我看完他的介绍就两个字“大神”。下面是他对 How can I learn to program? 如何学习编程这个问题的回答。

二、如何学习编程

原文分为 6 段,我们一段段的看。

2.1 第一段(入门)

原:Find a friend who knows how to program. Get them to set you up with a system where you can edit and run programs. Use whatever language they suggest for a beginner (probably it will be Python or Ruby). Then get the O'Reilly book and start working through it.

译:找一个会编程的朋友,让它帮你部署编程环境。学习他们建议的适合初学者的编程语言(可能是 Python 或者 Ruby),然后找 O'Reilly 出版的关于该语言的入门系列书籍,啃完。

个人实践:因为编程入门安装开发环境是一件很痛苦的事情,所以最好有人帮你弄好,我当时是靠搜索引擎折腾死我了。编程语言的话找一个语法简单,比如:Python。书的话我当时看的是《笨方法学 Python》,然后看的是《Python 核心编程第 2 版》

2.2 第二段(动力)

原:As you learn the mechanics of writing and running a program, start thinking about specific programs you want to write. That will motivate you to learn more.

译:当你学习编程的时候,也要想想自己想写个什么好玩、有意思的项目。思考你想要编写什么酷的程序,这样会让你有动力去学习更多东西。

个人实践:“无知无畏”的想法是让你学习更多的动力,而且它是一个“种子”。我就当时想写一个能够画词翻译的网站,然后可以记录我请求翻译过的单词和次数,不同翻译次数颜色不一样(绿、蓝、金、暗金,玩过暗黑的都懂)。后面再看别的文章的时候就知道那些是高频词汇,我就可以突破记忆一下,有助于我提高英文阅读的能力。后来我做了这个项目 holleworld[2],在写这个项目的过程中让我学习到了很多。当时很多代码都是拷贝来的,但是能让它跑起来达到我预期的效果,着实让我查了很多资料。?

2.3 第三段(动手写)

原:Don't start with a problem that's too big. A good way to begin is to take an existing program and modify it to do something new.

译:起步的时候不要去解决太难的问题。一种好的方法建议:修改一个已有的程序,让它实现新的、更多的功能。

个人实践:修改项目会比较简单,而且基于某一个流行框架去做一个项目也会轻松很多。首先要动手写,改、抄都是动手,不要上来就想写个功能强大的项目,慢慢来。我在写上面那个项目之前,抄了两遍廖雪峰老师的那个博客实战项目(不用复制粘贴,手打每行代码)?。最开始我一大段一大段的抄,抄完 model 模块,代码跑都跑不起来,看不到博客的样子让人心灰意冷。后来我就一个功能一个功能的抄,抄完跑、调试。每个功能调试过能看效果,然后就知道每行代码有什么用了,而且对项目有个整体的感觉,后面修改、增加功能就很简单了。然后我又去 GitHub 上找有趣的开源项目,想着能不修改、增加功能之类的。后面收集的项目多了,就有了 HelloGitHub[3]。

2.4 第四段(坚持写)

原:Initially your programs will be ugly, but don't worry about that. Everyone's are. Just keep going, and they'll get better.

译:起初你的程序可能很“丑“(代码不简洁、界面丑、编码风格不好),但是不用担心这些,因为每个人刚开始写的程序都不咋样。只要你坚持写下去,你写的东西会越来越好的。

个人实践:我现在的代码依然很丑,这是个漫长的过程。知道丑就行,写多了就会变得好看和简洁了。我还记得我最开始写网页的时候,每个页面下面都有一段联系方式之类的信息,然后我把这段代码在每个页面最下面都写了一遍。后来一个不懂技术的产品看了说:“你这段代码都一样,能不能提取出来,然后每个页面结尾都引用相同的那段代码的文件?”。从哪以后我就知道一段代码,如果在两个地方都用了,就需要提取出来一个公共方法。还有一次,我重构项目,看到一段编码风格特别差、没注释、for 循环滥用的代码。我心想:”这 TMD 谁写的垃圾代码。“,抬头一看作者是我自己。然后把后半句咽回去了,默默地把这段代码给重写了,绝不能让别人发现恶心别人 ?。

2.5 第五段(看懂了,不一定能写出来)

原:As you learn, you'll find it useful to look at programs other people have written. But you'll learn more from this once you've tried programming yourself.

译:在学习编程的过程中,你会发现读别人的代码对你会很有帮助。但你自己动手实现从别人哪里学到的技巧,你会收获更多。

个人实践:我还在这个阶段摸索中,我现在是一般的代码都能看懂,其中精妙部分可能也能理解。但是让我自己写就瞎了。可能这就是我要提高的方向吧,还是要多写、实现。看明白的不一定就懂了,懂了的不一定能实现。引用费曼的名句:“我不能创造的东西,我就不理解。 和大家共勉 ?

2.6 第六段(结伴同行)

原:Finally, find friends who like to write programs. They can answer your technical questions; you'll get new ideas from talking to them; and they'll be the audience for your first efforts.

译:最后一点,找到同样喜欢编程朋友,他们可以解答你再编程上的问题。你也会从与他们交流的过程中收获新的想法,他们也会是你成长的见证者。

个人实践:编程的路上,如果有一群志同道合的小伙伴一起交流、鼓励,相互促进的前行,那样你会走的更远的。“三人行,必有我师”,多和程序员的小伙伴成为朋友,相互交流技术的过程潜移默化就会得到提高。所以我这边拉了个 “HelloGitHub 交流群”(加入方式下面有),群里都是编程爱好者,什么段位的都有:小白、从业多年、刚入职场、Geek、大牛等。这个群是讨论技术、开源项目、程序员相关话题,希望大家在这里呆的开心。我也在做开源项目的过程中、还有在群里,结交了很多朋友 ?。对了!你还能加入 HG-Team 我们一起做些有意思的事情(加入方式在最下面)。

三、最后

上面大神说的这段话是翻译完成了,内容包含了:编程入门、动力、实践、坚持、提高、交友?。三年前,读完大神的说的这段话,我是真的从中收获了很多:技术、成长、小伙伴、自己的项目。现在重新看这段话,发现自己还是有要提高地方。所以这里把这篇文章分享给大家,希望大家也能从中收获一些东西,当然文中有不对的地方欢迎指正。编程之路千万条,看你选择那条。

成长的路上,你我都是新手,我们何不结伴同行,成为亦师亦友的小伙伴?加我们 HelloGitHub-Team 的小(后面会不会变‘大’不知道)家庭,我们需要你。我们能够接受和你一起成长,经验不是问题,态度决定一切:

专栏负责人:负责某一专栏项目的推荐。需要:擅长某一门语言,关注开源动态。•投稿者:HG 原创技术内容投稿。需要:一定文字功底,喜欢写文章。投稿文章类别可以为:开源框架的深入讲解文章、个人开源项目介绍文章、学习路线、翻译文章、技术系列文章•开发者:HG 相关项目的开发。需要:热爱编码,有良好的编码风格,一定的编码经验(语言:Python、JS)•运营者:运营 HG 平台账号等相关事物。需要:细心、热爱技术、懂技术最好,妹子优先•赞助者:老板您坐着就好了,剩下的交给我来干。?

扫描下面的二维码,关注公众号回复加群。就可以入群和一群热爱技术的小伙伴一起交流成长。对上述有兴趣的小伙伴也可以去群里找我,我等你们!

References

[1] HelloGitHub: https://github.com/521xueweihan/HelloGitHub[2] holleworld: https://github.com/521xueweihan/holleworld[3] HelloGitHub: https://github.com/521xueweihan/HelloGitHub

看看大神 Paul Graham 对如何学习编程的回答相关推荐

  1. 【Java】国外大神总结的 10 个 Java 编程技巧!

    原文:http://www.javastack.cn/article/2018/10-java-programming-skills-summary/ 这是一个国外大神20多年的经验总结出来的-- & ...

  2. python快乐编程—基础入门-从萌新到大神必读书籍 《Python快乐编程基础入门》...

    2019年,全球信息化进程持续加快,IT行业繁荣发展.作为新时代IT人,不仅需要强大的理论知识,更需要过硬的技术.Python作为最受欢迎的编程语言之一,作为人工智能时代的首选语言,因其受众多.用途广 ...

  3. 大神带你玩转异步编程,理论与实践齐飞,敢说是目前最全的讲解了

    要完全理解异步编程需要先理解几个概念 任务 我给任务的定义是完成某项功能的单元模块,任务有大有小,站在操作系统的角度,一个程序就是一个任务,每当运行一个程序就会创建一个新的任务,它在操作系统中还有一个 ...

  4. 阿里大神最佳总结Flutter进阶学习笔记,技术详细介绍

    开头 很多人工作了十年,但只是用一年的工作经验做了十年而已. 高级工程师一直是市场所需要的,然而很多初级工程师在进阶高级工程师的过程中一直是一个瓶颈. 移动研发在最近两年可以说越来越趋于稳定,因为越来 ...

  5. 敖丙大神的非科班Java学习路线

    一.前言 这期我想写很久了,但是因为时间的原因一直拖到了现在,我以为一两天就写完了,结果从构思到整理资料,再到写出来用了差不多一周的时间吧. 你们也知道丙丙一直都是创作鬼才来的,所以我肯定不会一本正经 ...

  6. 大神2年的Python学习经历撼动了整个Python编程界,都是你需要的

    从正式开始学习Python到现在差不多6个月的时间了,虽说进展比较缓慢,但多少也算有些进步和体会,现在想把把这大半年来的学习情况简单梳理一下,既是给自己做个总结,也希望能给与我情况类似的朋友们一点帮助 ...

  7. 前端大神是如何一步步学习进阶的?

    第一阶段: HTML CSS:HTML进阶.CSS进阶.div css布局.HTML css整站开发.JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAscr ...

  8. 收藏 | 10本书,从Python小白进阶数据分析、AI大神

    来源:大数据 本文多资源,建议收藏. 从语言入门,到数据分析.人工智能领域的实战,助你早日成为大神! [ 导读 ]各种版本的语言排行榜里,涨势迅猛的Python总能制造各种话题.在数据分析.AI等当前 ...

  9. mysql dba高级教程_MySQL DBA高级视频教程 博瑞森一线DBA大神亲授

    下载服务器:五号服务器---VIP资料下载八区\数据库专区 游客,如果您要查看本帖隐藏内容请回复 MySQL DBA高级视频教程 这个是我参与培训的,分享给大家学习,真正一线DBA大神亲授 全程高清, ...

最新文章

  1. MNIST数据集合在PaddlePaddle环境下使用简单神经网络识别效果
  2. server2012 r2搭建双DNS
  3. 20080608-昨日回顾今日计划
  4. 如何将 Pycharm 打造得更称手
  5. 阿里云ECS,搭建MySQL5.7数据库环境
  6. Flyweight(享元)--对象结构型模式
  7. Android美工坊--一个QQ登录验证的小例子
  8. PDF Expert 坚果云 强强联合 优惠来袭
  9. Js+fromdata
  10. 游戏开发如此简单?我直接创建了一个游戏场景【python 游戏实战 02】
  11. 在Linux中使用7zip/7zz
  12. ssb的有效性最好_在AM、DSB、SSB、FM系统中,有效性最好的是AM
  13. HTML中注解的写法正确的是,css注释的写法(单行和多行)
  14. 河南计算机会考必背知识点,2017年河南物理高中会考知识点大全
  15. Arduino基本知识
  16. 《Python自然语言处理》——1.1 语言计算:文本和词汇
  17. 报错Field Mapper in xxx.xxxServiceImpl required a bean of type ‘dao.xxxMapper‘ that could not be found
  18. python如何定义矩阵_基础 | Python下的矩阵定义 (下)
  19. win10打开程序响应很慢_win10优化设置最全教程(上)。
  20. 大数据学习笔记七(云数据库)

热门文章

  1. Android之MediaPlayer加载视频慢
  2. 再次定义千元旗舰手机,需要怎样的自我修养?
  3. Windows10系统设置开机账号自动登录的根本解决方法
  4. java 多线程遍历list_如何线程安全地遍历List:Vector、CopyOnWriteArrayList
  5. css自适应华为手机屏幕大小,CSS实现自适应分隔线的N种方法
  6. iOS APP免费开发账号真机调试教程
  7. java中map里面的key按我们插入进去的顺序输出
  8. 为什么打开计算机看到硬盘,如果在打开计算机后无法读取硬盘,该怎么办
  9. 苹果电脑怎么打开任务管理器
  10. 刚学平面设计如何用简单的方法来设计字体