偽程序員想學腳本語言,該如何選?
大三學生,現在一家遊戲公司(移動端兩大系統都有做,PC端我不知道他們用的是Java還是C#)實習,大一大二學了C,C++,Java,想學一門腳本語言,python,js,ruby,php等眾多腳本語言如何選?web和桌面應用是否可以用同一種腳本語言?
遊戲不都用lua嘛
題主可能需要先明確自己學習這門腳本語言的工作需求。
題主在一家遊戲公司實習,我假設你將來希望在遊戲領域發展。不過題主的最後一個問題Web和桌面是否可以用同一種腳本語言,我想題主也希望將來的發展領域並不完全局限於遊戲開發中。我分兩部分來回答這個問題:
1. 希望在遊戲領域發展:
我們知道在遊戲公司里,無論程序員還是非程序員其實都非常有必要掌握基礎編程知識的。如果你是策劃,可以通過學習遊戲編程來提高自己和程序員的共同能力,同時也提高自己對遊戲系統的設計能力。如果你是一名美術,編程有助於你往技術美術的領域發展,並且可以通過編程去書寫一些腳本來幫助自己開發一些方便於工作的插件。
假設你希望往高階遊戲程序員方向發展,你其實應該去知乎上找找有關如何深入學習圖形學,計算機系統,演算法,C/C++ (當然我是純C愛好者,肯定不會推薦你學C++的)的相關提問,腳本語言只能作為你快速上手的工具存在。
假設你希望往高階策劃和技術美術的方向發展,那麼選學腳本語言的同時還需要有相應的編程環境。因為遊戲開發單純理解語言的語法是不夠的,你需要藉助一些良好的開發環境幫助你快速地利用所學去理解他們在遊戲中的運用。所以,這麼看來,Unity3D+C# 的腳本環境是目前我認為最適合技術美術和策劃學習的。如果是技術美術,Unity3D 中的 Shader 環境也是非常適合做 Shader 特效的學習和開發。(有人提議Cocos2D-x,我覺得 Cocos2D-x單單環境的搭建,就可以嚇跑初學程序的人們,並不適合沒有半點經驗,且只想以學習腳本為主要目的的人們。)
如果你是一名純美術,那麼我比較推薦 3D Max 的 Max Script 以及 Blender 的 Python Script 學習。這兩者都可以幫助你在學習完畢後開發便於自己操作繁瑣事情的腳本。而高階的Blender 插件還可以幫你完成很多動畫處理上的複雜操作和綁定流程。
2. 希望拓展到其他領域:
題主的最後一個問題Web和桌面是否可以用同一種腳本語言? 首先答案是可以的,Web 和 桌面領域使用同一門語言近幾年來在 html5+javascript 盛行的hybrid 開發中已經得到了驗證。樓主可以通過如 atom-shell 或者 node-webkit 項目,來通過使用 javascript 編寫跨 web 和 桌面端的應用。這方面涉及到得知識點,自然是 W3C標準,html5, javascript, node.js。我覺得這個領域不太適合一個腳本語言初學者介入。雖然 javascript 標榜著簡單易學,快速上手,並且培育了無數前端程序員,但是在我個人學習和使用的過程中,我發現如果沒有特別紮實的編程基礎,很難深入理解 web 領域的知識細節。所以我個人更傾向於在對編程有所了解後在步入web 領域的開發。
綜上所述,我給樓主的建議是,如果只是單純地希望學習一門腳本語言,那麼選擇受益面最大的,我推薦 python。python是一門面向對象語言,可以勝任shell, 伺服器,腳本插件等日常工作需求,而且他的配套庫和解決方案非常的多且實用。
如果希望在遊戲領域有所建樹,我推薦根據自己希望的發展方向選擇相應的遊戲開發環境和他配套的腳本語言,如上面說的 unity3d+c#, blender+python, 3dmax+maxscript 等等。
最後的最後,如果是非常學術性的選擇,我強烈推薦lua。這是一門坑少,小巧,包容各種編程思想又完全不會讓你被各種標準細節所困惑的編程語言。(我說的就是 javascript!)。而且,我相信學會了 lua 後,對於如何使用 javascript 以及 蘋果最新的swif語言都有非常大的幫助,他們有著相似的語法和動態語言編程思想。從目前趨勢來看,以及題主身邊的資源和發展方向來分析,JS會是不錯的選擇,因為題主在一家遊戲公司並且移動端兩大系統都覆蓋,應該比較有可能會用到coco2d-x。
現在coco2d-x的JS綁定和HTML5版本已經讓整個開發流程和調試變得很方便了,加上JS可以搞小版本更新不走APP審核流程,我想應該很多人都會把開發模式切換到coco2d-x + js這個方向吧。
在這種情況下,學JS會比較有發揮的空間,才不會學了沒地方施展。
其次,JS應用範圍不只是遊戲,做Web前端目前來說是唯一選擇,做後端可以用nodejs,Web也不像幾年前只能跑在瀏覽器裡面了,配合node-webkit,你可以直接用Web的開發模式做本地程序。
JS還有個好處,實驗成本非常非常的低,可以用很碎片的時間學習,現在瀏覽器都自帶開發者工具,如果對一些特殊語法不太清楚,打開來就可以馬上實驗了。
========== 另外給剛入行的同學們一些建議 =========
以下僅僅是建議,每個人的發展路徑還是得靠自己把握,別人說的只能作為自己參考最後要對自己負責的人是自己,俗話說站著說話不腰疼。。。關鍵還是要有自己的判斷。
同學們要清楚,學語言學的是什麼內容,學得目的是什麼。
學語法其實只是一個開始,像JS這種可以有各種奇怪寫法的語言,語法學習可能會是比較長期的一個過程,但是學習語法不是目的,學好語法為的是解決某一領域的問題。
為了解決某一領域問題,需要花費比學語法更多的時間和精力在熟悉特定領域的解決方案上。這裡說的解決方案包括各種類庫、引擎、演算法、開發流程等。
特別是像JS這樣的語言,本身是沒有標準庫的,做遊戲有一套API,做Web有一套API,做服務端有一套API,同樣做遊戲、Web、服務端,用的框架或引擎不一樣,API也會不一樣。
語言只是你進入某一個開發領域的門票,應用範圍廣的編程語言就是一張比較通用的門票,但是要深入某個領域,你還得投入時間和精力。
通用門票也容易造成方向選擇的問題,特別是初學者,把時間耗費在各種不同領域的折騰和糾結上面,花在不同語言的嘗試上,是非常可惜的。
如果把時間同時投入到不同領域,見效會很慢,很可能有很大的挫敗感,甚至導致放棄,所以建議從自己最興趣的某個領域先開始做起,等做熟了,別的領域學起來也就觸類旁通了。
以遊戲開發為例,遊戲開發不僅僅是把圖形展現出來把功能實現出來,程序員的水平差別在於需求的理解能力,體驗的把握能力,很多細節體驗和實現方案,不是遊戲策劃可以替程序員想好的,需要有足夠和行業經驗積累才能做到。
其他行業也是一樣的,程序員的技術積累和行業經驗積累是同等重要的。
作為從應用領域出發的開發人員,先不要考慮語言的執行效率,語法醜陋什麼的,那些是你改變不了的現狀,是大神們考慮的問題,他們解決了,我們就用上了,要是有一天我們不小心成了大神,那我們就順應天意承擔改變行業的責任,但是還沒到那個水平的時候就先別糾結那些問題。
關鍵的還是先掌握某一領域的開發能力,快速進入這個領域,然後熟悉這個領域,不斷積累經驗,最後成為領域專家,最後才有可能解決領域上的公共問題。
由感而發,比較啰嗦,請多包涵。
很巧剛看到這個文章,也提到選擇的問題,推薦閱讀:
http://zhuanlan.zhihu.com/edtall/19791482其實語言還真不是最重要的,周圍lua的,node.js的都有,關鍵還是要熟悉業務邏輯,遊戲里的幾個基本系統的設計要設計,常見的坑在哪裡,等等。
以前遊戲用lua的比較多,
不過自從google的V8出現之後,遊戲也可以開始用js了,而且HTML5遊戲的話,js也是必會不可,Unity3D裡面,JS是官方支持的三種腳本之一,而且現在有的遊戲引擎,如果你使用js的話,可以編寫一次,同時支持HTML5,ios,android,WP,PC,Mac。最後,nodejs也是使用js的伺服器端,也可以做web和遊戲伺服器。反正作為一個有一定年頭的移動遊戲開發者,我也在空閑時間看一些js方面的東西,確實挺有意思的,算是與時俱進吧。以上言論僅代表個人看法。當然python啊,簡單易懂,模塊多,見效快,最他媽適合像咱們這種偽碼農了。
哼哧哼哧湊出了代碼,神馬?沒C快,沒ruby性感,沒php大眾,扯你妹犢子呢,老子代碼能幹活,要高效性感出門左轉找開發。。。
上面有人說從js開始,不過js只是看起來簡單但是對新手真的算不上友好,而且你不玩node的話很快就會覺得無聊。你真要學腳本語言還不如去玩玩剛出的swift,雖然它不是腳本語言,但是它的確很優雅。我覺得對新手來說沒什麼比一門優雅的語言更重要了,到處都是語法糖和hack技巧的語言簡直就是噩夢啊
以前我也有同樣的疑問,一個高手回答js有用不好玩perl好玩用的少。關鍵是想去搞什麼啦。建議py和js。
語言是用會的,不是學會的,建議Python(或者Ruby,看你的審美取向了),桌面Web通吃,實踐機會多。
推薦閱讀:
※面向對象編程的重要性在哪?
※想自學虛幻4引擎,準備以後和熟人一起組建遊戲工作室,請問應該以什麼流程去學習?
※僅僅從職業發展前景考慮,做編譯器開發或操作系統開發哪個方向更有前途?
※本科計算機專業的數學應該達到怎樣的水平?