我翻閱本身以前寫的博客文章,發如今 2015 年我剛開始學習編程的時候,翻譯了一段 Paul Graham 關於「How can I learn to program?」的回答。git
當時居然沒有翻譯完,我就跑去 GitHub 上面收集有意思的項目去了。三年過去了,我作了 HelloGitHub 這個項目 🤪。程序員
今天既然翻到了,那是時候把這個事情作完了。我以爲須要先介紹下 Paul Graham 是誰?github
保羅·格雷厄姆(英語:Paul Graham,1964年11月13日-),哈佛大學應用科學(計算機方向)博士學位,美國著名程序員、風險投資家、博客和技術做家。web
公司:他是著名的創業投資公司 Y Combinator 的創始人,這個公司有個新聞網站叫 Hacker News。編程
書:他還寫了本書《Hackers & Painters》(黑客與畫家)框架
錢:最先的 Web 應用 Viaweb 的創辦者之一,1998 年被雅虎以近 5 千萬美圓價格收購,後成爲 Yahoo! Store。編程語言
我看完他的介紹就兩個字「大神」。下面是他對 How can I learn to program? 如何學習編程這個問題的回答。ide
原文分爲 6 段,咱們一段段的看。開源項目介紹
原: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 版》
原: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,在寫這個項目的過程當中讓我學習到了不少。當時不少代碼都是拷貝來的,可是能讓它跑起來達到我預期的效果,着實讓我查了不少資料。 😪
原: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。
原: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 誰寫的垃圾代碼。「,擡頭一看做者是我本身。而後把後半句咽回去了,默默地把這段代碼給重寫了,毫不能讓別人發現噁心別人 😂。
原: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.
譯:在學習編程的過程當中,你會發現讀別人的代碼對你會頗有幫助。但你本身動手實現從別人哪裏學到的技巧,你會收穫更多。
我的實踐:我還在這個階段摸索中,我如今是通常的代碼都能看懂,其中精妙部分可能也能理解。可是讓我本身寫就瞎了。可能這就是我要提升的方向吧,仍是要多寫、實現。看明白的不必定就懂了,懂了的不必定能實現。引用費曼的名句:「我不能創造的東西,我就不理解。」 和你們共勉 💪
原: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 的小(後面會不會變‘大’不知道)家庭,咱們須要你。咱們可以接受和你一塊兒成長,經驗不是問題,態度決定一切:
掃描下面的二維碼,關注公衆號回覆加羣。就能夠入羣和一羣熱愛技術的小夥伴一塊兒交流成長。對上述坑有興趣的小夥伴也能夠去羣裏找我,我等大家!