Chao-Wei Peng

時光飛逝,陪伴同學們成長的日子總是過得特別的快。2022/07/01 我們 WeHelp 第二屆的學員,正式畢業!祝福所有學員都能順利的找到適合的工作,走向更理想的職涯。

WeHelp Fellowship #2

WeHelp 每位畢業學員,自然是通過重重的艱難考驗,在沒有手把手的教學之下,獨立自主學習網頁前後端程式開發的技能,最終能進入軟體產業,貢獻自己的心力。

談到第二屆的學員,有三件事情,彭彭想和所有人分享,那就是關於全遠距工作、高齡轉職者、以及來自香港的朋友。

全遠距工作的可能性

Jennie 來自於輔仁大學護理系,剛畢業的新鮮人,對於軟體產業有相當大的憧憬,尤其是全遠距工作的可能性,更是她之所以想要花費這麼多心力來進行職業轉換的主要因素。

當然,無論我或者是 WeHelp 的助教群,都知道遠距工作,尤其是全遠距的工作機會,是給那些已經在業界證明自己的技術能力、取得足夠的信任、且擁有穩定工作人格的資深工程師的特權。通常不是新鮮人能拿到的,更不要說是轉職者了。

或許真的有機會,誰知道呢?但肯定很不容易,妳要有心理準備!

Jennie 基本上沒有在聽我講話,至少我是這麼覺得。( 嘆 …

以我的觀點來看,她有著異常的堅持和熱情,並且深信自己總是能克服萬難,達成自己想像的目標。而這些內在的力量,也紮紮實實的反應在她的技術學習和實作能力上!

我必須說,Jennie 幾乎打破了我對新手轉職者的一切想像,短短的半年從前端到後端,從 React 到 Python Flask 到 Node Express,從 MySQL 到 MongoDB,從 Docker 到 CICD,從 AWS 到 GCP,把我十年的功力全部濃縮在半年間完成,在我過去的經驗裡,從來沒有任何一位轉職者達到她的高度。

當然,她還是有些缺點和不足,這是毫無疑問的。但她已經證明了自己的品質,打破了我們的想像,最終,獲得德國公司 Crafthunt 的全遠距工作機會,已經在工作了呢!

高齡轉職者的價值

思傑是來自遊戲產業的遊戲設計師,接近四十歲。中年工作者,若說要轉換職涯跑道,其面臨的壓力和剛畢業的新鮮人顯然完全不在同一個等級上。

記得過往的招生說明會中,許多人會問,我年紀這麼大了,會不會更不容易成功轉職?WeHelp 會收年紀這麼大的學員嗎?事實勝於雄辯,機會顯然是有的,門是開的,這點毫無疑問。

但我也必須坦白的說,高齡轉職者若不去看其他的部份,單就年齡來說,確實是一個劣勢。然而,身為一個中年工作者,是否能展現出歲月帶來的正面價值,就是此時最關鍵的部份!

既然是中年轉職,思傑知道自己有不能失敗的壓力,在 WeHelp 的訓練過程中,相當紮實、盡可能提前地完成每一次的任務,並且利用多出來的時間,不斷地讓自己學習更多、更深入。

我記得非常清楚,第二屆畢業典禮當天,超過十位同學的心得感言中,表達了對思傑的感謝,感謝他在訓練的過程中,積極熱心的技術協助,時而溫柔,時而嚴厲,幫助大家度過難關。

我要當 WeHelp 第一個四十歲轉職成功的案例!

思傑這麼說了。

那麼,身為創辦人,我有不支持他的理由嗎?

來自香港的深度交流

熊熊是來自香港中文大學,食品營養學系的社會新鮮人。

難以忽視的個人特色!當然,是可愛的 ~

我第一時間的印象大概就是這樣。

不僅僅是因為她來自香港,更是因為她人如其名,熊熊的所有東西都和熊有關,我們在線上進行交流、貼圖、文字,乃至於她的求職專案,全部都是可愛的熊熊,第一時間被所有人認識的,大概就是熊熊。

當然,關於轉職成為軟體工程師這件事情,紮實的知識和技術實作能力是極為重要的,熊熊在這方面表現出來的水準確實很令人放心:身為一位後端工程師,她能同時把前端做得像樂園一般可愛精緻的形象;身為一位轉職者,她能一邊學習新技術,一邊立刻用學到的技術接一些小型的案子來賺取生活費!

極具風格的個人特色加上專業的能力,總是能讓人留下深刻的印象,或許是熊熊在投遞履歷之後的短短一週,就順利找到適合的公司,並且開始工作的原因。

第二屆的 WeHelp 有兩位來自香港的學員,香港和台灣共享相當多的文化價值,雖然,必然有些差異。多元並存對於我們而言並不陌生,甚至可以說是相當歡迎,樂在其中,在我的經驗裡,港台兩地擁有非常剛好的距離,期許未來能夠有更多的交流。

WeHelp 第二屆校友分享會

我們即將舉行線上的校友分享會活動,以上三位校友將親自和你分享他們的經歷,有興趣轉職的朋友千萬別錯過。

校友分享會直播紀錄:https://youtu.be/fHRWPRtCTaQ

WeHelp 第三屆招生到 9/11 截止,錯過再等一年哦

我們利用半年的集訓時間,提供密集的作業和專案實作、求職導向的模式,訓練人們成為前端或後端工程師。

招生說明會直播紀錄:https://youtu.be/rxOG8bFK_3c

--

--

我是彭彭,WeHelp 的創辦人,同時具備心理學和資訊工程背景,從事程式教育超過十年,協助數百位學生成為軟體工程師。

WeHelp 團隊具備軟體開發的技術專業,以及深厚的人才培訓經驗,專注於養成能和業界順利接軌的網站前端、後端工程師,您可以透過以下影片快速了解我們的運作細節:

發掘潛力人才:

我們透過 WeHelp Bootcamp 邀請有志於成為軟體工程師的申請者加入培訓,申請者必須具備以下特質,證明自己是一位潛在的技術人才。

  1. 強烈的熱情和動機:為了熬過艱難的訓練規劃,這是必備的要素。
  2. 重視細節的品質:對於細節的重視是絕佳的人格特質。
  3. 積極主動:總是能做得比預期更多更好。

邀請的過程中,WeHelp 更重視申請者在申請過程中的實際行為,勝過於單純的文字或口語說明。

嚴格培訓過程:

WeHelp 要求學員投入每週六十小時,持續半年的魔鬼訓練計畫。為了能真正建立學員獨立開發網站系統、以及自我學習成長的能力,我們有以下的方針:

WeHelp 提供的訓練服務:

  1. 每週循序漸進的任務規劃。
  2. 嚴格檢核學員每週任務的完成狀況。
  3. 透過 WeHelp 社群的朋友,以及助教群,協助學員擴展視野,了解業界的現狀和需求。

WeHelp 不提供的部份:

  1. 沒有手把手的程式教學。
  2. 不會幫忙學員寫程式、不會幫忙學員完成專案。

我們都知道一個軟體工程師必須具備運用程式解決問題的能力,唯有透過嚴格的訓練,讓學員面對殘酷的真實並克服之,才能夠淬鍊出極具潛力的軟體工程師人才。

畢業學員成果:

每一位從 WeHelp 畢業的學員都必須通過嚴格的任務成果檢核,我們不會為了討好學員在檢核的程序中放水,這是 WeHelp 對自我的期許和要求。

所有畢業學員都會依靠自己的本事,產出以下成果:

  1. 旅遊電商專案開發:由 WeHelp 提供設計稿和每週進度規劃,學員必須完成網站前端、後端、資料庫,並上線到雲端服務中。
  2. 合作專案練習:透過 Git 版本控管工具,和其他學員進行合作。
  3. 獨立個人專案開發:每位學員在畢業前,都必須自行規劃、開發個人專案,由學員獨立完成專案的程式撰寫、系統架構、網站上線的動作。

WeHelp Demo Day 學員專案成果展示

學員畢業前夕,我們舉行 WeHelp Demo Day,展示所有畢業學員的個人專案成果,並邀請外部的業界人士來參加。

參與 WeHelp Demo Day,您能夠快速地找到最適合團隊的網站工程師,我們提供學員的專案和聯絡資訊,由您主動和有興趣的學員進行聯繫,WeHelp 團隊樂於見到每位參與活動的人都能滿載而歸。

若您對 WeHelp 或是 Demo Day 活動有興趣,請隨時到以下 WeHelp 官方網站,查看所有的細節和活動資訊:https://training.pada-x.com/wehelp/

WeHelp Demo Day

--

--

八月底,WeHelp Bootcamp 第一屆的學員畢業,隨即在市場上展開求職,希望能順利的成為一名前端或後端工程師。非本科系的求職者,第一次面對市場,從來都是相當有壓力的,而我參與了無數這樣的過程。

WeHelp Bootcamp 接近九成的畢業學員,可以在三個月內,順利進入職場;然而同樣一群人,投遞第一份履歷之前,卻擔心自己可能會永遠找不到適合的工作。

這反應了轉職者無論再怎麼準備妥當,實際求職過程中,依然會有嚴重不安焦慮的成份存在。今天,在這裡,想和大家分享我心中的求職階段,以及求職過程中關鍵的事項。

WeHelp Bootcamp 第一屆學員,聚會場景

一、爭取面試機會

爭取面試機會並不容易,這也是我們花了整整半年希望達成的目標!

大家可以想像,好的職缺一開出來,徵才公司收到了上百份的履歷,但時間有限,最多只能和十個人面試。此時,只憑幾頁的履歷內容,就要決定面試對象,這是多艱難的事情。反過來說,如果我們投遞履歷後,多多少少能夠取得些面試的機會,那麼已經通過最困難的一關。

以下兩個重點,讓轉職者在實際求職時,雖然沒有本科系的學歷,仍然能取得相當多的面試機會:

  1. 足夠水準的專案作品
    專案作品必須是一個確實上線,可以被直接驗證功能,被檢視程式碼品質的東西。專案作品也必須以真實產品的標準來自我要求,任何我們平常在使用網站時不希望看到的狀況,都不應該在專案作品中出現!
  2. 履歷的內容和基本文書處理
    自我推銷的能力極為重要。履歷的內容必須直接、自信、開放且專業,任何實際運用過的技術都應該表達清楚,盡可能的讓徵才方可以僅憑履歷就完全了解我們的背景經驗和技術能力。當然,段落結構、文法錯字、排版舒服等等基本文書能力,更是不能輕忽的工作!

二、爭取更多更好的 Offers

如果履歷沒有誇大其詞,沒有謊報自己的經歷背景,沒有表述自己根本不會的技術,沒有放不是自己做的作品。那麼,公司邀請面試的同時,已經肯定了求職者,達到該職缺的基本門檻。

面試時的重點有兩個:

  1. 確認技術能力的真實水平
    直接的互動可以更清楚的確認求職者的技術水準,雖然每間公司做法不同,但大致上還是有個脈絡。可能的方式包括:追問專案作品相關技術細節;技術議題問答;現場程式或架構解題;最嚴格的極限測試。
  2. 確認公司文化適合程度
    比起大神、高手,很多職缺更想要找一個技術達標,又能和現有團隊合作愉快的對象。雖然擁有好的社交能力會有相當大的助益,但真正的關鍵是我們是否發自內心的認同公司,想要這份工作,而不是其他工作。有充足內在動機為前提,適當展現善意,很容易就能讓彼此產生共鳴。

技術能力的關卡,通常需要特別針對面試做準備。包括回顧自己曾經使用的技術,實際練習臨場技術問答和程式解題。極限測試通常無法事先預期,保持不卑不亢的心態,在高壓的面試中,才能冷靜的思考和互動!

適性的部份,有賴於我們的自我省思和基礎溝通能力。我們是否曾經認真探索自己的喜好、目標、想要什麼、不想要什麼?試圖說服別人之前,必須先說服自己!再來,要能把心中的想法和感受,清楚的表達出來。各位,別以為這件事情很容易。

結語:轉職者心中的小劇場

非本科系的轉職者,容易被同領域的人貼上標籤。然而,我們要知道,這個標籤本身是無意義的,所以轉職者更不需要特別幫自己貼上非本科系的標籤,這點非常的關鍵。

我們是否具備某個職位需要的技術溝通能力?對於更高階的技術職位而言,我們是否具備 Computer Science 的核心修養?我們是否有能被看見的貢獻,被普遍的認可?

並非拿到學位,才能證明我們擁有深厚的技術底蘊;而是我們先讓自己擁有深厚的技術底蘊,學位只是要與不要的問題而已。

當今知識爆炸,學習管道無限。但是,我們是否真的願意再度投入時間和精神,強化技術深度?或者透過不同專業的整合能力,點亮自身的獨特性?這是每個轉職者需要思考的問題。

--

--

2021 年的 2 月到 8 月,我和一群有志於轉職成為軟體工程師的朋友,一起攜手進行了一場長達半年的網站技術職業訓練,也就是我們第一屆的 WeHelp Bootcamp。

過程中或許有些顛簸,但最終,我們還是克服萬難,更進一步。

受到疫情影響,年初時留下少數的現場活動紀錄

專案、求職導向、自主學習

如何轉職成為軟體工程師?對於其中的關鍵,我們有相當充足的信心。

訓練營的第一天,就把大家當成軟體工程師看待。整個訓練中,精心規劃的每週任務,就像職場上接收到的工作任務一般,讓學員在實際完成開發的過程裡,自主學習,掌握軟體工程技術實作的細節。

導師和助教在過程中,沒有提供手把手的教學,只有關鍵字和大方向的提點。儘管如此,我們期許自己能在學員感到沮喪的時候給予適時的關心,像是一張安全網,像是友善但堅定的 Mentors,讓大家能更放心地去挑戰未知,建立信心,習得軟體工程師獨立解決問題的核心能力。

線上、遠距、疫情中的挑戰

WeHelp Bootcamp 為了讓各地的朋友都有機會參與,主要採取線上遠距的方式進行。而第一屆的訓練營,更碰到嚴峻的疫情干擾,導致本來規劃的實體活動幾乎全數取消,這讓我們擔心學員是否能保持心情穩定,有效地跟上進度,最終完成訓練。

就像許許多多因為疫情而遠距辦公的企業一樣,我們相信,無論如何,終究可以想出辦法,滿足遠距溝通的需求。

基本透過 Slack 互動問答的空間是肯定不能少的,而我們也積極利用現代化的科技工具,關心學員進度,並且讓學員分享彼此的狀況,達到更好的群體效果。中後期面對更加艱難的挑戰時,訓練營更主動安排每週多次 Office Hour 時段,在社群中建立更多互動的機會。

畢業學員具備獨立求職能力

經過半年的魔鬼訓練,畢業後,學員必須勇敢、獨立面對在就業市場上求職的挑戰,為自己的未來做最後的奮鬥。

最終,我們第一屆畢業學員的 80% 在兩個月內,成為軟體工程師,就職於新創團隊、中小企業、大企業之中:包括 Microsoft 微軟、研華科技、台灣電通、玉山銀行、塔圖科技、人易科技、德安資訊、HTC、Pinkoi、Tomofun、Flux、Fugu Fish、LeadBest 等等公司行號。

由於訓練營沒有提供企業媒合服務,學員必然要有超越其他求職者的技術能力和專案成果,才能順利找到工作。因此我們專注在強化學員本身的軟硬實力,讓大家畢業後,只需要靠自己就能掌握住求職市場上的機會!

成果相當令人欣慰,我們必須說:這一切主要是學員自身不懈怠努力獲得的回報!訓練營只是從旁協助,指著遠方,並且在學員最低落的時候,扶上一把,僅此而已。

能幫助第一屆的夥伴們順利轉職,總是讓彭彭感到安心,也就宣告著第二屆的 WeHelp Bootcamp 即將在今年十一月一號,展開序幕。

--

--

Photo by Spacejoy on Unsplash

Python 裝飾器是一個很特別的程式開發技巧,能夠將複雜的函式流程包裝、簡化成容易使用的宣告式語句。

本文很快的和大家說明 Python Decorator 最基本的技巧和運用方式。

回呼函式

在談裝飾器之前,我們要先聊聊回呼函式。回呼函式的運作邏輯,就是把函式透過參數傳遞到另一個函式中,如下程式碼範例:

def fn1(cb):
cb() # 呼叫傳遞進來的回呼函式,此範例最終印出 Hello
def fn2():
print("Hello")
# 呼叫 fn1 函式,將 fn2 函式透過參數傳遞到 fn1 函式中
# 透過參數傳遞到 fn1 函式中執行的 fn2 被稱為回呼函式
fn1(fn2)

裝飾器的入門

裝飾器其實就是一個精心設計的函式:裝飾器函式固定接收一個回呼函式參數,並且必須回傳一個函式供後續執行。

最簡單的裝飾器,只要直接將回呼函式回傳即可。回呼函式在裝飾器中被回傳後,自動被系統呼叫、執行。請參考範例如下:

# 定義裝飾器 fn1,其實就是一個函式,固定接收一個回呼函式參數
def fn1(cb):
return cb # 直接回傳回呼函式,系統會自動呼叫,此範例最終印出 Hello
# 使用裝飾器 fn1,在裝飾器名稱前面加上 @ 符號,下方則定義回呼函式
# 這是一個帶有 fn1 裝飾器的 fn2 函式
@fn1
def fn2():
print("Hello")
# 呼叫帶有裝飾器的函式 fn2
fn2() # 等同於上述範例的 fn1(fn2)

裝飾器的使用

概念上,我們利用裝飾器函式做前置工作,接著再執行實際呼叫的函式。以上述的例子來看,最後一行,執行帶有 fn1 裝飾器的 fn2 函式時,其實就是先執行 fn1 函式,然後再執行 fn2 函式。

以下範例的裝飾器會固定從檔案中取得資料,放入全域變數中,然後再把取得的資料印出來:

# 宣告全域變數 data
data=None
# 定義裝飾器 getData
def getData(cb):
global data
file=open("檔案路徑")
data=file.read()
file.close()
return cb
# 定義 show 函式,帶有裝飾器 getData
@getData
def show():
print(data)
# 呼叫帶有 getData 裝飾器的 show 函式
# 1. 先執行裝飾器函式 getData,讀取檔案資料放進全域變數 data
# 2. 接著執行函式 show,將全域變數 data 的資料印出來
show()

裝飾器是一個非常精緻的程式技巧,牽扯到複雜的函式運作流程。因此,建議大家可以把上述的範例都實際執行、修改看看,這樣能有效的幫助你掌握其中的細節哦。

如果對回呼函式的基礎有些疑惑,可以參考 Python 回呼函式教學影片

--

--

早在 IE 成為邪惡代表之前,全球第一個圖形介面瀏覽器:Netscape 網景公司,發明了一套能在瀏覽器中運行的程式語言,幫助開發人員製作互動性更高的網頁介面。

西元 1995 年,JavaScript 誕生。

二十年來,隨著網際網路對各大商業領域的攻城掠池,JavaScript 的重要性也水漲船高。至今,是所有網頁前端工程師都必備的基礎技能。

Photo by Shahadat Rahman on Unsplash

處在歷史機遇中的 JavaScript 開發者社群無法滿足於此。終於,某天,Stack Overflow 網站的創辦人 Jeff Atwood 喊出一句:「所有能用 JavaScript 開發的應用,最終都將被 JavaScript 吞食。」

Atwood’s Law: Any application that can be written in JavaScript, will eventually be written in JavaScript.

這當然是一極具爭議的論斷,卻也強烈的表達出一個事實:JavaScript 可以用來開發幾乎所有重要領域的應用程式。

那麼,讓我們看下去。

網站前端開發 Front-End Development

無須贅述,直接跳過。

網站後端開發 Back-End Development

西元 2009 年,Node.js 橫空出世!

以往只存活在瀏覽器中的 JavaScript,透過 Node.js 執行環境的支援,終於能獨立在作業系統中運作,奠定了運用 JavaScript 開發網站後端伺服器程式的基礎。

Node.js 搭配 Express 網站框架,串接 MongoDB、MySQL 等各大資料庫系統,迅速地成為相當受歡迎的伺服器後端解決方案。

不僅如此,Node.js 更進一步解放 JavaScript 所有的可能性,開創了全新的紀元:無論是行動應用、還是桌面應用程式,在 Node.js 產業生態的支援之下,都對 JavaScript 敞開了大門!

行動應用程式 Mobile App Development

前端三大框架 React、Vue、Angular 大家都不陌生,其中 React 更是最早將觸角伸到行動應用領域。

西元 2015 年,Facebook 推出了 React Native 行動應用開發框架。

React Native 讓熟悉 JavaScript 和 React 的開發人員,運用既有的程式技巧,建立能在 Android 或是 iOS 系統上運作的原生應用程式。至此,JavaScript 展現出來的跨平台能力,成功吸引了大量新創企業的技術團隊投入其中。

桌面應用程式 Desktop App Development

綜觀過去二十年產業趨勢的變化,從網際網路時代到智慧型手機時代,從網站開發到行動應用開發,傳統桌面應用領域逐漸淡出主要的熱點舞台。

儘管如此,桌面應用程式對於專業工作者而言依然不可或缺,從 Photoshop 到 illustrator;從 Eclipse 到 Visual Studio Code 等生產力工具,依然是桌面應用程式的天下。

透過 Electron 框架的支援,運用 JavaScript 開發跨平台的桌面應用,持續受到許多企業的青睞。著名的產品包括 Visual Studio Code、WhatsApp、GitHub Desktop 等桌面應用都是運用 JavaScript 撰寫而成。

JavaScript is Everywhere

除了上述提到的幾個重要領域之外,另外諸如嵌入式系統、遊戲開發、甚至機器學習,JavaScript 都沒有完全缺席。

身為熱愛 JavaScript 語言的程式開發者,除了樂見於此之外,我們也將持續投入心力,讓我們所擁有的,繼續發揚光大。

不只看著它發生,還會努力促使它發生。

--

--

初入職場,好不容易成為軟體工程師。面對全新的職涯,未來的一切都很新鮮、值得期待。

然而,經過半年、一年之後,我們開始持續地遭遇挫折,越來越覺得難以再往前跨出重要的一步,陷入嚴重的自我懷疑。我們和往常一樣不斷學習,不敢鬆懈,但眼前的目標依然遙遙無期。

Photo by Lina Trochez on Unsplash

要怎麼做才能變成資深工程師?找到更好的工作?或者更重要的,我如何肯定自己的價值?對自己更有自信?

這一切都要回到最初的問題:軟體工程師的價值到底是什麼?

軟體工程師的價值

厲害的技術,不會創造價值。除非這個厲害的技術解決了重要的需求!

幾乎每個成為軟體工程師的朋友,都有一段持續學習、努力精進技術的時刻,而這樣的好習慣,也確實幫助大家找到一份不錯的工作。然而,長期養成的習慣,加上不斷地被鼓勵,讓很多工程師深陷其中,限縮了視野,失去了對其他事務的關注。

因為不安全感、因為想要變得更強、因為工程師本來就要持續的學習,不斷地鑽研各種新的、看似厲害的技術。但是,為什麼,總是無法獲得相對應的報酬或回饋呢?

是的,若我們沒有進一步運用技術,解決重要的需求,那就沒有真正值得被看見的價值!

發掘需求,主動承擔

組織中,工程師身為一個小螺絲釘,被安排完成各式各樣的任務,就算是再怎麼不被重視的任務,都可能是整個產品中,無法或缺的一部份。

小螺絲釘,依然有不可或缺的價值,那正是我們擁有一份穩定薪水的理由。然而,如果我們想要更多、更好、更有自信,那麼,關鍵不在於技術的精進,關鍵在於我們能否發掘出真正重要、會被關注的需求,並且挺身而出!

發掘關鍵需求並不容易,有時候甚至必然會有辦公室政治問題,然而一間正在成長的公司中,一定有這樣的可能性,我們必須跳脫技術思維,克服各種困難,主動探詢機會。

除此之外,對公司而言的關鍵需求,看起來肯定不會是可愛的小兔兔;有大機率,這個關鍵需求看起來是隻邪惡的大白鯊!

所謂承擔,就是儘管沒有人能確定未來,沒有人知道方法,但我們勇於接下這份任務,勇於面對挑戰並負起責任。這樣的核心素質,是我們能夠突破自我屏障的關鍵。

學無止盡,貢獻所學

學習,是為了貢獻;貢獻,才會產生價值。

完全沒有基礎能力的入門者,需要大量的學習。而一個已經能在職場上工作的專業人士,需要的是找到貢獻的方法!

--

--

在花時間處理這個只能在軟體工程師的小圈圈中討論的主題之前,先讓我們抽離工程師的角色,把視野放大、拉遠一些。

軟體工程師之於整個社會的專業在於:我們能利用程式語言,指揮電腦,解決各式各樣的問題,而其他人在這方面的能力比較薄弱或受到極大的限制。

在我們解決問題的過程中,會自然的發展出以下兩個階段:

  1. 撰寫程式,解決問題。
  2. 思考不同撰寫程式的方法,是否有助於更好的解決問題。

而我們今天要討論的主題,落在工程師發展的第二階段。

富有經驗的軟體工程師,經常能使用好幾種方式,解決相同的問題。經過長時間的累積之後,我們歸納出兩種程式的撰寫模式:宣告式 Declarative指令式 Imperative

以下簡單的說明這兩種模式的基本觀念,並使用 JavaScript 提供幾個範例讓大家參考。注意,每個範例提供的兩種程式碼,都解決相同的問題。

宣告開發模式 Declarative Paradigm

程式碼傾向被理解成抽象的、高層次的、容易被人類接受的整合式概念。

指令開發模式 Imperative Paradigm

程式碼傾向被理解成具體的、低層次的、能被清楚拆解的基礎命令集合。

範例一:物件的表達方法

宣告式 Declarative

let man={
"name":"Bob",
"age":18
};

指令式 Imperative

let man=new Object();
man.name="Bob";
man.age=18;

範例二:使用者介面的表達方法

宣告式 Declarative

<a target="_blank" href="https://www.google.com/">Google</a>

指令式 Imperative

let link=document.createElement("a");
link.target="_blank";
link.href="https://www.google.com/";
link.textContent="Google";

範例三:資料處理的程序

宣告式 Declarative

let data=[2, 1, 5, 0];
data=data.map((value)=>(value*2));
console.log(data); // [4, 2, 10, 0]

指令式 Imperative

let data=[2, 1, 5, 0];
for(let i=0;i<data.length;i++){
data[i]=data[i]*2;
}
console.log(data); // [4, 2, 10, 0]

範例四:篩選資料的程序

宣告式 Declarative

let data=[2, 1, 5, 4];
let results=data.filter((value)=>(value>3));
console.log(results); // [5, 4]

指令式 Imperative

let data=[2, 1, 5, 4];
let results=[];
for(let i=0;i<data.length;i++){
if(data[i]>3){
results.push(data[i]);
}
}
console.log(results); // [5, 4]

以上說明供參考,彭彭不想在這裡下任何結論,歡迎大家留言給我,說說你的程式撰寫偏好 :)

--

--

終究,必須在數百位的申請者中,做出決定。

有人這樣說,會選擇念心理系的人,本來就心理有毛病。話說得稍微重了,或許不是心理有毛病,而是對情緒有敏銳的感受。

每個人都有自己的故事和期待,而大家都選擇了在這個時候,提出參與訓練營的申請,聚焦於此。如果可以的話,我希望能滿足每一個人;然而,顯然無能為力。

發出邀請的時候是令人開心的,因為我覺得自己正在做一件值得期待的事。而發出拒絕信的時候,是沉重的,尤其,必須拒絕那麼多期待的時候 …

Photo by Gauravdeep Singh Bansal on Unsplash

給收到拒絕信的朋友

我被拒絕過不少次,很清楚那種被否定的感覺,並不舒服。有時候,甚至沒有特別想加入的公司,發出來的拒絕信,都會讓人感到難過;就更不要說是期待已久的職位或是計畫。

我們把情緒的部份和真正重要的理性規畫分開,處理完情緒之後,認真的想想:如果真的想成為軟體工程師,那麼,就算沒有人在旁邊輔助,我們本來就要學會獨立學習、成長的能力。

那麼,就是現在了!無論有沒有加入這個計畫,都不應該影響你的決心,畢竟,這是自己的職涯和人生,怎麼可以栽在這一點小事情上呢?

堅定意志,眼光放長,自然就海闊天空。

給收到邀請信的同學

很開心的,歡迎各位加入。我們即將開啟一段旅程,我也正在積極的籌備這其中的一切事務。

確實,我過去帶過不少學生,累積了許多經驗。或許,我能在這段時間,給你一些信心,我能幫忙規劃學習的目標和方向。然而,非常清楚的是:你的決心和投入,才是這段旅程中,最關鍵的核心部份。

魔戒遠征隊才剛啟程,考驗正要開始,我會站在你的身邊,陪著你面對接下來的所有挑戰。

收拾行囊,繼續往前走吧 ~

--

--