前情提要/這篇文章,寫的是一名文科背景的文字工作者,她第一次學「寫扣」的體驗。大家一直叫她做個網頁,但她不會 HTML、CSS,只會 Markdown 這款輕量標記語言,然後有天,就下海學後端了。更瘋狂的是她還沒有學習目標。登愣!
幾週前我報名了自家開辦的技術課程「輕鬆上手 Python 程式語言」。這是在歷經一年被推坑寫程式後,終於開始上課。我是三創育成的編輯,平日寫些與科技相關的文章,也採訪工程師,但本身沒有技術背景,是個百分百的文科生。
在上一篇文章〈Hello World(寫給教程式的人):print (“誰是初學者?”) 〉中,我記錄了第一次上程式語言 Python 課的心得,同時以學員的視角,給予了開班授課的資深程式語言老師更理解初學者內心世界的一些建議:初學者在想什麼?初學者在怕什麼?為什麼初學者會卡關?更重要的是,誰是初學者?
而現在你所看的這篇,分享的是我個人的開始學寫程式的心得:自己為何在拖沓一年後終於開始學?為何選擇 Python 這個語言?以及,學程式對我個人最大的收穫是什麼?如果你想直接看我走過一圈之後的建議,可以跳到最後一段。
觀察自己的喜好
與多數人不同的是,我學寫程式沒有具體的動機跟目的。這幾年世界各地吹起「全民寫程式」的風氣,坊間常見的理由(包含開班授課的文案),不外乎是轉職、擁有新技能,或心中已有專案點子,想要借助程式力量來「解決問題」。但上述沒有一項打中我的需求,盲目從眾也與個性不符,所以儘管被推坑一年之久,也不曾強迫自己去學。
加上我在 2018 年也曾參加過一次 Python 初級課程;但很快就荒廢了。荒廢最大的理由是雖然我對程式有些好奇,好奇的程度卻沒有強到能產生「有機興趣」(此為自創用詞,指的是自然生成、自動自發、自滾雪球,毋需外力刻意培養的興趣),也因此少了強烈的學習動機。
興趣對我而言是個重要的學習動機。根據個人的經驗,當興趣濃厚到一個階段時,自會開始翻書或查資料;當心中真的開始有強烈動機時,自會開始採取行動 — — 這就是我在醞釀、同時比較被動的「有機興趣」。
僅管這段時間我沒有刻意培養對程式的興趣,但藉著工作之便,我仍仔細觀察自己對技術的好奇程度:是增加?減少?能持續多久?比較容易被哪些關鍵字吸引?感覺比較喜歡哪個程式語言?原因是什麼?
這些自問自答跟觀察,都是我最後選擇 Python 不可或缺的參考因素。
因此,我會建議有意學程式的初學者們,倘若你沒有立即性的需求,像是轉職或必須即刻學會駕馭某個程式語言,不妨讓自己的興趣自然生成,因為較高的興趣可以降低學習的難受程度。
然而這段期間,也盡可能多讓自己浸泡在與程式相關的環境裡,不管是去滑教學單位的網站,或去專門販售資訊叢書的天瓏書局逛逛,都可以觀察有沒有哪些文字或畫面敲中了你的心。
這些摸索的小撇步,未必能直接幫你解答,但卻可能成為你做出選擇的敲門磚。而我的直覺告訴自己,當興趣醞釀成熟時,差的只是某個「臨門一腳」,或是一陣「東風」。
當東風來臨:為學習而學習,有何不可?
過去我最常被「你想用程式做什麼」、「你想做什麼專案」等問題轟炸,儼然必須有個有模有樣的點子或目的,才能學寫程式。我內心小小的抗議是:
難道,一定要知道要做出什麼,才能學寫程式嗎?難道,一定有個目的,例如轉職,才能學寫程式嗎?
難道不能只是因為想學而學嗎?
東風來臨的時候是 2019 年初。那陣子生活與工作皆發生許多變動,讓我深刻的體悟「活到老,學到老」這句諺語的重要性,心中突然湧上一股具體的慾望 ——
不行,我一定要學點新東西。
這個念頭冒出後,我隨即知道現在就是推坑自己學程式的最佳時機了。別人說得天花亂墜都沒用,自己推,才有價值。
就這樣,「為學而學」變成我學習的目標。聽起來有些不可思議,我曾經聽聞有人建議不要為學而學,這或許是來自你我小時都曾經歷的夢魘 — — 為讀書而讀書。然而這邊有個極大的差異是,我知道我「為何而學」:
我學習是為了保持頭腦運作、讓自己維持在學習的狀態。
這感覺很像某種積極魔人或接近廢話的心靈雞湯;但有著強烈批判性格的我,確實會擔憂自己會不會隨著年齡增長,不自覺地變得故步自封。
當然,想學新東西的時候學什麼都好,未必一定要選程式,但作為一位文科生,程式語言是過往沒探索過的未知領域,走上這條學習之路,追求的不只是新技能,而是一個未曾開闢過的視野。例如我在另一篇文章所說的,有時需要拋掉既有的思維。也許哪天我真能靠此技能賺錢,但更重要的是我能透過學寫程式 —— 一個屬於電腦的語言 —— 驗證自己還有學習及認識另一個新世界的能力。
如此一來,為學習而學,未嘗不是個明確有理又強大的目標?
為什麼是 Python?
事實上 Python 不是當初的首選。通常愈多人學、越多人會的東西,我越容易感到興致缺缺;但過去一年協助夥伴推廣 Python 課程,一些反覆出現在文案字眼引起我的注意:爬蟲、資料分析。
這兩個最常與 Python 連結一起的關鍵字,符合我的「研究」性格。雖然在決定以 Python 作為第一個入手的語言時,我並不知道要爬什麼資料,也不知道要分析什麼,但喜歡被滿山滿谷的資料圍繞的感覺,像個強大的磁力一直吸引著我,彷彿可以讓我回到過去做研究時,在各個學術期刊裡面東挖西挖一樣。
我真正知道自己可以拿 Python 來爬什麼資料的時候,是在第二次上完課時,腦海中出現明確的應用場景:我要做一個像是儀表板的個人網站,上面每天更新我請 Python 幫我固定抓的資料跟新聞,如此一來,就不用自已去不同的管道挖資料了。
過去被推坑寫網頁或架網站時,總想不到上面可以放些什麼有趣的東西,所以遲遲未動工,如今有了非常個人的需求,對網站及 Python 所能幫助我應用的場景,也多了更多更具體的想像。
原來這是程式語言在做的事
「最佳解」、「解決問題」
這些工程師們不停在嘴上嘮叨的話,我終於聽懂了。
這三個晚上馬拉松式的衝刺課程,算是我第一次碰程式語言,親腳踏入過去只是在旁默默窺探的工程師世界。同時,也時不時讓我回憶起以前採訪工程師時,我與他們的談話。過去,我總是以旁觀者的身份在聽他們談論如何自學程式、如何幫公司開發產品,如何建立技術社群;這次,我總算透過自己的雙手,敲打著鍵盤,實際走了趟他們口中所描繪的那個程式世界。
每敲一次鍵盤,都有種「恍然大悟」的撞擊感。
過去一年我寫作的題材皆與程式相關,例如側寫 Stack Overflow 創辦人 Joel Spolsky 的故事,也採訪台灣工程師。最常聽他們掛在嘴邊的就是工程師需要具備「解決問題」的能力。可我常納悶,究竟在解決什麼問題呢?
猶記 2018 年採訪了 Pinkoi 的後端工程師 Mosky,她聊到那陣子在幫 Pinkoi 做 promotion 的系統,以解決促銷不夠彈性的問題。由於當天訪談主題並非技術,所以這段對話稍縱即逝,我沒問要怎麼做出這個系統,她也沒多加解釋。但我很確定當時有聽沒有懂:究竟 promotion 系統要怎麼做呢?為什麼做出來就可以解決促銷不夠彈性的問題?
對熟悉程式架構及應用的工程師而言,「架一個網站」、「寫一個網頁」、「做一個系統」雖然只是一句話,但腦中有具體的地圖,知道可以從哪下手規劃步驟跟流程。
反之,對完全沒碰過程式的人來說,就是一片空白。而我就是這樣的空白。直到第一天上完課,老師交付了習題,要我們寫出一個「撲克牌自動洗牌機」,情境假設牌局中有四個玩家,我們需要讓洗牌機自動洗牌後發給四人,之後一個玩家退出,撲克牌要再發牌給三人。
我花了半天時間解題,解到一半恍然大悟 — — 原來所謂「做出」promotion 系統,就是這個意思。
所謂的「做出」就是眼前這一排排有著繁瑣步驟、但組合起來就能產生一個洗牌機的程式碼。同時我也發現,要做出心中的成品,中間要拆解成好多層的細節。而這些細節,又必須從最遠的目標,一步步回推,一個問題解決完後,再進到下一個,就像在玩關卡遊戲一樣。
一瞬間,過去與工程師們的對話全部湧上。原來這一切就是在「解決問題」:有人需要一個可以自動洗牌的撲克牌機;有人需要一個在玩家退局後,可以自動減去人數再發牌的機器 — — 所以我要做出一個可以解決這個需求問題的工具。
事實上那道題目我並沒有完全解完,因為解題很花腦力,光是在紙上列出要拆解的細項後,我就已精疲力盡;但 PyCharm 上的程式碼已經被我練習到數十行(註解也算進去了所以才這麼多…. 心虛)。
第二天上課時,來自 Taiwan Code School 的 Louis 老師邀請班上一位年僅十幾歲的同學 Oliver 上台 demo 他的答案。Oliver 是位國二生,自學 Python 好一陣子,這次報名上課是為了補足之前因自學而沒打好的基礎功。課堂上他坐我旁邊,我厚著臉皮問東問西,把他當成專屬「小老師」。
站在台上的他秀出程式碼:只有七行。
我心中不禁大讚「真漂亮!」。瞬間我又再次理解常聽到「追求最佳解」的意思。原來有些人說某些程式語言寫起來很「簡潔」、很「優雅」,就是在形容這個畫面。
我也終於了解,為什麼有些工程師會寫扣寫上癮。因為我自己也無形中被那七行程式碼挑起了鬥志。
想學程式的你,可以怎麼開始
這篇文章是寫給同樣身為想踏入程式領域但卻躊躇不決的你。儘管所分享的歷程、採取的方法及選擇未必能如法炮製,但每個人都可以從別人的經驗中,拼湊最適合自己的方法與起點。
「你要學哪個語言」、「你要拿這個語言做什麼」、「你為什麼要學程式」其實是雞生蛋、蛋生雞的問題。沒走過一遭,見樹不見林,當然就沒有所謂正確的選擇跟學習之路,也不容易獲得答案。許多人會感嘆自學繞了路,或好險很幸運沒亂繞,但這些終究是後話。沒有人會知道現在腳踩的起始點是不是「正確」的,只有是不是最符合現在自己狀態與需求的。
過去我因為困在「要用程式做什麼?」,不自覺的開始認定學習的目的非得是具體可見、有型態的東西,例如架設網站。一旦當我不覺得我需要架設網站時,好像就沒有學寫程式的理由了。然而,條條大路通羅馬,倘若我一直執著於回答「我要做什麼」,那我大概還要再等好一陣子才會真正開始下海學寫程式。
如果你不知道要寫程式做什麼,也不確定該選擇哪個語言,那麼我建議,就先憑直覺,順著自己的毛摸,敲幾下鍵盤,直接去感受吧。
當然,也還是有很多其他的切入點可以協助選擇,以下是我覺得可能是不錯的方法:
- 技術社群的氛圍:你喜歡互動交流型的?還是靜靜上課學習型的?每個語言的社群都有自己的文化跟個性,建議可逛逛各語言在 Facebook 上的社團。
- 學習資源的豐沛程度:記得曾有轉職工程師跟我說,他當初選擇 Laravel 這個 PHP 的 Web 框架,是因為網路上的資源很多、易讀,自學起來比較順暢。
- 市場佔比:如果轉職是你的目的,你可能會更在乎市場上有多少公司在使用某語言,或是接案的需求量。
- 薪資水準:雖然有些殘酷,但每個語言都有其市場價值。若你向「錢」看齊,這或許是個篩選的條件。只是,學成了程式,有沒有辦法轉化爲職場競爭力,也是因人而異。
最後,歡迎閱讀到這的讀者,如果你有不一樣的初學體驗,例如你怎麼選擇現在所學的語言,又是如何轉換到其他語言?這過程促成決策的關鍵因素是什麼?歡迎留言跟我們分享。
本文依 CC 創用姓名標示 - 非商業性 - 相同方式分享 4.0 國際釋出