聊一聊我的計(jì)算機(jī)學(xué)習(xí)經(jīng)歷吧
點(diǎn)擊藍(lán)色“程序員cxuan ”關(guān)注我喲
加個(gè)“星標(biāo)”,及時(shí)接收最新文章

hey guys ,我是 cxuan,這一篇文章我就要和你聊聊編程如何學(xué)習(xí),這一篇文章涉及的內(nèi)容簡直太多了,我將從入門開始,一步一步到如何提高,然后到一些學(xué)習(xí)的相關(guān)問題,還有一些計(jì)算機(jī)相關(guān)的術(shù)語等,干貨也非常多,準(zhǔn)備好了嗎?那么我們開始吧。
編程入門
我們首先需要解決的就是如何入門的問題了,這也是很多新手/小白的困惑,到底如何入手呢?我該從哪里開始呢?
如果你有興趣學(xué)習(xí)編程,那么樹立一個(gè)正確的編程觀念是很有幫助的。這個(gè)短片是很好的一個(gè)入門 https://www.youtube.com/watch?v=mvK0UzFNw1Q ,這個(gè)短片解釋了你應(yīng)該以一種合適的觀點(diǎn)來開始編程。
在你樹立了正確的編程觀念后,你需要意識到一個(gè)問題,那就是沒有通用的學(xué)習(xí)編程的方法,所以市面上大多數(shù)培訓(xùn)機(jī)構(gòu)所提倡的方法并不適用于所有人,這只是他們大多數(shù)人所認(rèn)可的學(xué)習(xí)方法,但是并不適用于你,你必須找到適合自己的編程方式。
這里需要說兩個(gè)現(xiàn)象:
很多小伙伴們咨詢我關(guān)于編程方式的問題,這個(gè)沒有定數(shù),有的人喜歡早上編程,因?yàn)樵缟媳容^清醒,思路比較清晰;有的人適合網(wǎng)上編程,晚上沒人打擾,而且晚上有一種魔力:空杯心態(tài),你能更清晰的認(rèn)識自己,到達(dá)一種心流的狀態(tài)。但是晚上有一點(diǎn)特別忌諱,那就是熬夜。所以你更需要平衡編程和生活,生活不全部是編程,編程不能完全替代生活。
所以你需要找到適合自己的編程方式,我這里強(qiáng)烈建議一下你按照下面這幾種方式來進(jìn)行:
首先找到一些你所感興趣的問題或者項(xiàng)目,你可以嘗試構(gòu)建工具來解決生活中的小問題,也可以嘗試實(shí)施從頭開始發(fā)現(xiàn)有趣的程序。這個(gè)項(xiàng)目將有助于激發(fā)你繼續(xù)學(xué)習(xí)編碼的經(jīng)驗(yàn),并為你提供練習(xí)應(yīng)用所學(xué)內(nèi)容的機(jī)會(huì)。
做一些研究以確定哪種編程語言最適合你的項(xiàng)目。(下面我會(huì)進(jìn)行介紹)
找到一些高質(zhì)量的面對初學(xué)者的學(xué)習(xí)編程的資源。(同樣,下面我會(huì)進(jìn)行介紹)
通過 google 搜索來提問或者補(bǔ)充學(xué)習(xí)資源,如果沒有 tz 的話,可以使用必應(yīng)和搜狗(面向微信公眾號平臺),微信公眾號很多文章比較專業(yè)的。
最終使用該語言完成了幾個(gè)有意義的項(xiàng)目
其實(shí),上面這幾點(diǎn)歸根結(jié)底就是這樣

剛開始強(qiáng)烈建議規(guī)避這些不良的編程習(xí)慣!!!!!!
不要只是簡單的、被動(dòng)的使用你正在使用的資源,要及時(shí)進(jìn)行練習(xí)和家庭作業(yè),實(shí)踐是學(xué)習(xí)編碼絕對必要的部分。
避免在編程語言之間來回切換;選擇一門語言并堅(jiān)持下去。這是因?yàn)榫幊套罱K與解決問題有關(guān),而不是與編程語言有關(guān)。學(xué)會(huì)解決問題是具有挑戰(zhàn)性的,并且是只有通過練習(xí)才能磨練的技能。每次切換語言時(shí),你都在浪費(fèi)時(shí)間,可以花時(shí)間練習(xí)運(yùn)用所學(xué)的知識來提高解決問題的能力。
完成教程后,不要停止學(xué)習(xí)。編程是一項(xiàng)永遠(yuǎn)需要新知識的領(lǐng)域
最后,請你記住,學(xué)習(xí)編碼注定是一項(xiàng)長期而又困難的過程,如果你覺得編碼很困難,那完全不要?dú)怵H,這是很正常的,因?yàn)樵S多人會(huì)花很多年的時(shí)間學(xué)習(xí)和練習(xí),才認(rèn)為自己有能力找到尋找工作或者為重大開源項(xiàng)目做貢獻(xiàn)。但是幸運(yùn)的是,編程入門并不難。
如何選擇編程語言
所以現(xiàn)在需要為上面的編程入門提到的幾點(diǎn)做一個(gè)解釋了。
首先,找到合適的、你所感興趣的編程項(xiàng)目,這個(gè)因人而異的,所以就是編程語言的選擇問題了。
我經(jīng)常會(huì)被問到這個(gè)問題,我該選擇哪種語言作為入門?
提出這種問題的人有兩個(gè)誤區(qū):第一個(gè)是你潛意識中認(rèn)為一定有一門最完美的編程語言來進(jìn)行學(xué)習(xí);第二個(gè)是第一門學(xué)習(xí)的編程語言好像會(huì)伴隨你的一生。。。。。。
事實(shí)上,沒有最好的編程語言(PHP 是最好的編程語言純碎是調(diào)侃,這篇文章要解惑下,大家不要相信,有的時(shí)候玩笑開著開著就成真的了)。而且你的第一門編程語言對你的職業(yè)生涯沒有決定性的作用,說起到?jīng)Q定性作用的人,你捫心自問,自己是不是思想懶惰不愿意接觸新的編程語言了?
我要告訴你一件事情,剛開始學(xué)習(xí)一門語言是最難的,因?yàn)橛泻芏鄰?fù)雜的概念你搞不懂,但是其實(shí)上大多數(shù)基本概念是各個(gè)語言通用的。隨著時(shí)間流逝和你對編程工作的深入,要學(xué)習(xí)一門新的語言會(huì)變得越來越容易。可能你剛開始可能要幾個(gè)月才學(xué)會(huì)一門編程語言,而一個(gè)有經(jīng)驗(yàn)的程序員可以在幾天內(nèi)熟悉一門新的編程語言。
理想情況下,所有程序員都應(yīng)具有多種語言的經(jīng)驗(yàn)。一旦你對一種語言感到滿意,就可以繼續(xù)使用另一種在某些基本方式上有所不同的語言。隨著學(xué)習(xí)更多語言,你將變得更有能力為手頭的任務(wù)選擇合適的工具,這是優(yōu)秀程序員的標(biāo)志。由于編程概念至關(guān)重要,因此我建議初學(xué)者從下表中選擇一種主流語言。所有這些語言使初學(xué)者可以開始編寫簡單的應(yīng)用程序并練習(xí)編程,而不必使用任何更復(fù)雜的語言功能。
如果你已經(jīng)有了項(xiàng)目和目標(biāo),并且將自己的技能應(yīng)用到要解決的問題上,你將會(huì)學(xué)的更快。下面是一些常用編程語言的說明,能夠讓你有更多的選擇。

如果看了這些你仍然覺得迷茫的話,那就不妨使用一門簡單易上手的編程語言 Python,Python 是一種良好的,適合初學(xué)者的語言,擁有一個(gè)龐大的社區(qū)和許多庫,可以執(zhí)行幾乎任何你想做的事情,從制作游戲到在家中或工作場所中使事情自動(dòng)化,從進(jìn)行數(shù)據(jù)分析到制作網(wǎng)站等等等等。在進(jìn)入更復(fù)雜的應(yīng)用之前,你需要找到一些好的學(xué)習(xí)資源
那么我在哪里能找到這些資源呢
下面我為你列出了一些資源獲取途徑
圖書,學(xué)習(xí)任何一項(xiàng)技能前,看書都是一種最有效的途徑,也是我最推薦給你的途徑,因?yàn)槲冶旧砭拖矚g看書,囤書也是我的一種樂趣。
免費(fèi)的編程書籍,這個(gè) 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
一些適合于初學(xué)者的書籍
C#:Rob Miles 撰寫的
小黃書http://www.csharpcourse.com/ - 面向初學(xué)者的 C# 編程。Python: Al Sweigart's 編寫的 《Python 自動(dòng)化》系列 http://automatetheboringstuff.com/,也有中文譯本,即 《Python 編程從入門到實(shí)踐》

同樣是 Al Sweigart's 編寫的 《Python 發(fā)明》系列 http://inventwithpython.com/,該書通過使用Python和Pygame創(chuàng)建計(jì)算機(jī)游戲來教授編程。
Abelson and Sussman 編寫的《計(jì)算機(jī)程序的構(gòu)造和解釋》,下面是編程網(wǎng)站 https://mitpress.mit.edu/sites/default/files/sicp/index.html

Python 編程游戲 http://programarcadegames.com/
C 語言:c primer plus ,這是一本入門 C 語言非常經(jīng)典的好書

C 語言程序設(shè)計(jì),同樣是一本經(jīng)典好書,雖然書籍不厚,但是濃縮的就是精華啊!!!

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

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

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

除此之外,一些權(quán)威 C++ 書籍和指南都在下面這個(gè)鏈接中了 。https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list
一些權(quán)威 C 語言書籍和指南都在下面這個(gè)鏈接中了。https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list
這是一些推薦給開發(fā)者們的讀物 https://blog.codinghorror.com/recommended-reading-for-developers/
每個(gè)程序員都應(yīng)該讀的最有影響力的書籍是什么 https://web.archive.org/web/20150518004457/http://stackoverflow.com/questions/1711/what-is-the-single-most-influential-book-every-programmer-should-read
算法書籍推薦:市面上有很多關(guān)于算法的書籍,最近非常火的《labuladong 的算法小抄》,通俗易懂的《小灰的算法之旅》等等,不過我這里只說兩本最經(jīng)典的算法書:《算法導(dǎo)論》和《算法第四版》
在線資源:我下面會(huì)推薦一些優(yōu)質(zhì)的編程資源,這些編程資源都是非常好的教程,走起!
編程社區(qū):在線編程練習(xí)社區(qū) https://hackr.io/
C#
C# 在線編程練習(xí)社區(qū) ,還有什么會(huì)比微軟更權(quán)威的呢?https://dotnet.microsoft.com/learn/dotnet/in-browser-tutorial/1
C# 體系化的優(yōu)質(zhì)教程,當(dāng)然離不開 Tutoriaispoint 了。https://www.tutorialspoint.com/csharp/index.htm
C# 優(yōu)質(zhì)編程練習(xí)網(wǎng)站 https://www.learncs.org/
Ruby:學(xué)習(xí) Ruby 這里給你推薦三個(gè)網(wǎng)站:https://rubymonk.com/ 、https://www.pluralsight.com/search?q=ruby、http://hackety.com/
JavaScript:學(xué)習(xí) JavaScript 這里給你推薦兩個(gè)網(wǎng)站資源:https://www.codecademy.com/、https://eloquentjavascript.net/
Java
還有什么能夠比官網(wǎng)更權(quán)威的呢?https://docs.oracle.com/javase/tutorial/
Java 最大的特點(diǎn)就是面向?qū)ο蟮脑O(shè)計(jì)思想,這里你可以參考赫爾辛基大學(xué)(沒聽過?就 Linux 他爹的那個(gè)學(xué)校)https://www.mooc.fi/en
John Purcell 的 Java 初學(xué)者免費(fèi)版 https://courses.caveofprogramming.com/p/java-for-complete-beginners、https://www.udemy.com/course/java-tutorial/、https://www.youtube.com/playlist?list=PL9DF6E4B45C36D411
這個(gè)作者有一些多語言的教程 https://www.youtube.com/channel/UCwRXb5dUK4cvsHbx-rGzSgw/playlists
Java 設(shè)計(jì)模式和體系結(jié)構(gòu),參考 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 找到更詳細(xì),更全面的資源列表,尤其是 https://www.reddit.com/r/learnpython/wiki/index#wiki_new_to_programming.3F 對新手更友好的部分。
Web 學(xué)習(xí)
Web 學(xué)習(xí)包括一些前端內(nèi)容,這個(gè)網(wǎng)站很不錯(cuò) https://www.snoopcode.com/
CSS 3 https://css3please.com/
我愛 PHP ,哈哈哈哈 https://ilovephp.jondh.me.uk/en/tutorial/make-your-own-blog
Web 發(fā)展的介紹 https://www.thesoftwareguild.com/coding-bootcamps/introduction-web-development/
精選編程資源,這個(gè) github https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md 非常不錯(cuò),精選了很多非常優(yōu)質(zhì)的編程語言資源
沒有上過好大學(xué),是不是就意味著自己沒有
競爭力了?當(dāng)然不是!這個(gè)網(wǎng)站 http://www.infocobuild.com/education/audio-video-courses/ 匯總了很多優(yōu)質(zhì)的大學(xué)課程
CS 是一門藝術(shù),而這門藝術(shù)你完全可以達(dá)到
無師自通,據(jù)我所知 99.9% 的大學(xué)對于 CS 的講授都是一塌糊涂,其中不乏清華北大等高等學(xué)府,我 B 站也聽過一些視頻,講的真實(shí)一言難盡,所以,最靠譜的還是自學(xué),這里有個(gè) github https://github.com/ossu/computer-science,這其實(shí)也是一門課程,只不過這個(gè)課程就叫做計(jì)算機(jī)自學(xué)課程。
如何提高
如何從開始過渡到中等水平
當(dāng)我剛開始入門的時(shí)候,我也有過這種現(xiàn)象,那就是現(xiàn)在該做什么了?這種情況當(dāng)你讀過一些書籍和教程解決過世紀(jì)問題后尤甚,但是最終很難從理解 if … else 和 for 循環(huán)之類的事情過渡到理解如何使用應(yīng)用所學(xué)知識來制作更復(fù)雜而有趣程序,這也是大多數(shù)程序員的問題所在。
在入門教程和復(fù)雜代碼之間進(jìn)行這種過渡可能很困難,https://www.thinkful.com/blog/why-learning-to-code-is-so-damn-hard/ 這篇文章很好的描述了這種現(xiàn)象。許多教程包括我上面列出來的一些教程和資源都會(huì)傾向于讓你掌握某種語言所具備的知識,但是你掌握了就掌握了,并沒有更進(jìn)一步的打算。。。。。。這使很多初學(xué)者程序員陷入困境。
下面是一些針對改善這種情況的建議。
從被動(dòng)學(xué)習(xí)轉(zhuǎn)變?yōu)橹鲃?dòng)學(xué)習(xí)
把學(xué)習(xí)的主觀能動(dòng)性從希望別人教會(huì)你哪些知識到自己積極/主動(dòng)去學(xué)習(xí)/吸收哪些知識。舉個(gè)例子,比如你不知道如何制作網(wǎng)站,你 google 如何使用 x 語言制作網(wǎng)站,然后 google 就會(huì)提示一大堆 HTML5 、CSS、JavaScript 等一系列教程,然后找到大而全的教程或者在線編程課程開始搞起。
你通常可以找到你想要執(zhí)行操作的教程,或者至少找到為你提供有關(guān)如何組成更具體的搜索查詢的概述和線索的文章。更廣泛地說,面向搜索來學(xué)習(xí)并不應(yīng)該讓你感到
羞愧,事實(shí)上這是所有程序員的入門和高級工作。我在剛開始工作的時(shí)候經(jīng)常會(huì)因?yàn)樽约翰恢来a如何寫而感到羞愧,我恥于網(wǎng)上搜索,經(jīng)常自己悶聲想解決辦法,想不出來,無可奈何只能網(wǎng)上搜索,出現(xiàn)正確的結(jié)果后,我不是 ctrl c v ,而是一個(gè)一個(gè)代碼的敲下來,然而還在厭惡自己為什么記不住這些代碼如何寫,事實(shí)上這種情況及其不可取,既浪費(fèi)時(shí)間又浪費(fèi)精力,還不斷的懷疑自己,產(chǎn)生惡性循環(huán)。
不斷練習(xí)
編程有點(diǎn)像鍛煉,因?yàn)楦倪M(jìn)的主要方法是不斷練習(xí)。從簡單開始,然后嘗試在命令行上編寫諸如剪刀石頭布之類的基本游戲。完成后,嘗試選擇一個(gè)更具雄心的項(xiàng)目,然后完成該工作。如果您想混合一些東西,也許可以嘗試一些編程練習(xí)。
從根本上說,編程實(shí)際上是關(guān)于應(yīng)用問題的解決,而學(xué)習(xí)如何解決問題的最佳方法是不斷解決各類大大小小的問題。
了解如何分解問題
不管你在工作中嘗試解決困難問題,還是在嘗試找到一些大型開源項(xiàng)目時(shí),你很可能會(huì)感到沮喪,因?yàn)槿蝿?wù)看起來多么龐大或令人生畏。不要被嚇倒,而是將問題分解(分解問題)為越來越小的子問題,直到每個(gè)子問題都看起來比較容易上手和解決。
例如,如果你正在學(xué)習(xí) Java,想學(xué)習(xí)編寫游戲,但不知道從哪里開始或如何解決問題,那么搜索java 游戲教程將帶來幾個(gè)不錯(cuò)的結(jié)果,通常會(huì)告訴你如何將編寫游戲的過程分解成較小的部分。
從本質(zhì)上講,你正在嘗試樹立工程師的心態(tài)。如果問題很大,請不要放棄。不斷將其分解成越來越小的碎片,并搜索看起來不可能完成的任務(wù)。然后重復(fù),繼續(xù)循環(huán):分解,搜索,分解,搜索。。。。。。
順便說一句,這是一種非常有效的自我教學(xué)策略!在練習(xí)時(shí),你將會(huì)更好地了解如何解決問題,并將擴(kuò)大你的知識/可能的問題解決方案庫。
學(xué)習(xí)如何系統(tǒng)化
我們程序員在遇到問題并調(diào)試時(shí)經(jīng)常會(huì)這樣,改改 border 大小刷新一下頁面行不行,改改 margin 大小刷新一面頁面看看生沒生效,就類似這種靠
猜去調(diào)試和解決問題,這種習(xí)慣切勿養(yǎng)成。你需要運(yùn)用所學(xué)知識,盡可能分析問題,判斷錯(cuò)誤,學(xué)習(xí),再分析判斷,再學(xué)習(xí)。。。。。。盡可能系統(tǒng),避免試錯(cuò)。調(diào)試時(shí),切勿漫無目的。像科學(xué)家一樣嘗試思考-進(jìn)行實(shí)驗(yàn)以嘗試修復(fù)錯(cuò)誤或縮小錯(cuò)誤的可能范圍,并記錄結(jié)果。如果你的假設(shè)/嘗試的更改被證明是錯(cuò)誤的,或者如果你認(rèn)為某些更改不起作用,請停止,暫停并找出原因。
當(dāng)你的假設(shè)與現(xiàn)實(shí)不符時(shí),就會(huì)發(fā)生錯(cuò)誤。如果感覺
不對勁,請不要忽略它 - 一直追溯到你確定問題出在哪里/你所做的錯(cuò)誤假設(shè)是什么。這種學(xué)習(xí)是有意義的,它會(huì)讓你不斷思考,雖然過程很艱難,但是會(huì)促進(jìn)你想解決問題的欲望,這種學(xué)習(xí)會(huì)一直持續(xù)下去。
切記不要因?yàn)橄乖嚦鰜碚_的結(jié)果而沾沾自喜。
不要因必須調(diào)試或谷歌而灰心
并非所有初學(xué)者都意識到,即使在專業(yè)程序員中,花更多的時(shí)間進(jìn)行調(diào)試或谷歌搜索是完全正常的。
調(diào)試(而且很費(fèi)勁!)是編碼的重要組成部分。如果可能的話,盡量避免過分緊張或者不耐煩。將其視為有趣的探索和知識的拼接!!!
即使由于某些錯(cuò)誤而使你的實(shí)際代碼沒有取得任何進(jìn)展,只要你是在系統(tǒng)的學(xué)習(xí),就可以練習(xí)解決問題的技能,盡管采用了不同的方式。
結(jié)果,即使你花費(fèi)大量時(shí)間來解決一個(gè)錯(cuò)誤,你仍然要認(rèn)為這部分的時(shí)間是值得花費(fèi)的,調(diào)試是善于解決問題的最佳方法之一!
隨著你變得越來越有經(jīng)驗(yàn),這更加正確。事實(shí)證明,遇到的錯(cuò)誤的難度會(huì)隨著你的經(jīng)驗(yàn)水平的提高而增加。有經(jīng)驗(yàn)的程序員有時(shí)也會(huì)不得不花幾個(gè)月的時(shí)間來追蹤錯(cuò)誤的情況并不少見。如果發(fā)現(xiàn)是特別令人討厭的錯(cuò)誤。
不要害怕尋求幫助
最后,如果你完全陷入困境,又不知道下一步該怎么做了,請不要忘了你可以找其他人尋求幫助!
程序員通常非常有幫助。我們中的許多人也是自學(xué)成才的,因此了解作為初學(xué)者奮斗的感覺以及完全陷入困境的感覺。
但是尋求幫助前,你需要盡可能的把問題描述清楚,問問題的技巧也是非常多,這一篇關(guān)于如何提問問題的文章,對你應(yīng)該非常有幫助 https://www.reddit.com/r/learnprogramming/wiki/index#wiki_asking_questions
在哪里可以找到編程練習(xí)和項(xiàng)目
如果你要?jiǎng)?chuàng)建一個(gè)項(xiàng)目,請參考以下一些想法以獲取啟發(fā):
一些清單
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-增長列表
項(xiàng)目創(chuàng)意以及教程或?qū)懽?/span>
面向高級初學(xué)者的編程項(xiàng)目 - 博客 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
特定主題的項(xiàng)目 http://inventwithpython.com/blog/2012/02/20/i-need-practice-programming-49-ideas-for-game-clones-to-code/
如果你想要做一些有挑戰(zhàn)性的工作,那么你可以嘗試寫
命令行實(shí)用程序(ls,wget,curl等)
文本編輯器
集成開發(fā)環(huán)境
圖片瀏覽器
Office 套件(類似于Microsoft Office或Libreoffice)
編程語言(編寫解釋器或編譯器)
網(wǎng)頁瀏覽器
數(shù)據(jù)庫(關(guān)系或非關(guān)系)
網(wǎng)絡(luò)服務(wù)器
版本控制系統(tǒng)
如何提高將任務(wù)/問題轉(zhuǎn)換為程序編碼的能力(算法思維)
這是很常見的問題之一。
普遍的答案就是:編寫大量的程序。
但是,有一個(gè)技巧能夠幫助你建立這項(xiàng)技能:
選擇一項(xiàng)每天應(yīng)該做的事情,例如做早餐或類似的事情。它應(yīng)該不太容易,但也不要太困難。
寫下你應(yīng)該為該活動(dòng)執(zhí)行的步驟,但是要在與實(shí)際執(zhí)行該活動(dòng)的時(shí)間的不同時(shí)間內(nèi)用完內(nèi)存。
下次執(zhí)行該活動(dòng)時(shí),記下筆記并嘗試認(rèn)真執(zhí)行以下步驟。盡量不要偏離你所寫下的步驟,如果有必要,請記下差異。
改進(jìn)算法,直到滿意為止。
嘗試不同的活動(dòng)。任務(wù)變得越來越容易。
盡管聽起來很愚蠢,但它確實(shí)有效。上面的方法已經(jīng)在許多學(xué)生身上嘗試過,并證明可以顯著改善。
對于一個(gè)項(xiàng)目,我很難有很酷的新想法,我只是缺乏創(chuàng)造力嗎?其他程序員是如何受到啟發(fā)呢
對于初學(xué)者來說,https://en.wikipedia.org/wiki/Chuck_Close Chuck_Close 一個(gè)很不錯(cuò)的想法
我想給年輕藝術(shù)家或任何愿意聽我的人提供建議,就是不要等待靈感。靈感是針對業(yè)余愛好者的;我們其余的人只是出現(xiàn)并開始工作。如果你等著云散開,一束閃電擊中你的大腦,那么你將不會(huì)做很多工作。所有最好的想法都來自過程。他們來自工作本身。事情發(fā)生在你身上。如果您想幻想一個(gè)偉大的藝術(shù)構(gòu)想,那么你可以坐在那里很長時(shí)間,然后再進(jìn)行任何事情。但是,如果你只是開始工作,你會(huì)想象一些事情,但是實(shí)際上會(huì)發(fā)生另外一些事情,而這些其他事情會(huì)將你推向另一個(gè)方向。靈感是絕對沒有必要的,并且從某種方式上具有欺騙性。你覺得自己需要這個(gè)好主意才能開始工作。
只是坐在那里等待靈感的火花,很少會(huì)有新奇的想法。如果你只是繼續(xù)嘗試構(gòu)建一些東西(任何東西!),即使你的想法看起來有些愚蠢或已經(jīng)完成,你的時(shí)間花費(fèi)也是值得的。
畢竟,這就是藝術(shù)家和音樂家的工作 - 他們不一定從嘗試創(chuàng)作出高度創(chuàng)意的繪畫或創(chuàng)作自己的音樂開始。取而代之的是,他們繪制風(fēng)景或花瓶,或覆蓋現(xiàn)有的歌曲。同樣的,提出項(xiàng)目構(gòu)想時(shí)不要感到有壓力。重新實(shí)施現(xiàn)有程序是一個(gè)歷史悠久的傳統(tǒng) - 看看你能獲得多大的收獲吧!
不過,這里有一些想法和技巧能讓你參考
嘗試重新實(shí)現(xiàn)現(xiàn)有項(xiàng)目:就像剛開始的音樂家是從報(bào)道別人寫的歌開始一樣,最好重新執(zhí)行別人制作的程序。
嘗試將編程連接到另一個(gè)愛好:編程是一項(xiàng)非常有用的技能,因?yàn)槟憧梢詫⑵鋺?yīng)用于廣泛的領(lǐng)域,甚至與計(jì)算機(jī)科學(xué)完全無關(guān)的領(lǐng)域。例如,如果你對政治感興趣,則可以嘗試分析投票池和趨勢;如果你對音樂感興趣,則可以嘗試編寫數(shù)字音板;如果你對體育感興趣,則可以嘗試編寫幻想足球追蹤器或預(yù)測變量,如果你經(jīng)營一家企業(yè),可以寫些東西來幫助您跟蹤庫存。
試著跟蹤讓你煩惱的事情:如果你發(fā)現(xiàn)生活中不喜歡的事情或發(fā)現(xiàn)重復(fù)的事情,請問問自己是否可以自動(dòng)化。我記得
耗子叔(左耳朵耗子)也提到過這個(gè) idea,比如使用 Python 來完成一些無聊的工作,這個(gè) https://automatetheboringstuff.com/ 網(wǎng)站或許有幫助,你也可以搜索家庭自動(dòng)化教程或者更多的解決方案
如何完成一個(gè)大型項(xiàng)目
我們上面也談到過對于大型項(xiàng)目的訓(xùn)練方式:細(xì)化、拆分
但是首先,你需要對項(xiàng)目有一個(gè)全面的了解,也許橡皮鴨調(diào)試會(huì)非常有用。向知識或理解為零的人(或某物)解釋問題或概念有助于更深入地了解問題。通過這樣做,人們必須對問題進(jìn)行更多的思考,這將導(dǎo)致更深刻的理解。
然后,不要直接去碰電腦。
你要花大量的時(shí)間去思考問題/任務(wù)。繪制一些草圖,一些偽代碼,一些通俗易懂的語言提示,要現(xiàn)在紙上或者繪圖板上寫下你的思路,會(huì)有一些幫助。
自己處理大型項(xiàng)目時(shí),請記住一件事
世界上的所有事物都是由較小的部分組成的。
這意味著你所看到的基本上是任何大型機(jī)器,房屋,摩天大樓,汽車,火車,計(jì)算機(jī)等,都由許多較小的結(jié)構(gòu)組成,這些結(jié)構(gòu)共同構(gòu)成了最終產(chǎn)品。較小的結(jié)構(gòu)由較小的結(jié)構(gòu)組成,依此類推。
大程序也是如此。它們由許多較小的單元組成,這些單元耦合在一起構(gòu)成一個(gè)整體。理想情況下(但通常不可能),每個(gè)較小的單元應(yīng)獨(dú)立于其他單元工作(并進(jìn)行測試)。
從小的單元開始,查看問題或者項(xiàng)目是否還能夠繼續(xù)拆分,直到拆成你認(rèn)為無法拆開為止。
不要看最終完整的項(xiàng)目和大圖,這會(huì)讓你不知所措,一次只處理一個(gè)單獨(dú)的部分就好。
經(jīng)驗(yàn)不足的程序員面臨的最大問題是,當(dāng)他們處理大型任務(wù)時(shí),大多數(shù)人會(huì)不知所措。但是這個(gè)問題并不是很難克服的:
不要試圖查看所有程序的最終程序。專注于一個(gè)小的,易于管理的部分,完成它并繼續(xù)前進(jìn)。即使是最復(fù)雜的程序/系統(tǒng),也包含小的簡單的模塊。
想象一下,你正在為客戶工作,并且客戶在開始編寫代碼之前需要先查看并批準(zhǔn)你的設(shè)計(jì),因?yàn)樗麄冃枰_保你是否正確理解了他們的想法。
準(zhǔn)備項(xiàng)目的詳細(xì)描述,即所謂的功能設(shè)計(jì)規(guī)范。
與你的假想客戶討論該功能設(shè)計(jì)規(guī)范(即,將其解釋給一些無生命的對象,或者如果你可以承受,請向他們解釋)。
完善功能設(shè)計(jì)規(guī)范 - 返回上一步 - 循環(huán)直到你滿意為止。
在截止日期前準(zhǔn)備項(xiàng)目進(jìn)度表。
堅(jiān)持上述規(guī)定。
一些其他建議
首先,完全忘記寫代碼這件事情,要從用戶的角度想象該程序。
寫下軟件執(zhí)行的功能列表。
寫下該軟件不具備的功能列表。(這將使您避免出現(xiàn)需求變更)
寫出一些有關(guān)用戶將看到哪些屏幕及其工作流程的圖形。這些不是藍(lán)圖,也不是為了顯示它們的外觀,更多的是“首先用戶在此頁面上,然后他們可以轉(zhuǎn)到此頁面”。繪制草圖可以幫助你不要遺漏細(xì)節(jié)問題。
解如何使用 git 并獲得一個(gè) github 帳戶。這非常適合進(jìn)行備份,也可以征求代碼審查。(忽略任何有關(guān)代碼樣式的評論,在 99% 的時(shí)間里都是徒勞的辯論)
一些擔(dān)憂和恐懼
很多讀者朋友向我咨詢自己是否可以學(xué)習(xí) xxx 種語言,那么為什么不學(xué)呢?又有誰阻止你去學(xué)了?那還不是你的擔(dān)憂和恐懼來阻止你的嗎?還有一些諸如下面的問題
我太老了,還能編碼嗎
不,你可以在任何年齡學(xué)習(xí)編程,并且可能會(huì)從事該職業(yè)。
我們現(xiàn)在經(jīng)常會(huì)出現(xiàn) 35 歲危機(jī)問題,事實(shí)上這個(gè)問題在各行各業(yè)都會(huì)出現(xiàn)。上周我家搬家了,和搬家工人聊起來,他已經(jīng) 40 歲了,還在做搬家工作,要知道這種工作就是體力活,他也很擔(dān)心沒幾天就被老板以身體原因開除了。過了 35 歲,身體機(jī)能下降是企業(yè)衡量用人的最大考慮因素,那么有沒有 35 歲不被辭退的現(xiàn)象呢?有,所以就有類似于拿到拼多多和國家電網(wǎng)的 offer,該選哪個(gè)的問題。
還有就是,為什么會(huì)擔(dān)心 35 歲危機(jī)呢?那是因?yàn)槟愕墓ぷ骶哂锌商娲裕绻闶且粋€(gè)公司的架構(gòu)師,公司的核心架構(gòu)是你搞的,你覺得公司會(huì)開除你嗎?可能會(huì),因?yàn)楣究斓归]了。。。。。。這當(dāng)然都是意外情況,不可控制。
so,我們擔(dān)心的 35 歲危機(jī),都是因?yàn)槲覀儾幌朐賹W(xué)了,想摸魚賺點(diǎn)錢了,但是企業(yè)可不這么認(rèn)為,他們?nèi)绻话l(fā)展就會(huì)被替代,那么企業(yè)為什么會(huì)花大價(jià)錢養(yǎng)你呢?這里我并不是說要和企業(yè)同流合污,但是你總要知道我們?yōu)槭裁磿?huì)有 35 歲危機(jī)。
一個(gè)普遍的神話是,擅長編程的唯一方法是從小就開始學(xué)習(xí)編碼。這是錯(cuò)誤的 - 雖然有些人開始早點(diǎn)學(xué)習(xí)編碼(因此可能會(huì)有一些先發(fā)優(yōu)勢),但大多數(shù)人在上大學(xué)或以后會(huì)開始學(xué)習(xí)編碼。所以什么類似于讓孩子贏在起跑線上,只是抓住了一些家長的弱勢心理,潛臺詞就是你的孩子不早點(diǎn)報(bào)班,從小就不如其他孩子優(yōu)秀,而家長們都是心疼孩子的,既然家長們抓住了這個(gè)心理,那么培訓(xùn)班能不賺錢?
然而學(xué)習(xí)是任何年齡的人都可以做的事情 - 不要專注于他人,只專注于自己和個(gè)人的進(jìn)步速度。這篇文章會(huì)很有用 https://www.edglossary.org/growth-mindset/
還有一些朋友喜歡問下面這些問題
有什么我首先應(yīng)該學(xué)習(xí)的嗎
編程的前置條件很少,唯一的先決條件是
你知道如何打字
你擁有一臺電腦,并且你的電腦能上網(wǎng)
你知道如何獨(dú)立搜索答案
OK 就這些,有了上面這幾點(diǎn)你就可以直接編程,如果你知道一些數(shù)學(xué)知識,最多不用超過基礎(chǔ)代數(shù);并且你有基本的英語功底,那當(dāng)然是錦上添花的事情。
如果你想獲得大學(xué)的正式學(xué)位,以上所有這些都是差不多的。大多數(shù)大學(xué)和學(xué)院都希望入學(xué)的學(xué)生對計(jì)算機(jī)科學(xué)和編程一無所知,并且會(huì)從頭開始教你(盡管在某些情況下,如果你通過測試或證明有足夠的先驗(yàn)技能,則可以跳過一兩個(gè)入門課程)。如果你是高中或更早的學(xué)生,并且想在大學(xué)學(xué)習(xí)計(jì)算機(jī)科學(xué),那么最好提前開始學(xué)習(xí)以取得良好的開端。
我必須精通數(shù)學(xué)嗎
不一定,編程和計(jì)算機(jī)科學(xué)是一個(gè)廣闊的領(lǐng)域,你是否需要精通數(shù)學(xué)取決于你選擇專門研究的學(xué)科。
例如,某些編程學(xué)科確實(shí)需要很強(qiáng)的數(shù)學(xué)技能。2D 和 3D 戲?qū)㈩l繁使用向量,矩陣和線性代數(shù);數(shù)據(jù)分析和機(jī)器學(xué)習(xí)利用了統(tǒng)計(jì)和微積分中的許多概念;如果你對代數(shù)和基本演算有很好的了解,則計(jì)算算法的復(fù)雜性將變得更加容易。
通常,主題越高級和復(fù)雜,就越有可能需要扎實(shí)的數(shù)學(xué)基礎(chǔ)。如果你的目標(biāo)是能夠解決這些類型的復(fù)雜問題,那么擁有良好的基礎(chǔ)將是無價(jià)的。
但是,正如計(jì)算機(jī)科學(xué)和編程的許多方面都不需要對數(shù)學(xué)有深入的了解。你真正*需要知道的唯一事情是如何加,減,乘和除,也許還有一些基本的代數(shù)。許多程序員在整個(gè)職業(yè)生涯中幾乎不需要做任何數(shù)學(xué)運(yùn)算。
特別是,許多面向產(chǎn)品的角色(例如,Web 開發(fā),移動(dòng)開發(fā))只需要很少的數(shù)學(xué)知識。在這些子學(xué)科中,最重要的是你編寫健壯和可維護(hù)的代碼的能力,以及找出如何構(gòu)建對用戶有價(jià)值的東西的能力。
無論如何,如果你不太擅長數(shù)學(xué),那么你絕對可以學(xué)習(xí)和提高!畢竟,你可能也不是很擅長編程,但是你正在學(xué)習(xí)編碼。
確切地說,CS 學(xué)位在數(shù)學(xué)上的差異會(huì)因?qū)W校而異。一些學(xué)校過分強(qiáng)調(diào)涵蓋理論,而另一些學(xué)校則不再強(qiáng)調(diào)兩者,而只注重應(yīng)用。(有些學(xué)校同時(shí)強(qiáng)調(diào)兩者)。如果你想了解更多信息,則應(yīng)直接調(diào)查你有興趣參加的任何學(xué)院或大學(xué)的學(xué)位要求和結(jié)構(gòu)。
總而言之,如果你想成為一名成功的開發(fā)人員,則不一定需要精通數(shù)學(xué)。如果你想成為計(jì)算機(jī)科學(xué)家,你最終將學(xué)習(xí)大量的數(shù)學(xué)。如果你想解決更棘手的問題/在某些領(lǐng)域內(nèi),那么數(shù)學(xué)可以是一個(gè)很有用的工具。
編程難嗎
編程也像大多數(shù)技能一樣,學(xué)習(xí)基礎(chǔ)知識并應(yīng)用它們相對容易。但是如果你想成為一名競爭性的保齡球手,你將需要花費(fèi)數(shù)年時(shí)間來掌握這項(xiàng)技能,編碼也是如此:你將需要花費(fèi)很多時(shí)間來弄清楚為什么即使你已經(jīng)檢查了三遍,這個(gè)愚蠢的程序仍然無法運(yùn)行。。你將需要閱讀書籍,坐下來上課,并與人們討論解決辦法。
這就是上手非常容易,但是鉆研一個(gè)領(lǐng)域,學(xué)的越來越深之后會(huì)非常難。
初學(xué)者在問題和練習(xí)上遇到麻煩是正常的嗎
我不想給你顯而易見的答案。
初學(xué)者幾次從自行車上摔下來是正常的嗎?學(xué)習(xí)游泳時(shí),初學(xué)者沉沒幾次是正常的嗎?對于初學(xué)者來說,在學(xué)習(xí)樂器時(shí)遺漏音符或演奏錯(cuò)誤的音符是正常的嗎?在健身房鍛煉時(shí),初學(xué)者想要練胸卻練的是三頭是正常的嗎?
絕對沒錯(cuò)!
失敗和煎熬是學(xué)習(xí)過程中非常重要和自然的部分。每個(gè)初學(xué)者都會(huì)經(jīng)歷失敗和煎熬。因此,您不要灰心,而應(yīng)該擁抱讓你煎熬的事情:奮斗是你正在挑戰(zhàn)自己的標(biāo)志。使用它作為指南,可以幫助你弄清楚下一步需要閱讀和學(xué)習(xí)的材料,或者應(yīng)該問什么問題。
甚至專家在需要學(xué)習(xí)新東西時(shí)也會(huì)失敗和掙扎(盡管他們往往更善于恢復(fù)/利用失敗作為幫助他們加快學(xué)習(xí)速度的一種方式)。
事實(shí)上,如果你沒有經(jīng)歷煎熬,那么可以表明你肯定在做錯(cuò)事。如果一切都很簡單,那就意味著
你不是在挑戰(zhàn)自己
你不是在強(qiáng)迫自己學(xué)習(xí)真正的新東西
你并不會(huì)強(qiáng)迫自己通過嘗試應(yīng)用它來真正確保你了解它
這類似于鍛煉。如果你在鍛煉后不感到身體疲勞,那么你真的得到鍛煉了嗎?同樣,如果你在完成一些編碼挑戰(zhàn)后沒有精神疲倦或精神上的挑戰(zhàn),那么你真的學(xué)到了什么嗎?
有關(guān)學(xué)習(xí)的問題
我剛剛開始學(xué)習(xí)語言 X,是否應(yīng)該開始學(xué)習(xí)語言 Y
尤其是當(dāng)你開始學(xué)習(xí)編程時(shí),最好學(xué)習(xí)一種語言并堅(jiān)持使用一段時(shí)間,即使特定的問題使用了你尚不知道的特定語言。一旦了解了基礎(chǔ)知識(流控制,錯(cuò)誤處理,I / O,算法的實(shí)現(xiàn),數(shù)據(jù)結(jié)構(gòu)等),你就可以開始考慮使用不同的語言了。
我是否應(yīng)該一次學(xué)習(xí)一種以上的編程語言
除非你有充分的理由,否則大多數(shù)初學(xué)者應(yīng)該只使用一種語言至少幾個(gè)月。由于以下幾個(gè)原因,這是一種更有效的學(xué)習(xí)方法:
大多數(shù)語言的基礎(chǔ)知識都非常相似。例如,大多數(shù)語言以幾乎相同的方式處理 if 語句。花時(shí)間學(xué)習(xí)兩種基本的語法不一定是一種好的習(xí)慣,并且可能會(huì)使初學(xué)者感到困惑。
學(xué)習(xí)如何編程的最困難部分不是學(xué)習(xí)編程語言的工作方式:而是學(xué)習(xí)如何解決代碼問題。因此,你要想最大化地利用時(shí)間來練習(xí)代碼解決問題,而不是花費(fèi)更多的時(shí)間來學(xué)習(xí)特定于語言的細(xì)節(jié)/必須浪費(fèi)腦力來跟蹤語言之間的差異。
一旦你精通第一門語言并具有很強(qiáng)的解決問題的能力,選擇第二種語言就容易得多。
有一些例外情況,你可以直接學(xué)習(xí)第一語言和第二語言
第二種語言不是編程語言。例如,最好與編程語言(例如 C,C ++,C#,Java,JavaScript,Python,Ruby)一起學(xué)習(xí)標(biāo)記語言(例如 HTML 或 CSS )。
對于你感興趣的各種項(xiàng)目都是必要的。保持自己繼續(xù)學(xué)習(xí)的動(dòng)力很重要,如果那意味著一次學(xué)習(xí)兩種編程語言,那就這樣吧。
如果你有專門的老師或指導(dǎo)者來指導(dǎo)你。稱職的老師和導(dǎo)師可以極大地簡化你的學(xué)習(xí)過程,這將足以彌補(bǔ)效率低下的問題。
如果你不認(rèn)為自己是初學(xué)者,并且對使用編程語言來完成中等復(fù)雜的項(xiàng)目感到滿意,那么嘗試一次學(xué)習(xí)多種語言當(dāng)然是不錯(cuò)的選擇。在這一點(diǎn)上,你應(yīng)該對編程有足夠的了解,以便以更快的速度開始學(xué)習(xí)新語言,并且應(yīng)該對自己一次學(xué)習(xí)多少有一個(gè)很好的認(rèn)識。
如何獲得/保持學(xué)習(xí)編程的動(dòng)力
這個(gè)問題最好看看其他人是怎樣做的
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
我如何開始制作視頻游戲
現(xiàn)代的視頻游戲是使用游戲引擎制作的 https://en.wikipedia.org/wiki/Game_engine:比如處理諸如圖形,聲音,物理和網(wǎng)絡(luò)等復(fù)雜任務(wù)的軟件庫 https://www.reddit.com/r/gamedev/wiki/engine_faq,但是強(qiáng)烈建議初學(xué)者使用以下引擎,因?yàn)樗鼈兛梢宰杂砷_發(fā),并且具有學(xué)習(xí)的最佳文檔:
Unity(C#):適用于 2D 和 3D 移動(dòng),桌面,瀏覽器/在線和控制臺游戲
Construct2(JavaScript):適用于 2D 移動(dòng)版,臺式機(jī),瀏覽器/在線
Pygame(Python):2D 桌面游戲的引擎
L?VE(LUA):適用于 2D 桌面游戲
永遠(yuǎn)記住你的目標(biāo)是開發(fā)游戲,而不是開發(fā)游戲引擎。
引擎可以幫助你開始使用游戲的圖形和用戶控件,但是你仍然需要徹底學(xué)習(xí)編程語言來編寫游戲邏輯 ,因此,請選擇我上面給你推薦的圖書或者在線資源。
最重要的是:從簡單開始。您可能會(huì)想直接潛入水中并立即創(chuàng)建自己的夢想游戲,但請記住,爬山的唯一方法是采取許多小步驟 https://www.reddit.com/r/gamedev/comments/stg2o/how_i_went_from_knowing_nothing_about_programming/ ,以下是按難度升序列出的簡單練習(xí)游戲的列表:
猜數(shù)字游戲 https://www.funbrain.com/games/guess-the-number
二十一點(diǎn) 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 規(guī)則 https://en.wikipedia.org/wiki/Hunt_the_Wumpus
選擇自己選擇的冒險(xiǎn)或 Zork https://en.wikipedia.org/wiki/Zork 克隆
Pong,Tetris或 Minsweeper 克隆
水平/垂直滾動(dòng)空間射擊游戲
簡單的《毀滅戰(zhàn)士》,《馬里奧》或《塞爾達(dá)傳說》
如何開始制作網(wǎng)站/制作 Web 應(yīng)用程序/進(jìn)行網(wǎng)站開發(fā)
了解 Web 開發(fā)的方法有很多,但是通常你需要掌握的核心技能通常分為前端技能(在用戶的 Web 瀏覽器上運(yùn)行的代碼)和后端技能(在服務(wù)器上運(yùn)行的代碼)。
通常,大多數(shù)人會(huì)建議你先學(xué)習(xí) HTML,CSS 和 Javascript(按此順序),這是在每個(gè) Web 瀏覽器上運(yùn)行并組成每個(gè)網(wǎng)站的三種核心語言。
你可以在 https://www.reddit.com/r/webdev/wiki/faq 上找到更多信息。這是面向初學(xué)者的另一套在線課程、教程和資源列表 https://github.com/Michael0x2a/curated-programming-resources/blob/master/resources.md#html-css-and-javascript。
如何開始制作移動(dòng)應(yīng)用程序/ Android 應(yīng)用程序/ iOS 應(yīng)用程序/ Windows Phone應(yīng)用程序
你將需要為每種類型的智能手機(jī)學(xué)習(xí)不同的編程語言。
Android 應(yīng)用主要使用 Kotlin 或 Java 進(jìn)行編碼-有關(guān)更多信息,可以查閱 https://www.reddit.com/r/androiddev/wiki/index
iOS 應(yīng)用程序使用 Objective-C 或 Swift 進(jìn)行編碼-有關(guān)更多信息,可以查閱 https://www.reddit.com/r/iOSProgramming/ 或者 https://github.com/thomasdenney/FAQ
Windows Phone 應(yīng)用程序使用C#,Visual Basic 或Javascript 進(jìn)行編碼-有關(guān)更多信息,可以查閱 https://www.reddit.com/r/WPDev/
你還可以使用Phonegap和Titanium等技術(shù)制作可以在所有三款主要智能手機(jī)上運(yùn)行的應(yīng)用程序-它們使你可以使用 HTML,CSS 和 Javascript 編寫應(yīng)用程序一次,并可以在任何平臺上運(yùn)行該應(yīng)用程序。
有關(guān)更多信息,可以查閱移動(dòng)應(yīng)用程序開發(fā)資源列表 https://www.reddit.com/r/learnprogramming/wiki/online#wiki_mobile_app_development
但是,請記住,上述資源中的許多都是針對已經(jīng)具有一些編程經(jīng)驗(yàn)的人。如果你以前從未編程過,則可能要開始學(xué)習(xí)一種語言,該語言擁有更多的資源供初學(xué)者使用。一旦獲得了一定的經(jīng)驗(yàn),并了解了編程背后的基本概念,你通常會(huì)發(fā)現(xiàn)學(xué)習(xí)一種新語言并開始學(xué)習(xí)移動(dòng)開發(fā)要容易得多。
如何使事情自動(dòng)化
對于 Windows,有兩種專用的編程語言,例如 Autohotkey 和 AutoIt。
另一個(gè)可行的跨平臺替代方法是 Python https://www.python.org/,使用 Python 更容易構(gòu)建自動(dòng)化并完成一些無聊的 working http://automatetheboringstuff.com/
如果要自動(dòng)化 MS-Office,請使用內(nèi)置的編程語言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 涉及什么是"最好的"問題和答案,包括語言工具和主題。
術(shù)語和詞匯
計(jì)算機(jī)科學(xué),計(jì)算機(jī)工程,軟件工程,編程和編碼之間有什么區(qū)別
計(jì)算機(jī)科學(xué)(CS),計(jì)算機(jī)工程(CE),軟件工程(SE),編程和編碼都是相互關(guān)聯(lián)的術(shù)語,但彼此之間有微妙的區(qū)別,這通常使初學(xué)者很難區(qū)分它們。
你應(yīng)該做的第一個(gè)區(qū)分是區(qū)分CS / CE / SE和編程/編碼。CS,CE 和 SE 都是研究領(lǐng)域,說“我正在學(xué)習(xí)計(jì)算機(jī)科學(xué)”將類似于說“我正在學(xué)習(xí)化學(xué)”或“我正在學(xué)習(xí)文學(xué)”。相反,編程和編碼是活動(dòng)-它們是您要做的事情。要使用隱喻,學(xué)習(xí) CS / CE / SE 就像學(xué)習(xí)音樂理論,而學(xué)習(xí)編程/編碼就像學(xué)習(xí)如何彈奏特定樂器。
從理論上講,你可以學(xué)習(xí)一個(gè)而不能學(xué)習(xí)另一個(gè),但是如果你同時(shí)學(xué)習(xí)兩者,那么你的經(jīng)驗(yàn)將更加豐富。
另一個(gè)區(qū)別是,雖然 CS / CE / SE 是你可以學(xué)習(xí)的東西,但是學(xué)習(xí)編程只是通過實(shí)踐才能實(shí)現(xiàn)的。實(shí)際上,大多數(shù)大學(xué)和學(xué)校將要做的是正式教授一種語言以教授編碼的基礎(chǔ)知識,然后將重點(diǎn)放在 CS,CE 和 SE 的教學(xué)上,讓學(xué)生學(xué)習(xí)如何通過練習(xí)和完成家庭作業(yè)來編程。
CS vs CE vs SE
你應(yīng)該在 CS,CE 和 SE 之間進(jìn)行下一個(gè)區(qū)分。簡而言之,盡管有很多重疊之處,但“計(jì)算機(jī)科學(xué)”與計(jì)算機(jī)或科學(xué)無關(guān),而更多地是研究可計(jì)算性概念的應(yīng)用數(shù)學(xué)領(lǐng)域。計(jì)算機(jī)工程與 CS 類似,但傾向于將重點(diǎn)更多地放在低級硬件上,就像計(jì)算機(jī)科學(xué)和電氣工程之間的交叉。最后,軟件工程更多地是關(guān)于如何構(gòu)建大型而復(fù)雜的程序,同時(shí)防止因?yàn)橐恍┮蛩貙?dǎo)致軟件崩潰,軟件工程理論較少。
關(guān)于這三個(gè)概念的論述,你可以在 https://www.reddit.com/r/learnprogramming/comments/2k569h/eli5_computer_science_vs_software_engineering_vs/ 找到更詳細(xì)的。
編程與編碼
最后,編程 vs 編碼,這兩個(gè)術(shù)語之間的差異很小-許多人可以互換使用它們。通常,術(shù)語“編程”似乎比“編碼”具有更積極的含義。如果你說“我是程序員”,則表示你具有一定的專業(yè)水平-這表示你不僅可以編寫代碼,而且對基本原理和理論有扎實(shí)的了解,知道如何與客戶溝通和工作與其他人等。
相反,如果你說“我是編碼員”,則通常意味著你的注意力僅集中在編寫代碼上,而其他方面則更少。
但是,這里的不同含義仍然很小 - 在絕大多數(shù)情況下,您可以互換使用這兩個(gè)術(shù)語。
C,C ++,Objective-C 和 C#有什么區(qū)別
C 語言是這些語言中最小和最早的一種。它最初是作為 Unix 操作系統(tǒng)的系統(tǒng)編程語言創(chuàng)建的,如今仍廣泛用于應(yīng)用程序編程。
C++ 是一種非常流行的通用編程語言,最初是基于 C 的。通過一些調(diào)整,大多數(shù) C 代碼都可以編譯為 C++ 代碼。但是 C++ 添加了大量語言功能,這些語言功能與使用 C 的方式相比,大大改變了使用該語言的方式。用 C++ 編寫 C 風(fēng)格的代碼通常被認(rèn)為是不好的做法。
Objective-C 是 C 的嚴(yán)格超集,這意味著所有有效的 C 代碼也是有效的 Objective-C 代碼。Objective-C 的普及程度不及 C 或 C++,它目前主要用于 Apple OS X 和 iOS 平臺的開發(fā)中。
從任何技術(shù)意義上講,C# 都不基于C。C# 是 Microsoft 設(shè)計(jì)的通用語言,在許多方面與 Java 相似。它可以編譯為在虛擬機(jī)中運(yùn)行的中間形式,這與之前的三種語言都被編譯為本地機(jī)器代碼不同。盡管 C# 借鑒了 C 和 C++ 的語法元素(就像 Java一樣),但它與這些語言沒有真正的技術(shù)關(guān)系。
Java 和 JavaScript 有什么區(qū)別
很多人經(jīng)常會(huì)把 Java 和 JavaScript 搞混,其實(shí)這兩者語言除了叫法有點(diǎn)關(guān)系外, Java 和 JavaScript 在任何技術(shù)意義上都不相關(guān)。它們共享一些語法,因?yàn)樗鼈兌际?C 的影響,僅此而已。Wikipedia 很好地解釋了為什么存在名稱相似性:https://en.wikipedia.org/wiki/JavaScript#JavaScript_and_Java
工具和版本控制
什么是源/版本/版本控制?我應(yīng)該使用它嗎
軟件開發(fā)是一項(xiàng)協(xié)作的技能。版本控制系統(tǒng)(VCS)是一種可跟蹤代碼更改的工具,可讓你執(zhí)行諸如撤消編碼錯(cuò)誤之類的方便工作,并查看代碼隨時(shí)間的變化。現(xiàn)代分布式版本控制系統(tǒng)(DVCS)還使您可以輕松地與其他程序員使用同一代碼。應(yīng)該說你絕對應(yīng)該使用版本控制系統(tǒng)!
目前最受歡迎的應(yīng)該就是 git 了。
你可以通過閱讀 git 入門 https://cgordini.blogspot.com/2013/05/git-101.html 以及免費(fèi)的 gitbok https://git-scm.com/book/en/v2 來使用 git。
當(dāng)然廖雪峰的 git 講解的也非常好 https://www.liaoxuefeng.com/wiki/896043488029600
什么是 IDE,我應(yīng)該使用嗎
IDE 是一個(gè)集成開發(fā)環(huán)境,它是一個(gè) GUI 應(yīng)用程序,通常包括帶有代碼完成和語法突出顯示功能的文本編輯器,一些項(xiàng)目管理功能,一個(gè)編譯器或解釋器(可配置或包含)以及許多其他用于編寫的精美功能。運(yùn)行和測試代碼更加容易。使用 IDE 的替代方法是自動(dòng)自行執(zhí)行 IDE 為你執(zhí)行的操作。此方法要求程序員使用單獨(dú)的工具,并且對開發(fā)過程有更深入的了解。
對于初學(xué)者來說,這兩種開發(fā)方法都有爭論:
使用 IDE 意味著你不必對開發(fā)過程有太多了解,不必使用命令行界面,也不必配置這些工具即可正常工作。IDE 提供了一種快速的方法來建立代碼,甚至可以為你編寫一些代碼!
另一方面,從命令行工作意味著您不必適應(yīng) IDE 設(shè)計(jì)人員的思維方式,并且由于隱藏了更少的開發(fā)過程,因此你可以更好地了解軟件構(gòu)建過程。
使用 IDE 而不是使用單獨(dú)的工具通常取決于個(gè)人喜好(除非你的雇主/學(xué)校當(dāng)然需要使用特定的開發(fā)環(huán)境)。如果您以前從未使用過 IDE,請下載一種流行的 IDE 并進(jìn)行修改。而且,如果您從未使用過命令行中的 vim 或編譯的代碼,請嘗試一下,看看你是否喜歡它。
常見的 IDE 和輕量級文本編輯器都可以在 https://www.reddit.com/r/learnprogramming/wiki/tools 中找到。
電腦和操作系統(tǒng)
我應(yīng)該使用哪種操作系統(tǒng)
許多初學(xué)者經(jīng)常遇到的一個(gè)問題是,他們應(yīng)該使用哪種操作系統(tǒng) - Windows,Mac 或 Linux。
坦白地說,這無關(guān)緊要 - 在當(dāng)今時(shí)代,你可以使用的工具的質(zhì)量和成熟度在所有平臺上都將大致相同,并且任何完善的編程語言都將在所有操作系統(tǒng)上使用。
話雖這么說,你最終應(yīng)該對這三種操作系統(tǒng)有一定程度的了解,以免遇到新的操作系統(tǒng)不知所錯(cuò)。
這個(gè)規(guī)則有兩個(gè)例外
如果要在 Windows 平臺上開發(fā),請選擇 Windows 計(jì)算機(jī)
如果要在 Mac 或者iOS 平臺上開發(fā),請獲取 Mac 計(jì)算機(jī)
某些 Microsoft 和 .NET 工具仍主要針對 Windows。
雖然可以在任何計(jì)算機(jī)上開發(fā) Mac 和 iOS 應(yīng)用程序,但必須在 Mac 機(jī)器上使用 Xcode 來編譯應(yīng)用程序并將其提交到應(yīng)用程序商店。
最后,還值得注意的是,如果我有一臺 Windows 計(jì)算機(jī),那么設(shè)置一個(gè)我可以使用的 Linux 虛擬機(jī)將非常容易,而不必?fù)?dān)心它會(huì)干擾我現(xiàn)有的 Windows 操作系統(tǒng)。
我應(yīng)該選擇什么樣的電腦/筆記本電腦
同樣,這并不重要 - 任何中檔筆記本電腦或計(jì)算機(jī)都可以。如果你已經(jīng)擁有一臺計(jì)算機(jī)或筆記本電腦,則應(yīng)該使用它而不是購買新計(jì)算機(jī)。基本上,你可以學(xué)習(xí)編程,并且可以在現(xiàn)有的幾乎所有計(jì)算機(jī)上編寫復(fù)雜而有趣的程序。
但是,如果你碰巧需要購買一臺新計(jì)算機(jī)并想將其用于編程,則應(yīng)優(yōu)先選擇 CPU,RAM 和硬盤驅(qū)動(dòng)器。如果可能,請嘗試獲得具有以下規(guī)格或更高規(guī)格的計(jì)算機(jī):
英特爾 i5 CPU(3.0+ GHz)+
4 GB以上的 RAM
200 + GB硬盤
(可選)固態(tài)驅(qū)動(dòng)器
如果你可以升級,則優(yōu)先考慮獲得更好的 CPU 和更多的 RAM 而不是獲得更大的硬盤驅(qū)動(dòng)器 - 更加強(qiáng)大的 CPU 總是有幫助的。
如果你想購買臺式機(jī),那么這些規(guī)格實(shí)際上是唯一相關(guān)的規(guī)格。如果你希望具有便攜性,則應(yīng)購買一臺筆記本電腦,并確保其配備足夠大的屏幕和鍵盤,以方便進(jìn)行編程。但是,便攜式計(jì)算機(jī)的可用性和可移植性之間達(dá)到了很好的平衡:
屏幕越大,電池壽命越短(但你愿意設(shè)置屏幕亮度的調(diào)光器,電池壽命越長)
屏幕越小,可以容納的空間就越少,并且必須在 Windows /桌面之間進(jìn)行更多的翻轉(zhuǎn)。
理想情況下,你應(yīng)該能夠舒適的使用兩個(gè)窗口
筆記本電腦越大,重量越重,隨身攜帶的重量也越重
還還需問你自己,你打算如何使用筆記本電腦。你是否打算整天坐在辦公桌上,還是將其隨身攜帶在校園中。
如果你對機(jī)器學(xué)習(xí),自然語言處理或圖形(包括游戲開發(fā))特別感興趣,則可能要考慮購買配備 GPU 的機(jī)器。盡管不需要 GPU 來執(zhí)行任何這些操作,但是你通常可以通過仔細(xì)編寫代碼來加快代碼的速度,從而盡可能地利用GPU。
如果您對機(jī)器學(xué)習(xí)或 NLP 感興趣,你可以通過相對便宜的價(jià)格通過 Amazon Web Services(AWS)或 Google Compute Engine(GCE)等服務(wù)在云中租用帶有 GPU 的機(jī)器。
職業(yè)和工作
程序員賺錢嗎
這個(gè)因人而異,現(xiàn)在 360 行行行轉(zhuǎn)程序員,導(dǎo)致這個(gè)行業(yè)的門檻越來越低,所以一般程序員大家的薪資水平差不多,互聯(lián)網(wǎng)的薪資相比傳統(tǒng)行業(yè)會(huì)高不少,但是互聯(lián)網(wǎng)對于程序員的要求也相對較高。
如何進(jìn)入該行業(yè)并獲得入門級工作
前提假設(shè)是你已經(jīng)掌握一門語言并知道如何進(jìn)行編碼,獲得入門級工作主要有兩個(gè)階段
制作出足以使 HR 開始邀請你面試的簡歷
通過面試
這兩個(gè)階段需要一些不同的策略。
階段1:建立引人注目的簡歷
在第 1 階段中,你的目標(biāo)是穩(wěn)步開始向簡歷中添加可幫助你脫穎而出(或至少可以使你與其他正在申請的申請人相媲美的項(xiàng)目)。
為此,一項(xiàng)特別有用的策略是開始構(gòu)建可以向潛在雇主炫耀的項(xiàng)目組合。
獨(dú)立副業(yè)
志愿工作,比如為一些非營利組織建立網(wǎng)站
課堂項(xiàng)目
你在工作中所做的工作,找到了整合編程的方法
研究獨(dú)立的項(xiàng)目,或者你在學(xué)校實(shí)驗(yàn)室中做過的研究
過去的工作或?qū)嵙?xí)項(xiàng)目
擁有強(qiáng)大的項(xiàng)目組合可以使雇主成功地運(yùn)用編程語言,庫和技術(shù)來解決問題,并為他們提供一種更準(zhǔn)確地評估你的技能水平的方法。
一些注意事項(xiàng)
你的項(xiàng)目不一定需要外觀華麗。具有技術(shù)背景的招聘人員會(huì)明白,不是所有的有趣的項(xiàng)目已經(jīng)或需要一個(gè)漂亮的界面。更重要的是你能描述清楚你所做的工作,你所負(fù)責(zé)的事情,從而展現(xiàn)你所做工作的復(fù)雜性
也許主要的例外是,如果你申請的職位需要一些視覺才能。例如,如果你要申請前端 Web 設(shè)計(jì)師角色,那么擁有一些可以顯示出可以打造美觀且可用的網(wǎng)站的項(xiàng)目會(huì)有所幫助。
當(dāng)然,從事項(xiàng)目并不是你唯一可以做的事情。諸如獲得學(xué)位(最好是與計(jì)算機(jī)科學(xué)相關(guān)的學(xué)科)之類的事情也肯定會(huì)有所幫助。
有些人還參加訓(xùn)練營,以部分加快建立相關(guān)簡歷/作品集的過程。只需確保在參加訓(xùn)練營之前先做一下研究:有些很棒,有些甚至是徹頭徹尾的騙局。這個(gè)需要你自己
甄別。
階段 2:通過面試
這個(gè)過程就需要你和面試官真刀真槍的干架了!不過面試主要分為兩種:傳統(tǒng)軟件行業(yè)和互聯(lián)網(wǎng)公司。一般傳統(tǒng)軟件公司或者一些互聯(lián)網(wǎng)公司會(huì)問一些你能不能快速上手解決問題的面試題,而一些頂尖的互聯(lián)網(wǎng)卻喜歡專注于基礎(chǔ)知識和框架的深度使用
你可能會(huì)遇到的一些常見面試原型包括:
給你帶來某種形式的編碼挑戰(zhàn),通常是關(guān)于數(shù)據(jù)結(jié)構(gòu)和算法的挑戰(zhàn),一般俗稱
刷題。你可以在牛客網(wǎng)或者 LeetCode 進(jìn)行刷題。向你詢問與面試的特定職位有關(guān)的問題-例如前端網(wǎng)頁設(shè)計(jì),網(wǎng)絡(luò)安全,中間件原理,JVM 原理,框架深度使用等
要求你嘗試設(shè)計(jì)一些較大項(xiàng)目的體系結(jié)構(gòu)
向你詢問簡歷中列出的項(xiàng)目(有時(shí),通常是有時(shí)深入關(guān)注單個(gè)項(xiàng)目)
只是一般地討論技術(shù)
總結(jié)
這一篇內(nèi)容內(nèi)容我為你介紹了小白新手如何學(xué)習(xí)編程、一步一步到高級程序員會(huì)經(jīng)歷哪些步驟,為你羅列了非常多優(yōu)質(zhì)的編程資源,以及學(xué)習(xí)中國的困惑,如何提高,在最后為你解釋了一些編程中常見的問題,簡歷都需要注意哪些等等。
這篇內(nèi)容相當(dāng)于是一個(gè)使用說明手冊了,你可以按照這個(gè)路線來一步一步規(guī)劃你的編程生涯。最后祝你早日成為大牛(形容這個(gè)程序員的水平非常高)。
完
往期推薦
??
另外,cxuan 肝了六本 PDF,公號回復(fù) cxuan ,領(lǐng)取作者全部 PDF 。

