㈠ 新手如何學習編程
熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:
1、語法。
2、基礎理論(數學、數據結構、演算法等)。
3、設計方法(編程原則、設計模式、框架設計等)。
4、庫(核心、基礎、UI、擴展、游戲引擎等)。
5、計算機相關(操作系統、網路、圖形學等)。
6、領域知識(游戲設計、網站設計等)。
7、開發工具(編輯器、IDE、自動部署等)。
8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。
最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。
具體方法包括:
1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。
2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。
3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。
4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。
對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。
項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。
㈡ 我想成為游戲開發程序員
一、游戲程序開發的工作主要包括哪些方面
游戲開發中的程序開發主要由如下幾個方面組成:
1.圖形引擎
2.聲音引擎
3.物理引擎
4.游戲引擎
5.人工智慧或游戲邏輯
6.游戲GUI界面(菜單)
7.游戲開發工具
8.支持區域網對戰的網路引擎開發
9.支持互聯網對戰的網路引擎開發
下面逐一介紹每個部分:
1.圖形引擎主要包含游戲中的場景(室內或室外)管理與渲染,角色的動作管理繪制,特效管理與渲染(粒子系統,自然模擬(如水紋,植物等模擬)),光照和材質處理,LOD(Level Object Detail)管理等,另外還有圖形數據轉換工具開發,這些工具主要用於把美工用DCC軟體(如3DS Max,Maya,Soft XSI,Soft Image3D等)軟體製作的模型和動作數據以及用Photo shop或painter等工具製作的貼圖,轉化成游戲程序中用的資源文件。
2.聲音引擎主要包含音效(Sound Effect簡稱SE),語音(VOICE),背景音樂(Background music簡稱BGM)的播放。SE是指那些在游戲中頻繁播放,而且播放時間比較短,但要求能及時無延遲的播放,VOICE是指游戲中的語音或人聲,這部分對聲音品質要求比較高,基本上用比較高的采樣率錄制和回放聲音,但和SE一樣要求能及時無延遲的播放,SE在有的時候因為內存容量的問題,在不影響效果的前提下,可能會降低采樣率,但VOICE由於降低采樣率對效果影響比較大,所以一般VOICE不採用降低采樣率的做法。BGM是指游戲中一長段循環播放(也有不循環,只播放一次)的背景音樂,正是由於BGM的這種特性,一般游戲的背景音樂是讀盤(光碟或硬碟)來播放。另外一些高級聲音特效,如EAX,數字影院系統(DTS5.1),數字杜比環繞等。
3.物理引擎主要包含游戲世界中的物體之間、物體和場景之間發生碰撞後的力學模擬, 以及發生碰撞後的物體骨骼運動的力學模擬(比較著名的物理引擎有havok公司的game dynamics sdk,還有open source 的ODE—Open Dynamics Engine)。
4.游戲引擎主要是把圖形引擎、聲音引擎、物理引擎整合起來,主要針對某個游戲製作一個游戲系統,其包含游戲關卡編輯器,主要用途是可以可視化的對場景進行調整,光照效果和霧化等效果調整,事件設置,道具擺放,NPC設置,另外還有角色編輯器,主要用於編輯角色的屬性和檢查動作數據的正確性。一般日本游戲公司的做法,他們會把關卡編輯器和角色編輯器直接做到游戲中,所有的參數調整都在游戲中通過調試菜單來進行編輯,所以一般他們把這部分調試菜單的功能做的很強大,同時在屏幕上實時的顯示一些重要的信息,這樣做的好處是關卡編輯器調整的效果直接就是游戲的效果,但是對於程序的重用性來說可能不是很好,比如說要用到另外一個游戲項目中就比較難,除非兩個游戲類型相同,只要把場景和角色數據換一下,還有做下一代產品也沒有問題,只要根據式樣增加調試菜單的功能就可以了。
5.人工智慧和游戲邏輯開發,這部分日本和歐美的游戲開發模式也有很大不同,在歐美游戲公司中運用腳本語言開發很普遍,所以這部分程序開發主要是用腳本語言編寫,而且腳本程序和游戲程序的耦合性很低,有單獨的編輯、編譯和調試環境,這樣比較利於游戲程序和關卡設計開發分開,同時並行開發,所以一般他們都會有專門做關卡設計的程序員崗位。而日本游戲公司腳本語言一般和游戲的耦合性比較高,一般通過一些語言的宏功能和一些編譯器的特定功能來完成一個簡單的腳本系統,所以一般這些腳本程序只能在游戲程序中進行調試,而不能在一個單獨的腳本編輯,編譯環境中進行開發。
6.游戲GUI界面(菜單),主要是指那些游戲中用戶界面設計,有做的復雜,有簡單的,做的簡單就是2D GUI界面,做的復雜有3D GUI界面。
7.游戲開發工具主要包含關卡編輯器,角色編輯器,資源打包管理,DCC軟體的插件工具等開發。
8.支持區域網對戰的網路引擎開發,主要解決區域網網路發包和延遲處理,通訊同步的問題,有同步通訊和非同步通訊兩種做法,非同步通訊用於那些對運行幀速要求比較高的游戲,同步通訊相對非同步通訊來說效率相對低,但是同步通訊的編程模型相對非同步通訊來得簡單一些。
9.支持互聯網對戰的網路引擎開發,目前大部分網游都是C/S結構的,伺服器端軟體配置管理,伺服器程序的最優化,還有游戲大廳、組隊、游戲邏輯處理、道具管理、收費系統等。另外還有一些網路系統是C/S和P2P兩種結構混合的,如XBOX Live等。
二、游戲公司中有哪些和程序員相關的崗位
程序員在游戲公司中的崗位在日本游戲公司和歐美的游戲公司有些不同,日本游戲公司中程序員的崗位主要有技術監督(Director),主程序員(Main Programmer),程序員(Programmer),在日本游戲公司里負責游戲項目開發的程序員,一般不會專門根據工作內容劃分程序員,除了獨立的系統研究室和聲音系統製作部門(這兩個部門是比較獨立的,往往同時給好幾個項目服務),負責每個游戲項目開發的程序員,隨時都可能一人多職,比如說主程序員除了負責整個游戲系統以外,可能還要負責圖形或聲音引擎開發等,程序員除了人工智慧以外還有菜單製作等。這種情況在歐美的游戲公司比較少見,他們分工的比較細,一般有圖形程序員,聲音程序員,人工智慧或游戲關卡程序員,物理程序員,每個組中可能還會有一個Leader。
三、游戲公司一般是如何招聘程序員的
這一點,日本公司和歐美公司也有些不同。日本公司一般喜歡從一些高校中招聘一些應屆優秀畢業生,一方面比招聘有經驗的人要來的成本低,另方面新人是一張白紙,容易培養,像SEGA、KONAMI等都是按這種原則招聘員工的,所以想進入日本游戲公司,你要學好你的軟體課程。而歐美公司希望招聘進來,能馬上進入項目的開發中去,所以他們一般希望招聘有工作經驗的人,即使不是行業中,在相關行業中工作2、3年的也可以,所以想進入歐美游戲公司你的工作經歷很重要。
四、想成為一名游戲開發程序員應該具備哪些條件
我覺的一個游戲軟體程序員,最起碼的要求是熟練掌握計算機本科專業所學的知識,主要包括C語言或C++語言,數據結構,編譯原理,演算法等,另外線性代數、微積分、牛頓力學在圖形和物理引擎開發方面用途也很廣泛,如果要提高的話還有必要了解硬體相關的知識如計算機體系結構、匯編語言,這些對我們學習一個新的硬體平台、編寫最優化代碼、提高自己游戲的競爭力都是非常有益的。另外,保持有恆心、不怕苦(比如說通宵加班)的心態,對游戲的熱情也是非常重要的。對於那些想進入游戲行業,但缺乏軟體開發知識的人,可以通過參加游戲開發培訓來
五、學習游戲編程有哪些好方法
現在有很多人,計算機本科畢業,學了很多軟體開發的知識,但是一旦要用到實際的項目開發時,感覺無從下手,這主要是在學校里運用知識的機會太少了。所以學習游戲編程最好的方法是能實際參與到一個好的游戲項目中和有豐富開發經驗的人一起開發游戲,可能學到很多你從書本上學不到知識和技能。但有時候你一時還沒有機會參與到一個好項目中,沒有機會進入一家好的游戲公司,但是你對游戲開發有一腔熱情,很希望學習游戲開發的技能,那你就應該去參加專門的游戲開發培訓,因為游戲開發培訓班中的老師都是一些有豐富開發經驗的老師,一般都有五年豐富的項目開發經驗,聽他們的課,實際上就是在和他一起分享這么多年的開發經驗,另外游戲開發培訓課程中會專門設計一些項目和課題,它們本身就是可以直接運用游戲開發中,這樣你可以不進入著名的游戲公司,但可以學到這些公司中一些常用的開發技能。另外還有一種方法經濟實惠的方法,參加一些網上志願者的開源項目,這些項目從品質來說有好有壞,選擇一個好的項目非常重要,另外他們中間本身有許多是業內人士,本來你要進入他們公司,才能學習到他們的經驗,但是通過開源項目,你就有向他們學習的機會了,說不定哪一天,你就進入一家知名的游戲公司了,不過目前開源的完整游戲項目好的不多,到是在圖形引擎和物理引擎方面有一些很不錯的開源項目,但要加入進去的話,你的基礎一定要好啊,有些開源的團隊也不是隨便什麼人就能加入的。
㈢ 敲了 10000 小時代碼,我也沒能成為一名高級程序員
【CSDN 編者按】 Malcolm Gladwell在《離群索居》( Outliers)一書中曾言 ,要真正掌握某件事情,需要10000小時的練習。 而本文作者Greg Bulmash擁有40多年的編程經驗 ,寫了10000個小時的代碼,卻沒能成為一名高級程序員。 為何一萬小時定律會失敗呢?他分享了自己的一些看法 。 或許他的經驗能夠對你有所幫助,一起來看看吧。
原文鏈接:
本文由CSDN翻譯,轉載需註明來源出處。
譯者 | 章雨銘 責編 | 屠敏
出品 | CSDN(ID:CSDNnews)
Malcolm Gladwell在《離群索居》( Outliers )一書中說,要真正掌握某件事情,需要10000小時的練習。其實,10000隻是一個粗略的數字,而且這句話的含義也被過度簡化了。我已經斷斷續續進行了40多年的編程。可能已經寫了10000個小時的代碼,但我甚至還未能成為一個優秀的程序員,更別提成為大師級的程序員了。
我認為有以下幾個原因。首先,在這10000小時中,我主要學習了4種不同的編程語言,以及其他一些輔助語言。我從一種語言換到另一種語言時,發現它們有的概念可以互通,有的完全不同。而有趣的是,在這種語言中沒有意義的概念可能用來構建它。
例如,JavaScript沒有本地鏈接列表實現,但如果在V8 GitHub庫的src目錄下搜索 "鏈表",會發現有76個commit提到了它。即使它們在語言本身中沒有用C的鏈接列表,但會在引擎下使用C的鏈接列表。
每種語言都有自己的語法和特殊的實現方式,這些是必須要學習的,而不僅僅只是學習其概念。一種語言的最佳實踐方式對於另一種語言來說可能不是最好的。在編譯語言上我從來沒有花過很多時間,幾乎總是使用解釋型語言,如BASIC、php、JavaScript、Python。我學習過C#和Java,用Rust做過Hello World,但在Linux中從源碼編譯對我來說十分困難,所以我通常只是下載源碼,按照教程中的指示操作,然後祈禱代碼能夠運行。
除了學習這些語言,我還學習了伺服器技術和系統架構的基本概念,不是從編程的角度,而是從網路管理員或者說系統管理員的角度。而且無論是建立一個大型網站,在Flash中創建矢量圖並將其渲染成點陣圖,還是學習通過AWS解決方案架構師助理認證,我都已經做了很多次。但是很多東西我已經忘記了。我已經學會了這些語言的框架和庫,如JavaScript的React和JQuery以及PHP的Laravel......然後也忘記了許多,因為我為完成一個項目學習了它們,然後就沒有再使用它們。
即使寫了10000小時的代碼,也不意味著你能夠輕易地在不同語言之間轉換。當你真的進行轉換的時候,你會發現10000小時沒有那樣神奇的魔力,因為另一個不可避免的原因:記憶衰退。正如我所說的,如果我停止使用一種語言,甚至只是停止使用它的一個功能一段時間,我就會像忘記 "高中西班牙語 "一樣忘記它。我在高中時讀完了西班牙語3級,在大學時考過了西班牙語4級,並獲得了A。而現在,我可能只記得不到10%的內容。
例如,我幾乎完全忘記了怎樣使用常規動詞連接過去式,更不用說不規則動詞了。但是因為我以前練習的足夠多,我知道自己的不足之處,所以我可能比剛開始學習的人更快地恢復以前的知識。但可能需要幾個月的強化練習才能全部恢復。
十年前,我精通PHP,在一個定製的MVC框架中工作(由其他人創建),使用Doxygen來映射類的繼承層次,並使用JQuery來構建前端的交互性。但我在7年前沒用過PHP了,轉而使用Node。現在,我需要花5分鍾並且改正了一些語法錯誤,才在剛才提到的PHP副本中正確地寫出一個Hello World。
去年12月時,我為freeCodeCamp的前端庫認證建立了五個React項目,但在那之後,我就沒有再編碼React項目了。過去了兩個月,當我開始准備面試的時候,我覺得我就像是React新手。如果我看到自己寫的代碼,能夠很快理解。但是因為很多東西都只是我准備的輔助工具,很多我都忘光了,所以我需要回到文檔中去開始一個新的React項目再開始工作。和新手相比,我只是走得更快。
這就是新手和已經入門了的區別。一萬個小時可以讓你成為一個小提琴大師。但是如果你每隔500小時就換一次樂器,並想要成為整個交響樂團的主角,那你不一定能夠更勝一籌。所以為了強化和拓展你的技能,練習不僅要廣泛,而且要持續。
10000小時是什麼樣的概念?是5年每周工作40小時,兩年休息1周(假期、病假和休假都在這2周內)。你會發現有的工作招聘時要求在一個3年的框架內有5年的經驗。5年似乎是成為專家所需的標准時間。因為對框架的無知和這種簡化的標准,就會產生邏輯上的矛盾,一言以蔽之。
一個專業的開發人員,有多少的工作時間是花在電子郵件和會議上的?又有多少時間在真正編碼和思考編碼問題?當我在微軟寫文檔的時候,我的經理說,不管怎麼算,你一天中大概只有一半的時間花在實際的生產工作上。其餘的時間會花在一些瑣事上,比如回復電子郵件、開會、進度/狀態報告、在IM上回答隨機問題或者和別人閑聊......
所以我只有20%的時間是在寫代碼,因為其他80%的時間是在寫文檔和教程,這意味著我平均每天只寫了一個小時的代碼。在使用瀏覽器中的開發工具進行調試方面,我曾經是個天才,因為我在這方面經驗豐富,還經常為新版本進行更新。但是,雖然當時所有的開發控制台的快捷鍵,我都爛熟於心,但在我離開微軟的7年後,我基本上已經把它們忘得一干二凈了。
事實上,自從我進入開發人員關系部後,我每天花了10-20%的時間寫代碼,其餘的時間寫教程,為會議講座和網路研討會製作文件,制定建立和培養開發人員社區的戰略,制定展示新功能的最佳方法,以及處理各種人——產品經理、內部工程師、外部開發人員、產品營銷經理、需求生成和社交媒體經理、律師、公關和公司政策執行者的問題。
最後要記住的是,你不會花整整一萬個小時學習新東西。如果你在學習小提琴,你可能會花上幾百個小時來學習一些初級的作品。在你學習新東西之前,你已經掌握了一些初級的東西,並且在反復練習直至完美的過程中,
學到很多,並且將你學到的這些用於學習新事物。所以這一萬個小時中的大部分時間都是強化的。
在編程中,這就像多次編寫相同的To Do單頁應用程序。前幾次你可以參考教程,但最終你必須能夠在沒有任何參考的情況下寫出它。這就像一邊看著樂譜一邊慢慢演奏《歡樂頌》,然後記住如何演奏,然後准備在演奏會上演奏。
但是,當你需要在截止日期前交付一個項目時,你有多長時間來進行強化練習?在許多公司,不會給你提供擴展技能和強化編碼的時間,需要你利用額外的時間來完成。一些公司會給你10%的時間或20%的時間來做獨立的項目,但很少有公司希望你把這些時間花在單純的練習上。
新的框架、新的最佳實踐方法、新的語言、新的模式產生的速度不斷加快,在這種情況下,僅僅是在新的方面取得合格的成績,都會像和職業選手一樣演奏《歡樂頌》的困難。
你需要平衡強化和 探索 的時間,特別是當你每天編碼的時間少於50%的時候。你必須不斷地通過練習來進行強化,建立心理肌肉記憶,直到你能在睡夢中解決它們。小提琴幾百年來都沒有實質性的變化,但編程卻在不斷變化。成為一個特定語言的大師級程序員意味著要堅持更長的時間。你不得不在非工作時間進行強化練習,完成任務,努力成為一個優秀的程序員,或者跳槽到另一個能夠給你充足時間練習的公司。
哪怕你5年或者10年後都沒有成為大師級的程序員,也沒有關系,因為好好地做一萬個小時比看起來更難完成。
㈣ 初學電腦編程需要什麼
初學電腦編程需要學習英語,選擇一門編程語言,要有數學基礎,具體介紹如下:
1、英語基礎
計算機英語與傳統的英語知識不同,需要了解的大部分是計算機的專業單詞或者詞彙,普遍較為簡單。但是在高級編程中,會出現比較生澀的詞彙,對於想要參與計算機語言設計以及在職業發展上有更多追求的同學可以自學一下大學英語。
2、選擇一門編程語言
選擇一門編程語言。雖然目前編程語言有600種左右,但是比較流行的編程語言只有幾十種,所以盡量選擇流行程度比較高的編程語言來入門編程。對於沒有明確編程場景的初學者來說,盡量選擇全場景編程語言,比如Java、Python、C#等就是不錯的選擇
3、數學基礎
當然擁有初中階段的數學基礎也可以成為一名合格的程序員,這也是目前很多計算機編程培訓學校招收初中畢業學生的原因。但想要成為一名優秀的程序員,最少要高中及以上的數學基礎,而且要懂得如何舉一反三,靈活運用。
4、了解計算機操作系統原理
所有的開發或者說軟體應用都是在特定的操作系統上進行的,所以計算機操作系統原理可以說是基礎中的基礎是必須要了解的。
5、數據結構和演算法
這門課程能夠決定一個人程序設計水平的高低,是學習過程中需要重點掌握的。C和C++都是可以選擇的,前期可以先學C,再學C++會相對簡單一些。
在學習編程語言的過程中,也需要同時學習計算機網路、資料庫等相關知識,在當前的雲計算和大數據時代背景下,還需要掌握如何通過雲計算(PaaS)來輔助開發,以及如何利用大數據平台的各種資源。
㈤ 一個程序員要具備的基本素質是什麼
團隊精神和協作能力 :
把它作為基本素質,並不是不重要,恰恰相反,這是程序員應該具備的最基本的,也是最重要的安身立命之本。
文檔習慣:
作為代碼程序員,30%的工作時間寫技術文檔是很正常的,而作為高級程序員和系統分析員,這個比例還要高很多。缺乏文檔,一個軟體系統就缺乏生命力,在未來的查錯,升級以及模塊的復用時就都會遇到極大的麻煩。
規范化,標准化的代碼編寫習慣:
作為一些外國知名軟體公司的規矩,代碼的變數命名,代碼內注釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不同技術人員之間的協作。
需求理解能力:
作為程序員需要評估該模塊在系統運營中所處的環境,將要受到的負荷壓力以及各種潛在的危險和惡意攻擊的可能性。就這一點,一個成熟的程序員至少需要2到3年的項目研發和跟蹤經驗才有可能有心得。
復用性,模塊化思維能力:
復用性設計,模塊化思維就是要程序員在完成任何一個功能模塊或函數的時候,要多想一些,不要局限在完成當前任務的簡單思路上,想想看該模塊是否可以脫離這個系統存在,是否可以通過簡單的修改參數的方式在其他系統和應用環境下直接引用,這樣就能極大避免重復性的開發工作。
測試習慣:
軟體研發作為一項工程而言,一個很重要的特點就是問題發現的越早,解決的代價就越低,程序員在每段代碼,每個子模塊完成後進行認真的測試,就可以盡量將一些潛在的問題最早的發現和解決,這樣對整體系統建設的效率和可靠性就有了最大的保證。
學習和總結的能力:
善於學習,對於任何職業而言,都是前進所必需的動力,對於程序員,這種要求就更加高了。但是學習也要找對目標,一些小coding fans們,他們也津津樂道於他們的學習能力,一會學會了asp,一會兒學會了php,一會兒學會了jsp,他們把這個作為炫耀的資本,盲目的追逐一些膚淺的,表面的東西和名詞,做網路程序不懂通訊傳輸協議,做應用程序不懂中斷向量處理,這樣的技術人員,不管掌握了多少所謂的新語言,永遠不會有質的提高。