CG行業如何學程式設計:獻給想要學程式設計的CG孩
阿新 • • 發佈:2019-01-07
很多同行打算學程式設計,以為程式設計是技術的最深奧義,但是一個是這個想法有沒有跑偏,另一個是學了很久還是不得其門而入,越學越困惑,這很正常,程式設計不像建模一樣直接(當然直接不等於簡單),看到的就擺在那裡了,所以學起來不能那麼直接的看到效果就知道底層的實現,另一個就是即便是拿到原始碼,演算法不理解照樣是看不懂的。所以學習的方法非常重要,如果越學越困惑,那肯定是方法出了問題。在這裡把我的一些思考寫在這裡,希望能對想學程式設計的孩子有所幫助。一家之言,姑妄聽之喲~~
據說程式設計寫錯一個標點都不行,程式設計這麼難嗎?
這句大實話是很常見的,的確寫錯一個標點都不行,不但寫錯不行,就連少寫多寫大小寫沒搞好都往往會導致失敗。 還有另一個大實話,就是說Vim難學的時候說Vim連上下左右都是HJKL,太詭異了! 首先這兩個事情的確是存在的,而且如果想說這兩者很難的話能找出100個這個規模的事情,但是還有兩個事實:- 程式設計:說這種話的人往往是根本不會的,或者學了一頓沒學會的。我從來沒有聽說過會程式設計的還在跟別人提到過標點問題,除非他還是不會程式設計。本質上講,標點錯了這屬於語法錯誤,還沒執行呢,編譯階段編譯器就會告訴你哪裡錯了,錯誤原因是什麼。當然這個位置不一定準,但是凡是程式設計超過500行的絕對不會被這個問題困擾。語法錯誤在後面的過程中那就是最基本的錯誤,排除不了的那就是初學者。就跟寫一句話一樣,如果把一句不妥當的話改個表達方式更加妥當還是需要動動腦子的話,那把一個字給寫錯了就屬於這個問題的級別。我想大家也該明白了,電腦是很呆板的,尤其是C和C++這種不善解人意的語言,你照著她的套路來一點問題都沒有,但你姿勢錯了那不能怪她不容納你,多寫幾行程式碼練好基本功才是入門之道。
- Vim:Vim中HJKL的確是方向鍵,但上下左右方向鍵照用。
我適合學程式設計嗎?
一般這種文章寫到這裡都會鼓勵鼓勵儘管學吧,但是我覺得這麼說的時候還是要想想自己的責任,如果讓一個人去騰出了很多精力去學程式設計,但有可能他不擅長這種思維,又肯能他高估了程式設計之後的生活,那當時慫恿他學程式設計的人也算不上正面角色。 所以可能和你所想不一樣,但我還是說的實在點吧。 羅永浩說過一句話,“不是每棵小草都會成為大樹”,他又解釋了一下小草絕不意味著卑微,大樹也不意味著高人一等,只是職務分工各有不同。在這裡也同樣試用,為了不至於讓人誤會,可以反過來說,如果建模、動畫、Rigging、VFX是大樹,幹嘛非要去做一顆小草呢? 程式設計人人都可以學,但人人都能學好是扯淡的,就和建模人人都能學好一樣扯淡,學不好就意味著做不好,做不好就意味著對自己的生活改變不大,改變不大為什麼還執意要學,這不是說惦量了一下有可能做不好就不做了,而是開始之前一定不能太盲目: switch(學程式設計原因){- 如果想學程式設計是因為自己手邊的活做不好,又心比天高曰“大丈夫處世當編寫程式碼安做模型乎
- 數學不好不願意學,英語不好也不大願意學,那就先別學程式設計了,即便是再“喜歡”,因為學了也編不出足以超過現有工具的東西。break;
- 做什麼都是三分鐘熱度,對CG興趣不高,那不可能把CG的程式設計堅持學習下去的break;
- 如果自己的領域做的很好,對實際流程已經很瞭解,學程式設計是為了拓寬思路,增加對技術的控制力;
- 如果自己有精力有時間(在校生或者空餘時間多的CGer);
- 如果自己是一名Geek;
- default: 拿出精力和激情來學吧,堅持。
咱這行業程式設計之後能做什麼?
- 程式設計無所不能。
請有這個想法的同學現實一些,我的經驗是:
for each in [PS, Maya, MayaAPI, Renderman, Houdini, HDK]:
我在沒學each的時候感覺each太過神祕,學會了一定可以像那些牛逼的大師一樣無所不能。
每個階段都是驚人的相似,以為為知的each裡面一定有很神奇的東西,因為想學的時候潛意識會把那些大師的作品當成自己以後能做出來的作品,大家可以想想學軟體之前是不是這樣的?尤其是我當時選Maya和Max學哪個的時候,其實兩個對我都很神祕,但我翻了下Maya的作品,蜘蛛俠,牛叉,星球大戰,牛叉,哎喲臥槽還有指環王,為什麼沒早學5年呢。然後翻Max的作品,當時國內Max的書很多,於是我翻到了各種國產specular亮瞎雙目的blinn材質和box+球體建模,心想這軟體前途不大啊,於是就學的Maya。
這個其實就是我每次學習之前的縮影,相信對其他很多同學來說也是這樣的。在學之前這個軟體是未知的,於是就看看那些閃耀的這個each參與過的專案吧,而看那些閃耀的作品會讓自己認為這些作品全都是這個each的功勞,於是就學吧,但事實上事實上學了之後發現好像不是這樣的,關鍵還是看自己腦子裡有料沒料。 - 行啊,挺好啊,瞅著你解決了一個技術問題,你丫解決之後工資提高了麼?
這是當時在群裡有個人冷不丁問一個勤奮上進的孩子,在那一瞬間替他感覺,的確每提高啊,好悲哀,這麼苦逼的解決問題是圖個什麼。但是是這樣嗎?
但是幾秒鐘後突然想,自己從開始的800實習工資,到現在已經一個讓自己比較滿意的待遇,我從來都是一個我,人從來沒換,但為什麼社會對我的酬勞多了呢?答案就是那時候和現在的我,能解決的問題的數量和範圍是不一樣的。這種差異的根源就是不停的苦逼的解決問題提高自己。所以當有人在玩著遊戲不覺的光陰流逝反而笑話那些苦逼的提高自己的孩子說你這一分鐘搞定了問題但下一分鐘你工資提高了嗎答案是下一分鐘沒有提高,但如果他堅持,會解決越來越多自己之前解決不了的問題,demo上也會出現以前做不出來的效果,那在以“年”為尺度下看這倆人的待遇曲線我想會很明顯。
- 當學會語法後,如果對流程熟悉,就可以寫一些小工具提高流程了,MEL,Python都可以完成這個工作。畢竟替代手工的操作是不出力都能討好的。只要學會for和while就能省很多的工作量。
- 深入語法,開始了API級別。這時候就可以做一些script做不了的事情了,因為通過API用到的往往是C和C++,和軟體本身是無關的,這就突破了軟體的限制。
- 開始數學層面的東西。其實學了程式設計之後就會知道,難的不是語法,而是演算法。只要程式碼量到了一定程度,會發現只要有想法都是可以實現的,但這個“只要”的難度和你想寫出的東西的偉大程度正相關。如果想寫個helloworld那是很容易的,但如果想把FLIP整合進Maya那就有的學有的寫了。但學會了之後就是可實現的。
最重要的,該如何學呢?
希望讀者看這一行的時候不是跳過來看的,前面所寫字字手打不易無廢話空話,還望細讀。 那既然看到這一行,我假設是這樣的讀者:- 自己已經明白自己能搞定程式設計。
- 自己明白自己為什麼要程式設計。
- 自己明白程式設計的限制在哪裡。