[轉]學習你的第一門程式設計語言

來源:互聯網
上載者:User

標籤:c#   編碼   沒有想到   訓練   class   evel   ceo   學習   自己的   

學習你的第一門程式設計語言投遞人 itwriter 發佈於 2016-11-04 12:24 評論(0) 有539人閱讀 原文連結 [收藏] ? ?

  英文原文:Learning Your First Programming Language

  這篇文章摘自於我即將推出的新書《The Complete Software Developer’s Career Guide》的其中一章。

  好的,決定好想學什麼程式設計語言了嗎,現在就讓我們開始學習吧。

  所有你需要做的就是開啟一本書,然後開始閱讀,是這樣的嗎?

  不全是這樣的。我的意思是,你可以用那種方式學習——如果你喜歡挫折的話。

  還記得我們談到過的通過動手才能學得最好嗎?

  這就是本文的主旨。

  我會給出學習第一門程式設計語言的理想方法布局,你不僅應該學習這個布局方法,還應該享受精通它——如果不能掌握的話。

  學習第一門程式設計語言或許是學習編程最困難的事情,但並非一定會這樣。

  大多數程式員——包括我自己 ——通過閱讀一本書嘗試做一些東西出來,遇到挫折難題,然後再重讀並繼續嘗試的事情,直到終於可以按預期工作。

  我將與大家分享的東西來自於教導和訓練軟體開發人員學習第一門程式設計語言和提高語言技能的經驗。我也加進去了我自己學習語言,如C++,C#和 Java 的經驗。

  基本上,在這篇文章中,我將展示給你我做的一些事情——我現在瞭解的東西——如果我是你,並且現在要去學習第一門程式設計語言的話。

  從看一個正在工作的應用程式開始

  大多數程式員,當他們想學習編程的時候,往往是從一本書開始。

  雖然有一些優秀的書籍會手把手地教你編程,但我認為最佳的開始是查看一個能實際工作的應用程式的原始碼,然後試著儘可能多地找出正在發生的事情。這很難。

  它會讓人覺得不舒服,但是不要畏懼。要習慣這種不舒服的感覺。這是讓人成長的唯一路徑。

  我想要你做的是選擇一個開源應用程式——最好是流行的,才有可能被精心設計——然後瀏覽它的原始碼。你可以在 GitHub 上找到大量項目,因此我建議你去那裡尋找。

  並且,你最好可以下載這些代碼,自己構建並運行這個應用程式——雖然這樣說的話超出了這本書的範圍。如果你有一個朋友可以協助你做這些事情,那就更棒了。當然沒有,也沒有關係。

  重要的是,你要去探索代碼,從而瞭解程式設計語言的文法看起來是什麼感覺,並試著閱讀代碼看看你能否理解或弄清楚意思。

  使用應用程式本身,如果可能的話,這樣你才能夠感覺到代碼和代碼作用之間的關係。

  就像我說的,這讓人感到很不舒服。你可能會覺得你看不懂任何東西。

  再說一遍,那沒關係。你只需要竭盡全力看看你能夠搞清楚一兩件事是如何工作的,或在代碼中你可以做哪些變動以便於用某種方式改變功能。

  此外,大致瞭解代碼如何命名以及如何被組織的。就像你是一個考古學家試圖瞭解一些古文明的著作一樣。這樣的開始可以讓你比大多數不知道將要學習的程式設計語言是什麼樣的程式員要更有目的性。

  在沒有開始旅程之前先大致瞭解當地情況總歸是好的。編程沒什麼不同。

  找一些好的資源或書籍,大致看一遍

  要想在啟航之前,更進一步地瞭解當地情況,接下來要做的並不是反覆閱讀編程書籍,而是挑選一些其他資源——如視頻,文章,或教程——大致看一遍。同樣的,這又讓人覺得有些不舒服,因為很多你看到的內容你並不明白它是什麼意思。

  但是……你需要涉足這個領域。你只要能夠差不多瞭解這個東西到底有多大,你要學習的是什麼以及常見概念是什麼就可以了。

  這些前提工作在你大概明白要學習什麼類型的東西以及概念是如何建立在彼此之上的時候,會收到效果。

  瞭解如何建立“Hello World”

  好的,關於這一點你依然不用“閱讀”或上手編程。

  以後會讓你做到想吐的——如果你想的話。(不遵循這些步驟,實際上你也能學習程式設計語言。)

  此時你要做的是儘可能地建立最基本的程式,無論你學習的是什麼程式設計語言。

  還記得我們談到過的“如何開發技術技能”嗎?這正是此處的目標。你想要儘快開始,這樣你就有足夠的信心和知識學以致用。

  你所要開始的一個非常基本的程式叫“Hello World”。大多數編程書籍一開始都會讓你去建立一個“Hello World”程式,這通常指的是輸出“Hello World”到螢幕上。

  這可能並不需要太多關於程式設計語言的知識,但是需要熟悉並測試用來構建和運行程式所需的基本工具鏈。

  如果你正在閱讀有關程式設計語言的書,那麼書中應該包含一個“Hello World”程式便於你建立。

  如果沒有,那就Google搜尋“Hello World + 你的程式設計語言”。馬上就能找到例子。通過建立“Hello World”程式,你還可以學到該程式設計語言程式的基本結構。

  學習基本構造,並用真正的問題測試

  如果你使用相應的書籍或某種形式的教程學習程式設計語言,那麼現在你可以通過它們來學習了。

  此時,你會覺得正在閱讀的書或上的課程並沒有你剛開始認為的那麼神秘。

  現在你要做的是熟悉所學程式設計語言的每個基本結構,然後使用這些構造編寫一些代碼。

  你需要儘可能實際地嘗試和思考將所學的東西與問題和應用程式聯絡起來,當你將技能應用到實際問題的時候,這樣才能更好地理解和記住這些知識。

  下面是大多數程式設計語言所包含的一些基本結構:

  • 能夠輸出到螢幕上
  • 基本的數學能力
  • 作為一個變數儲存資訊
  • 組織代碼成函數,方法,或模組
  • 調用函數或方法
  • 布爾邏輯評估的效能
  • 分支條件陳述式(if / else)
  • 迴圈語句

  下面是一些好訊息。

  一旦你瞭解這些基本結構並知道如何使用它們,你就具備了語言的基礎知識。是的,文法可能不同,但這是編程的核心。你可能會花費大量時間在這個階段。

  用你自己的方式去做,一次一個地去學習程式設計語言的結構,並通過實際編寫一些代碼來應用每個結構。如果你採取的是自己的方式,那麼你需要確定結構是什麼以及學習的順序。

  如果你正在閱讀書籍或學習教程(最好是多本書籍和多個教程),那麼具體路徑應該已經呈現在你眼前,甚至有一些例子和挑戰任務。盡量確保明白你正在學習的內容以及如何應用它們。

  現在可以回去看看你第一步看的原始碼了,看看你能明白多少。

  知道語言功能和庫之間的區別

  經常絆倒初級程式員的一件事——尤其是今天的程式設計語言——是知道語言的部分是什麼,以及語言內建的標準庫的部分是什麼。

  通常情況下,區別不是很清楚,因為,習慣上看,你會非常頻繁地使用標準庫編寫代碼。

  沒關係。你需要瞭解所學程式設計語言的編程約定,但你應該特別小心地去嘗試並指出實際語言部分以及常用於語言的庫的部分。

  這似乎有點雞蛋裡面挑骨頭,但我認為這很重要,因為它可以擼順此刻在你腦中雜亂無章一塌糊塗的文法,並協助你更有意義地分類和組織。

  你會明白,對於大多數程式設計語言,語言的實際部分本身並不是很大,並且比較容易學,但標準庫很大,用你的方式瞭解它們相對而言要困難得多。

  現在的編程,比起說是做語言絕對的專家,更多的是關於知道如何使用庫和架構。這就是為什麼這種區別顯得重要的原因之一。

  通過認識到哪些並非語言的一部分,而是庫的一部分,並瞭解如何尋找庫來完成相應語言中的常見任務,你會成為一個更好的程式員。

  審查現有代碼,理解每一行代碼的意思

  此時,你應該已經熟悉所有所學程式設計語言的主要概念,並在實際例子中用過大多數程式設計語言功能。

  你對語言本身和與語言結合使用的庫之間的差異也有了深入瞭解。但你對程式設計語言可能仍然覺得沒有那麼舒服,或者你實際上還不懂。

  這是一個你感覺自己可以理解所有一切是如何工作的階段,但卻不知道如何把它們放在一起,寫出一個真正的應用程式。許多初級程式員往往會因此而停留在這個階段,感到沮喪,覺得他們永遠成不了一個真正的程式員。

  脫離這個困境並確保在知識上不會有欠缺的最好方法之一是,查看現有的代碼,一行一行地,確保你能準確理解每一行和每一個聲明在代碼中是做什麼用的。(即使你有時不知道原因,知道具體的過程依然是一種進步。)

  這裡的現有代碼可以用你在第一步時看的項目的原始碼裡面隨機的專案檔。開啟一個檔案並仔細檢查檔案中的每一行代碼,確保你知道它到底是做什麼的。

  如果你不明白——話說會有很多東西你都不明白——那就花一些時間思考一下,仔細查看你不明白的地方。有點乏味。甚至可能是枯燥的,但是值得。

  當你到達一個你覺得你可以讀懂任意一行代碼並理解它做什麼的階段——同樣的,知道為什麼在此時也並沒有那麼重要——說明你已經做好了繼續前進的準備。

  構建東西,構建很多東西

  現在是時候真正開始使用程式設計語言了。

  此時,你已經能寫一些小程式了,使用大部分的語言特性,但只有真正實際去構建應用程式,你才能更深刻地感受程式設計語言。

  挑幾個小項目——別太大——然後構建應用程式。

  不要太雄心勃勃,要知道一口吃不成個大胖子,所以在這個階段不要試圖做任何相關於平台或 UI 密集的東西。最好你的應用程式只輸出文本到螢幕上,並暫時只從鍵盤中接受輸入。

  目的是為了建立專註於使用程式設計語言和標準庫的簡單應用,不要額外添加針對於平台功能的架構——接下來會涉及這方面。

  這樣做可以協助你增加使用程式設計語言的信心,並瞭解為了完成目標你需要使用什麼樣的語言構造。

  下面是一些協助你開始的簡單的項目點子:

  • 建立一個解決數學問題的程式,從使用者擷取輸入。
  • 創造一個可選擇冒險類型的程式,從使用者輸入來確定接下來會發生什麼。
  • 建立一個非常簡單的基於文本的冒險遊戲,使用者可以發出命令來拾起對象,在房間移動等。
  • 建立一個能夠從一個文字檔中讀取輸入並輸出寫入到不同文字檔的程式。
  • 建立一個聊天機器人,能和使用者交流,假裝是人或給出幽默的回複。

  應用程式設計語言到特定技術或平台

  到了這個時候,你主要學習了關於在封閉條件下如何使用程式設計語言。

  這是有意的,因為你需要在增加環境和用於構建真正應用程式所需架構這些額外的複雜性之前,瞭解並熟悉程式設計語言本身和它的標準庫。

  為了用程式設計語言創造一些有用的東西,你需要應用語言到特定的技術或平台。

  所以,這個時候,你需要確定幾個可以完成的需要在特定平台上使用程式設計語言的小項目。

  舉個例子,假設你正在學習 Java。到現在為止,你會編寫 Java 代碼,代碼可工作在任意 Java 可啟動並執行平台上,因為你大多數時間會使用標準庫,並且只會輸入和輸出到螢幕或檔案。

  此時,你可能會決定使用 Java 來構建一個 Android 應用程式。你需要學習如何構建 Android 應用程式以及有關 Android 架構的知識。 但是,由於你已經熟悉 Java,所以就沒有必要一次性學習大量的東西。

  當然,你可以一起學習 Android 和 Java,事實上,我做了一個 Pluralsight 課程來教授如何做到這一點——但為了實際掌握語言並且避免混淆,從平台或技術獨立語言,然後再結合它們可能會容易得多。

  現在,你用程式設計語言來發展特定和專業技能,在找工作時會很有用。

  選擇任何你想要使用的任何平台或技術,用這些平台或技術來建立一些小的應用程式。

  我還建議你在這個時候最好還是只專註於單個技術或平台。以後你總能學到更多。

  通過這種專攻的方式,你不僅可以瞭解你需要學習的東西,還能讓你更深刻地瞭解知識和掌握特定技術,而這能讓你更有自信,大大提高你的技能的市場化能力。

  解決困難的演算法問題以便於更好地掌握語言

  到現在為止,你對你所學的程式設計語言應該感覺舒服多了。

  你已經對它知之甚深,並且已經在各種不同的應用程式中使用過了。

  你應該有了一個應用技能的特定技術或平台,並且使用此技術來建立基本的應用程式感覺已經趁手和舒服多了。

  儘管如此,你可能還是不覺得你掌握了這種程式設計語言。

  不要擔心;這也是正常的。

  當我第一次學習 C ++ 的時候,我記得即使在我知道關於語言的一切,並且已經用這種程式設計語言實際建立了多個應用程式,甚至還被聘為一個編寫 C ++ 代碼的開發人員的時候,我仍然不覺得我真正掌握了這門程式設計語言。

  我覺得我是一個很好的 C ++ 程式員,但並非是偉大的。我真的很想提升我的 C ++ 技能,但我不知道怎麼辦。然後,我發現了這個叫 TopCoder 的編碼競賽網站。

  每個星期,那裡都會有一系列新的編程挑戰,你可以和其他的程式員一起比賽著解決一些相當困難的演算法問題。起初我怕極了。我甚至連最簡單的問題也解決不了。

  我去看其他人的解決方案,我不知道他們是如何想出這個解決方案的,也不知道他們的代碼是如何工作的。他們用著一種我萬萬沒有想到的方式使用 C ++ 代碼。但後來,隨著時間的推移,隨著我鍥而不捨地去嘗試解決問題,以及看別人是如何解決問題的,我漸漸成長起來了……一點一點,越來越優秀。

  我發現瞭解決某些類型問題的模式。我開始真正瞭解如何利用我以前忽略了的 C ++ 特性。我學會了如何高效地使用標準庫和語言功能以及資料結構來解決複雜的問題。我變得不僅擅長於C+ +,而且非常出色。我終於覺得自己貌似掌握了這門程式設計語言。這就是我要你做的。

  你不必去 TopCoder 參與競爭,有很多你可以練習解決演算法類型編程問題的地方。

  對於這類問題,我已經提到了一個很好的資源,還有一些是:

  這些問題一開始你解決起來會覺得極其困難,沒有關係。本來就是這樣的。

  你會發現,隨著時間的推移,你會開始認識到,只有屈指可數的一些問題類型,並且你能立馬指出如何解決這些問題。

  起初,你毫無頭緒,不知道該做什麼,就像我說的,沒關係——只要繼續努力即可。

  另外,不要忘了去看看其他人是如何解決這些讓你疲於應對的問題的。嘗試著去理解為什麼他們要用這樣的方式去解決特定的問題。

  這是我用於學習如何解決這類問題的最佳途徑之一。

  我會看看 TopCoder 上頂級程式員的解決方案,從中我學到了很多東西。

  一旦你可以用你所學的程式設計語言解決這些類型的編程問題,那麼你不僅相當接近於掌握語言,而且通過編碼面試將會成為一件輕而易舉事情,因為其他的候選人碰到問題只能汗流浹背,自愧不如。

  即使是寫一本書也一個相當大的事業,我很高興能踏上這個旅程。

  我希望你能和我在這條道路上一起前行。

  -

  譯文連結:http://www.codeceo.com/article/learn-first-programming-language.html

  翻解碼農網 – 小峰

00  來自: www.codeceo.com

 

 

[轉]學習你的第一門程式設計語言

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.