資料來源:inside

一個自學程式語言幾乎將自己逼瘋的親身經歷 – 軟體工程師 Quincy Larson

圖片來源:網路

     軟體工程師薪水正在逐年攀升中,2014 年軟體工程師的平均年薪達 $97098 美元(台幣三百萬)之高1,學習寫程式的熱潮更是席捲全球,下自8歲上自80歲每天都有人「Hello World!」一下,看著矽谷創業公司迅速崛起、一夜致富的空前盛況,相信許多人都正在考慮學寫程式、轉行當軟體工程師。

       人人都能學寫程式,這點毋庸置疑。只是在你「轉行」之前,也許你會想聽聽 Quincy Larson 從朝九晚五上班族「轉行」軟體工程師的親身經歷。
       Quincy Larson 現在是線上程式語言學習平台 Free Code Camp 的軟體工程師,前陣子他發表了一篇文章描述他自學程式語言而幾乎被逼瘋的過程,也在最後給真心想「轉行」的程式新手們一些過來人的意見。

圖片來源::inside
在此分享 Quincy Larson 的文章《A Cautionary Tale of Learning to Code. My own.》,本文非逐字翻譯,內文細節可能有筆者多加琢磨或改寫以便閱讀,請勿見怪。

一個學寫程式的警世故事 —— 我的親身經歷

         我是一個普通的上班族,平時穿西裝、坐辦公室,過著朝九晚五的生活,但腦裡一直有個模糊的創業想法。有一天我無意間在酒吧聽到隔壁桌的客人大肆討論著他藉由「Ruby」 來自動化他的日常工作、大大提高了工作效率。我心想:「『Ruby』,是吧?」回家後我立馬上網搜尋「Ruby」,十五秒後我已經開始學起程式語言 Ruby 了。
       一個星期後,我參加了人生中第一個駭客空間(Hackerspace),聽大家討論著程式語言像是 Scala、Clojure 跟 Go,太多新知需要吸收了,當天我抱了三本厚厚的程式語言書回家看,每本都看了 50 頁左右。
       身邊的一個朋友聽到我在學程式語言,他建議我應該要先把 Emacs 學好,在我學 Emacs 時,另一個朋友走過我身邊發現我在用 Emacs,他跟我說:「你怎麼會選用 Emacs 呢?!難道你不知道 Vim 比較好?」

圖片來源::inside

        於是我開始記 Vim 的鍵盤指令,這個時候的我覺得「下指令下得越快= 寫程式寫得越快」,還甚至因此換了 Dvorak 鍵盤 —— 程式開發者公認最有效率的鍵盤。

圖片來源::inside

         一段時間後,我已經用 Linux 作業系統用得很順手,還在 Udacity 上學習 Python。經過七個月的自學,我應徵上人生第一個「軟體工程師」職位。
         公司那時決定用 Ruby on Rails 來構建他們的產品,雖然我不會 Ruby on Rails,但公司認為我既然能自學 Python 跟 Django 並贏了一次駭客松,我自然也有能力學好 Ruby on Rails。
        前幾個星期對我而言非常的難熬,並不只是因為我要學習一個全新的程式語言、熟悉一個全新的開發環境 RubyMine(整合開發環境,IDE)、而且跟一個陌生的團隊合作,真正讓我覺得痛苦難熬的是:
我發現過去是我自己選了一條特別艱難的路來折磨自己。
        在自學的那段時間,我花了幾個月獨自坐在圖書館跟咖啡廳裡專研如何在命令列環境下安裝工具、debug Linux 系統問題,有時因為一個漏寫的括號、分號而卡了老半天,我修了無數個 MOOC 課程,但一直到了第五個月我才真正有點「作品」可以放到網路上,這些過程讓我相信程式開發是個永無止境的掙扎之路。
       結果看看我身邊的同事們,他們幾乎很少因為語法錯誤、打錯字、漏了個符號這種小事而卡關,因為他們的 IDE 都先把這些錯誤抓出來了;當遇到問題掙扎幾分鐘還解不出來時,他們會直接把問題丟給朋友,互相幫忙 debug;在開發程式時,他們總是在對方的位子隨性的來來去去互通有無。
       我的隊友他們十分忠於「自己的一套工具」,當然在許多場合(例如駭客松)裡他們應該都曾玩過許多不同語言、不同框架,但他們主要專注於精進自己現有的工具技能,對於能夠允許進入他們腦中「程式庫」的知識,他們的態度相對保守。
        就跟 ThoughtBot 等平台一樣,開發者只固定用少數但有效率的工具鏈(在這個例子裡,Rails, Vim, Postgres 跟 Redis),當開發者們只要全心全意的「用好」幾種關鍵工具時,他們全都成了可以互相合作溝通無障礙的專家。
        所以我真正的問題是,如果限制一個團隊的軟體工程師使用同樣幾種固定工具可以讓他們擁有超高生產力,那學習寫程式的新手不也是在只學固定幾樣工具的時候能夠學得最好嗎?
       其實線上的各種程式語言學習平台、程式營也是這樣教的,雖然聽起來理所當然,但是當你是一個人去面對這麼多的選項時,真的很難選擇該學哪一樣!我懂,因為我就是這樣經歷過來的,像是小狗在十字路口追逐來來往往車子一樣,追著一台又去追另一台,不斷的在原地漫無目的地橫衝直撞。
       一名真正優秀的軟體工程師,他的知識領域應該是「T」字型的 —— 對任何領域都稍有涉獵但至少在某一方面專精到底。
結果在幾個月的埋頭苦幹之下,我發現我自己是條底線「 _ 」...。在我遇過跟我一樣情形的程式自學者們(我遇到非常多),其中大概多數人都在這樣的過程中喪失信心、迷失方向,甚至放棄了成為軟體工程師的目標,我不希望這些情況發生在你們身上。

學程式語言需要你「一心一意」

       廢話就不多說,在此分享幾個我認為程式新手最容易犯的錯誤給你們參考:
§.語言、框架、工具,一個換過一個,而且妄想著自己能夠每樣都精通。
§.死守著自己「特製」的開發環境,死都不肯嘗試一些「現代工具」—— 被發明來方便開發者們合作交流程式碼、還可以自動除錯、自動填寫的神器。
§.在還沒把基礎打好時,就想嘗試一些新興的工具,像是 Docker 或 Famo.us 等。
        如果以過來人的身份給你們一個最重要的建議,那就是:「請一心一意」。
       我也想問,如果你正在學程式的話,你認為你的學習計畫夠「一心一意」嗎?如果你的答案是肯定的,那就不用再往下看下去了,快回去唸書實行你的計畫吧!因為我並不想給一些會影響你現在計畫的建議。如果你的答案是否定的,那沒關係,好消息是你可以從現在開始「一心一意」。

首先,你得先做出一些決定來起頭:

§.選一種你希望能作為未來職業的軟體開發領域:Web、Mobile、Gaming、還是 Embedded?我個人會推薦走 Web 網頁端,因為比較靈活彈性,不過如果你沒興趣走網頁端的程式開發,那就去 Google 「Getting started in ____ development」然後完全的投入你的身心吧!
§.選一種程式語言來學:JavaScript、Ruby 或 Python,每種程式語言有各自的網頁端開發工具(分別是 Node.js、Rails 跟 Django),除非你有特別的偏好,不然我會推薦學 JavaScript,因為 JS 是最普遍最受歡迎的程式語言。
選一個線上平台/課程來跟著學,這邊也推薦你幾個選擇:學 JavaScript 可以到 FreeCodeCamp 或 NodeSchool ;學 Ruby 到 TheOdinProject 或 Treehouse;學 Python 可以用 Udacity。要相信設計這些課程的專家們,而且依照推薦的流程循序漸進,不要跳來跳去。
§.選一個:買一台新的或二手 MacBook,不然就在你現有的電腦裡安裝 Ubuntu Linux。其他工具就按照你課程的需求跟著安裝就好,不要下載安裝一大堆有的沒的。
§.最後,當你做出上述四項抉擇後,前方的路就只有一條了,請保持清醒,忽略你在這條路上看到的新工具、新語言,他們是會逼瘋你、迷惑你的妖魔鬼怪,要一心一意地往前進,保持高度積極的態度逼自己每天有點進度,一天撥出半小時也好,只要有恆心跟耐心,你也能成為優秀的軟體工程師!

延伸閱讀

聯成電腦分享: JAVA程式開發前景無限好 應用軟體的魔術師

聯成學員精彩就業:逆風高飛,順利進入知名科技大廠!

聯成電腦精彩就業:從java 開始的程式之旅

聯成電腦好評價─精彩人物:賣麵小鰻變身APP程式設計師

arrow
arrow

    聯成電腦 發表在 痞客邦 留言(0) 人氣()