從逃離到成為遊戲開發,40歲了我才學會程式設計
1、“不想成為 Logo 明星程式設計師後再被派去參加比賽”
我的程式設計生涯始於 20 世紀 80 年代時擁有的第一臺電腦。那是一臺叫做 ADAM 計算機的怪獸,就是下圖這樣的:
這是一種個人電腦、ColecoVision 遊戲系統和打字機的混合體:兩個磁帶機代替了磁碟驅動器 / 磁帶盒、一臺電視機代替了顯示器,還有一臺有趣的印表機,上面有個開關可以將它變成一臺完整的打字機。很多其他 ADAM 計算機使用者都有實際的磁碟驅動器,但這個沒有,磁帶要花很長時間才能載入出來。
我們剛得到它的時候,我父親在地下室裡錄了很多磁帶,但我不知道為什麼會有這麼多的遊戲。我最喜歡的一款遊戲叫做《Gateway to Apshai》(一款戰鬥電子遊戲),這是一種類 Rogue 的遊戲(迷宮探索式電子遊戲)。後來他解釋說,他是用 Forth 實現的。下面是他的原話:
當我們有了 Coleco Adam 計算機時,它有一個 Zilog Z80 CPU,因此,我用過一點 Forth。不知道你是否還記得,我從美國訂購了一盤磁帶(用於磁帶機的),裡面有幾個黑客程式和一本名為《Adam 黑客指南》(The Hackers Guide to the Adam)的書,它允許我們將 ColecoVision 的遊戲下載到空白磁帶上,這樣我們就得到了大量的遊戲。我自己並沒寫過任何程式,但是磁帶上的程式都附有原始碼,所以你可以按照邏輯來寫。在某些情況下,我需要調整引數並重新儲存,以便優化任何需要破解的程式。這很有趣,也很好玩。
關鍵是他給我看了一種叫做 BASIC 的語言,當時的我以為 BASIC 是世界上唯一的程式語言。我開始學習這門程式語言,並跟著讀了像《銀山之謎》(Mystery of Silver Mountain)和《捕獲獅頭象》(Hunt the Wumpus)這樣的書,很快就學會了如何程式設計。我開始根據 Steve Jackson 的《巫術!》(Sorcery!)這本書製作我自己的小型 RPG 遊戲。
它們最後就像下面這段從 Wikipedia 上抄來的程式碼的一個較大版本,其中有很多 RAND 的擲骰子和 GOTO 呼叫。隨著時間的推移,我不得不新增越來越細的行號(比如,在 60 行和 70 行之間新增了一個 65 行,然後是 64 行,最後當我用完空間就得給整段程式碼重新編號)。
- 10 INPUT "What is your name: "; U$
- 30 INPUT "How many stars do you want: "; N
- 40 S$ = ""
- 50 FOR I = 1 TO N
- 60 S$ = S$ + "*"
- 70 NEXT I
- 80 PRINT S$
- 90 INPUT "Do you want more stars? "; A$
- 100 IF LEN(A$) = 0 THEN GOTO 90
- 110 A$ = LEFT$(A$, 1)
- 120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30
- 130 PRINT "Goodbye "; U$
- 140 END
所有這些程式碼都是我自己完成的。那時候,人們還不能在網上搜尋示例程式碼,所以大家都認為我註定要從事 IT 行業。
與此同時,我們在學校裡學了一種叫做 Logo 的東西。這就沒那麼有趣了,你需要做的只是讓一隻海龜在螢幕上畫出形狀就行了。你可以給它函式,比如 FD 90、RT 90,然後用 REPEAT 4,它就會重複四次,畫出一個正方形。畫一個圓要花很長的時間,因為你必須給出 REPEAT 360,看著海龜重複 360 次才能畫出一個圓。所以有時候你可以作弊一下,執行 REPEAR 180,讓海龜一次向右 2 度,這樣計算機最終會繪製出幾乎相同的東西,但只需進行 180 次計算即可。
為了增加趣味性,你可以像下面這樣做一個形狀,告訴它做一個圓,然後告訴它向右轉一點,然後開始下一個圓。
在看到 Bryan Cantrill 的這段視訊之前,我幾乎完全忘記了我用過 Logo 這件事。Cantrill 年紀跟我差不多,小時候也學過 Logo。我們經歷也很相似:對讓海龜畫圓這件事完全心不在焉,但他幸運地遇到了 C 語言並真正投入到程式設計中,而我沒有。這是我自身的原因。
在 20 世紀 80 年代的計算機課上,我們都坐在 Calgary Ranchlands 社群學校的一間沒有窗戶的房間裡,對著電腦讓海龜畫圓。由於 Logo 超級容易上手,以至於我和其他幾個人都覺得,它根本就不像是一門程式語言。老師們注意到了這一點,就說馬上要舉行 Logo 競賽了,我們應該去參加。那應該是一場全市範圍的比賽,也有可能是一次省級範圍的比賽。
比賽持續了兩三天,我們終於在最後一天鼓搗出了一個產品,得到了評委們的認可並有望獲獎。我的隊友比我更投入,而我卻開始表現出對比賽的興趣缺乏。我覺得我們拿到第四或第五名就可以了,但隊友並不滿意。所以當比賽結束時,我如釋重負。我知道我不想程式設計,不想贏了比賽後作為 Logo 明星程式設計師再被派去參加其他比賽。
我當時的人生目標就是讓那個我小學時一直暗戀的女孩喜歡上我。還有就是在當時,人們認為會電腦的人都是書呆子。所以那時候,我在公共場合都會和電腦保持一定的距離,來保持這樣的形象:是的,我是很擅長電腦,但我並不是一個電腦愛好者或其他什麼。
在看了兩三天的 Logo-Proficient 比賽和他們所做的東西后,我們得到了一件 T 恤和一個瓶子作為參與獎勵,這是我最後一次使用 Logo 。與此同時,我又持續用了一段時間的 BASIC ,直到 90 年代初,我們把 ADAM 計算機換成了 386,BASIC 就被我忘得一乾二淨,而我也不打算花錢買一本關於程式設計的書。
Bryan Cantrill 第一次接觸 Logo 的經歷是這樣的:
我想我用過的第一種語言是 Logo,現在回憶起來,這是一種虐童的行為,Logo 太可怕了!如果現在你去看 Wikipedia 上的 Logo 詞條,你會說:“嗯,這很好,就像一種受到影響的 Lisp 方言……”但是這些都是錯的。“Logo 是一隻什麼都不會做的海龜,我說的海龜就是指大腦袋顯示器上的一個三角形,它什麼都不會做。它的魔力就像你告訴它“box”(繪製正方形),它會告訴你“I don't know how to box”。
我記得三年級的時候,計算機是必修課。我還記得當時那種機械、冷漠的感覺,因為這個東西不知道如何繪製正方形,而我也不在乎你知不知道怎麼繪製正方形。我第一次接觸計算機就是“我對這件事一點兒也不關心”。
2、Python、Ruby 還是 Lua?
從 90 年代到 2000 年代這段時間,我沒有做過任何程式設計。然而,在這段時間裡發生了兩件至關重要的事:我成了《星際迷航:下一代》(Star Trek: The Next Generation)和《創世紀 VII》(Ultima 7)的超級粉絲。
Data 是我最喜歡的角色,因此我經常思考 Soong 博士是如何做出來 Data 的,我們需要多長時間才能達到這樣的階段。當我玩《創世紀 VII》時,我曾有過並且現在仍然有同樣的感受:這個世界充滿了細節,我會繼續玩這個遊戲甚至只是為了和人們聊聊天、逛酒吧、看人們讀書。
所以,這段時間是讓我對程式設計再次感興趣的重要時期。程式設計不再是關於海龜和令人沮喪的比賽,而是科幻小說、電影、奇幻遊戲、音樂以及其他一切我認為很酷、很有價值的一切。
那時候,我知道有一種叫做 C++ 的程式語言是用來開發遊戲的,也許有一天我可以用它做出一個長得像 Android 機器人那樣的 Data 和《創世紀 VII》那樣的遊戲。這讓我對 C++ 產生了一定的崇拜,但我已經和程式設計無緣了。
我從加拿大搬到了日本,然後移居韓國。有一天,我遇到了一位來自多倫多的韓裔加拿大人,他在韓國當程式設計師。作為一名韓裔,他可以在沒有嚴格的僱主允許讓他保持簽證的情況下從事自由職業,只需整天坐在星巴克用兩種語言進行程式設計:PHP 和 Python。我知道 PHP 這個名字,一直以為它只是一個電子公告板的名字。他跟我說應該試一試,因為可以很快學到新技能,也會對我的職業生涯有幫助。
他向我推薦了 Python,說應該先從這門語言開始。初次使用 Python 非常迷茫,只有一些小小的成功。我記得我讀過關於 Python 2 和 Python 3 的帖子,這些帖子都是說 Python 2 如何更好,Python 3 如何強迫每個人接受的。不管這意味著什麼,我注意到一些熟悉的東西,比如 print,但熟悉的 $ 卻不見了,也沒有任何行號或 GOTO。在沒有主函式的情況下,我設法將一些東西放在一起,但我真的不知道,一個程式沒有行號和其他類似有用的東西該如何從頭到尾執行。
那時候的網際網路開始普及,人們在網上會對一種語言與另一種語言進行比較和討論。我注意到一種叫做 Ruby 的語言更像我的風格,所以我嘗試了一下。然後我又看到一種叫做 Lua 的語言,感覺它好像就是為我做的。我不知道如何使用,但我就相信 Lua 是我想要的。我認為 Lua 是最容易學習的程式語言,如果我能學好這門語言,就能學會所有其他程式語言。
幾個月後,我在星巴克又遇到了那個韓裔加拿大人,他問我 Python 學得怎麼樣了。我告訴他,我覺得 Lua 應該是適合我的程式語言,但我說不出理由,顯然我還沒有掌握如何寫程式碼。他最後評論說:“嗯,也許你沒有程式設計基因。”
不知為何,我卻固執己見地認為自己有這方面的基因。我小學的時候就自學了 BASIC,我知道我有這個天賦。我只是需要真正喜歡上 Lua 並學好它……或者我應該學習 JavaScript?但大家都說你應該先學 Python,雖然我確實更喜歡 Ruby……結果我一直沒完沒了地糾結著,直到我再一次失去了興趣。
最後,我又回到加拿大生活了幾年,程式設計根本不在我的考慮範圍內。2011 年到 2015 年期間,唯一與程式設計有關的事情只有一次,就是聽說隔壁辦公樓裡都是寫 C++ 的人,他們為管道和其他能源專案定製 SAP,賺錢很多。
3、40 歲,第一次學會程式設計
2015 年,油價崩盤,Calagary 經濟也隨之崩盤,我們整個團隊也解散了。拿到了豐厚的裁員補償後,我決定開始真正學習編寫程式碼。
我學會了如何編寫函式,如何建立物件等等,但是 self 關鍵字仍然讓人困惑,使用物件也是如此。再努力點就足以解決這些問題了,但我的老毛病又犯了:
- “Python 在製作遊戲方面很糟糕——它不會讓你做出任何像《創世紀 VII》這樣的東西。
- “為什麼不去試試 C++?不,那太難了!C# 怎麼樣?讓我們試試吧。”
- “哇,這真是太複雜了。儘管如此,C# 看起來是個不錯的選擇!等等,這是什麼?F#?這門語言真的很酷。為什麼所有的語言都不是這樣的呢?”
- “F# 太棒了!為什麼就沒有更多的人使用它呢?也許我應該好好學完 Python……”
- “那就 Python 吧,又簡單又好用!除非是 JavaScript。這樣我就可以在瀏覽器上做任何事情了。也許我可以從一些基於瀏覽器的遊戲開始?是時候試一試了……”
後來,裁員補償的錢快用光了,必須重新找工作了。找到工作後,我去市區和以前的同事們聚餐。那時遇到了我的一個 90 年代中期後就沒見過的老朋友,他在財務部門工作,問我在做什麼工作,我告訴他我找到了一份新工作,下週開始上班。“哦,我敢打賭是程式設計工作對不對!你一直都很擅長程式設計。”他說。我回答說:“哦,不是程式設計……我已經很久沒有真正做過這些事了。是做專案控制方面的。”
我對這次談話記憶猶新,因為這讓我思考為什麼我從來沒有學過程式設計,而且無論從哪個角度來看,我年輕的時候似乎就註定要學程式設計。不過我當時忙於其他事情,沒有再去嘗試程式設計。
我在 2018 年回到韓國。第二年八月,我給當時工作的公司提出了辭呈,那時候我是一名文案。離正式辭職還有一個月的時間,我開始考慮學門技術,也許這次真的要好好學習 Python 了。我可以每天花上幾個小時,到最後一天就會掌握得很好,然後再花上一個月左右的時間去找工作。這樣做了幾天後,我的老毛病又犯了。“好吧,你可以稍微看一下其他語言,”我自言自語地說,“但你必須把 Python 作為重點。”
那是我第一次嘗試 Rust 。我聽說它確實很精確和高效,但很難學,喜歡它的人會讚不絕口。我是在《X 分鐘速成 Y》(Learn X in Y Minutes)(譯者注:GitHub 上的一個專案,包括了很多的簡短的入門教程,比如演算法、程式語言、開發工具等)和《Rust 語言遊樂場》(the Rust playground)開始學習 Rust 的。
我開始學習 Rust 的時候,查了一下這門語言的用途,答案無一例外是,它幾乎什麼都能做。所以我可以做出《創世紀 VII》這樣的東西,或者任何我想要的東西。更有趣的是,語言的細節和語言的底層東西並沒有讓我感到厭煩:我發現自己被吸引得更多了。隨著我對這門語言的深入瞭解,我有了很多懷舊之情。
我寫的所有東西都被直接轉換成二進位制檔案,我又可以看到計算機的內部結構了。大量的 Rust 討論都是關於如何優化程式碼的,我覺得這很有吸引力。但這門語言很高階也很安全,如果我全身心地投入,它幾乎可以使任何事情成為可能(至少在一種語言可以做到這一點的範圍內)——這就是為什麼我的老毛病完全消失了。
誰知道這種程式碼會獲得成功呢!
《Rust 程式設計》(Programming Rust)這本書對我來說,剛開始讀的時候太難了(一方面對 C++ 和 C 的內容引用太多了),所以我是看了其他書後才回到這本書上,並最後喜歡上了它。
不過,對我幫助最大的是流媒體視訊。第一個是 Javascript 開發者 Brooks Builds 製作的 70 多個視訊,他把自己看 Rust Book 的每一步都錄了下來。看著別人努力學習一門你也在學習的語言,會讓你有種在精神上參與的感覺,這是其他型別的流媒體做不到的。“是 mit einer deutschen Familie,不是 mit einem deutsche Familie!”或者“只要用 into_iter() 就可以編譯了!”等等這些時刻,你會覺得自己真的是在和別人一起學習(事實上你確實是在學習)。
從那以後我開始看 Brian Myers,他基本也是靠必應(bing.com)搜尋學習 Rust 。Jon Gjengset 我留到了最後看的(這是在 《Crust of Rust》教更簡單的東西之前),同時也看了 Hello Rust、Ryan Levick、Doug Milford、Tensor Programming、this Rust crash course、dcode 的 Rust 視訊等所有的視訊(不是全部按順序排列的)。還有一個我喜歡的視訊流就是 rhymu8354,他是一個 25 歲的 C++ 愛好者,自己做了一個類似《創世紀 V》的遊戲,最近開始學 Rust。
半年後,我發現我有生以來第一次正確地學會了程式設計。然而並沒有什麼祕訣:真的是單一的專注和勤用必應搜尋的結果。
由於只有一個 Surface Go 筆記本,我一定要避開任何有太多外掛的東西。但我做了一些東西,比如朝鮮漢字轉換器(朝鮮漢字就是韓國使用的漢字),效果很好,最後我還整理了一本名為《用簡單的英語學習 Rust》(Learn Rust with easy English)的教材,目的是為了讓那些英語二級水平的使用者更容易學習這門語言,而不必用翻譯成他們國家語言的 Rust 相關書籍。
這個故事的寓意我想就是經典的“找到自己喜歡的事情,然後一直做下去”。這對我來說並不新鮮,只是我花了那麼長時間才找到適合自己的語言。它讓其他語言變得如此易讀易懂,包括 C 和 C++。
我想說明兩點:一、見異思遷和缺乏專注不一定是永遠的;二、每個人性格不同,最簡單的語言不一定是你最喜歡的語言。
Reddit 網站上的 /R/LanguageLearning 等版塊上經常有這樣的討論:“我真的很想學(著名的 X 語言),但我是否應該繼續學更簡單的西班牙語 / 法語等,儘管我討厭它?”答案當然是否定的——只需學習你想學的語言就行了。這種建議更容易給出,因為自然語言並不像程式語言那樣與職業發展緊密相連。但是由於程式語言也有很多後繼的東西,同樣的建議也許是可以適用的。
Rust 肯定不是那種為了成為大團隊中的初級程式設計師而學習的語言,更不用是在 40 歲年紀的時候。但是,如果你是那種對程式設計屢次三番撿起後放下的人,也許找到合適的程式語言會讓你堅持下去。
作者介紹:
Dave MacLeod,加拿大人,居住韓國首爾。職業翻譯,精通韓文、日文、德文、法文、英文。業餘 Rust 開發人員。
原文連結:https://github.com/Dhghomon/programming_at_40/blob/master/README.md
譯者/Sambodhi
來源:Rust語言中文社群
原文:https://mp.weixin.qq.com/s/sMu0Q0e9VY7-FZ8wMuTc7Q
相關文章
- 開發商設計的 Bot 程式會毀了多人遊戲嗎?遊戲
- Supercell開發分享:從創意到最佳遊戲設計遊戲設計
- 大遊戲公司離開Steam成為趨勢,GTA開發商也有了自己的遊戲平臺遊戲
- 你以為我在玩遊戲?其實我在學程式設計!遊戲程式設計
- 我從程式設計面試中學到的程式設計面試
- IT程式設計師的抉擇:我要離開帝都了程式設計師
- 我錯誤的逃離了廣州
- 為了設計這個計程車遊戲,開發者真的成為了一名網約車司機遊戲
- 作為遊戲設計師,能從動森的設計中學到什麼?遊戲設計師
- 學習了風變程式設計後,Python為我敞開了大門程式設計Python
- Minecraft 從入門到入坑(邊玩遊戲邊學程式設計)Raft遊戲程式設計
- 面試了一個 31 歲程式設計師,讓我有所觸動,30歲以上的程式設計師該何去何從?面試程式設計師
- 選了風變程式設計,才發現Python並不難學程式設計Python
- 手遊開發者談能從投幣街機遊戲的設計中學到什麼遊戲
- 專科程式設計師,學歷可能會成為發展障礙程式設計師
- 從Steam移植手遊的遊戲是否會成為主流?遊戲
- 程式設計成為社會“團寵”!中小學生都來搶飯碗了?程式設計
- 淺談《逃離塔科夫》,遊戲中的槍械繫統設計遊戲
- 83天!風變程式設計讓我成為了更好的自己程式設計
- 程式設計師只能吃青春飯?40歲以上的IT人都去幹嘛了?程式設計師
- 從Delphi到Lazarus——我的程式設計之路程式設計
- 面試了一個 39 歲程式設計師後,我被罵了……面試程式設計師
- java遊戲開發雜談 - java程式設計怎麼學Java遊戲開發程式設計
- 我為什麼不要30歲以上的程式設計師?程式設計師
- 吹爆了!程式設計師自學Python,不如9歲小孩,網友:我不信....程式設計師Python
- 原來這才叫併發,百度強推併發程式設計筆記我愛了,肝到頭禿程式設計筆記
- 從盜版氾濫到開發熱土:遊戲如何成為波蘭國家名片遊戲
- 不要年過40,才為20歲混過的日子後悔
- 中國逃離北上廣,美國遊戲公司正逃離矽谷和灣區遊戲
- 遊戲設計師可以從魔術中學到什麼?遊戲設計師
- 【程式設計師的遊戲開發之路】 遊戲架構程式設計師遊戲開發架構
- 從《Her Story》到《Return of the Obra Dinn》:讓偵探遊戲真正成為遊戲遊戲
- 當小遊戲開始成為新的風口,讓我們從零到一的談談(下)遊戲
- 當小遊戲開始成為新的風口,讓我們從零到一的談談(上)遊戲
- 如何成為一個年薪 40 萬以上的程式設計師?程式設計師
- 40個只有程式設計師才看得懂的段子程式設計師
- 《五行》從0到1設計遊戲——策劃向開發記錄遊戲
- 我30歲了,轉行學程式設計可以嗎? 排除法告訴你答案程式設計