文/王鑿
說實在的,其實自己對自己的半斤八兩倒也挺清楚。文科(社會學)轉碼,原因也很簡單,主要還是我文科學得也確實不好,因此沒能探索出未來太多喜歡的出路,就我個人的情況而言,轉碼幾乎是唯一的選擇。而獨立游戲,其實確實是獨立地做了個游戲,但比起那些數不清的獨立游戲開發(fā)者們,還是貽笑大方。
這篇分享其實并沒有標題看上去的那樣成功,我也很害怕一些技術大佬被現在貓貓狗狗都能轉碼、還愛吹牛的情況逗得受不了。因此,需要跟大家坦白的是,無論是文科轉碼還是做獨立游戲,我都只是沾了點邊兒,不光輝,還很慚愧。
作為一個轉碼選手,會時常不自信,時常覺得自己距離科班的同學差得好遠。第一次找到前端開發(fā)的實習,見男碼農都叫xx哥,見女碼農都叫xx姐。以至于后面有一次請教完一個后端小哥怎么搭建網站,“哥、哥、哥”地感謝了半天,掛電話時卻發(fā)現人家比我還小一歲,很是尷尬。后來有幸作為前端工程師工作了一年,發(fā)現同事都來自生物、交通、航天、物流這樣五花八門的專業(yè),也就逐漸變得自信了一些,甚至學著一個老員工逐漸地在辦公室拽了起來,開始油滑,開始吵架,開始上班的時候零食停不下。
回顧過往,其實可以說,轉碼的困難主要是存在于剛開始的一段時間。面試場場一問三不知,面試官常常無語甚至轉喜為怒,leetcode(極客摯愛的技術成長平臺)的動態(tài)規(guī)劃令人自覺智障,剛開始工作的第一天連怎么打開項目都不太會。但也就只是一段時間,這些困難就紛紛被克服了。從決定轉碼的2019年秋天開始的半年里,我順利完成了申請cs碩士、找到一個前端實習、找到一個全職前端工作三件事情。有了這些工作經歷,也讓我有自信說自己至少在前端這個領域算是一個比較合格的程序員了。
如果有朋友,甚至是文科的朋友問我,要不要轉碼,我也許會說,完全可以,并且值得嘗試,只要你有信念,能充分了解其中的各種可能性和不確定性,但也要對自己處理找實習、找工作、上課之間的平衡,有一定的自信。轉碼之后,我看到的朋友們的遭遇各不相同:有的朋友在頂級學府里被壓得喘不過氣,有的朋友在氛圍尚可的學府里虛度光陰;有的朋友在955的地方996,有的朋友在996的地方955。轉碼的可能性很多,最后自己走向一條什么樣的路,不單單是努力與否,也和運氣、性格、身邊人的支持有很大的關系。
我的第一個和第二個項目分別是設計一個udemy上面的網頁版計算器和一個模擬電商網站。第一次從Github(代碼托管平臺)上把代碼clone下來之后,我驚呆了。原來代碼可以寫這么長,還有這么多文件。那一行行的代碼,完全看不懂??!那種感覺還挺摧毀信心的。哎!雖然跟著視頻學了個一知半解,但還是硬著頭皮把這個項目寫進了簡歷里。
寫項目的出發(fā)點其實也有點功利且無聊,那就是為了更好看的簡歷。一起出國轉碼的同學都說,之后找工作,有個全棧項目很重要。于是大家都一窩蜂地做項目、貼技術。十份簡歷,九份的項目都是電商網站、個人博客、宿舍管理系統(tǒng)和圖書管理系統(tǒng)。項目的內容其實并不重要,重要的是需要在這些項目里面貼入一些由奇怪英文單詞縮寫構成的“技術?!?,目的是力爭通過大廠簡歷篩選的機器掃描。比如:Initialized and managed client service from zero to one using Vue CLI, Webpack, Babel and yarn.Designed and developed the whole project using SpringBoot, MySQL, Redis, Uni-App, Vue.js and Bootstrap. 最關鍵的事情就是,你需要有足夠多的技術棧被寫進去,并且如果你是后端的話,最好還要再融入一些指標化的impact進去,比如某個服務提效15%,某個模塊的latency減少了17%云云。大家就沿著這條不約而同形成的統(tǒng)一的規(guī)則,不斷精進著自己的項目和簡歷。
我設計的游戲最新的小版本截圖
雖然我知道應該這么做,也在這樣乖乖地努力,可是我的內心還是有點不太情愿的。最讓我不太舒服的就是這些看似天馬行空的技術,做出來的都是一些有那么點無聊的東西。的確,有的人可以從無聊中參透代碼的美妙,可以從電商網站的某個底層依賴中開辟出某個技術領域的偉大前沿。但是,可能因為我不是一個技術出身的人,我不僅無法欣賞這些技術的厲害之處,也沒有動力去仔細學習這些技術的細枝末節(jié)。我沒有毅力,沒有水滴石穿的精神,或者說沒有經受過計算機教育的毒打,還無法從頭到尾地搞懂別人的項目代碼,也無法在沒有閱讀輔助軟件的幫助下在技術教程的前5頁保持不困。我大概是個技術學習的廢人吧,這種感覺和幾年前志在社會學時,花了很大力氣也根本啃不動那些馬克斯韋伯之類的書籍之后,發(fā)現自己是個文科學習的廢人一樣令人沮喪。
怎么才能不廢,怎么才能多學一些技術呢?結合之前的一些經歷和對自己的認識,當我認為做的事情也許能有潛在意義的時候,我就會打起不少雞血,這些雞血也是我小小的、克服自己平庸和薄弱意志的救命稻草。因此我開始思考,也許我應該找到一個我認為很有意義的項目去做,那樣無論最后我做得怎么樣,都可以打起雞血,學到一波技術,也不會很虧。這個回路在一些日常在各大技術文檔之間輕功水上漂的老練程序員看來,可能會有點搞笑。但當時我確實也找不到別的辦法,來讓自己有一個比較高效的進步了。
最開始我想,也許可以做個城中村地圖的web版,可以像某網站一樣,有很多很好的交互,甚至可以融入一些眾籌數據貢獻、數據分享的東西,甚至更進一步,變成一個城市研究問題的學術交流平臺和資源數據交換平臺。無奈我當時連JavaScript都不太會,也沒有實習和接觸類似代碼的經歷,這個想法歷經幾次嘗試都失敗了。甚至最后我羞恥地偷偷下了DreamWeaver,這個很多人可能在小學換牙的時候就用過的低代碼畫網頁的東西。我想,只要把它做出來就行,畢竟我的Photoshop技術還是一流,應該能觸類旁通。但最后發(fā)現我也不太會用,而且發(fā)現學會用了也沒啥用,就放棄了。最后的最后,發(fā)現了一個叫作“極海云”的很不錯的東西,雖然無法在這個東西上面擴展功能,雖然我做的全部工作就是點擊上傳數據按鈕,然后上傳ArcGIS導出的shp文件,但終于也算實現了把城中村地圖變得可交互這一小愿望,那一刻還是蠻快樂的。
在大學的最后一個學期選課的時候,我因為實在是選不上合適的課程而太過氣憤,就嘗試做了一個大家能投票、增加擴容和改良我們的垃圾培養(yǎng)方案的簡單平臺。那是第一次成功有了屬于自己的小網頁,用的是GitHub.io(也就是GitPage)。具體的方法就是自己用html+css+JavaScript寫了一個頁面,然后在百度上想方設法地措辭和嘗試不同的搜索語句,比如“怎么讓別人能訪問我寫的網頁”“什么叫單頁面靜態(tài)網頁”“啥是GitPage”“Windows10怎么配置GitHub.io”“感覺自己很笨怎么辦”“怎么打開命令提示符”等等。其實一想,搜索引擎是多么好的一位朋友啊,只要你勇敢地描述自己的問題,他總能馬上嘗試給你幫助。這樣一步步地,我的小頁面可以被別人訪問到了,只不過說來慚愧,那時的技術是真的菜,實在是不怎么會切換頁面,就算會切換頁面也不會把一個excel文件顯示到網頁里,更不懂怎么能讓大家在上面做問卷。最后靈機一動,主頁一共就四個按鈕,四個按鈕分別導向了三個石墨文檔和一個問卷星。這樣就完成了,效果也不錯,很多人都通過這個平臺投票或者參與了問卷。
這次小經歷給了我蠻大的鼓勵。做這個網頁的那兩天(雖然可能有經驗的人一二個小時就搞定了,哈哈),可以說是茶飯不思,白天思考夜里琢磨。究竟怎么設計這個小平臺的結構,怎么從教務部網站上收集幾百幾千個院系的課程數據,怎么提取課程得分,怎么把這幾百幾千個課程根據課程評估的分數排序,把好課凸顯出來,怎么設計問卷,還有我最喜歡的部分,怎么改才能讓這個首頁看起來很好看,這些東西占據了我的瑣碎的大腦。我竟然還想起來,我當時根本不會用python做網頁爬蟲,我是用一款曾經主要用來自動化輔助閱讀的鼠標鍵盤自動指令模擬小軟件,一步一步地把點選操作程序化、流程化,指定多少秒點一下屏幕的哪個位置,然后再等多少秒再按一下page down,然后鼠標在哪個位置再點擊拖動選中,通過ctrl+c alt+tab ctrl+v,最后在excel里面收集了北大近兩個學期所有的課程信息及其評分。很傻,很原始,很低級,但是很管用,很有意思。我第一次感覺到,我可以擁有自我驅動的能力,我可以擁有技術上的進步,我可以通過這些事情變得更厲害,更重要的是,也許我技術上很菜,但我還真的可以做出一些也許會挺有意義的東西?;叵肫疬@些事情,真的很高興很開心。
臨近畢業(yè),系里老師找到我,希望我可以幫助同學們的研究工作坊搭建一個學術交流和資源交換的社區(qū)平臺。我很喜歡這個主意,這似乎是一個內部版的BBS+小網盤。不過,這可是一個完整的前后端全棧項目,不可能再用gitpage做了。我在github上找了很多可以學習的項目,也“哥、哥、哥”地請教了那個比我小一歲的實習時的后端同事。技術上的挑戰(zhàn)確實有點大,遲遲沒有什么突破,甚至可以說對我來說就是天方夜譚。最后我竟然找到了一個神奇的網站,他們可以定制BBS,雖然需要花點錢。我給我們的社區(qū)起了一個好聽的名字,填了幾個模板設置了好幾個板塊,就用免費試用版搭起了一個平臺,而且竟然還可以支持微信小程序。
我發(fā)給工作坊的同學們,他們紛紛進去發(fā)帖搶沙發(fā),效果不錯。遺憾的是,這個外包的方法不符合學校的信息管理政策,那就只能自己開發(fā)。多重困難以及新冠疫情導致我不得不在臨近畢業(yè)一個月的時候才開始找工作,使得這個項目最后變成和系里管網站的老師合作,把工作坊的word內容上傳到系里網站上像博客那樣掛著收尾,很是遺憾。
后來的我有一點迷茫。也許我應該踏踏實實地把需要的技術都學一遍,我迷茫于不知道自己的技術究竟還能不能進步,也不知道自己能不能在這最后一個月的時間里找到應屆生的工作。不過我可能是幸運的,在緊急辭去了實習的工作并全力刷題復習找全職工作的一個月時間里,我竟然真的找到了一家很不錯的互聯網公司的前端開發(fā)工程師的職位。作為一個社會學畢業(yè)的菜鳥的學生,每個月到手的工資竟然可以達到將近2萬塊錢。
做游戲是工作了半年之后才開始的事情。工作以后代碼逐漸寫得多了,對項目的理解也逐漸提升了。后來,不知怎么就冒出了“東南西北”這個小游戲的點子。
我從小打紅警,出門也很愛看地圖,以前也很喜歡在google earth里面滿地球瞎逛。我就想,也許對零散信息的組織這件事,就是一個我未經意間嘗試過的有意義的事情。而地圖就是一個很好的載體,因為它穩(wěn)定、漂亮、迷人,地圖上的要素其實可以是任何東西。也許,我也可以做一個叫作DarkNet的app,以更有意思、更容易讓用戶理解的方式向大家展示一個城市的不同圖層,比如建筑、下水管道、地鐵、綠地、公園、菜市場、城中村、書店、公共廁所、各種各樣的店鋪,這樣喜歡探索城市的人不用真的到處探索,也可以更快速便捷地了解他身邊都有什么。也許,我可以做一個叫作MapAnything的用戶主動標注地圖的app,里面都是網友自己上傳的各種各樣的稀奇玩意,大家可以在里面互動……越想越覺得,每一個idea都蠻有意義的,最后,我選擇了一個叫作“東南西北”的微信小游戲的方案。
將近半年時間的開發(fā)過程中,無數的心思、設計、實現、反饋和一遍遍推倒重來。在這個過程中,我確實感覺到自己的能力存在很大不足,但也很高興通過這個項目,我確實可以說自己已經不是一個單純的前端工程師,而是一個剛剛入門的全棧工程師了。
盡管這個游戲到現在可能還存在不少失敗的地方,但它畢竟是我的第一個真正意義上的全棧項目,因此我可能會繼續(xù)開發(fā)和完善,并且試圖搞個ios app,然后看看能不能通過審核上架,善始善終。既然給自己戴了個“獨立游戲”的帽帽,那就還是要頂著這個帽子努力加油呀。
以前在學社會學的時候,雖然學得不是很精透,但是總是能感覺到一種意思,就是它一直告訴我不能陶醉于一個東西太久。我所認為具有意義的東西,并不是天經地義的,而是從我的過往和我的生活世界中生長出來的。
一些以前廢棄的UI手稿
就拿這個游戲來說,我似乎想做一個面向大眾的科普游戲,可實際上,可能大眾并不需要這樣一款奇怪的游戲,也許只有我這種對辨識方向有奇怪癖好的人會想玩這個游戲。甚至更進一步說,這個游戲的設計初衷就和游戲的一些宗旨相違背了——最后它的樣子并不好玩,玩家并沒有什么樂趣。再換一個問題,可能也會有一樣的困惑,比如勸朋友轉碼?,F在各行各業(yè)生化環(huán)材農林牧漁的同學幾乎都在轉碼,雖然從個體的層面來看也許是個可以考慮的選擇,但是這樣的風氣正常嗎?會不會有點太瘋狂了?適合一個人的就適合另一個人嗎?每個人都有辦法在這里找到自己的意義嗎?
如果有朋友在糾結要不要轉碼,雖然我對于給出肯定的答案已經非常自我懷疑,可是我也很難因為推卸責任就糊弄朋友——轉碼也行,不轉碼也行。我還是會把我了解到的信息和盤托出,這些信息大部分可能是有利于轉碼的,也有一部分可能是不利于轉碼的。我能做的,也許就是建議朋友在做決定前盡量多地和形形色色的不同的人聊一聊,從而盡量地避免偏頗吧。