2018年3月27日 星期二

Coursera NTU:用 Python 做商管程式設計/孔令傑

爬完 Codecademy 一輪後,大概掌握了 Python 的幾大基本概念,但仍覺不太踏實。

這禮拜開始看台大資管系 孔令傑老師在 Coursera 上開的 Python 入門課程-- 「用python 做商管程式設計」,老師上課方式深入淺出,教學進度也大致依循 Codecademy 的方式。目前覺得孔老師的教學有幾個值得推薦的地方:

1. 孔老師完全明白初學者的窘境 -例如我們的電腦裡連最基本的 python 操作環境都還沒建立起來 - 因此老師會從安裝 python、叫出 python 的操作介面等基本步驟開始,一步一步帶你入門。

2. 我先前在做  Codecademy 時,有許多觀念在練習時搞不太懂(畢竟是全英文介面),像是int、float、stream 等等的意涵 ,基本上只是大概知道是甚麼但總之先照抄再說,現在經由孔老師解說後才豁然開朗,對初學者的觀念建立而言是一門值得推薦的課程。

3. 孔老師在實際示範程式寫法時,會同時列出多種寫法,並分析哪種寫法較好、哪種較不推薦,身為菜鳥的我們儘管無法立刻就寫出最簡潔優雅的語法,但也漸漸能用一些大原則判斷出程式語言的優劣。

4. 除了程式語言的邏輯教學,孔老師也會教導學生們建立起「良好的寫程式語言習慣」,例如習慣加括弧、分段、妥善利用熱鍵等等。老師最常說的就是:「這個動作在初學時看起來是小事,但寫久了之後你就會知道這樣做的好處」我個人滿欣賞這種注重細節和培養好習慣的教學模式。

5. 每一堂課都有作業,作業往往就是要你徒手寫出一個簡單的小程式,這跟先前 Codecademy 一步一步引導的方式不太相同,因此剛開始試寫時會有點心慌,但只要仔細思考,就發現作業其實都是運用該堂課上到的概念,無須過於緊張。


現在課程才上到第四週,整體 loading 比先前寫 Codecademy 時輕鬆很多,但也很令人害怕會忘記「把手弄髒」也就是寫程式的感覺,一直聽課終究是不行啊...寫程式還是得實際動手操作才是。工程師同事建議可找尋網路上的一些實際應用來觀摩,例如圖像化介面、小型遊戲等等,自己照著寫寫看,可迅速累積寫程式的手感。


大致是這樣,繼續上課、繼續 coding~!


2018年3月21日 星期三

Codecademy Python 100% 成就達成!

終於完成 Codecademy Python 100% 的進度了!!
算是自學程式語言的小小里程碑!

不過,最後幾個階段進入到 class 和 object 的部分,自己其實學得有點含糊,尤其是 class 中各種功能的運用 (ex: super, inheritance, open...) 真的就是照表操課,能寫出來,但無法完全理解這些功能的用途和使用時機,看來只能繼續追問工程師同事們。

另外是,完成的同時也產生新的危機感。

摸完一輪練習,大致知道python的基本架構,但是...目前仍停留在很簡單的計算和幼稚園等級的class 和 object 範例練習,離實際運用還差的遠遠低。同時也深覺,程式語言一定要持續接觸,熟悉思考邏輯。因此下一步,應該會採取線上課程與實體工作坊同時進行的方式:

1. 線上影片
(1) 臺大孔令傑老師的 Coursera 課程「用 Python 做商管程式設計」,目前只看了第一週的課程,算是對資訊管理的定義和運用做了清楚易懂的介紹。預計用 1-2 週時間完成。

(2) 考慮重新 做一遍 Codecademy python 課程,想再把一些基本觀念強化,同時保持實際動手寫 code 的感覺,希望能在 1 週左右完成。另外,希望好好記錄練習心得。

(3) 再請資工友人推薦其他可以練習寫 code 的平臺。


2. 實體工作坊
Pyladies 將在 4 月以後開設讀書會和分享活動,相關資訊如下:

讀書會:[生活中的程式 - Python 自動化]

適合對象:有 Python 基礎者 或 熟悉其他語言能快速自學 Python 者

時間:每個月最後一個禮拜日早上 10:00~12:00

地點:台北市婦女館 (108台北市萬華區艋舺大道101號3樓)

書本:Python 自動化的樂趣:搞定重複瑣碎&單調無聊的工作

詳細內容:
4/29 處理 Excel 試算表  講師: 龜珍
5/27 處理 CSV 檔和 JSON 資料 講師: Amber
6/24 保持時間、工作排程和程式啟動 講師: Jamie
7/29 發送 Email 和文字簡訊 講師: Jamie
8/26 以 GUI 自動化來控制鍵盤和滑鼠 講師: Jamie


分享活動:[Python 女性工程師業界分享]

適合對象:對於 Python 的工作內容/環境 有興趣者皆可參與

4/22(日) 14:00~16:00 Pinkoi Data Scientist 
@台北市婦女館

5/26(六) 14:00~16:00 Django Girls社群主辦人 
@台北市婦女館

6/09(六) 14:00~16:00 阿諾標記工程師 
場地未定

7/17(二) 19:30~21:30 趨勢科技 QA 
場地未定

8/25(六) 10:00~12:00 Oath(Yahoo!)工程師 

@台北市婦女館


以上大致是未來幾個月預定的方向,希望能夠確實達成,繼續累積 python 經驗值。



2018年3月15日 星期四

卡關與小確幸

玩 python 兩個多禮拜,Codecademy 已完成 75 %。

聽起來似乎進展不錯,但事實上,我在第一週就完成60%以上的進度,第二週的線上課程開始進入應用習題,我也開始了各種嚴重卡關,有時一天還解不了 2 題,極度苦惱焦慮下只好忍不住偷看解答,看到解答的瞬間才脫口而出:「啊!怎麼這麼簡單!」

是啊,解法其實很簡單,但我就是想不到。

這樣子反覆來回幾回,逐漸發現,學習python,除了是在學程式語言,更是在學一種新的思考模式。其實也不算完全新,就是邏輯思考,讓我想起高中苦讀數學的歲月。

這一切跟我上大學以後所受的人文訓練非常不同。大學所學的人文思考,就是要考量到各方各面的因素,簡言之----- 要想得夠多夠廣泛。但邏輯推論相對沒那麼複雜,設了幾個前提條件,就可以一路往下推論。現在的我得訓練大腦嘗試一種不熟悉的思考模式,因此每天都在燒腦、每天都覺得筋疲力盡。

但是,我知道自己開始改變,也漸漸熟悉程式語言的思考方式。許多時候,解python練習題時雖然未必解得出來,但大致知道這個題目要用甚麼方式處理,而當我試著寫出解答,再對照codecademy提供的解法時,發現自己只是一些細節有誤或對某個符號理解不夠,思考的方向確實都沒有錯,這時會令我感到非常興奮。

今天總算靠自己的思考,以及python提供的一點小提醒,解開了2道題目,解開瞬間真讓人開心到想跳起來大叫。其中1題是要求一個數字串的中間值(median),寫成白話文看起來真是簡單到不行,但也是花了我兩個多小時的時間.... 我的解法如下:

Codecademy: median

def median(lst):
  List = sorted(lst)
  L = len(lst)
  res = 0

  while L > 0:
    if L % 2 == 0:
      res += (List[L/2] + (List[L/2 - 1])) / 2.0
    else:
      res += List[(L-1)/2]
    return res


雖然我試圖用一些代數來簡化畫面,但不得不說看起來還是很雜亂.... 希望往後可以寫得更簡潔。這題比較難的部分應該是,要思考怎麼挑出偶數字串和奇數字串的那個中間數... 我自己抽象思考的能力沒那麼好,必須實際用好幾個範例來算,才能抓出中間數的規則。

附帶一提,我剛寫完時覺得邏輯完全沒錯,為何就是一直跑出錯誤訊息??!! debug到我頭髮都要花白了,最後瞄到Codecademy的小提示,要除以 2.0 而不是 2!! 恍然大悟! 一改之下立刻正確了,這也是我最佩服這個線上課程的地方,它總是知道新手會在哪裡犯錯 : )

然後,下面也順便看看Codecademy的答案:



科科,乍看到 Codecademy 的答案,我也是暈了,字好多@@ 不過老實說,它的解答是冗在那些代數的名稱(可能很希望讓菜鳥們看懂在幹嘛 XD),基本架構是非常清楚簡潔的,邏輯也很通順。

最重要的是,我的邏輯思考和Codecademy一致,這點頗振奮人心~!!



未來幾個禮拜、幾個月、甚至幾年,都得讓自己更沉浸在程式語言和邏輯的世界裡,就像英文一樣,程式語言也是需要訓練語感的,再接再厲吧!


2018年3月7日 星期三

學Python 的目的?

摸了Python一個禮拜,漸漸感受到難度。

當只有一兩個函數、代數時,還可以掌握,當程式幾十行甚至百行起跳後,就好像鑽進層層疊疊的叢林裡,不知道自己在哪裡。這時候就會覺得疲累和心灰。

跟一個工程師同事聊了這件事,順便請教他python的學習技巧,他說,他認為多數人學了一陣子就放棄的關鍵元素,是缺乏學習的目標。「不知道自己學這個是為了幹嘛的話,真的就很容易放棄」

 仔細想想,一直以來,我自己教學生如何自主學習,不都最強調設定目標嗎?先給自己一個小小的、簡單的 target,達到後再設下一個,一步一步完成自己想做的事情,即使要花上不少時間,但明確的目標、具體的步驟、有效的檢討、尋找志同道合的夥伴,絕對是是學習的不二法門,而最重要的,當然還有持之以恆了,這是能否成功學習的關鍵所在。

2018年3月5日 星期一

2018.03.05 複習布林邏輯和一些數學觀念

初學 Python 幾天,發現數學運算佔了 70 %以上。偏偏甚麼函數、代數這些觀念,我考上大學以後就再也沒碰了,只能憑藉一些殘存的印象,實在很吃虧。

這邊就遇到了幾個數學基本問題,有的還可以靠自己查資料解決,有的似乎就必須請教理工達人,列出如下:

(1) Slice[]

Slice 在 Python 裡可用來截取某英文單字的其中一段,而 Python的字母算法,第一位都是從 0 開始,以範例 "Charlie" 的 s[1:4] 來說,指的是從排序第 1 位的字母(h) 截取到排序的第 4 位的字母(l) 之前! 所以是截取字面上第 2 個字母(h) 到第 4 個字母(r),所以答案是 "har"

這個 Slice 的觀念很妙,我花了一點時間才能試著接受它,為什麼是到第4位排序之前,而不是正好就是第4位排序呢? 可能要詢問數學相關的專家吧。 



 (2) total = 0

在計算總額時,似乎習慣先預設一個值 = 0,然後用那個值加上其他計算出來的數值,才能算出總額,而不是直接就計算出總額,這也讓我覺得相當有趣,應該是數學的基本原理?



(3) "+="   "-="



一開始看不懂 +=、-= 的意思,查了資料才明白,以範例圖的 cost -= 20 為例:
cost -= 20  ------>  cost = cost - 20
同理,若看到 cost += 50 ------> cost = cost + 50
其實就是縮寫而以啦~ 之前還讓我大費腦筋....




另外還有一些很基本的數學邏輯問題,看到較有趣的是「布林邏輯」,其實高中就學過這觀念了,簡單講包括 not、and、or 這三種:

not  否定
not True = False
not False = True

and 兩者皆為真才為真,其他都是錯的
True and True = True
True and False = False
False and True = False
False and False = False

or 其中一者為真即為真
True and True = True
True and False = True
False and True = True
False and False = False

然後,當一個算式裡面三者都存在時,處理順序依序為:not、and、or



這樣看一看,突然發現數學也是滿有趣的,不少觸類旁通的觀念,覺得當初真是太早放棄數學,若再認真接觸,或許也大有可為呀~~


今天大致心得是這樣~ 繼續努力,coding人生~!!


2018年3月4日 星期日

2018.03.01 新的起點:Python

自己是念文科多年的人,從沒想過有一天也會來摸程式語言。過去每每聽到旁人說起軟體工程師這行,心中總隱隱覺得羨慕,但總覺得時機已經過了,都超過30歲了還跟人家學什麼coding? 因此學程式語言也就變成一個遙遠的美夢。

豈知,今年過年期間,偶然地看到學弟轉貼一篇文章,作者是史地學系畢業的,畢業後投入旅遊業多年,但在2年前毅然決然離開本行,學習coding,歷經諸多困難後終於得以踏上工程師一途。這個故事對我有如當頭棒喝:別人做得到,我為什麼作不到?於是要學coding的念頭又在我心中爆發開來。

但程式語言基礎為0,又離開數學邏輯已經10幾年了,要學coding還真不知道如何下手。

所幸現在網路資源很多,身邊亦不乏工程師朋友們,在查了一些資料、諮詢過後,獲得了幾個結論:
1. 30歲後學coding依舊大有可為
2. 可以先透過線上免費資源做入門訓練,例如 Codecademy
3. Python 簡潔明瞭,適合初學者入手

這樣歸結下來,學習程式語言這件事,是個成本不高但相當有用的技能,至少在初學的階段,有免費資源、身邊也有很多高手可以問,就來試試看吧!

就這樣,踏上了我的coding 之路...(誠摯希望一年後,這個blog還繼續更新)