iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
4
Software Development

當我遊走在程式的初學路上-從入門到放棄系列 第 8

Project 1 - 自我介紹程式 : 對的問題 與 對的時間點 - 模仿→變化→改善→應用

  • 分享至 

  • xImage
  •  

在我們開始閒聊之前,獻上林俊傑最近的新歌 - 對的時間點
https://www.youtube.com/watch?v=gORotxnPczg

進入正文前,見識入門到放棄的精神(來源引用自陳鍾誠分享的臉書)
https://www.facebook.com/ccckmit/posts/10157288555751893

這個系列的一切從今年三月的開始 - Sitcon

回想起我大學四年級,是一段提早進入職場受洗的時光。為了在學生時期留下一個不一樣的體驗,在今年一月進到Sitcon官網投下了第一份議程稿 - 「當我遊走在程式的初學路上」

從高職開始寫程式,看著身邊有不少朋友因為程式而挫折,卻也有不少朋友因為程式堅持下去。每隔一段時間就會聽到有人問到「要學什麼程式語言」、「要怎麼學會程式」、「程式語法學會之後,接下來該做什麼」、「有沒有什麼推薦的資源」。雖然這些答案會依每個人的狀況有所不同,但是自己教和學程式的過程,從每個跨過初學門檻的倖存者找到了答案。

「或許他們不一定懂很多,但是他們懂得尋找方向」

https://ithelp.ithome.com.tw/upload/images/20190909/20120331eNFmzxfBbo.png

學會尋找方向的第一步:在對的時間,遇到對的問題

有學過程式的人,看完這七天的「自我介紹程式」,心裡多少一定會疑惑「沒有語法基礎的人,怎麼可能在七天內學會這些內容?」

沒有錯,讓初學者在七天內學會程式語言,就像你要一個小嬰兒7天內精通國文,機率微乎其微。

https://ithelp.ithome.com.tw/upload/images/20190909/201203312jsc4MCFTa.png

比起讓初學者7天內學會自我介紹程式,其實我真正希望的是
讓初學者從這七天的每一個「需求和問題」,了解自己在學習程式的過程中「需要學會什麼」

https://ithelp.ithome.com.tw/upload/images/20190909/20120331dT8ycUhecN.png

對的問題,提醒我們需要學習的大方向

如果我們從「變數→控制→迴圈→陣列→讀寫檔→物件導向」一路學習,感覺就像從英文字典A看到Z。不是看到一半就會開始迷失人生,不然就是看完了走在路上還是不知道怎麼用英文對談。

但是相反的,在自我介紹程式裡面,你需要把畫面上輸入的姓名、家鄉和出生年月日,用一段「自我介紹文字」顯示出來,這時候該用怎麼宣告變數、該用什麼型態、該怎麼把文字轉數字、該怎麼讓字串跟變數相接... 看似散亂的程式觀念和語法,因為腦袋浮現出了「原來我需要了解這些」。

https://ithelp.ithome.com.tw/upload/images/20190909/20120331r9Yenx1z45.png

模仿→變化:因為錯誤和困難,你才會熟練當中的觀念

如果透過文字表達「型態使用不當,會對程式的風水造成問題」,可能無法體會
但是如果在你完成「計算年紀」、「保存個人資訊」的過程中,三不五時面臨 Null Exception、Format Exception、File Not Found Exception等錯誤轟炸。久而久之開始了解這些問題的產生源頭、以及知道該怎麼用什麼函式庫、該怎麼寫判斷避免這些問題。

https://ithelp.ithome.com.tw/upload/images/20190909/20120331lx4EYxue72.png

https://ithelp.ithome.com.tw/upload/images/20190909/201203311qNtuXcDQX.png

如果完成了7天的程式後,要你加一個「身分證字號」欄位,按下自我介紹之前,判斷身份證字號是否正確,你就需要了解,身份證字號的規則、怎麼用正規表達式和字串函式庫依序處理英文和每一個數字。

https://ithelp.ithome.com.tw/upload/images/20190909/20120331II6UkUES6S.png

https://ithelp.ithome.com.tw/upload/images/20190909/20120331J6nFzCcrg3.png

變化的過程就可以看見自己是否真的適合寫程式

為了實現功能,需要熟練相對比較深硬的「語言特性」、「邏輯」、「資料結構 & 演算法」、「物件導向」。通常分成兩種人。

如果每一次遇到問題後,在乎的是20點求解,那麼程式問題會多到知識點數不夠應付,認真建議可以考慮更適合自己的方面。

另一種是,能夠從自己嘗試面對問題後的困難點找尋方向

好比「我在保存大頭照的時候,遇到『在 GDI+ 中發生泛型錯誤』,可是如果存檔的圖片路徑沒圖片,卻可以正常,我找不到造成錯誤的原因需要提點。」隨著對程式的熟練,問問題的頻率變少之後,相對比較容易跨過初學者的門檻

在職場實習的時候,旁邊的學長姊,在我剛開始寫工作的程式時會幫我Double Check,從一兩次犯錯經驗讓我知道容易忽略的地方,等狀況慢慢穩定後放手。
https://ithelp.ithome.com.tw/upload/images/20190909/20120331CO8PlJnH4Y.png

變化→改善:除了完成功能,開始學會站在使用者、開發者的角度思考

跨過了初學的門檻之後,比較能比之前容易完成一個程式功能。,可是離開學校到職場,你的程式不再是「作業」,而是「產出」。

使用者角度

例如你寫了一個哈皮購物網站,卻因為你的哈皮購物網站非常慢、密碼明碼放在資料庫、找個產品非常難找、網頁的產品照片有馬賽克。
不管你跟使用者表示你的用心良苦,你的使用者只會心想「好吧,那你可以不用這麼辛苦的寫這個網站,因為我們也不會想用」

開發者角度

有可能需要和他人共同維護同一個系統專案,如果今天你所合作的人變數命名 a、b、c, 函式方法纏在一起。你得「花費更多時間」理解並小心地修改對方的程式碼。這部分對應到第七天的程式碼重構

為了滿足使用者與開發者的角度,跨過初學門檻後,開始需要更加深入學習「資料結構、演算法、物件導向、設計模式、語言的底層運作、開發環境、協同合作(TFS、Git)」

https://ithelp.ithome.com.tw/upload/images/20190909/20120331WV2cvn1FQD.png

不過有時候為了產出和績效,實務上必須做出一些取捨。過度的自我要求,導致走火入魔,只會陷入不必要的時間浪費

如果覺得自己能力到了極限,多與其他人交流、看看其他人的程式碼、參與技術交流活動,可以很快地從他人身上看到自己的不足之處。

改善→應用:技術跟語言一樣,沒有學完的一天

大型資訊系統、行動應用、遊戲、物聯網、網頁、多媒體系統、資料探勘與分析。
每個領域都有對應的開發工具、框架、開發模式和領域的相關專業,需要花費時間磨練。每個領域都會有興盛跟平淡的時期,選擇自己真正適合或想要的領域,避免發現不適合需要轉換跑道,多出重新學習的時間成本。

https://ithelp.ithome.com.tw/upload/images/20190909/20120331gcc3pYutHq.png

越早知道自已是否適合寫程式,越早選擇自己適合的路

曾經面試某一家公司,和面試主管聊天的時候,我問面試主管「你們公司目前面臨的挑戰和問題是什麼」,當時面試主管回答我:「有程式撰寫經驗的人很多,但是真正有能力參與程式專案的人不好找。」

在離開前,面試主管和我介紹公司旁邊的某個室內空間,當時我以為是公司的一部份,但是面試主管說這邊是一個開放空間,提供想要轉職當軟體工程師的人一個學習和交流的空間。同時也聊了之前我為何會想在Sitcon分享「當我遊走在程式的初學路上」這個議程?

希望能將自己和其他人在程式教、學的所見和體會,分享給對「程式教、學」有興趣的人:
「如果在學習程式的路上,『對的問題』能夠在『對的時間點』出現,或許能幫助其他人少走冤枉路。」

簡報與議程範例清單

議程簡報
https://drive.google.com/file/d/1AdIxIgklrz_Q9f_Aj-b_SrjXmAifKZAi/view?usp=sharing

範例清單
https://drive.google.com/file/d/10VueUzsgI1e393904598UH4uibHK6oLs/view?usp=sharing


上一篇
Project 1 - 自我介紹程式(7):斷開程式碼的牽連 - 重構 (附上完整專案 Github)
下一篇
番外篇:心智圖筆記 - UI程式設計 + Sitcon 議程QA整理
系列文
當我遊走在程式的初學路上-從入門到放棄9
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言