人妻少妇精品无码专区漫画_亚洲国产精品一区二区sm_内地无码毛片手机在线_亚洲av大精永久无码精品

當前位置: 首頁 > 設計資訊 > 設計教程 > 正文

有關代碼學習的經驗分享

2018-07-13 3653 0

f17a570363fc6ac72579485db019.jpg

之前有發(fā)過相關的資源索引,原創(chuàng)教程,練習,甚至是源代碼。但很多感興趣的人還是不了解從何入手。自己接觸 Creative Coding 有一段時間了,雖算不上專家,但也有一定了解。這里想分享一點個人的學習心得,談談設計師應該如何自學創(chuàng)意編程。
 

關于自學

創(chuàng)意編程可以自學嗎?據我了解,圈子里真正玩得好的高手,都是從自學開始。自學不僅僅是一種學習形式,其中最關鍵的,是思維方式的養(yǎng)成。它是可復用,可迭代進化的,并且不僅局限在單一領域。

當初自己為什么選擇這種方式呢?不是因為有先見之明,了解自學有這等好處,僅僅是因為沒有條件。學校沒開設這類課程,身邊也沒有認識會這個的朋友,也就不得不自學了。

很多人覺得自學的難處之一是,沒有氛圍,一個人難以堅持?,F(xiàn)在有了互聯(lián)網,情況大不一樣了。通過國內外的各種社交媒體,論壇網站,可以了解到領域里最前沿的人物,他們近期的動向。看過什么,如何思考問題,做了什么練習,產出什么作品,這些信息都可以刺激

如果勤學好問,甚至可以直接向這些前輩請教。前提是展示為了獲得這個問題做了哪些努力。

所以只要有一臺能上網,可翻墻的電腦,就具備了最基本的自學條件,剩下只是方法的問題。

創(chuàng)意編程的魅力所在

講如何學之前,還是先談談為什么學。

創(chuàng)意編程。我的個人理解,就是用代碼畫畫。如果本身就是設計師或插畫師。那現(xiàn)在,僅僅是換了一個圖形表達工具而已。

那創(chuàng)意編程能有什么具體的應用價值呢?“有什么用?”,其實不是個好問題。我更喜歡回答,它為什么有趣。

對于一個藝術家來說,一輩子的追求無非就是形成自我風格。可能窮其一生,最終可以熟練駕馭幾種畫風。但卻無法做到掌握所有人的繪畫風格。

用油畫創(chuàng)作一幅作品,可能需要一個月。發(fā)明了手繪板,數(shù)位屏這些工具,可以將時間縮短到1天。將來腦電技術成熟,甚至可能用意念來畫畫,時間將更短。

這些都是由于工具的革新所帶來的。但人的思維速度再怎么快,也不可能在一秒內創(chuàng)作100張作品。這是人的思維局限,也是傳統(tǒng)創(chuàng)作工具的局限。

通過計算機則不一樣。只要了解自己是如何思考,并將這個思考過程用編程語言去描述,計算機就能幫實現(xiàn)。

要知道,當今最有想象力,最不可思議的事情,都與計算機發(fā)生關聯(lián)。而通過編程,可以將的想法延伸到更多的地方。

2015年9月,Leon A. Gatys等人基于神經網絡的論文就讓大家看到了可能性。

當然,還是有人喜歡用畫筆去完成這種探索,我更傾向用計算機。在我看來,編程對于圖形創(chuàng)作而言,就是個潘多拉魔盒。下面我想講講它的打開方式~

設計師學編程,選哪門語言?

808d5703643832f875a944ed3687.jpg

自己其實在大學期間就對編程產生過興趣,也淺嘗輒止地了解過一些編程語言,諸如 VB,C,后來還包括 python,最終都沒有堅持下去。
 

后來總結了一個原因,學習這些編程語言的反饋周期太長了。并且都是從抽象的概念開始講起,輸入輸出都是一串數(shù)字,相當不直觀。

直到我在一年前遇到 Processing。發(fā)現(xiàn)它簡直就是為設計師這種視覺生物所量身定做的。簡單的代碼,就能寫出十分豐富的視覺效果。過往在編程中抽象的概念,這里都會以一種鮮活的視覺形式呈現(xiàn)出來,十分有趣。

之后它一直讓我愛不釋手。由于反饋直觀,每次練習都與畫畫無疑。所以會持續(xù)刺激自己,去用代碼進行更多圖形上的探索。

Processing的設計理念,是讓設計師,藝術家都可以輕松地掌握編程。雖然門檻降低了,不代表它是一門“玩具”語言。畢竟編程語言都許多概念都是相通的,而 Processing 本身又基于 Java,所以此門語言的一些基礎編程概念,在其他語言中也一樣有。假如以后想學習一門新語言,在Processing 上打下的基礎都能發(fā)揮作用。

我自己的所有編程基礎的修煉,都是在Processing上完成的。我認為Processing是設計師進入代碼世界的首選工具。

信息源頭

有了目標,就需要去尋找相關的學習資源了。這里是之前自己整理的一份資源清單。(CreativeCoding 資源索引)

里面的信息對初學者而言已經足夠全了,開始時無需考慮過多,先選一本基礎教程,老老實實從它學起。除了基礎書籍之外,索引里還提到了一些諸如軟件的誕生地,語言的開山鼻祖以及相關的資源網站,只要按圖索驥,這些信息可以幫助對這個領域有一個概貌的了解。

值得一提的是,除了上面的鏈接。Processing自身的范例庫做得相當完善,如果本身有代碼基礎,那幾乎只通過范例庫,就能學會這門語言了。

除了 Processing ,里面還提到了另一門創(chuàng)意編程的主流工具叫 Openframeworks(簡稱OF)。它們都是最主流的創(chuàng)意編程工具之一。格式,寫法十分相像。OF有它自身強大的地方,比如它是基于C++的,運行效率更高。支持跨平臺,代碼幾乎可以不做任何改動,就能在Windows和Mac OS上執(zhí)行。而且還能開發(fā)App。

盡管如此,對于初學者,我還是推薦先從 Processing 入手,因為它有更豐富的學習資源,更詳盡的文檔,更友善的社區(qū)。這些都是 Openframeworks 不具備的。

對于外語基礎不太好的朋友,Processing 最好的一點就是有大量的中文教程,感謝國內這些前輩為推廣創(chuàng)意編程所做的努力。

如何看教程?

2d87570388fa6ac7257948aff724.jpg

編程和畫畫一樣,是門手藝。光看不練,是學不會的??唇坛?ldquo;看”不是重點,練才是重點。只有通過實打實地敲代碼,的代碼能力才可能提高。

以《愛上Processing》一書為例,書中有不少代碼示例。但僅僅看上面的實例是不完全不夠的,要想真正掌握需要分三步:理解,模仿,重組。

要吃透某個概念,要首先理解它通過文本所敘述出的概念。接著,再放到程序的語境中去理解它,敲出同樣的代碼。而要檢驗自己是否真正理解,就需要主動去實驗。比如修改某個參數(shù),調整某個語句的位置,這代表有真正去思考,而不是簡單地復制命令。

如果這步已經做到了,不妨對實例進行“默寫”,不看示例代碼。看自己能否清晰,流暢地將代碼寫出來,以此檢驗自己的熟悉程度。

到最后,不要局限于示例本身。需要重組知識點,這個過程同時是創(chuàng)造的過程。好比新學了 for 循環(huán),書中給出的例子都是畫線和畫圓的。那應該去思考,如何做些簡單的修改,可以做出不同的效果?例如可不可以用 arc,triangle,beginShape - endShape 這些繪圖函數(shù)去畫。或者利用 “i”,給每個圖形賦上不同的顏色。

只有走到重組這一步,才會真正成為自己的知識。而無論什么類型的教程,學習無非是這幾個過程的循環(huán)。

如何練習更有效?尋找“學習區(qū)”

練習也是有技巧的。心理學里面有一個概念叫做“刻意練習”。一萬小時理論可能大家都聽過。大意是無論做什么,只要堅持一萬小時,基本上都可以成為該領域的專家。

但其實這不是一次很不嚴謹?shù)难堇[。不同領域從新手到專家的習得時間都是不一樣的。就像大多數(shù)人看電影電視劇,都超過一萬小時,但不見得變成專家了。

所以關鍵不是練習時間的長短,而是練習的方法。所以就有了“刻意練習”這個說法。也只有刻意練習,才是從新手進化為專家的關鍵。

有人將刻意練習的內容總結成以下四點:

1.只在“學習區(qū)”學習
2.把訓練內容分成有針對性的小塊,對每個小塊進行重復練習
3.在整個練習過程中,隨時能獲得有效反饋
4.練習時,注意力高度集中

程序本身就能提供即時的反饋。所以第三點并不存在問題。

關鍵會是第 1 點,什么是學習區(qū)?

人的知識技能分為層層嵌套的三個區(qū)域。那些我們已經熟練掌握的技能,就處在舒適區(qū)。那些我們暫時無法學會的技能,就是恐慌區(qū)。兩者之間就是學習區(qū),剛好夠得著,又需要時間去掌握的。

要做到有效的練習,就應該在自己所處的學習區(qū)進行學習。一旦學會了,就轉入下一個難點。

而明白這點,就會減少許多學習上的困惑。

比如第一天接觸編程,剛掌握了 print(“Hello,world!”); 的寫法,這個知識點對而言就處在學習區(qū),第二天只要多重復練習,就會完全熟悉它,它也會從原來的學習區(qū)的位置變?yōu)槭孢m區(qū)。之后要做的就不是繼續(xù)揪著 print 這類自己完全熟悉的內容,而是去學習新知識。

另一種情形,則是揪著恐慌區(qū)的知識不放,這往往是最常見的,也是導致許多人認為編程很難的原因。

學習有段時間了,肯定不會滿足于書本上的例子。通過各種資源網站,必然能找到一些很炫,或者很有趣的案例,直接下載了源代碼,并且很想學習它。

如果能理解,當然最好。但通常下面兩種情況會出現(xiàn)得更多。一,里面的代碼很多都不認識。二,每句代碼都認識,但是不明白彼此之間是如何組織的。

如果是情況1,那說明是語法和基礎概念還沒學好,此時應該先去踏實地看基礎教程,查清每個函數(shù)的用法。如果是情況2,這時就應該嘗試把這段程序分解,將每個小塊的概念,逐個消化。如果發(fā)覺,仍然是超出自己所能理解的限度了。就應該擱置它,先從其它相關的,更簡單的例子開始了解,不要一上手就去做復雜的東西。

知識的吸收不是一觸而就,更不代表把它完全背下來了,就真正掌握。在我看來,大部分的代碼問題都由一個共同原因所導致:基礎沒打好。當某些函數(shù)的用法,代碼的組織方式還沒摸索清楚,這樣硬學下來的知識,都是模糊的,碎片化的。

只要明白這點,即使在程序上遇到一些暫時還無法實現(xiàn)效果,也不會苦惱,不會自慚形穢了。因為隨著練習的增多,知識版圖的擴大,有很多問題是不言自明的。與其硬啃,在恐慌區(qū)揪著那些自己還沒法吸收的知識。不如放慢腳步,打好基礎。

在“學習區(qū)學習”,用過去最通俗的說法,就是“循序漸進”。編程并不難,只要找準自己的學習節(jié)奏即可。

刻意練習,大量輸出

知道練習的重要性了,也知道要在學習區(qū)練習。那有沒有具體的參考指標?

如果以案例作為衡量單位。從零開始的話,把 print(“hello,world”)這類也算上。

基本寫夠 500 個實例左右,可以算入門了。此時基本能了解變量,函數(shù),類等等概念。

但如果要達到相對運用自如的程度,就要做到 1000+。

這個練習還得處于學習區(qū)。就像寫 1000 個 “Hello,world ”,編程是不會有進步的(開始的兩三個可能會)。但如果本身善于思考,做東西懂得舉一反三。實際練習的數(shù)量也會比這個少。所以以數(shù)量并不是絕對的指標。

但無論如何,只有足夠量的積累,才能做到游刃有余,順手拈來。如果腦中的任何想法,都能迅速實現(xiàn),做到無障礙的表達,后面就能玩得很痛快了,可以更專注于創(chuàng)意本身。

如何練習更有趣?

練習不是枯燥的代名詞。練習的方向可以很自由。知識點是固定的,但可以決定如何組織。許多練習只要多想一步,稍加變化,就能成為有趣的作品。

之前看書一般很少做后面的練習題,而是習慣自己給自己出思考題。比如我對“畫東西”比較感興趣,我會思考怎樣將學到的新概念往這個方向上靠攏,以此做點不一樣的東西。

除此之外,還可以從自己喜歡的作品去學習。Gif 狂人 Dave Whyte 的很多動圖估計大多人都見過,他的作品常常給我?guī)砗芏囔`感。我們也可以用同樣的形式來練習,甚至是模仿。

受他影響,個人有一種記錄練習的方式,就是做 Gif。只要略微有看點的練習,我都會保存成圖片或是導出Gif。這樣方便回顧的同時,還可以驅動自己去持續(xù)練習。自己從初學到現(xiàn)在,已經積累了100多的動圖,從中可以看到自己的學習軌跡。

Test 0


 

Test 1


 

9036570366f632f875a9448a1ab7.jpg

Test 32


 


 

Test 41


 

Test 56


 

Test 106


 

Test 107

試想象下,當某天看到自己積累了 1000 個Test,應該會是件很有成就感的事??梢钥吹阶约旱某砷L,看到自己的思考脈絡。另外,制作Gif的過程無需過于追求完美,而將大量時間花在推敲細節(jié)上。只要視覺上及格即可,關鍵是其中的邏輯。

對于練習,建議將它們都按類別功能用文件夾歸好類,這樣練習庫也會成為創(chuàng)作時的素材庫。寫代碼不像繪畫,創(chuàng)作一幅作品,可能每次都必須從白紙開始。Coding 則不一樣,練習是可復用的。

復用還是一種編程思維,甚至可以寫一些類或者插件,將自己最常用的東西打包起來,以此提高創(chuàng)作效率。

無論是 Processing 還是 Openframeworks,我最先想解決的問題,就是如何更快地制作 Gif,畢竟這個功能對自己而言是最常用。雖然有現(xiàn)成的一些插件,但使用起來總要敲很多代碼,十分不便。為此我就設計一些方法去簡化這個流程,這樣就無需重復勞動。(Processing快速制作Gif)

(針對 OF,自己也基于 ofxGifEncoder 重寫了一個類,之后會一并開源出來)

練習的迭代

前后的練習不是毫無關聯(lián)的,可以不斷迭代,甚至成為創(chuàng)作的靈感來源。

剛開始接觸CreativeCoding的時候,我產生了一個問題。如果我想寫一個函數(shù),如何能從指定坐標 A,變化到指定坐標 B ?這在 Flash 或是 AE 之類的軟件中很容易實現(xiàn),但在程序中卻需要思考一番。

當時剛學會 PVector 向量,就想用它去承載坐標點的數(shù)據。當驗證了想法可行,我就將完成后的代碼放在 animation 的文件夾中,這算完成了一個練習。

過段時間,我覺得這個運動效果太僵硬了,于是把代碼翻出來,再重新設計了一個規(guī)則:過中點前加速運動,中點后就減速。這樣代碼與原來略有不同,運動也更加自然了。

直到某天,產生了一個算法的靈感,能夠結合之前的代碼,制作一個圖片轉換效果?想到的思路是將前后兩張圖片的所有像素的灰度進行排序,再進行點對點的映射。沒費很大的功夫,就跑出下面的效果了。

d753570368fe32f875a944cc40de.jpg

Test 27

當時實驗成功后會很興奮。一是通過主動的思考做出了不一樣的東西,二是其中的原理居然出乎意料地簡單,我覺得這都是代碼的魅力所在。后面基于點對點的變換,還延伸出許多練習,其實都基于先前一段最不起眼的代碼。

16705703695832f875a944c45007.jpg

Test 97

066f5703698132f875a9440b9f0c.jpg

Test 99

另一個相近的例子,是較早前做了一個錄制繪畫軌跡的練習。直到后來看到這個系列圖片。

于是有了將繪制軌跡進行對稱的想法。

76335703701232f875a9447af40c.jpg

也催生了一個圖形生成器。

后面也做了各種各樣和畫相關的實驗。

0825570371b76ac72579480d2138.jpg


 

所以不要忽視任何的練習,這些練習距離創(chuàng)作并沒有那么遙遠,稍微打磨下,都可以成為作品。

更多練習

問正確的問題

前面用了很多篇幅去強調練習的重要性,但無論練習的次數(shù)多么多,總會遇到個人無法解決的問題。
  這時有兩種途徑,一是向google發(fā)問,二是向前輩發(fā)問。

個人解決問題的常用手段,是 Google。不推薦國內搜索引擎,否則大多數(shù)問題的解決方案都是無法搜到的,關鍵字也最好用英文,這樣可以增大搜到答案的幾率。如果是問 OF 的相關問題,那官網的論壇會是提問的首選。很多時候不會是第一個提出這個問題的人,只要先搜索下就可能發(fā)現(xiàn)現(xiàn)成的答案。如果沒有,可以在上面發(fā)起問題,上面也會有熱心的管理員和網友給出解答。

除了google之外,如果在學校有導師。那就不要放過機會,用大量的好問題逼出他的干貨。但如果沒有,身邊又沒有了解這個的朋友,那就需要虛心地向圈內的前輩請教問題,通過各種社交媒體或是論壇網站。另外,向人提問是有技巧的,不要讓人覺得是不愿動腦的伸手黨。這篇“提問的智慧”值得一讀,不僅局限在編程領域。

1d92570371da6ac72579481c1ec6.jpg

學習社區(qū)

除了紙質教程之外。openProcessing 對初學者學習來說是首選。代碼都是開源的。里面有足夠豐富的資源,可以讓去學習。

而如果學習的是 OF,就沒有類似的網站了。要學習別人的代碼,最常用的會是Github,需要了解相關的藝術家,然后在 github上fork 他的代碼。例如 OF 創(chuàng)始人 Zack 的github,里面就有許多開源的代碼

不得不提的還有 Twitter,上面的信息質量比國內的微博要高,它是個很好的獲取靈感信息的平臺。許多新媒體藝術家,都很樂意在上面分享自己的一些探索,可以看到領域最前沿的一批人,他們是如何思考的。

自學的難點
  • 動力

Coding是這樣的,了解越多,越能挖掘更多的樂趣。如果是自己自學,而不是有學校課程去驅使,那堅持的唯一理由,只能靠動力本身了。

動力足夠強烈的人,是不會意識到自己需要堅持的,因為整個過程他都樂在其中。但往往是少數(shù),多數(shù)人可能會面臨動力不足的問題。

怎樣可以獲得動力?做東西是最直接的。當親手用代碼完成一個作品,獲得的成就感會持續(xù)驅動。其次,就是關注領域的相關人物,在twitter上follow一些藝術家,關注他們的作品,練習。好作品絕對會激發(fā)人 Coding 的欲望。

  • 心態(tài)

學習最忌兩種心態(tài)。一是妄自菲薄,二是驕傲自大。它們都是阻止不斷進步的因素。不要覺得編程太難,怎么學也趕不上別人。也不要認為自己什么都會了,而放棄持續(xù)學習。

“Creative” 在先, “Coding”在后

學什么工具不重要,用工具創(chuàng)造了什么才重要。正如編出 Photoshop 的工程師,沒有人會比他們更熟悉Ps的各項功能了。但很顯然,不代表他們就能用這個工具創(chuàng)作出好作品。

同理,CreativeCoding 最終要比拼的不是 Code,而是Creative的想法。否則每個 Coder 都會是 CreativeCoding 的高手了。設計師學編程的優(yōu)勢,是他自身已經有創(chuàng)作者的思維,并且視覺表達能力不錯,再稍微了解代碼,就可以做出很不一樣的作品。

前面之所以強調代碼,是不希望設計師空有想法,而沒有落地能力。學習編程除了實現(xiàn)想法之外,可以多一個角度去理解事物更底層的規(guī)則,它是能反過來豐富的想法,而不純粹是門工具。

所以想法才是最大的驅動力。更鼓勵大家圍繞一兩個具體的想法,用它來串聯(lián)所學的知識。

自己學習創(chuàng)意編程的動力,源于兩個感興趣的方向,一是從數(shù)的角度去剖析圖形,用代碼用法則去探索圖形的更多可能性(萬物皆數(shù))。二,是希望用程序,去測量人的思維,以此開發(fā)一些訓練工具(量化繪畫)。

這些想法用傳統(tǒng)的軟件都是無法做到的,但學習創(chuàng)意編程讓我有機會親自去實現(xiàn)它。

“取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,則無所得矣”。如果對創(chuàng)作有更高的目標,那絕對是件好事,他會驅使走得更遠。

Coding的內功

如果Coding是種武功,那算法就是“內功”。不要疲于學習各種插件,雖然能很快的出一些很炫的效果,這些都是最表面,也最容易學會的。加深自己對算法的理解,學會對圖形進行規(guī)則的抽象和重設計,這十分重要。

另外,技術并不是創(chuàng)作的最主要瓶頸。我們不要將精力放在學習各樣五花八門的技術上。做個比喻,要成為“武林高手”,不是說刀槍劍棍什么都需要會。將一種武功練到極致,也同樣能打遍天下。代碼的創(chuàng)造相當自由,完全可以將一些常人認為最簡單,最普通不過的規(guī)則摸透,并且將它玩到極致,這樣同樣可以走出自己的風格。

技術怎么學都沒有盡頭的,所以學一點,就盡量做點東西把它運用起來。其實簡單的技術,也能做出精彩的作品。就像對有創(chuàng)造力的畫家而言,給它一支鉛筆就足夠了。

END

相信現(xiàn)在有足夠的信息可以去開始自學了。編程水平的高低,與在什么學校,學什么專業(yè),跟隨哪位老師,看哪本教材沒有必然的聯(lián)系。如果這個能力可以量化,前面的因素充其量決定開頭的第一個數(shù)字,而自我修煉,則決定這個數(shù)字后面跟多少個“0” 。

創(chuàng)意編程有它自身獨有的魅力。正如當初我去學習它,不是因為它能為我直接帶來什么好處,僅僅是覺得有趣而已。希望將來有更多人,能發(fā)自內心地喜歡創(chuàng)意編程,用它來創(chuàng)造不一樣的東西。

還等什么?下面是的Coding時間:)


24
評論區(qū)(0)
正在加載評論...
相關推薦