顯示具有 雜七雜八 標籤的文章。 顯示所有文章
顯示具有 雜七雜八 標籤的文章。 顯示所有文章

2019年12月4日 星期三

練習 leetcode 與否

紙上得來終覺淺,絕知此事要躬行。
我很喜歡這一系列的討論: [討論] 什麼層級的職位才不用再刷leetcode了? 白板題目的面試方式, 每個人都有不同想法, 網路上可以找到很多類似的文章, 是讓人津津樂道的討論話題。

雖然我不擅長白板題目, 但我是很贊成白板題目的, 能在白板上寫出程式, 功力一定在某種水準以上, knuth 寫程式時, 錯誤很少, 幾乎都一次就完成, 他來寫白板題目, 一定沒問題。我也希望我第一次寫完編譯之後, 程式就正常執行, 一次就搞定, 爽度爆增。

有著人腦編譯器能力的程式功力, 這樣的高手每間公司都想收, 我也很想在紙上寫程式練習, 但每次都忍不住讓編譯器幫我的誘惑, 所以達成率大概只有 5% 左右, 但在白板解題目真的是很好的自我練習。

只是我建議先問問薪水, 有達到你要的水準, 再去作答, 總不能考了這麼難的面試, 只開個 6 萬台幣是吧!

印象中我只寫過一題, 為什麼我不繼續呢? leetcode 讓我想到功文數學, 那是一種給很多數學題目, 然後就一直寫一直寫一直寫。

leetcode 我覺得並不有趣, 但如果讓我知道其中有趣的題目, 還是會想練習, 而花時間在這題, 並不是因為他是 leedcode, 並不是我會有機會提高面試成功率, 而是我覺得有趣。avl tree, 紅黑樹的刪除、新增都讓我覺得有趣, 只是我還沒有把他們搞懂。

coroutine 初試鍊」這個題目讓我覺得有趣, 我花了好幾天的時間完成它, 花在這個題目的時間並不會少於去練習 leetcode, 但我享受把他完成的過程。

從小到大我已經讀了太多我不喜歡的書籍, 練習了很多我沒興趣的題目, 寫了很多我討厭的考卷, 難道出了社會, 我還要去練習我不喜歡的程式嗎?

是的, 我喜歡寫程式, 但不是每一種程式我都喜歡寫, 只有某些領域的題目, 我才有興趣, 我才願意花費大量時間在上頭。

有關注我技術文章的朋友一定可以看到我在這些技術上花費的心血, 而他們幾乎都很冷門。不過很可惜, 這些練習無法幫我面試工作, 實際上學習這些技術在我面試上幾乎一點幫助都沒有。如果我真的比較想容易找工作, 應該去做 leetcode 的題目, 但我實在不願意在花時間在我沒興趣的東西上。雖然面試的幫助不大, 但對於工作內容的幫助到是蠻大的, 疑! 順序好像反了吧! XD

在別人練習 leetcode 300 題的時候, 我花了時間研究
還可以列出不少東西, 表示我也是有在努力學習的, 應該不輸給練習 300 題 leetcode 的朋友。雖然練習了這麼多東西, 但相對於有練習 leetcode 的人, 在這些 leedcode 白板題目上我處於劣勢。

不過對此我沒什麼抱怨, 畢竟公司是選擇這樣的遊戲規則, 我們面試的人只能配合, 我也遠遠沒厲害到讓公司可以改變錄取/面試方式, 總是還有別的公司不這樣挑人, 我們就去找那些公司試試看吧!

想要靠練習 leetcode 找工作的朋友, 也許還可以試試看考公職, 對你來說應該都是練習題, 沒什麼差異, 因為我認為真的喜歡 leetcode 這些題目的人應該是少數, 大部分人應該都是為了工作不得已去練習的, 既然如此, 公職的那些題目也是可以試試, 畢竟上了公職, 這個報酬應該是比在一般大公司好上不少。

資訊的高考, 其實題目也是蠻難的, 我看過得一些題目, 只靠學校的訓練, 寫起來幾乎都很吃力, 普考的就容易一些。

我沒去考公職, 當然也是因為不喜歡在練習這些題目了, 不過說真的, 公職到老的保障還真的是比大多數公司來得足夠的。

ref:


2018年12月1日 星期六

gmail 真是太自作主張了



我有一個 gmail 附件是程式檔案, 被 gmail 判定為病毒, 造成這個檔案無法下載。

和這位網友遇到一樣的問題, [問題] 急!如何下載被判定有毒的 Gmail 附件?

gmail 真是太自作主張了。

2018年10月13日 星期六

20181004「康芮」颱風攪局, 讓沖繩一行泡湯, 處理後續機票、agoda 定房退款事宜



這個颱風影響到 20181004 飛沖繩的航班, 很不巧, 我就是搭這天的飛機, 今天當然飛不成, 來處理後續房間/機票退款事宜。 

機票退款 [台灣-沖繩] 

訂購的是樂桃機票, 在 1004 04:00 發 email 告知飛機停飛, 直接點選他們的取消連結, 照著步驟即可退費, 這個最簡單, 也最沒問題。 

房間退款 

再來是 agogda 訂房的退款, 今天 (20181004) 就是入住日, 根據訂房規則, 費用已經由信用卡扣款, 不能退款, 不過情況特殊, 打電話問問看。 

由於家裡沒有室內電話, 首先買了 skype 點數打室內電話, 接通之後 agaoda 會要你從電話輸入訂單編號以及信用卡末四碼, 我試了很久都失敗, 原來是 skype 輸入的訂單編號都會失敗, 一定要用手機打市內電話, 這時候輸入的訂單編號才會成功, 再來會請你輸入信用卡末四碼, skype 點數白買了。 skype 花了 22nt 才弄清楚這件事情。  

agogda 客服很難打, 其實所有的客服都很難打, 我等了 10 分鐘 (手機打市話很貴的) 之後才成功接通 agogda 客服, 說明航班被取消的情形之後, agoda 說會 mail 給我, 請我將購票證明以及航班取消證明以 email 回覆給他們, 沒多久之後, agoda 客服打來, 說和沖繩飯店溝通之後, 可以退款, 但是是退 agoda 金卡, 只有 3 個月期限, 接近台幣5萬的金額不太可能 3 個月用完, 客服幫我問主管是不是可以退回信用卡, 最後結果是退回信用卡, 好加在, agoda 服務還算不錯, 很滿意。 

機票退款 [沖繩-台灣] 

虎航回程: 回程不是定樂桃, 是虎航, 已經在網路上查過一些相關資料, 有心理準備虎航無法退款, 一樣打客服詢問 (客服一樣很難打, 但是用 skype 可以正常撥通), 只能改日期或是人名 ("沖繩 - >台灣" 的方向/地點是無法更改的, 也就是說不能改成虎航從 "台灣 -> 東京" 的機票), 規定非常嚴格, 但都需要 1500nt 左右的手續費以及機票差價, 最後還是認賠, 42000 日圓的機票 (3 張機票) 就這麼沒了。 

虎航其實沒比較便宜, 只是從沖繩回台灣的時間比較晚, 所以我才定虎航, 虎航被我列入最後才考慮的廉航。

其實不只虎航, 亞航也是類似的規定, 有了這次的經驗, 在廉航的考慮上, 會加上可否退款這個需求。 

這個颱風訓練我如何處理航班被取消的後續處理。 

2018年10月6日 星期六

20180924 中秋烤肉趣

fig 1 生火失敗
fig 2 不到 50 元的簡易烤肉架

20180924 是中秋節, 不知道從什麼時候開始, 台灣除了月餅、柚子之外, 又加上了烤肉, 商人們又從中得利不少, 真的好久沒有烤肉了, 今天也來湊個熱鬧好了。

先到大賣場買了烤肉用具, 一律買最便宜的那種, 一年烤個一次而已, 不過廉價的物品真的是有危險的, 後面在來談談fig 2 這個危險的烤肉架。

火種、椰碳、烤肉架都有了, 再來買點食材, 差不多了, 就這樣吧!

學生時代的烤肉, 生火一向輪不到我, 所以沒學到什麼生火技能, 第一次的生火, 花了很久的時間, 整包火種用完之後, 火 ... 還是沒點著, 老婆很聰明的把食材拿去煮了, 感謝她, 我才有蝦子、雞屁股、青椒、筊白筍可以吃。



吃飽之後, 決定再試試, 不同於 20 年前, 現在 youtube 有很多生火資訊可以看, 我依樣畫葫蘆, 花了很大的力氣, 總算把椰碳點著了, 不靠火種, 緊緊靠了 2 張報紙, 就搞定生火問題, 還蠻有成就感。

fig 3. 將椰碳排成這個樣子, 總算順利點火
fig 3 就是我成功點火的排列方式, 當然不是排成這樣就可以順利點火, 過程中還是摸索了好幾次才成功點燃椰碳。不知道是不是我的錯覺, 椰碳好像比木炭還難點著。下次應該買個木炭來對照一下, 到底是不是椰碳比較難生火。

還剩下什麼食材可以來烤呢?
  • 香腸
  • 馬鈴薯
  • 金針菇
  • 四季豆
就這樣將這些食材輪番上陣, 一一的將它們烤熟, 還真的考得熟, 不用擔心吃了拉肚子。

一口吃下後, 我能感覺到蔬菜的香甜、香腸的彈性、馬鈴薯的香脆, 太好了, 總算成功的完成這次的烤肉。

照片中的我幾乎都是使用左手, 是怎麼回事呢? 因為我的右手受傷了。這是 fig 2 這個簡易烤肉架導致的, 這個東西便宜歸便宜, 品質並不怎麼好, 我剛從紙箱拿出來的時候, 就被邊緣給割傷了, 烤肉架做成美工刀, 這是不被允許的, 請大家在使用這種便宜的烤肉架時, 記得戴上手套, 免得被邊緣的利刃割傷。

最後把爆米花也拿出來爆, 逼逼跛玻逼跛玻, 最後的於熱還真的可以順利將爆米花爆開, 成功!




2018年8月24日 星期五

20180823 ~ 20180824 台南高雄大雷雨示警! 慎防劇烈降雨雷擊, 這次宣佈放假

這次高雄市/台南市很果斷的宣佈 20180824 停班停課, 希望不是有什麼選舉考量, 一個重視人民生命的政府, 本來就應該這麼做, 要假設會遇到最嚴重的災情, 一樣用之前批評放颱風假的標準來看這次的決定, 總算有了改善。

林佳龍:停班課不跟大自然對賭 即使被批評也承擔責任

台中市昨晚11時宣佈停班停課,今天中午天氣放晴,很多民眾賺到一天休假,停班停課是否放錯假?對此,台中市長林佳龍24日表示,市府防災應變,「不跟大自然對賭」,面對自然,人不是神,市府以最謙卑的態度,盼多保護一位市民,等同於多保護一個家庭,「即使決策可能會被批評,我也需承擔起責任」。

林佳龍強調,全力做好萬全的應變與決策,市府多方掌握完整資訊,以最謙卑、戒慎恐懼的態度,最壞劇本來想定,做最好的應變。

此次決策至昨晚11時對外宣佈,目的是為掌握更多更完整的資訊,由於此重大決定將影響全體市民的作息,因此市府以戒慎恐懼的心態做下決策,同時也不延至今早最後一刻凌晨5時才宣布。

總算有一位首長有這樣的認知, 是的, 本來就不應該和大自然對賭, 氣象預報有其極限, 請思考最壞的情形來應對。



不斷更新/高雄、台南明停班課 北北基等12縣市正常上班課

2018-08-23 21:12聯合報 記者劉明岩蔡孟妤鄭維真╱即時報導










熱帶性低氣壓今天(23日)帶來暴雨造成南部嚴重水患。圖擷取自中央氣象局官網
熱帶性低氣壓今天(23日)帶來暴雨造成南部嚴重水患。圖擷取自中央氣象局官網
熱帶性低氣壓今天(23日)帶來暴雨造成南部嚴重水患,預計雨勢將北移,目前苗栗以北縣市多因雨量未達停班停課標準,宣布明天正常上班上課。
縣市24日是否停止上班上課
北部地區
基隆市正常上班上課
臺北市正常上班上課
新北正常上班上課
桃園市正常上班上課
新竹市正常上班上課
新竹縣正常上班上課
中部地區
苗栗縣正常上班上課
臺中市尚未宣布
彰化縣正常上班上課
雲林縣尚未宣布
南投縣正常上班上課
南部地區
嘉義市尚未宣布
嘉義縣尚未宣布
臺南市停止上班上課
高雄市停止上班上課
屏東縣正常上班上課
東部地區
宜蘭縣正常上班上課
花蓮縣正常上班上課
臺東縣正常上班上課
外島地區
澎湖縣尚未宣布
連江縣尚未宣布
金門縣尚未宣布
相關資訊來源,請見「行政院人事行政總處天然災害停止上班及上課情形




2018-08-23 13:26聯合報 記者雷光涵╱即時報導

中央氣象局針對台南、高雄發布大雷雨即時訊息,並已針對此大雷雨發布細胞廣播示警(PWS)。
氣象局說,大雷雨即時訊息持續至下午2時;請慎防劇烈降雨、雷擊,溪(河)水暴漲,坍方、落石、土石流,低窪地區慎防淹水。路面濕滑,步行與開車請注意安全。能見度低,請注意行車安全、減速慢行。
●示警區域:
台南市:麻豆區、大內區、佳里區、西港區、七股區、新化區、善化區、新市區、安定區、山上區、玉井區、楠西區、南化區、左鎮區、仁德區、歸仁區、關廟區、龍崎區、永康區、東區、南區、北區、安南區、安平區、中西區。
高雄市:岡山區、燕巢區、田寮區、阿蓮區、路竹區、湖內區、茄萣區、永安區、旗山區、美濃區、六龜區、甲仙區、杉林區、內門區、茂林區。












中央氣象局針對台南、高雄發布大雷雨即時訊息,並已針對此大雷雨發布細胞廣播示警(P...

2018年5月11日 星期五

補繳汽車牌照稅

文章量見底了
汽車牌照稅每年 4 月繳, 期限是到 0430, 而 5 月要繳房屋稅、所得稅, 還真難應付。

不過這次 201804 的汽車牌照稅我忘記繳了, 等到我想起來的時候, 已經 5 月初了, 該怎麼辦呢? 可以去監理處補繳, 不過當我打電話去監理處問時, 他要我去問稅務局, 而稅務局幫我查到我的汽車並不是在這個縣市的車籍, 所以又打到車籍縣市的稅務局, 就是她告知我可以到監理處補繳, 不過有個更好的方法, 稅務局的人員幫我補單, 又重新寄了一張汽車牌照稅單給我, 並且設定繳稅期限是 20180515, 真是貼心的服務, 就這樣, 我的汽車牌照稅是 20180510 繳的, 而且不用被罰滯納金, 謝謝這些公務人員。

連這個都可以當 blog 寫, 表示文章水庫量真的見底了, 和台灣的水庫一樣, 低水位呢!

2018年2月15日 星期四

使用 line pay 購買博客來書籍

今天是 20180215 西洋情人節後一天, 也是 2017 舊曆年的除夕, 按照慣例, 發篇文章慶祝一下。

在博客來購買書籍, 通常我都用 7-11 貨到付款, 不過在今天 (20180105) 買書時, 看到可以使用 line pay 付款, 對於線上支付, 我是採取保守的態度, 我不是很喜歡用這些工具, 信用卡我覺得就很夠用了。

不過最近辦了 line pay card, 有了 101 點, 就來試試 line pay, 順便把點數用掉, 要不然我還真不知道怎麼用掉 line 點數。

一個月內訂單

1筆訂單
    訂單編號訂購時間付款方式訂單金額商品名稱數量處理狀態
    120180105005417看完整內容2018/01/05 LINE Pay378荒木飛呂彥的漫畫術 全 (170) 1資料處理中
    詳細進度查詢
    Linux二進制分析 (308)1資料處理中
    詳細進度查詢

    選 7-11 取貨, 不過由於已經使用 line pay 付款了, 所以不是貨到付款。由於用了 100 e-coupon 和 101 line 點數, 最後用 line pay 付了, 277。

    點選 line pay 付款之後, 需要在手機上使用 line pay app 來操作後續的步驟, 選擇要不要使用 line 點數, 最後按下確認即可。這時候博客來網頁的付款頁面也會跟著變化, 通知說已經透過 line pay 付款。

    不過還是信用卡比較方便, gogo 卡有 3.5% 的回饋, 使用 line pay 不見得比較有利, 畢竟 line 點數的使用還是遠遠比不上現金來的好用, 而且 line 點數也有使用期限。




    2018年1月13日 星期六

    免費更換 icash 2.0 活動 (活動期間2017/12/06~2018/02/27)

    知道 icash 1.0 不能用之後, 不太爽, 店家說可以免費更換 icash 2.0, 不過他們的 icash 2.0 卡片換完了。我跑了好幾家, 跑了好幾天, 終於在 20180112 換到了。

    免費更換 icash 2.0 活動 (活動期間2017/12/06~2018/02/27)

    優惠活動 >快速積點 >您還在用插卡式icash一代卡嗎?
    活動期間2017/12/06~2018/02/27

    活動期間2017/12/06~2018/02/27

    icash插卡式一代卡退卡餘額轉儲值,免費提供1張icash2.0轉入卡(不挑款)!!持icash2.0優惠享更多,馬上行動!
    1. 持內有餘額或OPENPOINT點數之icash一代卡(插卡式),可於退卡後將餘額轉入由門市免費提供之不挑款icash2.0(感應式),總量24.5萬張,卡片依門市實際數量為主,換完為止。
    2. 原icash一代卡儲存的電子發票,可持icash一代卡至ibon或財政部電子發票整合服務平台查詢電子發票紀錄明細。
    3. 持有icash一代卡且已完成OPENPOINT點數移轉者,須至OPENPOINT官網或OPENPOINT APP重新登錄icash2.0卡號。
    4. 一張一代卡限轉一張二代卡新卡,不得多張舊卡合併轉至同一張icash2.0。
    5. icash2.0聯名信用卡不得作為退卡餘額轉儲值之新卡。
    6. 7-ELEVEN配合愛金卡公司提供icash餘額轉儲值至icash2.0服務,餘轉後原卡即無法使用。
    7. icash/icash2.0卡片使用相關問題,請參閱愛金卡官網或聯繫愛金卡公司客服專線0800-233-888。
    8. 7-EVELEN、愛金卡公司保留隨時終止、取消、變更活動與換贈品項之權利且活動不得與其他優惠同時併行。


    不過只能轉換餘額, 發票還是要用原本的 icash 1.0 去查詢/兌換。



    當然也不能選款式, 我換到小叮噹的版本, 還蠻好看的。



    不過很奇怪, 附近的 7-11 告知我 icash 1.0 不能用, 不過我在其他地方的 7-11 卻還是可以使用, 到底是怎麼回事呢?
    原本的 icash 1.0, 除役了

    2016年9月27日 星期二

    20160927 梅姬颱風

    這些放半天的首長都該受到譴責, 上次只罵一個, 這次要罵五個。這樣的首長說會照顧人民、為市民著想, 是沒有人會相信的。

    20160927 0810 騎著機車出門後, 大概騎了 15 分鐘後, 我就後悔了, 馬上回頭向公司請假, 其實我是有壓力的, 因為今天有個會要開, 大概只有我請假, 在公司打考績的時候我是不是有可能會放在最後呢?

    這些長官是怎麼回事, 腦袋真的有在替人民思考嗎?

    20160928 (這天勞工放假, 軍公教沒放假) 倒是很乾脆就宣佈放了, 一樣是這 5 個, 原來沒有資方壓力就可以這麼乾脆阿! 你有沒注意到六日的颱風假也是很乾脆就放了。

    一個颱風讓這些首長漏出馬腳。

    而其中某個醫生背景的還很嘴硬, 最後有沒道歉我也不清楚, 但那個人的回應方式讓我想到馬英九, 就稱他為台南馬英九吧!

    這是第三次南九這麼做了:

    1. 20150929 杜鵑
    2. 20160914 莫蘭蒂
    3. 20160927 梅姬

    會有第四次嗎? 一定會的, 因為他沒有得到懲罰, 所以是不會改變的。one outs 裡頭有一句話, 污染水源的人應該就要去喝那裡的水; 污染土地的人應該要住在那裡。沒有得到處罰, 是不會改變現狀的。

    放半天假挨轟 賴清德:亂放假會影響競爭力

    不放假會死人的, 你知道嗎? 還是醫生勒? 該有的醫德去哪了? 哪間公司競爭力這麼差? 放個假就不行了, 我就不信政府放個一天假, 整個台灣就倒了。

    國民黨可能也高興不起來, 因為對這些人的討厭, 也沒有轉成對你們的支持度。

    希望能有機會讓第三勢力壯大。

    行政院人事行政總處 全球資訊網
    105年9月27日 天然災害停止上班及上課情形
    更新時間: 2016/09/27 08:42:07
    資料來源:各縣市政府民眾洽詢天然災害停止上班及上課各地方政府連絡一覽表
    區域
    縣市名稱
    是否停止上班上課情形
    北部地區
    基隆市今天停止上班、停止上課。
    臺北市今天停止上班、停止上課。
    新北市今天停止上班、停止上課。
    桃園市今天停止上班、停止上課。
    新竹市今天停止上班、停止上課。
    新竹縣今天停止上班、停止上課。
    中部地區
    苗栗縣今天停止上班、停止上課。
    臺中市今天停止上班、停止上課。
    彰化縣今天停止上班、停止上課。
    雲林縣今天下午停止上班、停止上課。
    南投縣今天停止上班、停止上課。
    南部地區
    嘉義市今天下午停止上班、停止上課。
    嘉義縣今天下午停止上班、停止上課。 
    阿里山鄉: 今天停止上班、停止上課。
    臺南市今天下午停止上班、停止上課。
    高雄市今天下午停止上班、停止上課。 
    那瑪夏國中、桃源區樟山國小、桃源區寶山國小、桃源國中: 今天停止上班、停止上課。
    屏東縣今天停止上班、停止上課。
    東部地區
    宜蘭縣今天停止上班、停止上課。
    花蓮縣今天停止上班、停止上課。
    臺東縣今天停止上班、停止上課。
    外島地區澎湖縣今天停止上班、停止上課。
    連江縣今天上午照常上班、照常上課。
    金門縣今天照常上班、照常上課。
    備註:
    1. 若欲進入本總處網站首頁版面,請按 人事行政總處全球資訊網、 事求人機關徵才系統 。
    2. 語音查詢電話: 020300166 
    3. 適用範圍為各級政府機關及公、私立學校;至交通運輸、警察、消防、海岸巡防、醫療、關務等業務性質特殊機關(構),為全年無休服務民眾,且應實施輪班、輪休制度,如遇天然災害發生時,其尚無停止上班之適用。
    4. 民間事業單位及勞工應依勞動部『天然災害發生事業單位勞工出勤管理及工資給付要點』處理, 如有疑義,請按 「勞動部網頁」 查詢,或電洽該部免付費電話專線:0800-085-151。

    2016年9月20日 星期二

    20160820 ~ 0821 coscup

    對於南部的參加者要怎麼到台北是個問題, 我最後選擇搭早上的高鐵, 20160820 凌晨 1:00 ~ 6:00 的客運都客滿了。6:00 出門還真有點早, 騎著廢鐵往車站前進。

    沒多久抵達台北後, 下了車, 哇! 真多人, 完全不習慣遇到這麼多人, 搭了捷運趕緊往南港展覽館去, 人數少多了。遇到認識的朋友, 一起搭計程車到中研院人文館, 花了 20nt, 少走一大段路, 拍謝, 佔了朋友一點小便宜。

    這次報到用 app, 還真的有尊覺不凡的感覺, 好像再用麥當勞的優惠 app, 按下按鈕後就完成報到手續, 領文件、便當都是靠這個 app。

    第一場是 LLVM 議程, 很棒, 雖然是入門的介紹, 但這時的我需要的就是這樣的介紹, 太深入反而可能聽不懂, 剛好最近在寫 compiler, 有了一點體會。llvm 原來可以拿來這麼用阿! fig 1 的書來的正是時候。

    這陣子買了不少編譯器的書, 這幾本書都是實作型的, 有具體程式碼, 理論方面比較弱, 這真是一個弔詭的地方, 沒有深入理論, 還是可以寫出編譯器的, 而讀《松崗 - 編譯器compiler 編譯程式原理技巧與工具》, 理論到位, 但我很確定是寫不出編譯器的, 那是有實作經驗後再去讀才會有感覺的書。

    另外一場在 stm32f4discovery 開發版上的 http server 議程也很有趣, 和我用同樣的開發版自然吸引我的注意, 講者提到了 nsapi, 這是好久不見的技術, 這是 netscape 的 web 技術, ms 提供的則是 isapi, 是 ms 在 asp 之前的技術, 這兩個技術應該沒什麼人再用了, ebay 之前用的就是 nsapi 的技術。

    簡報: Micro HTTP Server Implemented in C

    在 BOF 上, 我遇到了講者, 他很親切的回答我在 stm32f4discovery 開發版的疑惑, 真是感謝。

    也遇到了之前送蛋糕給那些努力做專題的同學, 原來還記得送蛋糕的是我, 應該不是難吃到印象深刻吧。

    BOF 結束後, 到後山裨站下車, 走了不少路, 終於在松山火車站附近找到住宿點, 1100nt, 還可接受。
    fig 1
    fig 2

    fig 3

    fig 4

    fig 5
    fig 6
    早上到松山搭火車到南港火車站, 沒昨天的運氣, 得需要搭公車, 台北的公車系統真是方便, 為什麼其他地方做不到這麼方便呢? 不過只到大門口, 這次得用走的去人文館了。

    第二天我參加工作坊的議程 - COSCUP 2016 Workshop: 靠北IoT OS, 我是第三位講者, 有 40 分鐘, 本來怕時間太長, 不確定能不能講那麼久。一進入會議室剛好遇到 Ben 在簡介 iot, 隨後便是接續的三個議程, 三個主題分別是:
    1. RTOS on ARM cortex-M platform -draft
    2. Get started with hyperC OS
      Get started
    3. 為樹莓派寫個 lisp bootloader (用 c++)
    1 議程的 Neo, 不是駭客任務那個 Neo, 介紹了 realtek 開發版, 並詳細說明了 st-link 這端的作業方式, 原來還有個 cortex-m0 在操作這個除錯功能, 之前只會用, 不知道裡頭還有這麼多學問。

    2 的議程介紹 hyperCOS, hyperCOS 實作了 tickless, Buddy system 記憶體管理, Trust zone hypervisor 實作, Loadable kernel module, 這幾個特性都是我有興趣的, 現在我只要看看 hyperCOS 怎麼做的就好, 不用去看 linux 那大怪物的實作, 輕鬆多了。

    HyperCOS 開始, 這是評估的版本, 完整版本要另外申請。

    再來我上場了, 介紹了 scheme 和樹莓派上的 bare-metal 開發方式, 超過 40 分鐘一點點, 安全下莊。

    下午的議程遇到 irc 上的朋友, 在 irc 上互動很好, 聊的很開心, 現在終於見到本人, 都是很厲害的高手, 帥叔叔和集貨達人。

    這次的活動遇到一些熟人, 有的已經從學校畢業, 到新竹、台北工作了, 每個人都在不錯的公司上班, 讓我很羨慕, 學歷的差距會影響自己可以去上班的公司, 得用好幾倍的實力才能彌補, 我也曾經有過仁寶面試的機會, 人資聲音很好聽, 可惜我那時不懂事, 因為剛找到新工作, 竟然推掉了, 應該還是要去參加面試的, 畢竟以我的狀況來說, 很難得有大公司面試的機會。

    最後聽翟博士的議程, 翟博士的聲音很溫暖, 是那種可以讓人心平氣和的聲音, 我也想要能有那樣的聲音, 不過後來想了想, 一位朋友說, 自己有自己的特色就好了, 沒有必要成為別人, 這句話喚回我的信心, 是的, 我有自己的特色, 別人的優點去欣賞就好, 不一樣要成為那樣。

    閃電秀用 git 畫捷運圖很有趣, 真的有人這麼無聊阿 XD, 還不只一個人這麼做過, 真是有創意。

    後來我急著去可汀敗家, 那又是另外的事了。敗家的東西收錄於「[敗家] dd 娃娃配件 (3) - 單車與女孩

    結束可汀一行, 和老同學到了西門町吃牛肉麵, 感謝招待, 每年都來打擾他, 感激不盡。

    2016年9月14日 星期三

    20160914 莫蘭蒂侵台台風

    20160914 莫蘭蒂侵台風
    賴醫生應該是以救人救命為處世方針, 但在 20160914 莫蘭蒂侵台風卻做了一個令人難以想像的決策 - 早上上班, 下午放假。

    單純只看氣象數據來決定, 而沒有去思考背後帶來的一切不便, 學校的營運、學生的回家通勤問題, 台鐵還要特地配合台南的這決定, 整個中午下班的塞車與不便, 在風雨中塞車的感覺我想沒人願意, 但就是因為這決定, 讓台南市民浸淫在一個非常危險、不變得處境。

    而只要不上那半天班就可以避免這樣的事情, 之前台中已經有因為上半天班而一家3口死亡的例子, 難道當了市長就忘記醫生的德行了嗎?

    又, 為什麼一定要上半天班呢? 真的是這個理由嗎?

    為了 ?? 你可以不進議會, 有人為你鼓掌, 為了人民, 你不能說放個假嗎? 原來你也是這種等級而已。被罵也是剛好, 希望不要在理由伯, 把這次人們的聲音聽進去, 還是有機會更上層樓。現在已經從賴神變成賴半天了。

    我們人民想得到的原因你想不到嗎?

    我是不是看起來像笨蛋, 要不然你怎麼會說出這樣的回應?

    颱風來襲,台南市做出上午上班上課、下午停班停課的決定,引發不少民眾抱怨,對此台南市長賴清德今(14)日到海邊視察防颱整備時指出,目前看來決策無誤,但颱風假決策很難贏得全體市民支持,只能根據客觀數據並依法行政,希望市民能諒解。
    氣象局預報,南部濱海地區風勢最強,且適逢滿潮,可能會造成淹水,高雄港更出現貨櫃被強風掀翻的畫面。而目前除國軍已動員協助堆沙包等防治工作,賴清德上午也前往濱海地區了解防颱準備情形。
    
    對於南市府昨晚10點才宣布「上午上班上課、下午停班停課」,賴清德解釋,因為昨晚7時預報未達停班停課標準,只能等到晚間10點預報才能決策;而預報也指出,台南雨量全天未達標準,風力則待下午才符合放假標準,經討論後作出上半天班的決定,「造成一些家長不便,但希望大家能理解」。
    
    賴清德也說,中央氣象局預報將軍區有有嚴重暴漲及強烈風勢,但上午風雨都不嚴重,證明昨晚決策應該沒有偏差,賴清德也強調,法律並沒有給他說放假就放假的權力,只能依照中央氣象局數據與法律做決策。
    

    你沒說出口的原因大家心知肚明, 準備後承受這後果吧, 人民給的壓力似乎輸給另外一方了呢?

    之前台風已經一次了, 這次又這樣, 我實在無法相信這是會把人民身家安全放在第一位的首長作法。

    實在氣不過, 要不然我才不那麼閒, 好好假期不過, 打這篇文章。

    人心就是這樣一點一點失去的, 莫忘國民黨怎麼失去政權的, 怎麼打敗仗逃到台灣的。我講這個不是恐嚇, 因為這些政治人物聽不下去人們的聲音, 只怕掉了選票, 人民也只有選票這個武器而已, 只有選票可以教訓這些人。

    我本來可以請假, 但為什麼要我花自己的假來彌補這個爛決策呢?

    忍無可忍, 無需再忍。

    2016年8月28日 星期日

    picasaweb 終於被整合到 google 相簿了, 如何選用這些照片的連結到 google blog

    20160806 發現常用的 picasaweb 相簿終於被整合到 google 相簿了。picasaweb 相簿有一個我非常需要的功能, 就是提供圖檔連接給 blog 用, 我 blog 上的圖都是這樣用的。

    新版的 picasaweb
    舊版的 picsaweb

    可以從右下方那邊兩個欄位選出圖檔的連結


    不過若要使用 picasweb 圖片的連結可以從 blog 《相簿中封存的圖片 (fig 1)》去選擇, 和之前的習慣不同, 不過也還可以。這篇文章的圖片就是這樣選出來的, 但是應該只能是用於 google 自己的 blogger。

    fig 1.

    我自己相當不習慣新版的呈現方式, 看起來很酷, 可是對於瀏覽的感覺是很亂, 之前排排站好的呈現方式不是很好嗎? 中規中矩, 只是個相片簿, 哪裡需要這麼酷炫呢? 我想到了那華而不實的 3D 桌面特效。

    而嵌入幻燈片投影的連結也沒有了。

    2016年8月12日 星期五

    用輕鬆的方式學習 c++

    看完 table 1. 的書單, 並不覺得很厲害, 反而覺得這書單會嚇到不少想學 c++ 的人, 甚至為 c++ 招來罵名; 而或者你是那些少數份子, 已經把這些書都讀完而引以為豪。

    如果你看完這些書單, 有寫出什麼有趣的程式嗎? 若是沒有, 不是你不用功, 而是這些書單耗掉你太多時間了。

    你也會懷疑有輕鬆的方式學習 c++ 嗎?

    絕對有!

    以下是 c++ 受害者才能寫得出來的文章
    要是先看到劉未鵬的文章, 我就不會寫這篇了, 我和他有類似的想法, 但我的文筆和他差太多了, 無法把我想表達的觀點寫的很清楚, 不過寫了就寫了。

    我和劉未鵬文章的共同想法: 不想在 c++ 語言細節/特性的地方打轉, 一直注意語言細節/特性, 很容易鑽進去這個地方, 不容易逃出來, 我前陣子就鑽進 template, 好不容易才逃出。或是 overloaded function 怎麼決定採用哪個 function, c++ primer 寫的很清楚, 那些規則很煩人, 但你需要去看這些嗎? 不, 一開始不會有這需要, 一開始的你絕對不會寫成這麼複雜, 讓自己踩到陷阱, 頂多是 print(int), print(char) 這種簡單的用法。

    我想用 c++ 寫點有趣的東西, 例如 os kernel, 還沒完成, 目前只建好目錄 (這可容易多了), simple_os 是用 c 實作, 不能用 c++ 實作一直是我的遺憾; 用 c++ 寫的實作品有作業系統之前的 scheme, 和作業系統之前的 c++ library, simple_gui。我覺得這些都比去學習 c++ 語言細節有趣多了。而且用到的 c++ 特性/語言細節很少, 這也是我受害之後才有的想法。

    我也不想再看什麼條款的書, 好像一個不注意, 又要落到 c++ 陷阱中了。不是書籍內容不好, 相反的, table 1. 介紹的書本本都是大作, 但我想把注意力集中在用 c++ 寫出我想寫的程式。


    table 1. C++ 經典書籍

    作者: gocpp (cpp) 看板: C_and_CPP
    標題: [心得] 
    時間: Sat Aug  6 18:48:53 2005
    
    一些書單, 有一部份沒有繁體譯本。
    
    首先, 關於入門書方面, 我覺得到現在我都沒有看到一部適合初學者的 C++ 入門書。
    經典的書都是高手們寫的, 但根本不適合初學者看。這大概是 C++ 族群增長的一大瓶頸。
    
    我個人覺得最適合入門的一本書是 K&R 的那本 C 語言經典, 講解和舉例都非常有水準。
    C++ 的話則是「從 C 到 C++ 物件導向革命」。它是 1990 年的書, 作者陳建維先生是當時
    C++ 標準委員會的一員。這本書我覺得相當不錯, 用不是很大的篇幅, 從軟體工程,
    OO 的思想、觀念, 到 C++ 語言。甚至當時書的附錄就已經提到 template 了。
    
    可惜, 這本書, 現在已經找不到了。這是我第一本看的 C++ 的書。當時這本書和 C++ Primer,
    The C++ Programming Language 並稱三大經典。
    
    《C++ Primer》3/e
    這本是我最喜愛的 C++ 經典之一。可以說是經典中的經典。現在出到四版,
    中譯本年底應該會出來。我看的是第三版, 由 jjhou 譯的。當然,
    雖然它叫 Primer, 但絕對不適合初學者。尤其許多細節之繁復 (像什麼名稱決議過程),
    保証讓初學者吐血, 我相信連許多老手都會覺得受不了。
    
    基本上我把這本書當作「字典」、「百科全書」類來看, 每當一些細節不是很確定,
    就翻翻它。有時晚上無聊抱著它, 不知不覺睡著了。
    
    這本書如果能夠大致流覽過, 並且熟悉其中 60~70% 以上, 我相信已經達到普通
    C++ 高手的程度了。
    
    當然, C++ 高手不等於軟體高手。成為編程高手不難, 成為設計高手才難。C++ 其實可以只花很短
    (半年至一年) 的時間就精通, 但許多編程、軟體設計經驗的累積, 那絕不是三、五年的事,
    通常都得十年八年以上。
    
    《The C++ Programming Language》
    C++ 之父, B.S. 的大作。這本書我讀的是特別版。感覺上它比 C++ Primer
    更不適合初學者。尤其是連程序設計都還搞不清楚的新手。
    這本書的思想、哲學意味很濃厚, 很多篇幅內容不是在講語言的技術, 
    而是在講設計的思維。如果看過 C++ Primer, 再來看這本, 應該會有比較多的體悟。
    
    內容方面, 雖然不若 C++ Primer 鉅細靡遺, 但很精致、簡潔扼要, 
    它不斷拋出各種「設計」層次(而不是語法)的議題, 沖擊讀者的思考,
    迫使你去關注更多編程的本質。
    
    有些部份, 我覺得 The C++ Programming Language 比 C++ Primer 好,
    例如許多語言特征為何存在﹖其應用時機, 它給的範例都很適當, 
    C++ Primer 則比較注重語法和規則的完整詮譯(畢竟大師是搞 Compiler 的專家)
    
    《Effective C++》
    這本書也是經典的經典, 我推薦所有學過 C++, 但自覺對 C++ 一知半解的人, 從這本書開始「重新入門」。
    
    它把 C++ 程序員最常犯的一些錯誤, 不好的用法, 忽略的重要細節, 
    用 50 個條款, 分門別類地一一列出。雖然這些內容, 在 C++ Primer
    或其他大部頭的經典著作, 都不是沒有寫到。但大概很難有人有耐心從頭到尾看完。
    (我猜作者自己也看不下去 ... )
    
    這本書的好處就是, 一次一個主題, 把為什麼要這樣, 來龍去脈, 各種其他舊方法的缺點, 不足之處, 
    一一分析出來。讓讀者確確實實了解並掌握優良的 C++ 編程風格的技術關鍵。
    
    如果 C++ Primer 看不下去的話, 可以先從這本開始, 遇到語法細節搞不清楚的時候, 
    再去翻查 C++ Primer 等教科書。
    
    《More Effective C++》
    同上, 更深入的主題, 某些議題已經可以算是 C++ 高手的程度了
    (也脫離教科書的範圍), 例如 Lazy Evaluation, Virtualizing Constructors,
    Reference Counting, Proxy Classes ... 等, 有些是特殊技術, 
    有些已經算是 Design Patterns 的東西。
    
    這本書當然完全不適合入門者, 它適合對 C++ 各種基本特徵已經很熟悉的讀者看。
    
    《Exceptional C++》
    我第一次看這本書時, 幾乎懷疑我是否學過 C++。但是現在, 我只能說, 這本也是經典中的經典。
    它已經深入到接觸 C++ Object Model 的層次。特別是 Exception-Safety 這一章一系列的步步深入,
    很大程度上改變了我對 C++ 的認識。此外, 它有提到 Pimpl Idiom, 這對改善 C++
    編譯效率也有一定的幫助。其他的主題, 例如泛型編程和對標準庫的幾個討論議題、暫時物件、
    物件壽命、自動轉換 ... 等, 也頗有深度。如果沒看過這本, 且對自己的 C++ 功力頗有信心的人,
    可以測試看看。
    
    《Inside The C++ Object Model》
    這本書和《Essential COM》, 是我讀不太下去的兩本書。僅供高手們參考。適合有志深入 C++ 語言核心
    (例如想要發展 C++ Compiler 的人)鑽研。其實它並不是很難, 但我認為實用性不高, 有時間, 
    不如看看 Effective/Exceptional C++ 系列。
    
    《The C++ Standard Library》
    經典中的經典, 學 C++ 不學標準庫, 就像有腦子卻沒手腳, 難以施展。
    C++ 標準庫和大型的 J2EE, .NET 等框架相比, 算是很陽春的。
    C++ 標準庫只規範了標準 I/O , 資料流, 異常, 演算法和資料結構, 
    還有一些國際化議題。一些重要的功能, 如: IPC, GUI 等等, 都不在其內。
    
    這本書是德國人寫的, 內容務實中肯, 獲得世界一致好評。書中前面有一章特別介紹 C++
    泛型編程基礎, 講得很清楚, 是我看過最好的入門書(學習 STL)、兼工具書、參考書。雖然很大本,
    但絕對值得買一本。
    
    《C++ Templates》
    這本書好像是 2001 年出的, 中譯本在台灣直到去年才出來。內容完全針對 template
    所有的技術細節及應用, 豐富得叫人難以想像。
    
    有時候, 我覺得 template 一直玩下去, 會走火入魔, 這本書的內容,
    某些時候給我這種想法。不過還是值得一看。
    
    《Modern C++ Design》
    這本書是近兩年我最愛的一本 C++ 的書, 我簡直愛死它了﹗作者把 C++ template 的編程技術,
    推向一個嶄新的世界, 讓許多 C++ 大師級人物, 都目瞪口呆的一本書﹗巧妙地結合 GP 和 OO,
    讓動態多型和靜態多型完美地合作無間, 也讓 Design Patterns 領域, 有了全新的視野和思維。
    它的實作品, Loki 函式庫也是我常常運用到的 (雖然只有部份能通過編譯, 正常的工作)。
    
    一本有志成為 C++ 高手絕對不可錯過的書。當然, 在此之前, 要先把 C++ Primer 等先學好再說。
    
    《The Design and Evolution of C++》(D&E)
    這本書台灣沒有譯, 我起初看的是英文版, 後來知道北京有譯這本書, 就托同事的朋友買回來。
    
    這本書不適合學習, 適合對 C++ 發展歷程有興趣的人看 C++ 之父現身說法, 親自講述,
    C++ 是根據哪些原則原理產生的它的各種語言特徵, 取舍之間, 又經過了什麼特殊考量。
    此外, 有些歷史因素, 影響 C++ 的發展, 裡面都有提到。
    
    我當作小說在看的一本。
    
    《Imperfect C++》
    算是比較新的一本書, 台灣沒有譯這本。內容討論到一些比較細部的問題。適合對 C++ 有深入了解的人。
    
    此外, 《More Exceptional C++》和《C++ Gotchas》這兩本不知為何, 
    我覺得不太喜歡, 雖然它討論的議題都很深入。或許實用性不高的關係, 
    我老是覺得它似乎有點 C++ 學究的味道。
    
    不過, 這兩本也是公認的經典。
    
    還有很多其他的, 例如《Thinking in C++》或《C++ 沉思錄》, 也都是經典, 前者也不錯,
    蠻適合當參考書用 (後者比較像故事書)。但以學習 C++ 而言, 我認為《C++ Primer》,
    《The C++ Programmin Language》這兩本比較適合(兼具教科書和參考書的價值)。
    
    《Essential C++》這本, 評價不高, 它既不如 C++ Primer 完整, 也不適合初學者, 
    只能說是聊備一格。應該不用看。
    
    另外, 專講 STL 的書也很多, 有的也很深入, 但從實用的角度, 我認為只要一本
    《The C++ Standard Library》就大致足夠了。
    另外, 《Effective STL》也是一本很不錯的書, 可以糾正很多不好的用法。
    
    其實對其他語言的使用者而言, 很難接受學個 C++ 要看這麼多書 
    (我想也只有 C++ 的熱愛者, 才會真的去讀這些書)。
    
    C++ 要實用, 還要學習許多 GUI, Database, IPC 等等的 Framework, 
    這些東西沒有統一標準, 可說憑個人的選擇, 通常是基於工作環境的需要。
    

    從 C 到 C++ 物件導向革命 - 抄襲的作品
    學習 c++ 一定要這麼辛苦嗎? table 1 提到的書單我幾乎都有 (中文版本)。我反而推薦《Essential C++》, 不過這是給有程式經驗的人看的, 並不是給程式語言初學者, 薄薄一本, 也不會提到完整的 c++ 特性, 看完就可以使用 c++ 來寫程式了。

    「從 C 到 C++ 物件導向革命」這本書雖然不錯, 我也有, 但這是抄襲的作品, 請看作者自己的發文。《Chris Chen (陳建維) 對於「從 C 到 C++ 物件導向革命」的說明

    我不是來贊同書單的, 相反的, 我是來減少書單的, 畢竟看的書要是多了, 誰也不相信能學的輕鬆。

    我把 c++ 分為兩種使用者:
    1. c++ 使用者
    2. c++ 底層開發人員
    這麼直覺, 應該不用解釋了。

    而到了 2016 年, 至少又要加上幾本書了。第四版的 the c++ programming language, 第五版的 c++ primer, 這兩本這麼厚, 吃的下的人不多, 到不是因為看不完, 而是會排擠學習其他知識的時間。真要挑一本看, 當然是看 Bjarne 的書, 因為我實在想不出不看 c++ 發明者寫的書而非要去看其他人寫的理由。

    Effective C++, More Effective C++, 看著手邊的 effective modern c++, 未來再看到 more effective modern c++ 我應該也不會意外。拿到書後沒有急著看 effective modern c++, 我的心境已經和之前不同了, 當初 Effective C++, More Effective C++ 看的津津樂道, 不過對於 c++ 的掌握沒什麼幫助, 不是書不好, 而是我忘光了書中內容了, 而這 3 本薄薄的, 不會花上太多時間。

    你不想在語言上花太多時間吧! 只有 c++ 本身並不能寫出什麼有趣的程式, 我好像打自己臉了, fig 1 就是用 cout 畫出整個畫面, 但其實也沒那麼簡單, 如果只有 c++ 本身的知識, 也是做不到的。fig 1 是一個很有趣的程式。

    難道你很喜歡演算法那些題目嗎? 什麼反轉二元樹, linked list, graph 演算法, 二元搜尋樹, 河內塔 ... 那你是個例外。通常把某個平台的 api 組合起來的程式才是我們更常見的程式。

    像這個看起來很簡單的《文字大富翁》只有 c++ 本身的知識, 是完全寫不出來的, 光是畫面的繪製就難倒你, 寫出這樣的程式有沒更吸引你呢?

    使用 c++ 本身甚至連抓取特殊按鍵 (F1, Pause 之類的) 都有問題, 我們更常會需要類似的功能, 所以還得知道怎麼辦到這件事情, 想寫視窗程式吧, 還得學習 qt, 想寫手機 app, 還是可以學 qt, 想寫網路程式還得學 socket, 想在 linux 上寫程式, 得花時間看 apue, 想寫 windows 系統程式, 還得看大奧祕之類的書, 想寫 compiler/interpreter, 得找編譯器的書來看, 想寫 os, 得找 os 相關的資料, 想寫網頁程式, 那你挑錯語言了, c++ 會讓你很累。除了語言本身還有想寫的領域知識得學習, 把時間花在語言本身不是太划算。

    劉未鵬寫文章的時候應該還沒有這本 -《C++程式設計原理與實務-第二版》, 這是 Bjarne 寫給初學者看的, 強力推薦。

    fig 1. 使用 cout 來繪出畫面

    再來本《c++ 標準庫》, 我知道有免費的英文網站可以查, 但中文是這本書的最大價值, 你懂的, 如果你要靠免費的英文網站學英文又學 c++, 那你挑錯教材了, 很有可能落得兩頭空, 既沒有學好 c++ 標準程式庫, 英文也沒有進步, 一心二用是很困難的, 連 Don Knuth 一次都只做一件事情, 我們平凡人就更無法同時做兩件事情了。

    接著該讀哪本呢? the c++ programming language the 4th 中文本, 現在的我會選這 3 本書來學習 c++, c++ primer 就不讀了, the c++ programming language 應該可以覆蓋 c++ primer 內容, 我會讀 c++ primer, 完全是因為侯捷的翻譯, 如果不是侯捷翻的, 我只會去看 the c++ programming language, 看聖經版就夠了。但這本不是馬上看, 而是用 c++ 寫了不少程式後, 再來翻閱, 所以實際上只要讀 2 本, 甚至也不一定要讀 c++ 標準庫, 那更是只要讀一本, 到了這時候應該不會滿足《C++ 程式設計原理與實務》裡頭的東西, 會想要再知道多一點, 就靠它了。
    1. C++程式設計原理與實務-第二版
    2. c++ 標準庫
    3. the c++ programming language the 4th 中文本

    我認為這樣就足夠當個 c++ 使用者, 其他的就隨緣了。如果還要讀書呢? 那就再把 1, 3 拿出來讀, 正常的人應該把讀過的內容都忘光了。再來的話你應該有能力選要看的 c++ 書籍, 可以從各地的推薦書單找到自己要的。

    若你要像我一樣把 c++ 用在作業系統之前的程式上, 那所需要的知識大部份就和 c++ 無關了, 可以從我的 blog 文章得知個大概。這是《系統底層開發人員》的領域, 不是《c++ 底層開發人員》, 也許有人會同時有這兩種屬性 (ex: Bjarne Stroustrup), 不過這兩樣是不同的, 我用 c 或其他語言也可以辦到這件事情, 和 c++ 無關, 用 c++ 做這件事情只是因為我喜歡 c++。

    那你說沒學到的其他 c++ 特性怎麼辦, 沒怎麼辦, 不會那些不會嚴重影響到寫不出程式來。c 沒有 lambda, closure, 沒有物件導向, 沒有 template, 沒有很多語言有的豐富特性, 但我需要為你證明 c 的能耐嗎? 但若有些特性不重要, 那麼 linux 裡頭為什麼又用上那麼多的 gnu extension 呢?

    語言特性真的令人又愛又恨, 怎麼選擇是智慧的表現。

    c++ 最令人注目的 OO, 就是 class 的運用, 以 c++ 使用者來說, 只要使用別人寫好的 class 就足以, 這個層級的學習就簡單很多, 大多是一些 class 語法, 你不需要學習如何寫好一個 class 的 ctor/dtor/assign operator, 只要有概念即可, 大概也不會有機會去寫這些。但是 c++ 底層開發人員就不同了, 他們得知道如何撰寫這些, 除了功能正常, 還得有效率。這部份的學習就辛苦一點, 然後在加上繼承/多型又會再辛苦一點; 再來個 template class, 又再辛苦一些。

    呼, 還好我是個 c++ 使用者, lucky。我們需要的大多是 RAII, 這個就比寫完整組的「那三個」容易多了, 頂多寫個 ctor/dtor 複雜度不高, 別小看這個, 光是這樣, 就已經比 c init/destory 好用不少了。overloaded 也是好學的有用特性, 看過就記住了, 但是 ... 搞得太複雜還是會害到自己。

    再來就是 c++11, c++11 之後又多了很多折磨人的特性, 有 move semantic, lambda, !@#$%^&*() ... 夠折磨你的, 完了嗎? 還沒, template 的 meta-programming 加上 variadic template 技巧更是令人不知所措, 用別人寫好的很快樂, 自己寫就不好玩了。

    但學習 c++11 raw string, 和 range base for loop 語法, 一點也不難, 撿起他們來吧! 如果不想學也沒關係, 使用原本的 for loop 語法也不會讓自己看來像笨蛋, 同樣的, 用 range base for loop 也不會讓自己看來很高竿。move semantic 就不用勉強自己了, 我覺得這個特性不是很容易理解, 我花了不少時間才弄懂, 就當個單純 c++ 使用者。

    沒有這些之前, 你 c++ 程式也寫的好好的, 這不會造成程式寫不出來的後遺症, 不是一定要學習的關鍵。用 c++ 98 也不糟糕, 很多人也只用 c++ compiler 而不寫 c++ style 程式。我不是說不學 c++11, c++14, c++17, 而是沒那麼急迫的需要學習他, 當然你若是把自己定義為 c++ 底層開發人員, 那就一定要會的。

    最折磨人的 meta-programming 呢? 這個恐怖的 template 技巧, 不會會怎麼樣嗎? 我不知道, 但我發現他並不會阻礙我完成一個程式, 我連語法都看不懂。

    你會不會這樣? 花了很多時間學習的 c++ 特性, 一定要想方設法把他派上用場, 好像不這麼做就浪費了好不容易學成的絕招, 這是為用而用, 而不是真的非用不可。我很常看到 c++ template 技巧, 我一個也不會, 但我也放棄治療學習了, 根本看不懂那些角括弧, 當個 c++ 使用者會比較輕鬆。一樣不是不學, 而是把他當成加分的東西, 慢慢來學習。

    沒用上 c++ 特異功能, 並不會使你看起來像笨蛋, 掌握 if/else, while, function call, 就已經是很大的武器了。

    這樣扣完之後, 大概只要學習和 c 一樣的部份, 加上一點點 class 用法, 再加上標準程式庫, 這樣的負擔相信每個人都負擔的起, 就不會大喊學 c++ 吃不消, 當然由於那可怕的指標以及沒有 gc 加持, 應該還是比學 java 難上一點。哦! 我忘了提到 exception handle, 那個就自己斟酌吧! return error code 也還可以用, 不一定非用 exception handle 不可。

    哦! 有些朋友會說我根本是在寫 c, 我不反對 (不過我堅持我用的是 c++), 但我日子很好過, 沒被這些嚇死人的特性搞死。我很常綜合使用 OO 和單純的 class 語法, 哪個寫來順手就用哪個, 以前我也很煩惱要用 OO 還是一般 function, 用 define 還是 const, 連程式都還不知道寫不寫的出來, 就在煩惱這些小事不覺得想太多了嗎? 只要你寫的夠多, 最終就會知道是 define 比較好用還是 const 比較好用, 書上寫那個好的原因, 可能你根本就無法體會, 而一旦你有所體會, 也不用去管書上的建議了。

    而混著用很好用, 我就混著用了。

    除了這個, c++ 給了你很多個選項, printf, cout 我也常常混著使用, 因為我有時候覺得 printf 好用, 有時候覺得 cout 好用, 我知道這習慣不好, 請不要學我。但 global object ctor 裡頭不能用 cout, 我也只能用 printf(), 沒什麼選擇, 這是中招好幾次之後留下的深刻記憶。

    c++11 在 iostream 直接加入了這行:
    static ios_base::Init __ioinit;

    How can I ensure that global variables are initialized in the correct order?」介紹了 cout 是怎麼辦到的。

    解決了 cout, cin 在什麼時候會被初始化的問題, 但我還是不太願意這樣用, 我不想對 cout/cin 有特例之外的處理, 一個原則就好, global object 的初始化是沒有保證的, 不要在 global object ctor 使用 global object, 這住這條原則就夠了。

    令人驚豔的 boost 我也沒用過, 綜觀下來, 你應該不會覺得我是 c++ 高手, 我也的確不是 c++ 高手, 很多人都誤會我 c++ 很強 (這是我的平凡之其五), 但我還是用 c++ 寫了讓人覺得還蠻厲害的程式。
    • simple_os - 呃 ... 這不是用 c++ 寫的不算
    • simple_compiler - 目前只是 interpreter, 用到的 c++ 特異功能只有 class, c++ 標準程式庫, range base for, auto 不算特異功能, 但你不會認為這個東西很好寫吧!
    • simple_stdcpplib - 因為寫了容器 (list, vector, map), 我用了 template function/class, 這個 c++ template 真是難死我了。
    • simple_scheme - bj4
    • simple_gui - 我參考了《事件式驅動式程式設計》, 以 MVC (就是現在 web 程式上很熱門的 MVC) 完成了一個文字模式的 window system。

    我沒像劉未鵬《我的C++學習歷程(old)》這麼努力學習 c++, 我只有看書, 沒有去看 stl/boost/others 的程式碼, 這是一個學習的敗筆, 幾乎只有學生時期才有這樣的時間, 看別人的程式碼是很好的練習, 因為上班後就知道要改很多前人寫的程式碼, 看懂他們很重要, 好 code 要看, 爛 code 更要看, 要不然你怎麼改得動。別期待能看到好 code, 那是上輩子修來的福氣。而且能在爛 code 上持續加上新功能, 不是也有另外一番成就感嗎?

    我的學習過程在《 [嘴炮] - c++ 之電腦語言之爭》描述過, 我花在看書的時間太多了, 不應該這麼做, 應該要把時間花在真的寫程式上, 不管是寫在紙上還是在電腦上, 總之去寫就是了。

    simple 系列是我亡羊補牢之作。要是能在學生時代完成這些, 現在寫的就是 complicated 版本了。


    紙上得來終覺淺, 絕知此事要躬行。

    ref:

    C++, Farewell~
    https://github.com/kasicass/blog/blob/master/cpp/2018_11_23_farewell_cpp.md