前言
我翻閱自己之前寫的博客文章,發現在 2015 年我剛開始學習編程的時候,翻譯了一段 Paul Graham 關於“How can I learn to program?”的回答。
當時竟然沒有翻譯完,我就跑去 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 平台賬號等相關事物。需要:細心、熱愛技術、懂技術最好,妹子優先
- 贊助者:老板您坐着就好了,剩下的交給我來干。😂
掃描下面的二維碼,關注公眾號回復加群。就可以入群和一群熱愛技術的小伙伴一起交流成長。對上述坑有興趣的小伙伴也可以去群里找我,我等你們!