Nudge - 推出你的影響力

推出你的影響力:每個人都可以影響別人、改善決策,做人生的選擇設計師這本書在行為經濟學中,佔有一席之地,主要的原因一之,大概是因為它是一本非常容易閱讀的書籍,作者的寫作風格非常輕鬆休閒,也不過份主觀,加上例子都是實際案例,讀起來特別有趣。Nudge是輕推的意思,在這本書中主要指稱在人們做決策時,很容易受到一些外在因素的影響,而這些外在因素有時候很簡單,可能只是提供更簡化的選項、提供預設選項等等,光是這些簡單的變化,就足以影響人類做出不一樣的選擇。相較於像法律、制度、規範等等如果不跟著照作,就可能無法在這社會中生存,輕推的中心思想是,希望提供人們在選擇上最大的自由,但同時也引導人們選擇專家們認為對他們比較有利的選項,在這本書中,這樣的做法被稱為自由家長制(libertarian paternalism),相對的強制人們選擇的制度,被稱之為家長制(paternalistic)。整本書大概可以分成兩個部份,第一個部份主要介紹社會大眾是多麼容易被影響,這邊的理論跟快思慢想一樣,人腦在做決策時,通常情感因素占了很大一部份,也就是快思慢想中的系統一總是能夠主導思考。而也是因為如此,在政府推行政策的時候,多少可以利用這個特點,讓政策能夠在不損害自由的情況下被順利推行。第二部份就開始利用許多真實案例,講述選擇設計師如何發揮輕推的力量,讓管理者能夠事半功倍。如果你是崇尚自由意志的人,可能會覺得這樣的作法有點爭議,但回歸到現實面上,大多數的社會大眾,…

Swift 5 新功能 - Result Type

Result Type 是在 Swift 5 新引入的一個 enum 的型別,主要是要簡化非同步或是複雜的操作間,錯誤傳遞的問題。既有的 Swift 錯誤控制 (Error Handling),主要是仰賴 try/catch 語法,來做到將 error 在上下層物件之間傳遞 (propergation)。try/catch 這個語法雖然好用,不需要明確定義錯誤傳遞方式也能夠做到將錯誤讓更高層次的物件處理,但仍然有個小問題,就是它能處理的範疇,多被侷限在同步的任務裡(SE-0235 - Motivation)。如果是非同步的錯誤傳遞,我們通常都需要自己設計方法來達到。這是一個許多人引頸期盼的功能,也有許多人拿來跟 Promise/Future 或 async/await 做比較。當然 Result 想解決的問題可以說是 async/await 想解決的問題的一個子集合,但不表示它就沒有被實作的必要,…

好人總自以為是: 政治與宗教如何將我們四分五裂 The Righteous Mind: Why Good People Are Divided by Politics and Religion

你有想過為甚麼只要一提到政治,大家總是璧壘分明地悍衛著自己支持的政黨嗎?你有發現你總是在察覺到些微的政治不正確心中就會警鈴大作嗎?這本書絕對是最好的解答。這本書透過大量的心理學、社會學文獻,加上作者自己本身的研究,從人類心理層面上下手,先了解人類思考的過程,再深入探討道德這個難以具象化且沒有標準的心理準則,最後總結出了人類在政治宗教等等方面的凝聚與排外性的來由,還有我們非常想知道的為甚麼一樣都是想對群體好,卻總是無法達成共識。這本書在講甚麼?作者Jonathan Haidt將本書分成三個部份,第一個部份主要講述人類不論如何自以為理性,但終究還是一種情緒的動物。作者利用象與騎象人這個有趣的比喻,巨大的象代表一個人的情緒,騎象人則是人的理性,雖然騎象人在大多時候都能夠控制大象,但一旦大象有自己想去的地方,牠會直接轉向完全不管騎象人,也就是人類總是情感先來,理智推理後到。這一部份的理論也是建立於作者的前一本著作:象與騎象人,這裡的理論打下了下一個部份的根基。第二個部份作者針對道德做了非常深入的分析,將道德這個抽象的概念,利用六大基本法則來具體化它。在整合了相當大量的文獻跟研究後,作者認為世界上常見所謂的道德判斷可以被分為六大類:關懷/傷害、公平/欺騙、忠誠/背叛、權威/顛覆、聖潔/墮落、自由/壓迫。根據不同文化、不同背景、不同政治頃向的人,在判斷道德的時候,…

歡迎來到真實世界 - 如何幫API request寫Unit Test

在上班通勤的時候,最常做的事情就是打電動了。實在有點難在公車上面看書或做認真的事,請問除了高中生之外誰會在公車上認真做事的?那個奈米短的專注時間要思考任何事情都有困難。但是打Clash Royal就不一樣了,那是一款會讓你在毫秒之內進入精神時光屋的遊戲,只要開戰之後你就會到瞬間另外一個世界,直到戰鬥結束前你都不會回到現實,就算坐過站也是一樣。雖然一場只有兩分鐘,但對你來說每一場都像列寧格勒圍城戰一樣,都是漫長的持久戰,也像台灣的政治一樣,都是平行的時空。如果想了完整的平行時空,就不能不提駭客任務(the Matrix),這部電影一直都是心目中最經典的電影之一,除了子彈時間這個讓人萬分驚豔的嘗試之外,許許多多的哲學問題在這部電影裡面都有簡單的著墨,是一部既大眾化又有點燒腦的好電影,下一部能夠相題並論的Cyberpunk商業電影,大概就只剩Inception了。所以,對,在重要但無用的前情提要之後,就來進入到我們今天的主題了:歡迎來到真實世界!這將會是一連串的分享文,想要分享的是一個很多人(包括小弟我)都不願意提到的”那個議題”:Unit Test in iOS。嗯,很輕易就講出來了。Welcome to the real world一般來說,在iOS開發上,寫測試這件事不算是非常的普遍,所以相關的資源可能不像其它語言這麼多,…

歡迎來到真實世界 - Unit Test 的101種方法,以Core Data為例

Once an idea has taken hold of the brain it's almost impossible to eradicate. - Cobb一旦某個想法掌握了你的腦袋,它將會變得難被鏟除。-CobbInception(全面啟動)一直都是個人最愛的電影之一,劇情燒腦、世界觀完整、畫面夢幻,而且又是這種穿越虛實的題材,幾乎所有元素都深得我心。進入夢境就電影來說不算太新的梗,Inception跟其它夢境電影不一樣的是,進入夢境有個更複雜的原因:要徹底改變某個人的想法。老梗電影如果進入某人的夢境,很有可能就只是要引出一些秘密,像是金庫密碼之類的(腦海中馬上浮現:左三、右二、左一),但是在Inception裡,進入別人的夢境是為了要改變某人的想法,讓他乖乖地聽話做一些很蠢的事。這點其實非常的有趣,在生活中,的確有些想法根植在腦海中,久久揮之不去,就像被誰植入了思想一樣,比方說戈巴契夫頭髮最多、海珊最不愛打仗,到長大後我還是一直深信不移。所以這跟我們今天的主題有甚麼關係呢?非常有關係!因為從上篇文章開始,…

歡迎來到真實世界 – 也是需要來測一下傳說中的MVVM阿

在上一篇文章中,我們介紹了一個新的架構:Model-View-ViewModel(MVVM)。透過MVVM pattern,我們把business logic跟presentational logic從ViewController裡面抽出來,變成一個單純好測試的物件。但是對於如何做測試,卻是支字不提,不要懷疑,這就是拖稿(?)。在這篇文章裡,我們就要來看看,怎樣針對我們的ViewModel來寫Unit Test。最近APP架構又成為大家熱門的話題,有很多有趣的文章都在針對這種百家爭鳴的iOS app架構現象提出檢討。其中Much ado about iOS app architecture這篇還不錯,大家可以看看。雖然像是MVVM、VIPER、Clean這些架構的目地都是要解決app架構上權責不分、不易測試等等問題,但是很容易被當成Silver Bullet,以為只要套用了這樣的全新架構,code從此就變得閃亮亮,bug也都自然消失了。另一方面,也有很多人因為這些架構的某些挶限,而完全否認這些架構所帶來的好處(簡單、易上手等等)。在軟體的世界,真的沒有所謂的好壞,只有適不適合。對IQ不高的小蛇我來說,在沒有人手把手地教你的情況,跟本很難在短時間達到這些人說的MVC好棒棒的境界,有太多Pattern、太多的法則要去熟練,…

歡迎來到真實世界 - Continuous Delivery:在你睡覺的時候,電腦們可是都在勤奮地工作喔

在iOS開發的世界,有個非常有趣,但也非常痛苦的地方,就是iOS的開發者,其實需要的基本知識非常地多,Cocoa framework本身就涵蓋了前端的UI邏輯,與資料庫等等的後端邏輯,既要注意頁面跟頁面之間狀態的處理,也要小心記憶體的運用,有時候還要學貝茲曲線跟3D轉場。雖然每一樣都不可能像各領域的專家一樣精通,但也算是攻城獅裡面武器相當多的種族了。今天,不才小弟要來分享,身為iOS工程師,你可能還可以多學的技術:Continous Delivery!身為一個攻城獅,你一定或多或少聽說過Continous Intgration跟Continous Delivery(CI/CD),但是實際生活中,除非是跟一個團隊一起開發,不然應該很少有機會會碰到CI/CD的概念。所謂的CI,就是在開發的過程中,我們需要隨時隨地都確保我們的code主幹都處在可以一個發佈的狀態。也就是說,不能因為正在開發一個新功能,我們的主幹程式就無法運作或是無法打包新版本。而CD,指的則是,我們希望在開發的任何一個階段,都要能夠自動化打包出版本,給需要的人使用。誰會是需要的人?在開發的過程中,工程團隊想要手動測試app時,就會需要一個build來測試,而在開發完畢後,UI測試人員也會需要一個build來做測試。最後,在APP要上線時,理所當然也會需要一個build來送到iTunesConnect上以供審核。所以在系列作拖搞將近三個月後,…

薩米爾欽 Yevgeny Zamyatin - 我們 We

終於補完了反烏托邦三部曲。三部曲按照時間順序,分別是我們(We - Yevgeny Zamyatin, 1921)、美麗新世界(Brave New World - Aldous Huxley, 1932)、跟最有名的1984(1984 - George Orwell, 1949),誕生的時代都落在動蕩不安的一戰二戰這個期間。這部”我們”其實是三部曲最早誕生的一部,其它兩部或多或少都有受到這部的影響。”我們”描述了一個在未來的世界,所有東西都被高度控管,生活在其中的人們幾乎沒有自由可言,甚至連姓名都變成只剩一串號碼。雖然說沒有自由,但在這個環境下的人們卻覺得非常快樂,他們把所有的管制桂定都視為理所當然。用現在的詞彙來說,就是他們都已經被洗腦成功了。而故事的主人翁就是這樣一個完全被洗腦的人,打從心底認為這些管制都是再平常也不過,並且是維持這樣幸福生活的重要因素。故事是用第一人稱視角來撰寫的,也是因為這樣,讓整部小說變得相當有趣。有很多橋段會有主角的反思,看主角用再平常也不過的口吻,講述一些荒謬到不行的事件,像是公然處死反動份子等等,把自己代入主角的思考,就會覺得異常諷刺。當然主角也不是只懂得機械化思考,…

關於民主

首先,恭喜韓導獲得這份殊榮,我從很久以前就開始看韓導的電影,韓導的電影的角色刻畫深刻、情感細膩,像"北漂青年"中無法回家的年輕人,那種因為在中國工作而無法回家的痛苦,都透過精湛的演技還有自然不落俗套的劇本表現出來了。還有"青年創業"這部片中,韓導自導自演,表現出身為台北人對高雄的關懷,我彷彿看到了韓導眼中的眼藥水。如果你問我,韓導有講過甚麼經典名句,能夠成為我們未來人生的座右銘,我一定會告訴你,韓導有一句話真的說得很好:感謝大家。我想,在20年後的今天,能夠以一個番茄的姿態打敗西瓜,真的需要高雄市民的齊心協力,不只針對你,也針對在座的各位,都是感謝。其實在台灣,好像年輕人也都熱心於民主政治,這絕對是一件好事,不管結果是好是壞。只有在有人持續關注的情況下,我們才能夠發揮我們的力量,去改變我們的環境。民主不只有投票,更多的是主動去關心,去了解,裡性表達自己觀點。投票只是一種表達的手段之一,雖然它也是目前最有效的全民參政的手段。不過投票的問題在這次選舉之中也完全表露無疑,下放決策門檻倒底是不是一件好事?甚至全民投票到底是不是一件好事?現實是,至少在21世紀初的今天,不只台灣,世界各地的民主政治,…

歡迎來到真實世界 - 原來是那個傳說中的MVVM阿

好不容易來到了續作的第三集,就這樣以近乎休刊般的速度,也寫了三篇長篇了。雖然對很多高手前輩來說,這些都是非常基礎的東西,但小蛇在跌跌撞撞了許久(還在跌)後,覺得有些東西還是自己寫下來,可以再次釐清自己的觀念,也偷偷希望能夠獲得高手指點或是加入討論,這就是邊緣人參與社會的方式阿(跟本就只是偷懶吧)。話不多說(已經說很多了,想看電影心得可以直接跳到最後),就讓我們進入今天的主題。這篇我們要來談談開發上更貼近實務的部份:如何設計一個好的軟體架構,以及如何測試它。在iOS開發過程中,如果是比較大型的app,通常複雜度都非常高,而且手機開發所需要架構的東西,必須要融合前後端的知識,從跟使用者第一線接觸的UI,到手機底層的資料庫,都必須透過你的code來連接跟協調。這個架構好不好讀、好不好維護、好不好測試,就會是整個開發的重點了,如果這個架構不是很好,接手的人或合作的人無法快速理解,就連你自己有時候都看不太懂,那未來某一天你一定掉進你自己挖出來的大坑裡(對,小蛇我還在我挖的坑裡)。講架構或許有點抽象,要把既有的架構法則套到自己的程式中也不是一天兩天的事情,但有個好方法或許可以試一下,從現在開始,你可以試著培養自己的測試腦。甚麼是測試腦?就是接下來我所要做的事情,我所要做的改變,都是為了要讓測試更容易。你很難想像怎樣的程式是乾淨的程式,畢竟軟體開發的法則很多,光是要不要寫註解就有非常多說法了,…