看看大神 Paul Graham 对如何学习编程的回答

1,764 阅读8分钟

前言

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

1.png

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

今天既然翻到了,那是时候把这个事情做完了。我觉得需要先介绍下 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.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

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 平台账号等相关事物。需要:细心、热爱技术、懂技术最好,妹子优先
  • 赞助者:老板您坐着就好了,剩下的交给我来干。😂

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