主頁 >  其他 > 2021 小白版,360 行行行轉 IT

2021 小白版,360 行行行轉 IT

2021-04-13 10:43:37 其他

文章目錄

    • 編程入門
      • 如何選擇編程語言
    • 如何提高
      • 如何從開始過渡到中等水平
    • 在哪里可以找到編程練習和專案
    • 如何提高將任務/問題轉換為程式編碼的能力(演算法思維)
    • 對于一個專案,我很難有很酷的新想法,我只是缺乏創造力嗎?其他程式員是如何受到啟發呢
    • 如何完成一個大型專案
    • 一些擔憂和恐懼
      • 我太老了,還能編碼嗎
      • 有什么我首先應該學習的嗎
      • 我必須精通數學嗎
      • 編程難嗎
      • 初學者在問題和練習上遇到麻煩是正常的嗎
    • 有關學習的問題
      • 我剛剛開始學習語言 X,是否應該開始學習語言 Y
      • 我是否應該一次學習一種以上的編程語言
      • 如何獲得/保持學習編程的動力
    • 如何使用 X
      • 我如何開始制作視頻游戲
      • 如何開始制作網站/制作 Web 應用程式/進行網站開發
      • 如何開始制作移動應用程式/ Android 應用程式/ iOS 應用程式/ Windows Phone應用程式
      • 如何使事情自動化
    • 什么是最最最最最最好的
    • 術語和詞匯
      • 計算機科學,計算機工程,軟體工程,編程和編碼之間有什么區別
      • C,C ++,Objective-C 和 C#有什么區別
      • Java 和 JavaScript 有什么區別
    • 工具和版本控制
      • 什么是源/版本/版本控制?我應該使用它嗎
      • 什么是 IDE,我應該使用嗎
    • 電腦和作業系統
      • 我應該使用哪種作業系統
      • 我應該選擇什么樣的電腦/筆記本電腦
    • 職業和作業
      • 程式員賺錢嗎
      • 如何進入該行業并獲得入門級作業
    • 總結

hey guys ,我是 cxuan,這一篇文章我就要和你聊聊編程如何學習,這一篇文章涉及的內容簡直太多了,我將從入門開始,一步一步到如何提高,然后到一些學習的相關問題,還有一些計算機相關的術語等,干貨也非常多,準備好了嗎?那么我們開始吧,

編程入門

我們首先需要解決的就是如何入門的問題了,這也是很多新手/小白的困惑,到底如何入手呢?我該從哪里開始呢?

如果你有興趣學習編程,那么樹立一個正確的編程觀念是很有幫助的,這個短片是很好的一個入門 https://www.youtube.com/watch?v=mvK0UzFNw1Q ,這個短片解釋了你應該以一種合適的觀點來開始編程,

在你樹立了正確的編程觀念后,你需要意識到一個問題,那就是沒有通用的學習編程的方法,所以市面上大多數培訓機構所提倡的方法并不適用于所有人,這只是他們大多數人所認可的學習方法,但是并不適用于你,你必須找到適合自己的編程方式,


這里需要說兩個現象:

很多小伙伴們咨詢我關于編程方式的問題,這個沒有定數,有的人喜歡早上編程,因為早上比較清醒,思路比較清晰;有的人適合網上編程,晚上沒人打擾,而且晚上有一種魔力:空杯心態,你能更清晰的認識自己,到達一種心流的狀態,但是晚上有一點特別忌諱,那就是熬夜,所以你更需要平衡編程和生活,生活不全部是編程,編程不能完全替代生活,至少國內是這樣,


所以你需要找到適合自己的編程方式,我這里強烈建議一下你按照下面這幾種方式來進行:

  1. 首先找到一些你所感興趣的問題或者專案,你可以嘗試構建工具來解決生活中的小問題,也可以嘗試實施從頭開始發現有趣的程式,這個專案將有助于激發你繼續學習編碼的經驗,并為你提供練習應用所學內容的機會,
  2. 做一些研究以確定哪種編程語言最適合你的專案,(下面我會進行介紹)
  3. 找到一些高質量的面對初學者的學習編程的資源,(同樣,下面我會進行介紹)
  4. 通過 google 搜索來提問或者補充學習資源,如果沒有 tz 的話,可以使用必應和搜狗(面向微信公眾號平臺),微信公眾號很多文章比較專業的,
  5. 最終使用該語言完成了幾個有意義的專案

其實,上面這幾點歸根結底就是這樣

剛開始強烈建議規避這些不良的編程習慣!!!!!!

  1. 不要只是簡單的、被動的使用你正在使用的資源,要及時進行練習和家庭作業,實踐是學習編碼絕對必要的部分,
  2. 避免在編程語言之間來回切換;選擇一門語言并堅持下去,這是因為編程最終與解決問題有關,而不是與編程語言有關,學會解決問題是具有挑戰性的,并且是只有通過練習才能磨練的技能,每次切換語言時,你都在浪費時間,可以花時間練習運用所學的知識來提高解決問題的能力
  3. 完成教程后,不要停止學習,編程是一項永遠需要新知識的領域

最后,請你記住,學習編碼注定是一項長期而又困難的程序,如果你覺得編碼很困難,那完全不要氣餒,這是很正常的,因為許多人會花很多年的時間學習和練習,才認為自己有能力找到尋找作業或者為重大開源專案做貢獻,但是幸運的是,編程入門并不難,

如何選擇編程語言

所以現在需要為上面的編程入門提到的幾點做一個解釋了,

首先,找到合適的、你所感興趣的編程專案,這個因人而異的,所以就是編程語言的選擇問題了,

我經常會被問到這個問題,我該選擇哪種語言作為入門

提出這種問題的人有兩個誤區:第一個是你潛意識中認為一定有一門最完美的編程語言來進行學習;第二個是第一門學習的編程語言好像會伴隨你的一生,,,,,,

事實上,沒有最好的編程語言(PHP 是最好的編程語言純碎是調侃,這篇文章要解惑下,大家不要相信,有的時候玩笑開著開著就成真的了),而且你的第一門編程語言對你的職業生涯沒有決定性的作用,說起到決定性作用的人,你捫心自問,自己是不是思想懶惰不愿意接觸新的編程語言了?

我要告訴你一件事情,剛開始學習一門語言是最難的,因為有很多復雜的概念你搞不懂,但是其實上大多數基本概念是各個語言通用的,隨著時間流逝和你對編程作業的深入,要學習一門新的語言會變得越來越容易,可能你剛開始可能要幾個月才學會一門編程語言,而一個有經驗的程式員可以在幾天內熟悉一門新的編程語言,

理想情況下,所有程式員都應具有多種語言的經驗,一旦你對一種語言感到滿意,就可以繼續使用另一種在某些基本方式上有所不同的語言,隨著學習更多語言,你將變得更有能力為手頭的任務選擇合適的工具,這是優秀程式員的標志,由于編程概念至關重要,因此我建議初學者從下表中選擇一種主流語言,所有這些語言使初學者可以開始撰寫簡單的應用程式并練習編程,而不必使用任何更復雜的語言功能,

如果你已經有了專案和目標,并且將自己的技能應用到要解決的問題上,你將會學的更快,下面是一些常用編程語言的說明,能夠讓你有更多的選擇,

如果看了這些你仍然覺得迷茫的話,那就不妨使用一門簡單易上手的編程語言 Python,Python 是一種良好的,適合初學者的語言,擁有一個龐大的社區和許多庫,可以執行幾乎任何你想做的事情,從制作游戲到在家中或作業場所中使事情自動化,從進行資料分析到制作網站等等等等,在進入更復雜的應用之前,你需要找到一些好的學習資源

那么我在哪里能找到這些資源呢

下面我為你列出了一些資源獲取途徑

  • 圖書,學習任何一項技能前,看書都是一種最有效的途徑,也是我最推薦給你的途徑,因為我本身就喜歡看書,囤書也是我的一種樂趣,

    • 免費的編程書籍,這個 github 上列出來的幾乎包括所有編程書籍了,我看完之后大呼過癮!!!https://github.com/EbookFoundation/free-programming-books/blob/master/books/free-programming-books-zh.md#java ,英文版的如下 https://github.com/EbookFoundation/free-programming-books/blob/master/books/free-programming-books.md

    • 一些適合于初學者的書籍

      • C#:Rob Miles 撰寫的小黃書http://www.csharpcourse.com/ - 面向初學者的 C# 編程,

      • Python: Al Sweigart’s 撰寫的 《Python 自動化》系列 http://automatetheboringstuff.com/,也有中文譯本,即 《Python 編程從入門到實踐》

      • 同樣是 Al Sweigart’s 撰寫的 《Python 發明》系列 http://inventwithpython.com/,該書通過使用Python和Pygame創建計算機游戲來教授編程,

      • Abelson and Sussman 撰寫的《計算機程式的構造和解釋》,下面是編程網站 https://mitpress.mit.edu/sites/default/files/sicp/index.html

      • Python 編程游戲 http://programarcadegames.com/

      • C 語言:c primer plus ,這是一本入門 C 語言非常經典的好書

      • C 語言程式設計,同樣是一本經典好書,雖然書籍不厚,但是濃縮的就是精華啊!!!

      • Java :Head First Java,這是入門 Java 最最最簡單的一本書了,沒有比這個再簡單的了,事實上 Head First 系列都可以作為入門書籍

      • Java 核心技術卷一(卷二作為提高),可以看完 Head First 在看這個系列,入門 Java 就這幾本書就夠了,

      • C++: 那必須還是 C++ Primer Plus 了,學習 C++ 一些常見的問題可以參考這里 https://www.reddit.com/r/learnprogramming/wiki/faq_cpp

    • 除此之外,一些權威 C++ 書籍和指南都在下面這個鏈接中了 ,https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

    • 一些權威 C 語言書籍和指南都在下面這個鏈接中了, https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list

    • 這是一些推薦給開發者們的讀物 https://blog.codinghorror.com/recommended-reading-for-developers/

    • 每個程式員都應該讀的最有影響力的書籍是什么 https://web.archive.org/web/20150518004457/http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read

    • 演算法書籍推薦:市面上有很多關于演算法的書籍,最近非常火的《labuladong 的演算法小抄》,通俗易懂的《小灰的演算法之旅》等等,不過我這里只說兩本最經典的演算法書:《演算法導論》和《演算法第四版》

  • 在線資源:我下面會推薦一些優質的編程資源,這些編程資源都是非常好的教程,走起!

    • 編程社區:在線編程練習社區 https://hackr.io/
    • C#
      • C# 在線編程練習社區 ,還有什么會比微軟更權威的呢?https://dotnet.microsoft.com/learn/dotnet/in-browser-tutorial/1
      • C# 體系化的優質教程,當然離不開 Tutoriaispoint 了, https://www.tutorialspoint.com/csharp/index.htm
      • C# 優質編程練習網站 https://www.learncs.org/
    • Ruby:學習 Ruby 這里給你推薦三個網站:https://rubymonk.com/ 、https://www.pluralsight.com/search?q=ruby、http://hackety.com/
    • JavaScript:學習 JavaScript 這里給你推薦兩個網站資源:https://www.codecademy.com/、https://eloquentjavascript.net/
    • Java
      • 還有什么能夠比官網更權威的呢?https://docs.oracle.com/javase/tutorial/
      • Java 最大的特點就是面向物件的設計思想,這里你可以參考赫爾辛基大學(沒聽過?就 Linux 他爹的那個學校)https://www.mooc.fi/en
      • John Purcell 的 Java 初學者免費版 https://courses.caveofprogramming.com/p/java-for-complete-beginners、https://www.udemy.com/course/java-tutorial/、https://www.youtube.com/playlist?list=PL9DF6E4B45C36D411
      • 這個作者有一些多語言的教程 https://www.youtube.com/channel/UCwRXb5dUK4cvsHbx-rGzSgw/playlists
      • Java 設計模式和體系結構,參考 John Purcell https://www.udemy.com/course/java-design-patterns-tutorial/、https://courses.caveofprogramming.com/p/java-design-patterns-and-architecture
    • Python:你可以翻閱 https://www.reddit.com/r/learnpython/wiki/index 找到更詳細,更全面的資源串列,尤其是 https://www.reddit.com/r/learnpython/wiki/index#wiki_new_to_programming.3F 對新手更友好的部分,
    • Web 學習
      • Web 學習包括一些前端內容,這個網站很不錯 https://www.snoopcode.com/
      • CSS 3 https://css3please.com/
      • 我愛 PHP ,哈哈哈哈 https://ilovephp.jondh.me.uk/en/tutorial/make-your-own-blog
      • Web 發展的介紹 https://www.thesoftwareguild.com/coding-bootcamps/introduction-web-development/
  • 精選編程資源,這個 github https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md 非常不錯,精選了很多非常優質的編程語言資源

  • 沒有上過好大學,是不是就意味著自己沒有競爭力了?當然不是!這個網站 http://www.infocobuild.com/education/audio-video-courses/ 匯總了很多優質的大學課程

  • CS 是一門藝術,而這門藝術你完全可以達到無師自通,據我所知,國內 99.9% 的大學對于 CS 的講授都是一塌糊涂,其中不乏清華北大等高等學府,我 B 站也聽過一些視頻,講的真實一言難盡,所以,最靠譜的還是自學,這里有個 github https://github.com/ossu/computer-science,這其實也是一門課程,只不過這個課程就叫做計算機自學課程,

如何提高

如何從開始過渡到中等水平

當我剛開始入門的時候,我也有過這種現象,那就是現在該做什么了?這種情況當你讀過一些書籍和教程解決過世紀問題后尤甚,但是最終很難從理解 if … else 和 for 回圈之類的事情過渡到理解如何使用應用所學知識來制作更復雜而有趣程式,這也是大多數程式員的問題所在,

在入門教程和復雜代碼之間進行這種過渡可能很困難,https://www.thinkful.com/blog/why-learning-to-code-is-so-damn-hard/ 這篇文章很好的描述了這種現象,許多教程包括我上面列出來的一些教程和資源都會傾向于讓你掌握某種語言所具備的知識,但是你掌握了就掌握了,并沒有更進一步的打算,,,,,,這使很多初學者程式員陷入困境,

下面是一些針對改善這種情況的建議,

  • 從被動學習轉變為主動學習

    把學習的主觀能動性從希望別人教會你哪些知識到自己積極/主動去學習/吸收哪些知識,舉個例子,比如你不知道如何制作網站,你 google 如何使用 x 語言制作網站,然后 google 就會提示一大堆 HTML5 、CSS、JavaScript 等一系列教程,然后找到大而全的教程或者在線編程課程開始搞起,

    你通常可以找到你想要執行操作的教程,或者至少找到為你提供有關如何組成更具體的搜索查詢的概述和線索的文章,更廣泛地說,面向搜索來學習并不應該讓你感到羞愧,事實上這是所有程式員的入門和高級作業,

    我在剛開始作業的時候經常會因為自己不知道代碼如何寫而感到羞愧,我恥于網上搜索,經常自己悶聲想解決辦法,想不出來,無可奈何只能網上搜索,出現正確的結果后,我不是 ctrl c v ,而是一個一個代碼的敲下來,然而還在厭惡自己為什么記不住這些代碼如何寫,事實上這種情況及其不可取,既浪費時間又浪費精力,還不斷的懷疑自己,產生惡性回圈,

  • 不斷練習

    編程有點像鍛煉,因為改進的主要方法是不斷練習,從簡單開始,然后嘗試在命令列上撰寫諸如剪刀石頭布之類的基本游戲,完成后,嘗試選擇一個更具雄心的專案,然后完成該作業,如果您想混合一些東西,也許可以嘗試一些編程練習,

    從根本上說,編程實際上是關于應用問題的解決,而學習如何解決問題的最佳方法是不斷解決各類大大小小的問題,

  • 了解如何分解問題

    不管你在作業中嘗試解決困難問題,還是在嘗試找到一些大型開源專案時,你很可能會感到沮喪,因為任務看起來多么龐大或令人生畏,不要被嚇倒,而是將問題分解分解問題)為越來越小的子問題,直到每個子問題都看起來比較容易上手和解決,

    例如,如果你正在學習 Java,想學習撰寫游戲,但不知道從哪里開始或如何解決問題,那么搜索java 游戲教程將帶來幾個不錯的結果,通常會告訴你如何將撰寫游戲的程序分解成較小的部分,

    從本質上講,你正在嘗試樹立工程師的心態,如果問題很大,請不要放棄,不斷將其分解成越來越小的碎片,并搜索看起來不可能完成的任務,然后重復,繼續回圈:分解,搜索,分解,搜索,,,,,,

    順便說一句,這是一種非常有效的自我教學策略!在練習時,你將會更好地了解如何解決問題,并將擴大你的知識/可能的問題解決方案庫,

  • 學習如何系統化

    我們程式員在遇到問題并除錯時經常會這樣,改改 border 大小重繪一下頁面行不行,改改 margin 大小重繪一面頁面看看生沒生效,就類似這種靠 去除錯和解決問題,這種習慣切勿養成,你需要運用所學知識,盡可能分析問題,判斷錯誤,學習,再分析判斷,再學習,,,,,,盡可能系統,避免試錯

    除錯時,切勿漫無目的,像科學家一樣嘗試思考-進行實驗以嘗試修復錯誤或縮小錯誤的可能范圍,并記錄結果,如果你的假設/嘗試的更改被證明是錯誤的,或者如果你認為某些更改不起作用,請停止,暫停并找出原因,

    當你的假設與現實不符時,就會發生錯誤,如果感覺不對勁,請不要忽略它 - 一直追溯到你確定問題出在哪里/你所做的錯誤假設是什么,

    這種學習是有意義的,它會讓你不斷思考,雖然程序很艱難,但是會促進你想解決問題的欲望,這種學習會一直持續下去,

    切記不要因為瞎 TM 試出來正確的結果而沾沾自喜,

  • 不要因必須除錯或谷歌而灰心

    并非所有初學者都意識到,即使在專業程式員中,花更多的時間進行除錯或谷歌搜索是完全正常的,

    除錯(而且很費勁!)是編碼的重要組成部分,如果可能的話,盡量避免過分緊張或者不耐煩,將其視為有趣的探索和知識的拼接!!!

    即使由于某些錯誤而使你的實際代碼沒有取得任何進展,只要你是在系統的學習,就可以練習解決問題的技能,盡管采用了不同的方式,

    結果,即使你花費大量時間來解決一個錯誤,你仍然要認為這部分的時間是值得花費的,除錯是善于解決問題的最佳方法之一!

    隨著你變得越來越有經驗,這更加正確,事實證明,遇到的錯誤的難度會隨著你的經驗水平的提高而增加,有經驗的程式員有時也會不得不花幾個月的時間來追蹤錯誤的情況并不少見,如果發現是特別令人討厭的錯誤,

  • 不要害怕尋求幫助

    最后,如果你完全陷入困境,又不知道下一步該怎么做了,請不要忘了你可以找其他人尋求幫助!

    程式員通常非常有幫助,我們中的許多也是自學成才的,因此了解作為初學者奮斗的感覺以及完全陷入困境的感覺,

    但是尋求幫助前,你需要盡可能的把問題描述清楚,問問題的技巧也是非常多,這一篇關于如何提問問題的文章,對你應該非常有幫助 https://www.reddit.com/r/learnprogramming/wiki/index#wiki_asking_questions

在哪里可以找到編程練習和專案

如果你要創建一個專案,請參考以下一些想法以獲取啟發:

  • 一些清單
    • http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/
    • https://github.com/karan/Projects
    • https://github.com/NirantK/awesome-project-ideas
    • https://github.com/florinpop17/app-ideas-增長串列
  • 專案創意以及教程或寫作
    • 面向高級初學者的編程專案 - 博客 https://robertheaton.com/2018/12/08/programming-projects-for-advanced-beginners/
    • https://github.com/tuvtran/project-based-learning
    • http://aosabook.org/en/index.html
    • 建立自己的編程語言 https://github.com/danistefanovic/build-your-own-x
  • 特定主題的專案 http://inventwithpython.com/blog/2012/02/20/i-need-practice-programming-49-ideas-for-game-clones-to-code/

如果你想要做一些有挑戰性的作業,那么你可以嘗試寫

  • 命令列實用程式(ls,wget,curl等)
  • 文本編輯器
  • 集成開發環境
  • 圖片瀏覽器
  • Office 套件(類似于Microsoft Office或Libreoffice)
  • 編程語言(撰寫解釋器或編譯器)
  • 網頁瀏覽器
  • 資料庫(關系或非關系)
  • 網路服務器
  • 版本控制系統

如何提高將任務/問題轉換為程式編碼的能力(演算法思維)

這是很常見的問題之一,

普遍的答案就是:撰寫大量的程式

但是,有一個技巧能夠幫助你建立這項技能:

  • 選擇一項每天應該做的事情,例如做早餐或類似的事情,它應該不太容易,但也不要太困難,
  • 寫下你應該為該活動執行的步驟,但是要在與實際執行該活動的時間的不同時間內用完記憶體,
  • 下次執行該活動時,記下筆記并嘗試認真執行以下步驟,盡量不要偏離你所寫下的步驟,如果有必要,請記下差異,
  • 改進演算法,直到滿意為止,
  • 嘗試不同的活動,任務變得越來越容易,

盡管聽起來很愚蠢,但它確實有效,上面的方法已經在許多學生身上嘗試過,并證明可以顯著改善,

對于一個專案,我很難有很酷的新想法,我只是缺乏創造力嗎?其他程式員是如何受到啟發呢

對于初學者來說,https://en.wikipedia.org/wiki/Chuck_Close Chuck_Close 一個很不錯的想法

我想給年輕藝術家或任何愿意聽我的人提供建議,就是不要等待靈感,靈感是針對業余愛好者的;我們其余的人只是出現并開始作業,如果你等著云散開,一束閃電擊中你的大腦,那么你將不會做很多作業,所有最好的想法都來自程序,他們來自作業本身,事情發生在你身上,如果您想幻想一個偉大的藝術構想,那么你可以坐在那里很長時間,然后再進行任何事情,但是,如果你只是開始作業,你會想象一些事情,但是實際上會發生另外一些事情,而這些其他事情會將你推向另一個方向,靈感是絕對沒有必要的,并且從某種方式上具有欺騙性,你覺得自己需要這個好主意才能開始作業,

只是坐在那里等待靈感的火花,很少會有新奇的想法,如果你只是繼續嘗試構建一些東西(任何東西!),即使你的想法看起來有些愚蠢或已經完成,你的時間話費也是值得的,

畢竟,這就是藝術家和音樂家的作業 - 他們不一定從嘗試創作出高度創意的繪畫或創作自己的音樂開始,取而代之的是,他們繪制風景或花瓶,或覆寫現有的歌曲,同樣的,提出專案構想時不要感到有壓力,重新實施現有程式是一個歷史悠久的傳統 - 看看你能獲得多大的識訓吧!

不過,這里又一些想法和技巧能讓你參考

  • 嘗試重新實作現有專案:就像剛開始的音樂家是從報道別人寫的歌開始一樣,最好重新執行別人制作的程式,

  • 嘗試將編程連接到另一個愛好:編程是一項非常有用的技能,因為你可以將其應用于廣泛的領域,甚至與計算機科學完全無關的領域,例如,如果你對政治感興趣,則可以嘗試分析投票池和趨勢;如果你對音樂感興趣,則可以嘗試撰寫數字音板;如果你對體育感興趣,則可以嘗試撰寫幻想足球追蹤器或預測變數,如果你經營一家企業,可以寫些東西來幫助您跟蹤庫存,

  • 試著跟蹤讓你煩惱的事情:如果你發現生活中不喜歡的事情或發現重復的事情,請問問自己是否可以自動化,我記得耗子叔(左耳朵耗子) 也提到過這個 idea,比如使用 Python 來完成一些無聊的作業,這個 https://automatetheboringstuff.com/ 網站或許有幫助,你也可以搜索家庭自動化教程 或者更多的解決方案

如何完成一個大型專案

我們上面也談到過對于大型專案的訓練方式:細化、拆分

但是首先,你需要對專案有一個全面的了解,也許橡皮鴨除錯會非常有用,向知識或理解為零的人(或某物)解釋問題或概念有助于更深入地了解問題,通過這樣做,人們必須對問題進行更多的思考,這將導致更深刻的理解,

然后,不要直接去碰電腦

你要花大量的時間去思考問題/任務,繪制一些草圖,一些偽代碼,一些通俗易懂的語言提示,要現在紙上或者繪圖板上寫下你的思路,會有一些幫助,

自己處理大型專案時,請記住一件事

世界上的所有事物都是由較小的部分組成的,

這意味著你所看到的基本上是任何大型機器,房屋,摩天大樓,汽車,火車,計算機等,都由許多較小的結構組成,這些結構共同構成了最終產品,較小的結構由較小的結構組成,依此類推,

大程式也是如此,它們由許多較小的單元組成,這些單元耦合在一起構成一個整體,理想情況下(但通常不可能),每個較小的單元應獨立于其他單元作業(并進行測驗),

從小的單元開始,查看問題或者專案是否還能夠繼續拆分,直到拆成你認為無法拆開為止,

不要看最終完整的專案和大圖,這會讓你不知所措,一次只處理一個單獨的部分就好,

經驗不足的程式員面臨的最大問題是,當他們處理大型任務時,大多數人會不知所措,但是這個問題并不是很難克服的:

不要試圖查看所有程式的最終程式,專注于一個小的,易于管理的部分,完成它并繼續前進,即使是最復雜的程式/系統,也包含小的簡單的模塊,

想象一下,你正在為客戶作業,并且客戶在開始撰寫代碼之前需要先查看并批準你的設計,因為他們需要確保你是否正確理解了他們的想法,

  • 準備專案的詳細描述,即所謂的功能設計規范,
  • 與你的假想客戶討論該功能設計規范(即,將其解釋給一些無生命的物件,或者如果你可以承受,請向他們解釋),
  • 完善功能設計規范 - 回傳上一步 - 回圈直到你滿意為止,
  • 在截止日期前準備專案進度表,
  • 堅持上述規定,

一些其他建議

  • 首先,完全忘記寫代碼這件事情,要從用戶的角度想象該程式,
  • 寫下軟體執行的功能串列,
  • 寫下該軟體不具備的功能串列,(這將使您避免出現需求變更)
  • 寫出一些有關用戶將看到哪些螢屏及其作業流程的圖形,這些不是藍圖,也不是為了顯示它們的外觀,更多的是“首先用戶在此頁面上,然后他們可以轉到此頁面”,繪制草圖可以幫助你不要遺漏細節問題,
  • 解如何使用 git 并獲得一個 github 帳戶,這非常適合進行備份,也可以征求代碼審查,(忽略任何有關代碼樣式的評論,在 99% 的時間里都是徒勞的辯論)

一些擔憂和恐懼

很多讀者朋友向我咨詢自己是否可以學習 xxx 種語言,那么為什么不學呢?又有誰阻止你去學了?那還不是你的擔憂和恐懼來阻止你的嗎?還有一些諸如下面的問題

我太老了,還能編碼嗎

不,你可以在任何年齡學習編程,并且可能會從事該職業,

我們現在經常會出現 35 歲危機問題,事實上這個問題在各行各業都會出現,上周我家搬家了,和搬家工人聊起來,他已經 40 歲了,還在做搬家作業,要知道這種作業就是體力活,他也很擔心沒幾天就被老板以身體原因開除了,過了 35 歲,身體機能下降是企業衡量用人的最大考慮因素,那么有沒有 35 歲不被辭退的現象呢?有,所以就有類似于拿到拼多多和國家電網的 offer,該選哪個的問題,

還有就是,為什么會擔心 35 歲危機呢?那是因為你的作業具有可替代性,如果你是一個公司的架構師,公司的核心架構是你搞的,你覺得公司會開除你嗎?可能會,因為公司快倒閉了,,,,,, 這當然都是意外情況,不可控制,

so,我們擔心的 35 歲危機,都是因為我們不想再學了,想摸魚賺點錢了,但是企業可不這么認為,他們如果不發展就會被替代,那么企業為什么會花大價錢養你呢?這里我并不是說要和企業同流合污,但是你總要知道我們為什么會有 35 歲危機,

一個普遍的神話是,擅長編程的唯一方法是從小就開始學習編碼,這是錯誤的 - 雖然有些人開始早點學習編碼(因此可能會有一些先發優勢),但大多數人在上大學或以后會開始學習編碼,所以什么類似于讓孩子贏在起跑線上,只是抓住了一些家長的弱勢心理,潛臺詞就是你的孩子不早點報班,從小就不如其他孩子優秀,而家長們都是心疼孩子的,既然家長們抓住了這個心理,那么培訓班能不賺錢?

然而學習是任何年齡的人都可以做的事情 - 不要專注于他人,只專注于自己和個人的進步速度,這篇文章會很有用 https://www.edglossary.org/growth-mindset/

還有一些朋友喜歡問下面這些問題

有什么我首先應該學習的嗎

編程的前置條件很少,唯一的先決條件是

  • 你知道如何打字
  • 你擁有一臺電腦,并且你的電腦能上網
  • 你知道如何獨立搜索答案

OK 就這些,有了上面這幾點你就可以直接編程,如果你知道一些數學知識,最多不用超過基礎代數;并且你有基本的英語功底,那當然是錦上添花的事情,

如果你想獲得大學的正式學位,以上所有這些都是差不多的,大多數大學和學院都希望入學的學生對計算機科學和編程一無所知,并且會從頭開始教你(盡管在某些情況下,如果你通過測驗或證明有足夠的先驗技能,則可以跳過一兩個入門課程),如果你是高中或更早的學生,并且想在大學學習計算機科學,那么最好提前開始學習以取得良好的開端,

我必須精通數學嗎

不一定,編程和計算機科學是一個廣闊的領域,你是否需要精通數學取決于你選擇專門研究的學科,

例如,某些編程學科確實需要很強的數學技能,2D 和 3D 戲將頻繁使用向量,矩陣和線性代數;資料分析和機器學習利用了統計和微積分中的許多概念;如果你對代數和基本演算有很好的了解,則計算演算法的復雜性將變得更加容易,

通常,主題越高級和復雜,就越有可能需要扎實的數學基礎,如果你的目標是能夠解決這些型別的復雜問題,那么擁有良好的基礎將是無價的,

但是,正如計算機科學和編程的許多方面都不需要對數學有深入的了解,你真正*需要知道的唯一事情是如何加,減,乘和除,也許還有一些基本的代數,許多程式員在整個職業生涯中幾乎不需要做任何數學運算,

特別是,許多面向產品的角色(例如,Web 開發,移動開發)只需要很少的數學知識,在這些子學科中,最重要的是你撰寫健壯和可維護的代碼的能力,以及找出如何構建對用戶有價值的東西的能力,

無論如何,如果你不太擅長數學,那么你絕對可以學習和提高!畢竟,你可能也不是很擅長編程,但是你正在學習編碼,

確切地說,CS 學位在數學上的差異會因學校而異,一些學校過分強調涵蓋理論,而另一些學校則不再強調兩者,而只注重應用,(有些學校同時強調兩者),如果你想了解更多資訊,則應直接調查你有興趣參加的任何學院或大學的學位要求和結構,

總而言之,如果你想成為一名成功的開發人員,則不一定需要精通數學,如果你想成為計算機科學家,你最終將學習大量的數學,如果你想解決更棘手的問題/在某些領域內,那么數學可以是一個很有用的工具,

編程難嗎

編程也像大多數技能一樣,學習基礎知識并應用它們相對容易,但是如果你想成為一名競爭性的保齡球手,你將需要花費數年時間來掌握這項技能,編碼也是如此:你將需要花費很多時間來弄清楚為什么即使你已經檢查了三遍,這個愚蠢的程式仍然無法運行,,你將需要閱讀書籍,坐下來上課,并與人們討論解決辦法,

這就是上手非常容易,但是鉆研一個領域,學的越來越深之后會非常難,

初學者在問題和練習上遇到麻煩是正常的嗎

我不想給你顯而易見的答案,

初學者幾次從自行車上摔下來是正常的嗎?學習游泳時,初學者沉沒幾次是正常的嗎?對于初學者來說,在學習樂器時遺漏音符或演奏錯誤的音符是正常的嗎?在健身房鍛煉時,初學者想要練胸卻練的是三頭是正常的嗎?

絕對沒錯

失敗和煎熬是學習程序中非常重要和自然的部分,每個初學者都會經歷失敗和煎熬,因此,您不要灰心,而應該擁抱讓你煎熬的事情:奮斗是你正在挑戰自己的標志,使用它作為指南,可以幫助你弄清楚下一步需要閱讀和學習的材料,或者應該問什么問題,

甚至專家在需要學習新東西時也會失敗和掙扎(盡管他們往往更善于恢復/利用失敗作為幫助他們加快學習速度的一種方式),

事實上,如果你沒有經歷煎熬,那么可以表明你肯定在做錯事,如果一切都很簡單,那就意味著

  1. 你不是在挑戰自己
  2. 你不是在強迫自己學習真正的新東西
  3. 你并不會強迫自己通過嘗試應用它來真正確保你了解它

這類似于鍛煉,如果你在鍛煉后不感到身體疲勞,那么你真的得到鍛煉了嗎?同樣,如果你在完成一些編碼挑戰后沒有精神疲倦或精神上的挑戰,那么你真的學到了什么嗎?

有關學習的問題

我剛剛開始學習語言 X,是否應該開始學習語言 Y

尤其是當你開始學習編程時,最好學習一種語言并堅持使用一段時間,即使特定的問題使用了你尚不知道的特定語言,一旦了解了基礎知識(流控制,錯誤處理,I / O,演算法的實作,資料結構等),你就可以開始考慮使用不同的語言了,

我是否應該一次學習一種以上的編程語言

除非你有充分的理由,否則大多數初學者應該只使用一種語言至少幾個月,由于以下幾個原因,這是一種更有效的學習方法:

  1. 大多數語言的基礎知識都非常相似,例如,大多數語言以幾乎相同的方式處理 if 陳述句,花時間學習兩種基本的語法不一定是一種好的習慣,并且可能會使初學者感到困惑,
  2. 學習如何編程的最困難部分不是學習編程語言的作業方式:而是學習如何解決代碼問題,因此,你要想最大化地利用時間來練習代碼解決問題,而不是花費更多的時間來學習特定于語言的細節/必須浪費腦力來跟蹤語言之間的差異,
  3. 一旦你精通第一門語言并具有很強的解決問題的能力,選擇第二種語言就容易得多,

有一些例外情況,你可以直接學習第一語言和第二語言

  1. 第二種語言不是編程語言,例如,最好與編程語言(例如 C,C ++,C#,Java,JavaScript,Python,Ruby)一起學習標記語言(例如 HTML 或 CSS ),

  2. 對于你感興趣的各種專案都是必要的,保持自己繼續學習的動力很重要,如果那意味著一次學習兩種編程語言,那就這樣吧,

  3. 如果你有專門的老師或指導者來指導你,稱職的老師和導師可以極大地簡化你的學習程序,這將足以彌補效率低下的問題,

如果你不認為自己是初學者,并且對使用編程語言來完成中等復雜的專案感到滿意,那么嘗試一次學習多種語言當然是不錯的選擇,在這一點上,你應該對編程有足夠的了解,以便以更快的速度開始學習新語言,并且應該對自己一次學習多少有一個很好的認識,

如何獲得/保持學習編程的動力

這個問題最好看看其他人是怎樣做的

  • http://redd.it/uzt31
  • http://redd.it/1c1bnj
  • http://redd.it/2j6b7i
  • http://redd.it/1s347g
  • http://redd.it/javfv
  • http://redd.it/gy0xa
  • http://redd.it/1xvdte
  • http://redd.it/1hh76b

如何使用 X

我如何開始制作視頻游戲

現代的視頻游戲是使用游戲引擎制作的 https://en.wikipedia.org/wiki/Game_engine:比如處理諸如圖形,聲音,物理和網路等復雜任務的軟體庫 https://www.reddit.com/r/gamedev/wiki/engine_faq,但是強烈建議初學者使用以下引擎,因為它們可以自由開發,并且具有學習的最佳檔案:

  • Unity(C#):適用于 2D 和 3D 移動,桌面,瀏覽器/在線和控制臺游戲
  • Construct2(JavaScript):適用于 2D 移動版,臺式機,瀏覽器/在線
  • Pygame(Python):2D 桌面游戲的引擎
  • L?VE(LUA):適用于 2D 桌面游戲

永遠記住你的目標是開發游戲,而不是開發游戲引擎,

引擎可以幫助你開始使用游戲的圖形和用戶控制元件,但是你仍然需要徹底學習編程語言來撰寫游戲邏輯 ,因此,請選擇我上面給你推薦的圖書或者在線資源,

最重要的是:從簡單開始,您可能會想直接潛入水中并立即創建自己的夢想游戲,但請記住,爬山的唯一方法是采取許多小步驟 https://www.reddit.com/r/gamedev/comments/stg2o/how_i_went_from_knowing_nothing_about_programming/ ,以下是按難度升序列出的簡單練習游戲的串列:

  • 猜數字游戲 https://www.funbrain.com/games/guess-the-number

  • 二十一點 https://en.wikipedia.org/wiki/Blackjack 或者井字游戲https://en.wikipedia.org/wiki/Tic-tac-toe

  • 獵殺烏賊 http://www.ifiction.org/games/playz.php?cat=&game=249&mode=html 規則 https://en.wikipedia.org/wiki/Hunt_the_Wumpus

  • 選擇自己選擇的冒隙訓 Zork https://en.wikipedia.org/wiki/Zork 克隆

  • Pong,Tetris或 Minsweeper 克隆

  • 水平/垂直滾動空間射擊游戲

  • 簡單的《毀滅戰士》,《馬里奧》或《塞爾達傳說》

如何開始制作網站/制作 Web 應用程式/進行網站開發

了解 Web 開發的方法有很多,但是通常你需要掌握的核心技能通常分為前端技能(在用戶的 Web 瀏覽器上運行的代碼)和后端技能(在服務器上運行的代碼),

通常,大多數人會建議你先學習 HTML,CSS 和 Javascript(按此順序),這是在每個 Web 瀏覽器上運行并組成每個網站的三種核心語言,

你可以在 https://www.reddit.com/r/webdev/wiki/faq 上找到更多資訊,這是面向初學者的另一套在線課程、教程和資源串列 https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md#html-css-and-javascript,

如何開始制作移動應用程式/ Android 應用程式/ iOS 應用程式/ Windows Phone應用程式

你將需要為每種型別的智能手機學習不同的編程語言,

  • Android 應用主要使用 Kotlin 或 Java 進行編碼-有關更多資訊,可以查閱 https://www.reddit.com/r/androiddev/wiki/index
  • iOS 應用程式使用 Objective-C 或 Swift 進行編碼-有關更多資訊,可以查閱 https://www.reddit.com/r/iOSProgramming/ 或者 https://github.com/thomasdenney/FAQ
  • Windows Phone 應用程式使用C#,Visual Basic 或Javascript 進行編碼-有關更多資訊,可以查閱 https://www.reddit.com/r/WPDev/

你還可以使用Phonegap和Titanium等技術制作可以在所有三款主要智能手機上運行的應用程式-它們使你可以使用 HTML,CSS 和 Javascript 撰寫應用程式一次,并可以在任何平臺上運行該應用程式,

有關更多資訊,可以查閱移動應用程式開發資源串列 https://www.reddit.com/r/learnprogramming/wiki/online#wiki_mobile_app_development

但是,請記住,上述資源中的許多都是針對已經具有一些編程經驗的人,如果你以前從未編程過,則可能要開始學習一種語言,該語言擁有更多的資源供初學者使用,一旦獲得了一定的經驗,并了解了編程背后的基本概念,你通常會發現學習一種新語言并開始學習移動開發容易得多

如何使事情自動化

對于 Windows,有兩種專用的編程語言,例如Autohotkey和AutoIt,

另一個可行的跨平臺替代方法是 Python https://www.python.org/,使用 Python 更容易構建自動化并完成一些無聊的 working http://automatetheboringstuff.com/

如果要自動化 MS-Office,請使用內置的編程語言Visual Basic for Applications(VBA)https://www.reddit.com/r/vba 專門用于 VBA 編程,

什么是最最最最最最好的

這篇文章 https://www.reddit.com/r/learnprogramming/comments/3r7lhp/a_collection_of_150_what_are_the_best_dev/ 匯總了 150 涉及什么是"最好的"問題和答案,包括語言工具和主題,

術語和詞匯

計算機科學,計算機工程,軟體工程,編程和編碼之間有什么區別

計算機科學(CS),計算機工程(CE),軟體工程(SE),編程和編碼都是相互關聯的術語,但彼此之間有微妙的區別,這通常使初學者很難區分它們,

你應該做的第一個區分是區分CS / CE / SE和編程/編碼,CS,CE 和 SE 都是研究領域,說“我正在學習計算機科學”將類似于說“我正在學習化學”或“我正在學習文學”,相反,編程和編碼是活動-它們是您要做的事情,要使用隱喻,學習 CS / CE / SE 就像學習音樂理論,而學習編程/編碼就像學習如何彈奏特定樂器,

從理論上講,你可以學習一個而不能學習另一個,但是如果你同時學習兩者,那么你的經驗將更加豐富,

另一個區別是,雖然 CS / CE / SE 是你可以學習的東西,但是學習編程只是通過實踐才能實作的,實際上,大多數大學和學校將要做的是正式教授一種語言以教授編碼的基礎知識,然后將重點放在 CS,CE 和 SE 的教學上,讓學生學習如何通過練習和完成家庭作業來編程,

CS vs CE vs SE

你應該在 CS,CE 和 SE 之間進行下一個區分,簡而言之,盡管有很多重疊之處,但“計算機科學”與計算機或科學無關,而更多地是研究可計算性概念的應用數學領域,計算機工程與 CS 類似,但傾向于將重點更多地放在低級硬體上,就像計算機科學和電氣工程之間的交叉,最后,軟體工程更多地是關于如何構建大型而復雜的程式,同時防止因為一些因素導致軟體崩潰,軟體工程理論較少,

關于這三個概念的論述,你可以在 https://www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/ 找到更詳細的,

編程與編碼

最后,編程 vs 編碼,這兩個術語之間的差異很小-許多人可以互換使用它們,通常,術語“編程”似乎比“編碼”具有更積極的含義,如果你說“我是程式員”,則表示你具有一定的專業水平-這表示你不僅可以撰寫代碼,而且對基本原理和理論有扎實的了解,知道如何與客戶溝通和作業與其他人等,

相反,如果你說“我是編碼員”,則通常意味著你的注意力僅集中在撰寫代碼上,而其他方面則更少,

但是,這里的不同含義仍然很小 - 在絕大多數情況下,您可以互換使用這兩個術語,

C,C ++,Objective-C 和 C#有什么區別

C 語言是這些語言中最小和最早的一種,它最初是作為 Unix 作業系統的系統編程語言創建的,如今仍廣泛用于應用程式編程,

C++ 是一種非常流行的通用編程語言,最初是基于 C 的,通過一些調整,大多數 C 代碼都可以編譯為 C++ 代碼,但是 C++ 添加了大量語言功能,這些語言功能與使用 C 的方式相比,大大改變了使用該語言的方式,用 C++ 撰寫 C 風格的代碼通常被認為是不好的做法,

Objective-C 是 C 的嚴格超集,這意味著所有有效的 C 代碼也是有效的 Objective-C 代碼,Objective-C 的普及程度不及 C 或 C++,它目前主要用于 Apple OS X 和 iOS 平臺的開發中,

從任何技術意義上講,C# 都不基于C,C# 是 Microsoft 設計的通用語言,在許多方面與 Java 相似,它可以編譯為在虛擬機中運行的中間形式,這與之前的三種語言都被編譯為本地機器代碼不同,盡管 C# 借鑒了 C 和 C++ 的語法元素(就像 Java一樣),但它與這些語言沒有真正的技術關系,

Java 和 JavaScript 有什么區別

很多人經常會把 Java 和 JavaScript 搞混,其實這兩者語言除了叫法有點關系外, Java 和 JavaScript 在任何技術意義上都不相關,它們共享一些語法,因為它們都受 C 的影響,僅此而已,Wikipedia 很好地解釋了為什么存在名稱相似性:https://en.wikipedia.org/wiki/JavaScript#JavaScript_and_Java

工具和版本控制

什么是源/版本/版本控制?我應該使用它嗎

軟體開發是一項協作的技能,版本控制系統(VCS)是一種可跟蹤代碼更改的工具,可讓你執行諸如撤消編碼錯誤之類的方便作業,并查看代碼隨時間的變化,現代分布式版本控制系統(DVCS)還使您可以輕松地與其他程式員使用同一代碼,應該說你絕對應該使用版本控制系統!

目前最受歡迎的應該就是 git 了,

你可以通過閱讀 git 入門 https://cgordini.blogspot.com/2013/05/git-101.html 以及免費的 gitbok https://git-scm.com/book/en/v2 來使用 git,

當然廖雪峰的 git 講解的也非常好 https://www.liaoxuefeng.com/wiki/896043488029600

什么是 IDE,我應該使用嗎

IDE 是一個集成開發環境,它是一個 GUI 應用程式,通常包括帶有代碼完成和語法突出顯示功能的文本編輯器,一些專案管理功能,一個編譯器或解釋器(可配置或包含)以及許多其他用于撰寫的精美功能, 運行和測驗代碼更加容易,使用 IDE 的替代方法是自動自行執行 IDE 為你執行的操作,此方法要求程式員使用單獨的工具,并且對開發程序有更深入的了解,

對于初學者來說,這兩種開發方法都有爭論:

  • 使用 IDE 意味著你不必對開發程序有太多了解,不必使用命令列界面,也不必配置這些工具即可正常作業,IDE 提供了一種快速的方法來建立代碼,甚至可以為你撰寫一些代碼!
  • 另一方面,從命令列作業意味著您不必適應 IDE 設計人員的思維方式,并且由于隱藏了更少的開發程序,因此你可以更好地了解軟體構建程序,

使用 IDE 而不是使用單獨的工具通常取決于個人喜好(除非你的雇主/學校當然需要使用特定的開發環境),如果您以前從未使用過 IDE,請下載一種流行的 IDE 并進行修改,而且,如果您從未使用過命令列中的 vim 或編譯的代碼,請嘗試一下,看看你是否喜歡它,

常見的 IDE 和輕量級文本編輯器都可以在 https://www.reddit.com/r/learnprogramming/wiki/tools 中找到,

電腦和作業系統

我應該使用哪種作業系統

許多初學者經常遇到的一個問題是,他們應該使用哪種作業系統 - Windows,Mac 或 Linux,

坦白地說,這無關緊要 - 在當今時代,你可以使用的工具的質量和成熟度在所有平臺上都將大致相同,并且任何完善的編程語言都將在所有作業系統上使用,

話雖這么說,你最終應該對這三種作業系統有一定程度的了解,以免遇到新的作業系統不知所錯,

這個規則有兩個例外

  • 如果要在 Windows 平臺上開發,請選擇 Windows 計算機
  • 如果要在 Mac 或者iOS 平臺上開發,請獲取 Mac 計算機

某些 Microsoft 和 .NET 工具仍主要針對 Windows,

雖然可以在任何計算機上開發 Mac 和 iOS 應用程式,但必須在 Mac 機器上使用 Xcode 來編譯應用程式并將其提交到應用程式商店,

最后,還值得注意的是,如果我有一臺 Windows 計算機,那么設定一個我可以使用的 Linux 虛擬機將非常容易,而不必擔心它會干擾我現有的 Windows 作業系統,

我應該選擇什么樣的電腦/筆記本電腦

同樣,這并不重要 - 任何中檔筆記本電腦或計算機都可以,如果你已經擁有一臺計算機或筆記本電腦,則應該使用它而不是購買新計算機,基本上,你可以學習編程,并且可以在現有的幾乎所有計算機上撰寫復雜而有趣的程式,

但是,如果你碰巧需要購買一臺新計算機并想將其用于編程,則應優先選擇 CPU,RAM 和硬碟驅動器,如果可能,請嘗試獲得具有以下規格或更高規格的計算機:

  • 英特爾 i5 CPU(3.0+ GHz)+
  • 4 GB以上的 RAM
  • 200 + GB硬碟
  • (可選)固態驅動器

如果你可以升級,則優先考慮獲得更好的 CPU 和更多的 RAM 而不是獲得更大的硬碟驅動器 - 更加強大的 CPU 總是有幫助的,

如果你想購買臺式機,那么這些規格實際上是唯一相關的規格,如果你希望具有便攜性,則應購買一臺筆記本電腦,并確保其配備足夠大的螢屏和鍵盤,以方便進行編程,但是,便攜式計算機的可用性和可移植性之間達到了很好的平衡:

  • 螢屏越大,電池壽命越短(但你愿意設定螢屏亮度的調光器,電池壽命越長)
  • 螢屏越小,可以容納的空間就越少,并且必須在 Windows /桌面之間進行更多的翻轉,
  • 理想情況下,你應該能夠舒適的使用兩個視窗
  • 筆記本電腦越大,重量越重,隨身攜帶的重量也越重

還還需問你自己,你打算如何使用筆記本電腦,你是否打算整天坐在辦公桌上,還是將其隨身攜帶在校園中,

如果你對機器學習,自然語言處理或圖形(包括游戲開發)特別感興趣,則可能要考慮購買配備 GPU 的機器,盡管不需要 GPU 來執行任何這些操作,但是你通常可以通過仔細撰寫代碼來加快代碼的速度,從而盡可能地利用GPU,

如果您對機器學習或 NLP 感興趣,你可以通過相對便宜的價格通過 Amazon Web Services(AWS)或 Google Compute Engine(GCE)等服務在云中租用帶有 GPU 的機器,

職業和作業

程式員賺錢嗎

這個因人而異,現在 360 行行行轉程式員,導致這個行業的門檻越來越低,所以一般程式員大家的薪資水平差不多,互聯網的薪資相比傳統行業會高不少,但是互聯網對于程式員的要求也相對較高,

如何進入該行業并獲得入門級作業

前提假設是你已經掌握一門語言并知道如何進行編碼,獲得入門級作業主要有兩個階段

  • 制作出足以使 HR 開始邀請你面試的簡歷
  • 通過面試

這兩個階段需要一些不同的策略,

階段1:建立引人注目的簡歷

在第 1 階段中,你的目標是穩步開始向簡歷中添加可幫助你脫穎而出(或至少可以使你與其他正在申請的申請人相媲美的專案),

為此,一項特別有用的策略是開始構建可以向潛在雇主炫耀的專案組合,

  • 獨立副業
  • 志愿作業,比如為一些非營利組織建立網站
  • 課堂專案
  • 你在作業中所做的作業,找到了整合編程的方法
  • 研究獨立的專案,或者你在學校實驗室中做過的研究
  • 過去的作業或實習專案

擁有強大的專案組合可以使雇主成功地運用編程語言,庫和技術來解決問題,并為他們提供一種更準確地評估你的技能水平的方法,

一些注意事項

  • 你的專案不一定需要外觀華麗,具有技術背景的招聘人員會明白,不是所有的有趣的專案已經或需要一個漂亮的界面,更重要的是你能描述清楚你所做的作業,你所負責的事情,從而展現你所做作業的復雜性

    也許主要的例外是,如果你申請的職位需要一些視覺才能,例如,如果你要申請前端 Web 設計師角色,那么擁有一些可以顯示出可以打造美觀且可用的網站的專案會有所幫助,

  • 當然,從事專案并不是你唯一可以做的事情,諸如獲得學位(最好是與計算機科學相關的學科)之類的事情也肯定會有所幫助,

  • 有些人還參加訓練營,以部分加快建立相關簡歷/作品集的程序,只需確保在參加訓練營之前先做一下研究:有些很棒,有些甚至是徹頭徹尾的騙局,這個需要你自己甄別

階段 2:通過面試

這個程序就需要你和面試官真刀真槍的干架了!不過國內的面試主要分為兩種:傳統軟體行業和互聯網公司,一般傳統軟體公司或者一些互聯網公司會問一些你能不能快速上手解決問題的面試題,而一些國內頂尖的互聯網卻喜歡專注于基礎知識和框架的深度使用

你可能會遇到的一些常見面試原型包括:

  • 給你帶來某種形式的編碼挑戰,通常是關于資料結構和演算法的挑戰,一般俗稱刷題,你可以在牛客網或者 LeetCode 進行刷題,
  • 向你詢問與面試的特定職位有關的問題-例如前端網頁設計,網路安全,中間件原理,JVM 原理,框架深度使用等
  • 要求你嘗試設計一些較大專案的體系結構
  • 向你詢問簡歷中列出的專案(有時,通常是有時深入關注單個專案)
  • 只是一般地討論技術

總結

這一篇內容內容我為你介紹了小白新手如何學習編程、一步一步到高級程式員會經歷哪些步驟,為你羅列了非常多優質的編程資源,以及學習中國的困惑,如何提高,在最后為你解釋了一些編程中常見的問題,簡歷都需要注意哪些等等,

這篇內容相當于是一個使用說明手冊了,你可以按照這個路線來一步一步規劃你的編程生涯,最后祝你早日成為大牛(形容這個程式員的水平非常高)

有任何疑問或者問題想要咨詢我,可以添加我的微信 lx252279279,當然是免費的哦!

如果這篇文章對你有用,歡迎給我的 CSDN 賬號點贊 + 關注哦!!!

我自己肝了六本 PDF,全網傳播超過10w+ ,你需要關注一下我的 CSDN 賬號,私信回復 cxuan ,領取全部 PDF,這些 PDF 如下

六本 PDF 鏈接

在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275425.html

標籤:其他

上一篇:適合普通大學生的前端開發學習路線

下一篇:“過早的性能優化是魔鬼”

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more