學習程式的起手式

你是否聽了朋友說寫程式很方便?
    你是否有著想轉職工程師的想法,卻又找不到方向?
        從人力銀行上看到的職缺與技能需求,好像很類似卻又不太一樣?
            聽了許多人說哪套程式語言未來出路廣、學習曲線低之類的,
                卻遲遲未下手開始,或是仍然迷惘中?

 

學海無涯 但時間不等人


不同條件及需求下,會使用不同的程式語言,但對於尚未踏入業界的初新者,很難體會其中的差別。東學一點西學一點,最後花了大把時間,卻都不專精,甚至消磨掉一開始的熱情。今天我就分享一些經驗,提供給尚未決定決定學習方向的你。在土法煉鋼花時間猛K書之前,不妨先花一些時間,參考一下我的經驗,對於規劃日後職涯或學習路線時,或許可以避免跟我一樣走很多冤枉路唷!

 

走你的路


為什麼要學程式
這題最簡單也最困難,初心者很多時候都是憑著一股希望(還是妄想XD)往前走,例如平均薪水較高、就業機會多等等,若已經有清楚的目標,規劃後面的學習路線就容易多了,例如:為了完成學業,需要批次繪圖或科學計算時,或許學習Matlab、R、Python等就很合適。

能不能寫程式
我印象很深刻,高中時有程式設計的課程,當時所有考試都是靠同學情義相挺才通過(笑),導致在大學時期看到程式的選修課,二話不說直接跳過,也一直都認定自己沒有寫程式的天分。直到攻讀碩士時,傻傻的用Excel拼命的趕工畫圖,結果進度慢的跟龜一樣,還醜到不行。還好後來有學姊提點寫程式,不然大概就要延畢了!!

過程中,從最簡單的計算開始、畫圖、調整參數修改樣式,到批次運作,都是自己靠著閱讀工具書作出來的。此時此刻才驚覺發現,原來我也有寫程式的能力。建議你,若完全沒有程式經驗的,不妨可以先試試安裝一套程式來玩玩看,若不想安裝,網路上也很多練習的資源,像w3schoolcodepen等。

要學甚麼程式
我的經驗是,想自學轉職的話,會卡在這個階段非常久,而且容易牆頭草,聽到哪個程式未來出路多、趨勢符合、或學習曲線低,就想學哪個。上人力銀行查詢,一堆技能看到腦袋要打結,好像懂了卻又一知半解,然後越看越心酸。我最近決定要砍掉重練了,順道將我整理的資訊分享給大家,如有任何講錯的內容,歡迎糾正!

 

站在巨人的肩膀上


現在網路資訊越來越迅速,加上手機的功能也已經非常強大,無論大小型公司,都需要宣傳自己的產品或建立與客戶聯繫的管道,在Application、Web對於工程師的需求也是相當可觀的。此外,最讓我嚮往的理由是,開發時接觸的程式多是open source,未來不會因工作技能而被侷限。我根據工作流程關聯性製做了一個簡易的圖表,簡單二分法就是Client端(客戶端、或統稱前端)與Server端(伺服器端、或統稱後端)。我會優先分享Server端的概念,因為Client端有許多延伸的概念,是我較不懂的內容,所以會花較多的篇幅描述。

Server端的不可或缺的主角就是資料庫,如果要用簡單的概念說明,資料庫就有點像Excel的表格,可以將我們需要的資料,整理成一張的表單。舉幾個應用的時機,如登入網頁需要輸入帳號密碼並驗證、網購買東西需要查看庫存等,不同使用時機會面臨不同挑戰,例如密碼的安全性、同時間的多筆交易要怎麼樣運作(Lock)等。資料庫相關的工作範疇,如設計資料庫或表單、實現CRUD、權限管理、備份復原等維護。知名的資料庫有MySQL、MSSQL、Oracle、MongoDB等,又可依資料庫型別分為RDBMS與NOSQL

因應Server端需要經常性的操作資料庫,同時也要回傳資訊給Client端或紀錄Client端Post的資料,Server端的框架就派上用場了,依工作性質可拆解成View、Controller、Model,也就是常聽見的MVC架構
Server端常見的框架,如Django(Python)、flask(Python)、ASP.NET(C#)、laravel(PHP)等,各家框架有各自對應的程式語言(如括號內所示)。使用框架時會碰到的工作範疇與問題,例如要實現商業的邏輯(如計算User Item Matrix,推薦顧客其他相似商品等),撰寫API提供給前端介接,則會碰到hash等安全性技術、資料格式轉換、撰寫API文件等。

Client端的工作內容,主要會由前端設計師或前端工程師負責,如版面、圖件設計、使用者經驗、RWD、狀態或安全性(Cookie、Session)、介接API等。客戶在操作網頁或APP時,最直觀的就是畫面好不好看、動態效果如何展示、使用上直不直覺等,因此 HTML / CSS / JavaScript 是絕對必須了解的程式。

若將網頁比喻成大房子,HTML是鋼筋,主要功能是將網站內容結構化,用標籤將想呈現內容包覆,不同標籤則有不同意義。如網頁中看到的文字,其實HTML語法是長這樣的,

<P> Hello World! </p>

CSS是裝潢,有了HTML的架構後,就可以針對不同標籤或內容調整樣式,如修改背景、顏色、大小等

<p style="color: red;"> Hello world! </p>

用HTML + CSS 大概就能完成基礎的網頁,上述被稱為靜態式網頁,在網頁中點擊了一個按鈕或超連結後,會連結至下一個畫面。但因為是直接導向一個新的HTML檔案,故整個畫面跟網址都會更新。
很多時候前後兩個頁面中的大部分HTML代碼往往是相同的,但每次應用的交互都需要向伺服器發送請求,這時JavaScript就派上用場了。我把JavaScript想像成家庭用品,例如拿起冷氣遙控器、按一下按鈕,就可以設定幾個小時後關機。

實現的核心概念是選擇一個HTML或CSS的內容或屬性當作對象,決定觸發的事件(例如:點擊按鈕),最後決定要做甚麼改變(例如由顯示變成不顯示)。這麼一來可讓使用者有互動感,網頁也可以根據使用者動作渲染出不同的內容,但都是在同一個網頁上,所以網址並不會更動唷。舉個例,氣象局的網頁可以調整一次顯示幾筆地震事件,當你點擊後,JavaScript會透過參數再渲染成你想看到的資料筆數。

JavaScript又可以再延伸出其他的框架或技術,jQueryAjax等。透過瀏覽器將一個網頁中所有元素轉換成DOM Tree,簡單說就是把網頁所有元件都轉換為物件,透過文件結構的表述,可以使用JavaScript去更動HTML或CSS原本的內容。但因為是物件,當有一個動態要實現時,寫JavaScript的概念依序會是,取得元素位置、呼叫動作的物件、把動作放到元素上,如此才能完成工作。又或者,JavaScript取得元素的指令有getElementById 、getElementByClassName、getElementByTagName,如果想調整<li>標籤內的內容怎麼辦? 此時jQuery就派上用場了,jQuery可視為JavaScript的函式庫,所以會JavaScript應該也要懂jQuery,原本好幾行的程式碼,使用jQuery可能一行就能實現啦,養成習慣讓程式碼看起來更簡潔但易懂,絕對是開發大專案的起手式啦!

另外,Ajax可以使Web應用程式更為迅捷地回應用戶交互,並避免了在網路上發送那些沒有改變的資訊。像我喜歡聽音樂的網站streetvoice,是否發現了,當你聽歌的時候切換網頁,但歌曲並沒有被停止唷!
近幾年,前端工作逐漸發展成更複雜的規模,過程中也讓好幾套前端的框架嶄露頭角,這邊列出GitHub上星星數較高的佼佼者,像Vuereactangular等,使用時機恰當,對於大型專案分工、日後的維護幫助也不小呢,但因為著墨不深,前端部分今天先到這裡,日後再分享更多的資訊吧!

到這邊是否已有初步的認識了呢? 專心先學好某端的知識,也許就能先找到工作,但未來若有機會碰到大專案,一定會面臨到語法維護、效能與效率的問題,同樣的結果,程式碼如何更簡潔或提高效率,某些工作前後端都能做,但由誰做比較合適?這些就大哉問了!