自學(xué)編程 做游戲,自學(xué)程序員需要多長時間?
首先要承認,就自學(xué)編程需要多長時間這個問題無法泛泛而論,因為就編程語言的選擇來說,不同的語言學(xué)習(xí)時間的差異就不可量計。但就具體分析而言,還是能從不同方面提供一些分析參考。
背景知識出色的邏輯思維能力,以及扎實的理工專業(yè)背景例如數(shù)學(xué)、物理等專業(yè)背景,能為你做一個良好的鋪墊。就答主自身而言,本科是心理學(xué)與建筑的雙學(xué)士背景,針對Python的自學(xué),大約只花了我一個月時間。
領(lǐng)域方向編程有很多領(lǐng)域,比如嵌入式編程、后臺服務(wù)編程、前端編程、驅(qū)動編程等等,很多很多。每個領(lǐng)域都有不同的知識范圍,有的比較小,有的則稍大一下。從學(xué)以致用的根本目的而言,提前明確好自己的應(yīng)用方向,也會對自己的學(xué)習(xí)事半功倍。
語言選擇不同的語言難度千差萬別,就以答主之前提的Python為例,針對沒什么基礎(chǔ)的新手而言,Python是一種友好的語言,就是上手難度較低,同時現(xiàn)在的應(yīng)用面也越來越廣,因此如果你想短時間上手一門就業(yè)面較廣的語言,我建議Python是一個不錯的選擇。
學(xué)習(xí)效率從小到大讀了這么久的書,其實都應(yīng)該明白。如果你想學(xué),認真靜下來幾個小時的自學(xué)效率會比你在課堂呆坐一天都高。而學(xué)習(xí)的道路也不是一帆風(fēng)順的,難免會有各種挫折坎坷,重要的是你自己對于目標(biāo)的追求,持之以恒的堅持。三天打魚兩天曬網(wǎng),如此這般,到頭來你不僅會喪失學(xué)習(xí)的興趣,甚至?xí)ψ约旱哪芰Ξa(chǎn)生質(zhì)疑。切忌半途而廢,三心兩意。
簡單總結(jié)還是以答主自己出發(fā),我是理工科專業(yè)背景,沒有相關(guān)的計算機基礎(chǔ),以一天學(xué)習(xí)四小時計,Python大約花了我一個月左右,C大約花了我四個月,附加的SQL只花了半個月,因為邏輯其實是差不多的,只是語法規(guī)則以及應(yīng)用的區(qū)別。
當(dāng)然了,最為重要的還是要明確自己的努力目標(biāo), 確定具體的領(lǐng)域方向,制定實際的學(xué)習(xí)計劃,再加上持之以恒的耐力決心,才能成功達成所愿。
學(xué)習(xí)什么編程最好?
孩子學(xué)編程,推薦Scratch。
“最適合的”編程語言,真的存在嗎?
其實選擇哪種編程語言不是重點,激發(fā)孩子的學(xué)習(xí)興趣,培養(yǎng)孩子的邏輯思維,掌握編程思想,學(xué)會用編程的方式去發(fā)現(xiàn)問題和解決問題才是重點。
如果孩子能夠熟練掌握編程中變量、條件、循環(huán),還有函數(shù)等基本的編程概念,并以一種語言編程成功,這時再用另一種語言來編程就不難了。
轉(zhuǎn)換編程語言雖然不像打個響指那樣容易,但只要了解了其他語言的語法就能快速上手,因為編程的核心不在于語法,而是解決問題的思路和方法(算法)。
因此,我們推薦零基礎(chǔ)的孩子,先從 Scratch 語言開始學(xué)起。
有的家長不理解,覺得:
“那種拖塊看起來像玩游戲,不如 Python、C++ 這樣的代碼編程語??級,對于孩子太簡單了。””現(xiàn)在是人工智能時代,直接讓孩子從Python學(xué)習(xí),以后前景更好。““讓孩子學(xué)習(xí)C++,以后考個信奧對升學(xué)有幫助!”
其實語言并沒有高級低級之分,只是各自應(yīng)用的場景不同,盲目追求編程語言的復(fù)雜度,是不可取的。
對于一名零基礎(chǔ)的孩子來說,培養(yǎng)編程的興趣很重要,直接上手代碼編程不是不可以,只是這樣的學(xué)習(xí)會讓孩子覺得枯燥,容易打消他們學(xué)習(xí)編程的積極性,甚至產(chǎn)生抵觸。
如果真的想讓孩子學(xué)習(xí)編程,那么他的學(xué)習(xí)路徑應(yīng)該是循序漸進的,孩?剛開始接觸編程時,重要的有 2 點。
?是容易上手,讓孩?能?編程做出東西,體會到編程的樂趣,培養(yǎng)孩子對編程的興趣。?是把精力盡量用在學(xué)習(xí)編程邏輯上,而不是編程語言的語法上。因為編程邏輯,才是編程的核心,真正鍛煉思維的東西,而編程語?只是我們?yōu)榱送瓿赡康氖褂玫?具。
Scratch的 4 個特點,?常好地滿?了這 2 點要求。
(1)Scratch特點1:入門容易
Scratch使?了圖形化的呈現(xiàn),通過拖拽代碼塊進?編程,過程很像搭建“電?積?”,對剛接觸編程的孩?來說,上?容易、門檻低。
Scratch與Python、C++對比
從上?這張圖我們可以看出Scratch更直觀易懂,?Python、C++則需要具備打字能力,和?定的英?基礎(chǔ)。
尤其C++,語法相當(dāng)復(fù)雜,還有很多與編程邏輯?關(guān)的繁瑣細節(jié)。由于C++語法過于復(fù)雜,很多孩子學(xué)C++時理解不了它的語法,導(dǎo)致孩?只能抄代碼,沒有實際獨立創(chuàng)作的能力,最終連邏輯也沒能學(xué)習(xí)到。
這就像我們想教孩子學(xué)騎車,但我們?開始就給了他一輛摩托車,本想為他提供便利,可孩?騎不好摩托,結(jié)果最后連自行車也沒學(xué)會。而如果我們?開始給孩?騎自行車,他是能學(xué)會的,再上手摩托車就容易多了。因此,一開始就把入門門檻抬得太高,導(dǎo)致孩子入不了門,后續(xù)的學(xué)習(xí)就更困難了!
(2)Scratch特點2:及時反饋
孩?使?Scratch時,點擊單個代碼塊,就能看到“移動”、“轉(zhuǎn)向”、“切換造型”等代碼效果;通過?些簡單的操作就能完成?個小故事、節(jié)?賀卡、?游戲?類的作品。
這能讓孩?在剛接觸編程時,就體會到??創(chuàng)造出作品的成就感,獲得精神上的?勵,更容易激起孩子的學(xué)習(xí)興趣,有信心迎接后續(xù)的挑戰(zhàn)。
(3)Scratch特點3:避免了代碼語法錯誤
Python和C++之所以讓?感覺?Scratch難,是因為Python/C++的代碼語法更繁瑣,在完成?個相同邏輯難度的作品時,Python/C++?起Scratch,需要花費更多的時間在解決語法問題上。
過早學(xué)習(xí)代碼語言無形中浪費了很多時間,俗話說:“思考5分鐘,找茬2小時。”?如,把英?的分號寫成了中?的分號、把雙引號?成了單引號、少寫了?半括號等都會造成程序報錯,無法正常運行。
而這些繁瑣的語法問題,對孩?理解編程核?邏輯并沒有任何幫助,卻總是需要孩?花費時間去解決,就像是我們在?路時,總得花很多時間去倒掉鞋??的???,?因此忽略了沿途的風(fēng)景。
?Scratch是?拖拽代碼塊的?式來編程的,從根本上就不需要孩?去關(guān)注拼寫錯誤、標(biāo)點錯誤等?意義的語法問題,極大減輕了孩子對編程的挫敗感,而讓他們留有更多時間全??專注于理解編程邏輯上,這才是對鍛煉思維真正有?的部分。
另外,由于Scratch把編程的常規(guī)語句都做成了代碼塊,孩?只需要根據(jù)??梳理好的編程邏輯挑選符合要求的代碼塊拖拽就能使?,不???一個字一個字地敲出來,大大提高了孩子的學(xué)習(xí)效率。
(4)Scratch特點4:高上限
有的家長看到Scratch語法簡單,就誤以為Scratch只能做出簡單的作品。其實編程的核?是邏輯和算法,編程語?只是?具,作品的復(fù)雜度是由編程邏輯決定的,?不是由?具決定的。
現(xiàn)在很多熱門軟件和游戲,雖然它們本身不是?Scratch開發(fā)的,但同樣可以?Scratch還原出來,實現(xiàn)相同的效果。
另外,Scratch對于創(chuàng)新的鼓勵以及在圖像創(chuàng)作、聲音編輯和項目混制方面的功能優(yōu)化,讓它在成為各年齡段孩子首選編程語言上變得理所當(dāng)然。
較之被稱為“編程語言”,它更希望被定位為一個繪圖工具,一個動畫制作工具,或是一個故事與游戲創(chuàng)作工具。
學(xué)習(xí)了Scratch孩子,更愿意去嘗試代碼編程,因為他們覺得那意味著長大,只有“真正的編程”才會被行業(yè)采納。
至于Python 和 Scratch 哪一個更適合小孩子學(xué)習(xí)。我的回答是:低年級的孩子建議學(xué) Scratch,初中左右可以考慮直接學(xué) Python。因為 Scratch 的圖形化更能激發(fā)學(xué)習(xí)的興趣,而 Python 的好處在于,以后可以拿來真刀真槍的做項目,甚至養(yǎng)家糊口。
但其實在任何年齡,如果你不是那么急切地想掌握一門實用語言,Scratch 都是值得花時間嘗試的。雖然它的初衷是給小孩子用的,但也完全適合一個對計算機毫無基礎(chǔ)的成人用來了解編程思想和開發(fā)流程。
在 reddit 有這樣一個帖子:
大意就是:一個網(wǎng)友說,如果你完全沒有編程經(jīng)驗,強烈推薦從 Scratch 開始入手。
他自己就通過學(xué)習(xí)一陣子之后,很快做出了一個自己的游戲,這給他繼續(xù)學(xué)習(xí)編程帶來了很大的動力。
另一個網(wǎng)友評論說,有不少會一點編程的人會瞧不起 Scratch,覺得它算不上一門語言。
但事實上,很多編程初學(xué)者因為搞不清變量、循環(huán)、函數(shù)等概念而放棄。
而真正在編程時,我們 90% 是在處理邏輯和解決問題,而不是去生搬概念。
如果從邏輯出發(fā)來教授編程,那么可能對于學(xué)習(xí)者來說是更合適的。如果你理解了程序背后的邏輯,之后再學(xué)習(xí)其他語言也是很容易的。
自學(xué)編程學(xué)哪些語言比較好?
初學(xué)者如何選擇編程語言和開發(fā)方向全世界的編程語言有 600 多種,TIOBE 統(tǒng)計的有 100 種,參與排名的有 50 種,前 20 種是常用的,它們目前正在流行,或者曾經(jīng)非常流行。
圖1:2021 年 11 月份編程語言排名 TOP 20要想選擇編程語言,首先得確定開發(fā)方向,比如網(wǎng)站開發(fā)、APP 開發(fā)、機器學(xué)習(xí)、大數(shù)據(jù)、嵌入式、GUI 軟件、算法設(shè)計等。編程語言不是萬能的,一門編程語言只能勝任一個或者幾個開發(fā)方向,一個開發(fā)方向往往也有多種編程語言可以選擇。我們首先談一下開發(fā)方向的選擇,然后再說編程語言的選擇。1. 選擇開發(fā)方向
選擇大于努力,只有切入一個適合自己的開發(fā)方向,才能持續(xù)進步。關(guān)于開發(fā)方向,我有以下兩個選擇標(biāo)準(zhǔn)。(1) 興趣學(xué)習(xí)編程是一個非常枯燥的過程,內(nèi)容多,時間長,成本高,就算參加全職培訓(xùn)班,至少也得學(xué)習(xí)半年才能入門,做出一點小玩意來。要想成為別人眼中的大神,或者編程專家,沒有三五年的功夫肯定是不行的。學(xué)習(xí)編程的過程是比較艱苦的,沒有興趣很難硬抗下來,即使報名了培訓(xùn)班也學(xué)不會,所以,我們首先要選擇自己感興趣的一個開發(fā)方向,這樣不但能快速學(xué)習(xí),以后還能持續(xù)進步。比如我就對網(wǎng)站感興趣,高中階段我就想開發(fā)一個屬于自己的網(wǎng)站,感覺非常炫酷,所以大學(xué)我毫不猶豫地選擇了網(wǎng)站開發(fā)這個方向。我在選擇開發(fā)方向的時候沒有任何糾結(jié),我知道自己必須選擇網(wǎng)站開發(fā)。興趣是最好的老師,沒有之一。遺憾的是,對某個事物有強烈興趣的人很少,大部分人都是被動選擇。此處我說的興趣,是指別人無法撼動的熱愛,是工作之余讓你放松的事情。如果你只是有過某種想法,別人告訴你這個想法不靠譜,你就放棄了,這頂多是一時的雞血。(2) 未來發(fā)展
如果你學(xué)習(xí)編程不是因為興趣,只是想選擇一份職業(yè),那我希望你切入一個有發(fā)展?jié)摿Φ拈_發(fā)方向。每個產(chǎn)業(yè)的發(fā)展規(guī)律都是類似的,都要經(jīng)歷以下幾個周期:拓荒期 -> 發(fā)展期 -> 成熟期 -> 衰落期我希望你在發(fā)展期切入一個產(chǎn)業(yè),然后持續(xù)努力和積累,讓產(chǎn)業(yè)的發(fā)展帶著你起飛。站在風(fēng)口上,豬都能飛起來。你應(yīng)該聽說過很多沒啥背景的人,突然之間一夜暴富了,惹得別人羨慕嫉妒恨吧,這些人,大都是在一個爆發(fā)式增長的行業(yè)里面翻了身,比如十年前的包工頭、持續(xù)火熱的程序員。注意,最好不要在拓荒期切入一個產(chǎn)業(yè),你很有可能堅持不到曙光到來之時就已經(jīng)轉(zhuǎn)行或者年老色衰了,成為了別人談笑中的“烈士”。對于軟件開發(fā)產(chǎn)業(yè)來說,GUI 桌面軟件已經(jīng)是過去式了,APP 和網(wǎng)站也已經(jīng)進入成熟期,我推薦機器學(xué)習(xí)(人工智能)和大數(shù)據(jù)兩個方向,它們都是國家重點扶植的細分產(chǎn)業(yè),而且寫入了十四五規(guī)劃,未來至少還有十年的發(fā)展時間。機器學(xué)習(xí)需要大數(shù)據(jù)提供原料,反過來,大數(shù)據(jù)分析也依賴機器學(xué)習(xí)模型,它們是相輔相成的,很難隔離開。另外,選擇產(chǎn)業(yè)方向也是有風(fēng)險的,也是一次命運賭博,誰也不能確定這個產(chǎn)業(yè)能不能發(fā)展起來,就算發(fā)展起來,又需要多少年呢?又有多大的產(chǎn)值呢?比如人們一直談?wù)摰娜斯ぶ悄芤呀?jīng)發(fā)展了幾十年了,到現(xiàn)在還是“人工智障”,底層理論并沒有本質(zhì)的突破。雖然國家把人工智能選為重點產(chǎn)業(yè),注入了海量資金和人才,各家大公司也跟風(fēng)進入,但是底層理論如果不突破,十年以后沒準(zhǔn)還是智障,只不過應(yīng)用場景多了。誰也不能穿越到未來,誰也不能告訴你確定的答案。就算一個國家,也會點錯科技樹,比如:美國認為自己無人能敵,發(fā)展了朱姆沃爾特級驅(qū)逐艦,打算近岸攻擊,想不到中國突然崛起,海軍開始下餃子,美國不得不轉(zhuǎn)為遠洋作戰(zhàn),廢掉朱姆沃爾特級。日本押寶混動汽車和氫能汽車,積累了大量專利,但是中國卻切換了賽道,傾力發(fā)展純電動汽車,并且積累了一定的優(yōu)勢,日本想逆襲非常困難,汽車產(chǎn)業(yè)岌岌可危。在產(chǎn)業(yè)發(fā)展過程中,會有很多不確定因素,我們只能盡力選擇一個有前景的產(chǎn)業(yè)。其實吧,很多“暴發(fā)戶”也不懂得什么產(chǎn)業(yè)發(fā)展規(guī)律,他們只是陰差陽錯地進入了某個產(chǎn)業(yè),恰好趕上產(chǎn)業(yè)崛起而已。我自己當(dāng)初也不懂互聯(lián)網(wǎng),只是對網(wǎng)站感興趣,就進入了互聯(lián)網(wǎng)產(chǎn)業(yè),抓住了 PC 互聯(lián)網(wǎng)的尾巴,所有才比其他行業(yè)的同學(xué)混得好點。也就是說,我混的好,不是因為我足夠優(yōu)秀,而是因為我進入了互聯(lián)網(wǎng)產(chǎn)業(yè),搭上了產(chǎn)業(yè)的便車,我只是比我的同學(xué)更加幸運而已。2. 選擇編程語言
確定了開發(fā)方向,接下來就可以選擇編程語言了。有的開發(fā)方向比較純粹,只有一兩種編程語言,有的開發(fā)方向魚龍混雜,有五六種編程語言,選擇編程語言也是一個讓人糾結(jié)的過程。以下是部分開發(fā)方向可以選擇的編程語言:1) GUI 桌面軟件
能開發(fā) GUI 軟件的編程語言眾多,既有傳統(tǒng)的 C++、C#、VB、Delphi、Java,也有新晉選手 Python、Node.js(JavaScript),還有小眾的易語言(中文編程語言)。如果你只是想玩玩,那么你隨意,適合自己的就行,其中 Python 上手比較簡單。如果你想找一份工作,建議學(xué)習(xí) C++ 或者 C#。C# 雖然比 C++ 簡單一點,但是它只適用于 Windows 平臺;而 C++ 是一種通用語言,它可以應(yīng)用于 Windows、Linux 以及嵌入式平臺,就業(yè)選擇較多。2) 網(wǎng)站開發(fā)
網(wǎng)站開發(fā)分為前端和后臺,前端就是用戶在瀏覽器中看到的界面,后臺就是放在服務(wù)器上的程序。前端開發(fā)需要學(xué)習(xí) HTML、CSS 和 JavaScript,沒得選,而且必須都學(xué)習(xí)。后臺發(fā)開語言則多如牛毛,有走進墳?zāi)沟?ASP、Ruby on Rails,也有常用的 PHP、Java(JSP)、C#(ASP.NET),還有新晉選手 Python、Node.js(JavaScript)、Go 語言。如果你想自己玩玩或者創(chuàng)業(yè),建議選擇 PHP,上手非常簡單。我使用的也是 PHP,因為當(dāng)時學(xué)不會 ASP.NET 和 JSP,所以選擇了簡單的 PHP。如果你想找一份工作,那么已經(jīng)走近墳?zāi)沟?ASP、Ruby on Rails 就不要選了,沒人用了。C# 也不要選了,只適用于 Windows 平臺,而大量的服務(wù)器都是 Linux。Python 也不要選,實際應(yīng)用場景不多。Go 語言主要用作 Web 底層開發(fā),而不是應(yīng)用層開發(fā)。剩下的 PHP、Java、Node.js 你自己看著辦吧,沒法說哪種語言一定有優(yōu)勢,它們只是適用于不同的場景。值得一提的是,這里我們將 Node.js 和 JavaScript 看做是等價的,如果你選擇了 JavaScript,那么你既能開發(fā)網(wǎng)站前端,也能開發(fā)網(wǎng)站后臺,就不用學(xué)習(xí)多種編程語言了。3) APP 開發(fā)
這個開發(fā)方向比較簡單,Android APP 開發(fā)使用 Java 或者 Kotlin,iOS APP 開發(fā)使用 Objective-C 或者 Swift。每種操作系統(tǒng)都有兩種編程語言,一種是傳統(tǒng)的,一種是新晉的,選擇好了操作系統(tǒng),把兩種語言都學(xué)了吧。4) 嵌入式開發(fā)
一般使用匯編、C語言和 C++,近年來也有開發(fā)板支持 JavaScript 和 Python。自己玩的話,可以選擇 Python,上手簡單。想找工作的話,還是走傳統(tǒng)路線吧,把匯編、C語言和 C++ 都學(xué)了吧。只有那些有 Web 開發(fā)基礎(chǔ)的程序員才會選擇 JavaScript。5) 機器學(xué)習(xí)
這是一個比較綜合的開發(fā)方向,初學(xué)者一般從 Python、MATLAB 開始搭建模型,實際工程應(yīng)用中可能需要使用 C++、Java 等其它語言去實現(xiàn)。Python 是必學(xué)的,MATLAB 最好也要掌握,C++ 和 Java 視情況而定。6) 大數(shù)據(jù)
這也是一個比較綜合的開發(fā)方向,相關(guān)語言有 Python、R語言、Java、Scala。把 Python 和R語言學(xué)習(xí)一下,剩下的看情況吧。由于我的能力所限,我無法對所有開發(fā)方向做深入的分析,有說的不到位的地方,請大家留言,或者在公眾號聊天框中反饋給我。以上說的僅僅是編程語言,除了編程語言,大家還需要學(xué)習(xí)某些框架或者庫,比如:Java 網(wǎng)站開發(fā)需要掌握 Servlet、JSP 技術(shù),以及 Spring、Spring MVC、Spring Boot、Spring Cloud、Mybatis、Hibernate 框架;Python 機器學(xué)習(xí)需要掌握 PyTorch、TensorFlow、Caffe 等框架,以及 sklearn、NumPy 等模塊。除了編程語言和框架/庫,你當(dāng)然還要掌握一兩種數(shù)據(jù)庫,常用的有 MySQL、Oracle、MongoDB、Redis、Sqlite 等,這里不再展開討論。總結(jié)
軟件開發(fā)是一個大產(chǎn)業(yè),其中有很多細分方向,每個方向使用的技術(shù)棧都不一樣,而且要經(jīng)過長期學(xué)習(xí)才能掌握,所以大部分程序員都只擅長某個開發(fā)方向,那些多面手,要么是學(xué)藝不精,要么是技術(shù)大咖。人們之所以迷茫,就是不知道如何選擇,這篇文章雖然不一定能讓你做出最終的決定,但是可以給你一種不同的視角和標(biāo)準(zhǔn),幫助你打開思路。以上就是關(guān)于自學(xué)編程 做游戲和自學(xué)程序員需要多長時間的相關(guān)問題解答,希望對你有所幫助。