jim yeh on 七月 26th, 2017

因為我們在溝通過程中,缺乏預測的直覺。一味地認為別人應該聽從我們的意見,卻忽略了對方常會有出乎我們意料的反應,那些反應可能會使我們在當下無所適從。我們從對方出乎意料的反應中產生壓力,造成彼此溝通的契機破裂。面對爭議性的話題,我們所因應的方式往往加強了我們原本想要化解的反對勢力。此時,我們需要更敏銳的直覺,在此我想分享威廉伊薩克的《深度匯談》的觀念,從對話扮演不同角色來培養敏銳的對話直覺。

Continue reading about 和群體互動預測的直覺

     
jim yeh on 十一月 17th, 2016

延遲運算是宣告式語意中,用來對治複雜性的利器。假如我們要解決的問題,並沒辦法單獨每一元素以 item -> toResult(item) 的方式解決,而是每一個元素的計算都會和其它元素扯上關係,而且因應不同的情境,要傳入不同的演算策略的話,這時候就該脈絡物件上場

Continue reading about 宣告式語意的脈絡

     
jim yeh on 十月 30th, 2015

感官的認知功能加上認知的反應態度,很容易會讓人聯想到現實主義者和火象星座的相關。火象星座和行動、能力、創作、運動、操作等事情有關。牡羊座代表運用技術及發揮實力在競爭中生存與求勝。獅子座代表運用創意在個人興趣中從事創作或運動,來表現創造力。人馬座代表延伸專長擴大生活領域,以智慧探索文化內涵。一般來說,一宮在火象星座的人,可以對應到現實主義者的氣質表現。在不考慮星體對氣質影響的情況下,我們可以單純地用命宮占星學來分析現實主義者的氣質呈象。

Continue reading about 氣質占星:現實主義者

     
jim yeh on 十月 30th, 2015

從感官和判斷兩項特質,很容易讓人聯想到社群主義和土象星座的關係。土象星座和組織、制度、規矩、以及經驗有關。金牛座代表付出與報酬的平衡,室女座代表工作的品質與條理,魔羯座則代表目標實現的組織與計畫。占星命盤的一宮落在土象星座的人,正好可以對應社群主義氣質的個性表現。假如不考慮星體對星座及宮位的交互作用,我們可以簡單以命宮占星學來分析基本的氣質呈象。

Continue reading about 氣質占星:社群主義者

     
jim yeh on 七月 12th, 2015

一般來說,程式可以寫成一連串或是巢狀的 if 敍述,那就代表程式流程可以用狀態變數來表示,也就是可以表示成有限狀態機的形式,可以用 interpreter 或是 state pattern 來解決甚至是用表格檢索的方式來表現。但我們一般都不會遇到需要那麼複雜的情況,主要是因為那是框架需要解決的問題,比如說程式語言的 Compiler 或是如 Hibernate 的 HQL、JPA 的 JPQL。 對其它我們會碰到沒那麼複雜的情況,同人的經驗顯示有二種不同解決方式:第一種就是上一篇流程元件化提到的應用 builder pattern 或是更早提到訊息拆解組合應用 visitor pattern,建立一個解決問題過程的 context 脈絡,把答案組合出來,有時候問題比較簡單時,也可能只需要像本篇文章提到只需要應用 strategy pattern 就可以了、另一種方式則是利用泛函編程的高階函式,建構出解決問題的表示式,然後再讓函式一層層套疊的方式來求解,同人不久前分享的語言整合查詢就是這種解法的代表。

Continue reading about 更簡單的條件查詢設計

     
jim yeh on 三月 23rd, 2015

柯文哲因為張夢麟沒有回答符合他心意的答案,卻要求拔除內湖分局長的職務,這才是典型的指鹿為馬。如同趙高當年對不願昧著良心,反對指鹿為馬的大臣們,以羅織罪名的方式將他們鏟除的方式一樣。柯文哲對張夢麟的指責,暗示他犯錯不承認,又說謊來辯解,顯然是運用權勢來定他的罪。當然同人相信柯文哲也許不是存心陷害忠良,而是因為無知和驕傲,但更可怕的是這種領導風格會讓人在團隊當中不敢講真話,說話做事不願昧著良心行事阿諛的人,必然會不見容於團隊,這其實都是自作聰明的領導人很難看到的真相。

Continue reading about 什麼是指鹿為馬?

     
jim yeh on 一月 31st, 2015

語言整合查詢(LINQ)是非常有用的設計概念,它扭轉我們過去用指令式編程的習慣,轉而以宣告式編程的設計典範,讓程式碼變得簡潔,也提高設計的抽象能力。尤其是對於迴圈當中一再出現類似的條件判斷,卻苦於迴圈的特性讓我們沒有很好的策略來將變動的部分封裝起來,只能任由讓程式碼因應需求改變而日趨複雜,讓開發及維護程式愈來愈困難的時候。但如果我們能夠把指令式編程的開發慣例換成宣告式編程的思維模式,我們就會發現問題將變得很簡單。 如同 .NET Framework 支援 LINQ 的查詢語句可以抽換查詢的條件式(透過 where() 方法)和查詢結果的對應(透過 select()、groupBy()等方法),其實在 Java 1.6 我們也可以用相同的設計概念實作語言整合功能。本來同人一直認為實作它應該會很複雜,但實際動手後來發現,實作它比想像中的來的簡單,也只是運用延遲運算的觀念和一些設計樣式的手法就能夠很輕易的實現了。

Continue reading about 用 Java 實作語言整合查詢功能

     
jim yeh on 六月 19th, 2014

用以上這樣的模式來重構 legacy code,程式的意圖會很清楚地浮現出來,也會直接具體地關連到問題領域業務邏輯的語言,而不是一大串的 if-then-else 或是 for 迴圈的語法,這有助於不同觀點的相互溝通。你可以從主要流程中具體明白程式在做什麼,而如果需要瞭解實作的細節,則可以進一步去參考那些很簡單的物件化之小函式。由於不同關切點的分離,程式變得更簡單而且容易測試,對後續的程式維護甚至想要增加功能的需求來說,都會得到莫大的助益呀。

Continue reading about 清楚表達程式意圖的重構招式

     
jim yeh on 五月 14th, 2014

最近同人就碰到一個實例,讓我體會到以泛函編程(FP)典範增進功能的可測性。其實,以前遠在美國的 Perter Ho 就曾向包括同人在內的幾位點空間的朋友,分享過相同的觀念,而同人則是藉由最近的實例而對這樣的觀念有更深刻的體驗。

Continue reading about 以泛函編程增進功能的可測性

     
jim yeh on 一月 28th, 2014

本來第二篇打算要寫剖析命令列的宣告式語意,不過同人覺得我原先的設計還不夠好,於是就暫時先把它擱置下來。結果一擱就擱了好久,慢慢地也讓我覺得沒有必要重新實作命令剖析列的宣告式語意,因為畢竟會使用到的機會並不多。其實命令列剖析的宣告式語意和前一篇文章的設計原理應該是一致的,因此同人後來決定要跳過它。剛好近看到有朋友討論相關的議題,激發我完成系列文章的動力,這一篇所要探討的主題正是有關於查詢的宣告式語意。

Continue reading about 查詢的宣告式語意