什麼是「軟體工程師」?讓我們先看看維基百科上的定義:「軟體+工程」,顧名思義,軟體工程師是對應用軟體創造軟體的人們的統稱,軟體工程師按照所處的領域不同可以分為系統分析師、系統架構師、前端和後端工程師、程式設計師、測試工程師、使用者介面設計師…等等。各種軟體工程師人們俗稱程式設計師。
我們常聽到的網站前端、後端工程師、iOS APP 工程師、.NET 工程師、資料分析師都屬與軟體技術的一環,它們的工作都是透過撰寫程式來解決雇主、企業、組織 、世界的各種問題 。例如 架一個網站銷售水果、寫一隻訂票的 APP 、透過 Python 分析顧客資料,找出主力客群…等。雖然應用的領域不同,但學習脈絡卻擁有共同的邏輯存在!
由於要解決的問題不同,每種領域的軟體工程師技能養成的順序也不完全相同,不過大方向卻很類似!畢竟萬丈高樓平地起,沒人天生下來就直接從高階技能開始學習。
這系列文章我將用學習「英文」的生活化比喻,讓大家更好理解在學習時的順序與各種關聯性。
您不須要很厲害才能開始,而是須要開始才能變得很厲害
許多人非本科生,在剛進入資訊領域時,並沒有太多明確的學習方向,甚至不知道該如何選擇程式語言,而 常見的學習管道不外乎是買書自學、去補習班 、看看網路文章或是參加社群,這都是進入資訊領域不錯的方法,雖然半途而廢的比例一直以來都很高,不過最起碼有個開始,總比什麼都不做的人要強上許多…。
每個想要成為軟體工程師的人,不管是想朝網站、手機應用、物聯網、或遊戲開發…等領域前進,都有不同的階段性門檻需要學習與克服,從基礎、進階、應用、整合到測試,關關有不同的挑戰在前方等著你。
學程式跟學英文的概念幾乎一致, 差別在於程式是對電腦溝通, 學英文是對人類 溝通。對象不同,但目的卻相同。
而這系列文章要帶大家探討在成為工程師這條路上,會經過的幾個學習階段,並透過生活化的案例帶大家更好理解軟體資訊領域的「世界觀」。讓你對於軟體工程的世界更有概念!
開始前,我想先談談學程式半途而廢的常見原因:
根據過去的經驗與資訊搜集,大概歸納了以下幾點:.
- 學習沒有方向,無頭蒼蠅
- 學習很孤獨,沒人陪伴與討論
- 英文不佳,各種未戰先卻的恐懼
- 根本就不是那麼有興趣
- 其他個人因素…
在這篇文章中,先不探討學習程式的動機以及誘因是否足夠強烈,我們先談談部分許多學習者從程式入門到正式成為工程師的這段過程中,陣亡率很高的重要原因 :
「缺乏學習方向與基本概念 」,不斷地重複撞牆、缺乏著地感、無法知道所學是否正確…,導致學到一半開始懷疑人生,最後放棄 。
對於一個文組生、商科生,若是在自己熟悉的領域還好說。 但進入新的領域,面臨到成堆的專業術語、技術名詞,再加上沒有明確地方向引導,「我好像不是這塊料」的不安全感就會在心中油然而生。很快速地,這位學生八九不離十會選擇放棄或逃避。
做點功課,先了解基本的概念再進行學習,勝過埋頭苦幹
因此,我認為開始學習程式時,通盤了解這個世界的全貌與脈絡非常重要,這點不管放在任何領域也都適用,就像是我們看一本書時,書本通常交代前言、目錄,向我們展示這本書得大綱架構,將內容與順序交代清楚, 讓閱讀具備目標性一樣。
同理,若具備清楚的基本觀念,讓學習程式有方向,知道自己目前的學習階段,以及下一步改往哪走,又將往哪個領域前進。剛入門快速陣亡的機會會下降許多,學習過程也會變得更有效率。
剛開始總會要學個基礎吧!
要學好好講話前,中文注音符號、英文的單字、片語要懂,程式語言當然也不例外!
程式基礎,不外乎就是了解基本的程式語法、句子以及表達方式,程式語言其實都很類似,會有變數、流程控制、函式、迴圈…等等基本的構成元素,並擁有各自功能性,而工程師的任務在於撰寫出電腦看得懂、符合規範的程式,執行程式解決問題。
就像學英文一樣,需要了解基本的單字、片語,明白何謂形容詞、代名詞、動詞…!最後透過拼接這些語言的元素,來達到溝通的目的。
我們以 Python 這個大家普遍認識的程式語言來當實際範例:
print('HiSKIO 嗨 程式技能')
# 我們將上面寫好的程式交給電腦(就是執行動作)!當電腦讀取到這段語法後,就會將「HiSKIO 嗨 程式技能」印出!達到我們與電腦溝通,並要求電腦做出特定動作的這項目的
讓電腦幫我們計算數字,也是小菜一碟而已!
a = 1
b = 100
c = b - a
print(c)
# 計算並輸出結果得到 99
電腦科學的基礎 – 了解電腦在想什麼以及它如何以及他如何運作
說句實在話,如果你是單純「應用導向」,例如:想做一個「個人網頁」。你其實完全不需要理會「電腦科學」這個學科 。但是,若您是想要像大學資工系同學一樣朝真正的軟體世界前進,那熟悉並了解這個未來您會不斷與他對話的目標物體就變得很重要了!
私心推薦:電腦科學教材
計算機概論的內容不外乎明白電腦的歷史、組成以及內部運作原理,探討進位制、明白資料儲存的方式、資料的最小單元,以及各種你可能常常聽到,但卻又不那麼熟悉的名詞。雖然不一定完全了解很深的電腦科學或者親自去拆組裝電腦,盤點哪條電路、哪顆電容…,但是站在學習的角度來看,肯定是基礎學地越扎實越有幫助,如果你願意抱持著一顆求知的心,探索更多電腦的內涵,相信收穫會比學習單一應用的人更加豐盛!
學習根本沒有捷徑!基礎能力超重要!
如果連話都講不好,該怎麼跟目標溝通?
市面上許多程式課程資訊,舉著招生的大旗,要你付萬元學費,並告訴你24小時精通某種程式語言, 基本上都只是行銷手法罷了。學習程式根本沒有所謂的捷徑!該學的技巧、觀念一個都跑不掉。如同我們背單字、練片語、學作文一樣,不熟悉語法本身、不了解運作原理,最後遇到問題也只是無能為力。
我建議初學者一定要找到適合自己的教材,請直接忽略看不懂的內容,不要浪費時間在自己無法融入的教材上面,另外若你的英文水平只有中等,最好使用中文教材。畢竟學習新的知識,用自己熟悉的語言學習最快!
除此之外,可以嘗試去閱讀該程式語言的「技術文件」,「技術文件」類似一本英文辭典, 它詳細記載了每個版本的程式語法、規則以及範例。在學習時可以拿來當參考對照。
由於每個程式語言有很多的功能與規範,很難無法完全記下一條條細節(背字典),在實務上,透過查詢各種技術文件,獲取正確的技術使用方法,也是工程師必備的能力之一。
如何鍛鍊基礎能力?
熟能生巧!練習、練習、再練習
總結來說,練好基礎語法看似單純,但卻極其重要。 平常一定要勤加練習。我建議初學者可以使用 Leetcode 進行練習。
LeetCode 是一個收集工程師面試考古題的網站,許多公司透過 Leetcode 進行面試篩選,考驗應徵者對於基本語法的熟練程度(有點像多益、雅思等英文檢定),再行決定是否進行面試。
當然,您也可以透過其他方式進行練習,例如實作一些簡單的小應用,例如計算機、找質數、工作清單..等等提升熟練度。當你面對目標問題時,能越快速地想到解決方法,就代表你的基礎越穩固!