2015年7月28日 星期二

從另一種角度理解情感同理心

在學了多年的資訊工程領域以後,
總會想試著用各種角度去理解這個世界,
以及其他人所感受到、在乎的事情.

所以這篇本來是要整理軟硬整合系統的筆記,
卻硬是要扯到同理心.

[人類從食物採集者變身為資訊採集者。──麥克魯漢]

從資訊工程的角度來看,
粗略分成硬體和軟體兩部分.
這兩部分組成一個設備(Device)

兩台設備之間的溝通則稱為通訊.
通訊的目的是為了傳遞某樣事物或概念.

如果要傳遞溫度,
大致上的流程,
要先有一個會因為溫度而變化的物質.
法拉第、赫茲等大大就發現了一堆效應和定理,
讓我們能瞭解物質變化的特性.

但有這些還不夠, 
因為連續的訊號輸入和時序有關,
所以我們需要一個震盪器來產生頻率.

而在電子元件的接收方和發送方,
頻率必須一樣才能傳遞正確的訊號.

但即使正確傳遞了訊號,
仍然無法解讀這些訊號的意義,
所以必須靠通訊協定.
兩台設備必須先定義好這些訊號所代表的意義.

所以設備間的通訊就在一堆 
電/磁/訊號/頻率 換來換去的情況下傳遞了.
而其中由於傳遞的方式/概念越來越複雜,
所以描述這些邏輯的軟體也就越來越複雜.

-------------------------------------------------------------

情感同理心, 能夠體會他人的情緒和想法、理解他人的立場和感受.

情緒, 感受,
這些東西的產生和環境, 成長背景以及原生的個性有關係. (想法和立場先放一邊)

感受和情緒會產生,
都是因為接收到外在物質狀態的改變,
經由認知判斷,
所形成自身狀態改變的一種概念.

而若要能瞭解他人的感受,
要先瞭解對方對於外在環境變化的感測能力,
以及解讀感測資訊所採用的認知模式,
最後產生的變化再與當前的感受疊加或相互影響,

才會對方是真正的感受.

而相互能同理的溝通, 才是真正的溝通.
否則都是誤解.

-------------------------------------------------------------

認真瞭解一個人

而要知道電子元件的感測能力,
或是頻率. 可以拿三用電表, 示波器.

要知道軟體系統所採用的認知模式, 通訊協定
可以讀原廠的規格, 如 [android][windows], [tcp/ip] , ...

要知道系統當前狀態,
可以print system log.

但如果是人呢?
只能不斷的反覆理解, 確認,
然後修正.

確認我們所用的語言定義是一致的,
妳的感受轉換成語言,
語言在轉換為我的感受去確認妳的感受,
也是一致的.

而還要再確認這些感受,
在經過妳所成長的環境, 與認知的解讀方式.
所產生的變化.

要知道認知的方式,
要仔細的瞭解成長背景, 
以及原生的個性.

最後還要瞭解和細心察覺妳目前的狀態,
才算是完全的同理.

而過程有太多的不確定和失真的因素.

但這只是相互體諒, 包容, 溝通的第一步

-------------------------------------------------------------

所以後來我才瞭解,
原來要能真正聽懂/同理對方所要表達的,
與對方所感受的,
是有多麼不容易.

所以後來我很喜歡說,
我想認真的瞭解、傾聽,
因為在關係中,
注定不會有完全的同理,
訊號在不斷的轉換中,
難免會有失真.

我們唯一能做的就是認真,
認真的對待每一件事物,
盡力而為.

-------------------------------------------------------------




同理心的文明

在1990年代的實驗中,
意外的觀察到”獼猴自己打開堅果”與”獼猴觀看人類打開堅果”,
剛好點亮的是同樣的神經元.

科學家因此不斷的重複研究發現某種叫作鏡像神經元(MirrorNeurons)的東西.
因此研究者們推論, 顯然一些靈長類以及所有人類之間存在著軟線連接(Soft-Wired).
研究者們懷疑大象, 海豚, 狗也是.

“ 我們實際上是軟線連接, 能體會到另一個人的實際苦難,彷彿我們自己正在經歷一樣”
# But, 研究顯示, 鏡像神經元必須自己也有相同的經歷或感受過才會活化. (分為情感同理心和認知同理心)
如果自己不會跳芭蕾舞, 那麼即使觀看別人跳芭蕾舞,鏡像神經元也沒辦法完全活化.

我們的軟線連接真正目的是社交性
如同John Bowlby 可能會說的依附(attachment),即關愛(affection), 陪伴(companionship).
而最重要的驅動力實際上是歸屬感 (belong), 即同理心(empathic)的驅動力.

什麼是同理心?
當一群嬰兒在育兒室裡, 其中有一位嬰兒在哭時,
其它嬰兒作為回應也會哭, 即使他們不知道為什麼.
這就是同理心的例子, 這根植在嬰兒的生理(biology)中.

大約在兩歲半,
孩童實際上能開始在鏡子中辨識出自我,
這時同理心作為一種文化現象就開始發展成熟.
大約在八歲時, 一個孩童學習到出生和死亡的概念,
學習到生命的脆弱和易受傷害的.
生命的脆弱性能讓一位孩童同樣體會到另一個人的苦難.

----- 略

需求與技術

使用者要的是什麼?
是不是每個人都清楚知道自己要的是什麼?
我想答案是否定的.

假設問使用者你想要一隻什麼樣的手機?
通常大部分的人會回答,功能好,速度快,有設計感,金屬外殼,輕薄.

然後技術人員就拼命的研究更多功能,更快的速度,拿了IPhone拼命抄,
結果最後使用者還是買了IPhone.
花了大半時間研究技術,才發現原來你要的只是尊榮感zzzz,
塑膠殼IPhone還不要.

再快的速度也快不出尊榮感 ( 當然慢慢的手機也不會有尊榮感)

--------------------
換個場景: (虛構 der

女:我肚子餓,幫我去買飯 ~
男:好吧,等我這場遊戲打完 …
女:我現在肚子真的很餓,打完遊戲還要多久?
男:快了,冰箱有昨晚剩的食物,先拿去吃.

(過程簡略 … 二十分鐘過後
男生買了 - 加飯的便當回來.
女友莫名的生氣.

男:不是肚子餓嘛,飯也買了,為什麼生氣?
不過就晚了二十分鐘,晚點吃而已啊.

女友依然莫名的生氣,各種吵鬧.

有時候我們誤以為女友的需求是”不想出門買飯”,或是”肚子真的很餓”.
所以我們覺得晚點出門買飯解決了前者的問題,
而冰箱的食物解決了後者的問題.

但女生要的有時就僅是那在乎的感受,
在乎她比在乎遊戲重要的感受.

有時候如果不瞭解根本的原因,往往會朝錯誤的方向去解決問題.
這時候就算買兩個便當回來也沒用,
然後男生開始抱怨女友不可理喻.
女友抱怨男友不懂她的心.

使用者抱怨工程師做出一堆難用且佔容量的產品,
工程師抱怨使用者不願意學習新技術.

那麼使用者的需求有多難理解呢 ?
我覺得認真的去愛一個人可以感受到類似的困難.

對方要的,
不是抽象又模糊的形容,
就是真正根本的原因和表象所顯示的根本不同.

如果我問客戶的話,他們會說給我一匹跑得更快的馬。– Henry Ford (福特汽車創辦人)

--------------------

所以身為RD,
後來我想做的東西,
希望能貫穿且執行我的信念.

我想做一個有生命,
有感情的作品,
真正去渲染或是治癒人心.

因為真正用心愛過一個人,
因為信仰的是愛情,
所以任何技術只是實現理想的一個媒介.

如果問我這行code在寫什麼,
可能有天我會說, 這行code寫的是讓她開心.

(以下 虛構 der
// X工程師 : … , 看起來只是一個開thread讓圖片轉轉轉告訴使用者等待中的功能而已啊… .

我心裡默默地想 :
那是一段讓使用者覺得程式能理解她等待的心情,
讓APP能表達自己目前忙碌的狀態,
希望使用者能體會軟體已經盡力在執行她所給的任務,
讓使用者不會感覺煩躁,不會覺得APP動作很慢,效率很差.
讓使用者覺得APP是在乎她,懂她的.

這樣的軟體才是有生命的.

--------------------
Android 的英文意思是”仿生人”,
在程式中,每個頁面叫Activity (活動),
傳送資料給每個頁面的元件叫Intent (意圖),

這麼擬人化的系統元件,
是不是表示我們是往同一個理念走?

脆弱的力量

講者(定性/質性 研究員)在十年研究中, 研究兩組人, 分別為:

1. 有很強的愛和歸屬感
2. 掙扎的人, 總想著自己是否夠好

這兩組中只有一個可變因素, 相信自己是值得被愛與歸屬的
於是講者開始仔細探討擁有愛和歸屬感的那組,

十年研究中, 所學到最重要的其中一件事情
他們共有的, 是勇氣(Courage).

勇氣(Courage)和勇敢(Bravery) 不同的地方在於,
勇氣最初的定義, 最早變成英文的時候
是拉丁字源cor,表示"心(Heart)"
而它最初的定義, 就是全心全意講述關於你自己的故事
所以這些人, 有著承認不完美的勇氣.

他們有著同情心(compassion) (講者沒有用 sympathy / empathy 來形容), 對自己好然後對別人好因為後來你一定會發現,要對別人好, 就一定要先對自己好

為了與人連結, 必須放下”想”成為得自己, 成為真正的自己.
另一個重點, 他們坦蕩的接受脆弱(Vulnerability)
他們相信, 讓他們脆弱的, 也是讓他們美麗的
“脆弱似乎也孕育出了喜悅, 創造力, 歸屬和愛”

我們生活在脆弱的世界, 而我們應付脆弱的其中一個方式,
就是麻痺脆弱情感,
但我們不能選擇性麻痹,
要麻痺難過的感覺, 就要麻痺憐憫, 情感,
當我們麻痺憐憫, 就會麻痺喜悅, 之後感到痛苦

我們應付脆弱的另一種方式, 就是確定那些令人不確定的事.
我對, 你錯, 閉嘴.
其中沒有談話,  只有責怪

研究上怎麼敘述責怪?
釋放痛苦與不安的方式之一

最後講者總結, 試著表達自己脆弱的那面,
全心全意去愛, 即使不保證有回報.


詞彙敘述:
compassion (同情心, 帶有行動), com- 為「周遍」字根, 對象廣泛
sympathy (同情心), sym- 為「對稱」字根, 對象特定, 單向認同
empathy (同理心) - 與目標對象感同身受的情感

Shame (羞恥) - 害怕失去連結
Blame (責怪) - 釋放痛苦與不安的方式之一

Link : https://www.youtube.com/watch?v=zpG6JhOHMmc

Scrum與巴別塔


在聖經中記載,巴別塔 (Tower ofBabel) 是當時人類聯合起來興建,希望能通往天堂的高塔。
為了阻止人類的計劃,上帝讓人類說不同的語言,使人類相互之間不能溝通,計劃因此失敗,人類自此各散東西。
但人類已經還是沒有放棄建造通往天堂的高塔,在研究中顯示一代人可以創造語言.

標準例子是奴隸貿易。
奴隸貿易主要涉及煙草、棉花、咖啡或糖,
工人往往是來自不同語言背景的奴隸,這樣的安排部分原因是故意的,以避免可能有人反抗。
這些來自不同文化背景的奴隸自然而然會制定臨時的 溝通系統,方便彼此交談。
這就是所謂 洋涇濱(Pidgin) 語言。「洋涇濱」不是語言,而是從不同語言借用一些字詞字串,隨意放在一起。

孩子在這種社會長大會有什麼問題?
可能預期他們會學會以洋涇濱交流,
但實際情況是一代人已經發展自己的語言,創建了豐富語法,形態和音韻的語言。
他們創造的這種語言被稱為 混合語/克里奧爾語 (Creole Language)

而除了語言,另一種形容文化資訊傳承時的單位,模因(memes)
被設想為一種類似於基因的「文化單位」(一種觀念、信仰、行為模式等等),存在於個體的思想中,
會進行自我繁衍從而在不同人的思想領域內傳播。

這些詞語都是為了將抽象概念量化 / 研究 / 改善 ,最後建造出巴別塔的過程.

而 軟體工程(SoftwareEngineering) 也有些方法正在解決建造巴別塔所遇到的問題,
其中Scrum是屬於 敏捷軟體開(Agilesoftware development) 的其中一種方法,
對於建造巴別塔過程中所產生的不確定性,以及各自的文化背景及經驗的不同,
所要溝通勢必得產生一種 洋涇濱(Pidgin)語言得以形容所估計的 時間,難易度,自身掌握程度,需求理解程度.

從現有的語言很顯然無法有一個能形容那麼多抽象概念的單位,
於是Scrum 方法採用Story point 去形容在團隊建造巴別塔的過程中,
團隊成員所評估出的相對性概念單位.

因此每個不同的巴別塔團隊成員之間的Story point 背後所隱含的意義並不相同.

桌上型冷氣

記得大學時曾聽過一個交大做機器人的教授提過,
真正要研究一門學問,
連最根本的細節都要瞭解.

所以為了補足工程領域的知識,
就只好透過實作來做一些爛東西來學習 (它到現在CP值都還沒超過電風扇 T_T)
------------------------------------------------------------------------

目前設計的模型如圖所示,
最前面是放濾網和電腦用的4 pin風扇,
把中間核心的致冷片產生的冷氣抽出來,
而致冷片產生的熱量透過後面導熱金屬經由散熱風扇抽掉.
(中間有留空間放冰塊,如果有需要的話)
就是這個簡單的設計.

------------------------------------------------------------------------
致冷晶片的原理大致上是利用半導體元件的特性,
一塊N型半導體與一塊P行半導體材料聯成電偶對,
在電路中接通直流電留後,會產生能量的轉移.
當電流由N型元件流向P型元件的接頭吸收熱量,就成為冷端.
反之,電流由P型元件流向N型元件的接頭釋放熱量,就成為熱端.
吸收熱量和放出熱量的大小由電流大小決定.
所以熱端的散熱和電流的安培數是主要讓機器能有用的關鍵.

買的致冷器型號是TECI-12703,
127為致冷元件的電偶對數,0.3為允許電流值(安培),
致冷元件的極限電壓近似於電偶對數x0.11,V=127x0.11=13.97(V)

------------------------------------------------------------------------
最後零件和材料齊了以後,
搞定電壓和安培是件麻煩的事情,
如果之後要接MCU板子,
來控制電路,必須要+繼電器來控制大電流,
因為USB最多只能供5v的電壓,
而致冷片其實超耗電,至少要12v 3安培的電流(還有更高的),
能源轉換率也只有40% (傳統冷氣壓縮機有95%).

------------------



最後補這張暫時的模型,
之後如果有時間STM32MCU控制板接上去,
透過程式就能做更多事情了

------------------


arduino Leonardo 測試 Code
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX | TX
int relay1=8;                                   //set relay 1 at pin No.8
int iLedPin        = 13;

void setup() 
{
  //pinMode(7, OUTPUT);  // this pin will pull the HC-05 pin 34 (key pin) HIGH to switch module to AT mode
  //digitalWrite(7, HIGH);

  pinMode(relay1,OUTPUT);       //set relay to out put
  delay(1000);
  Serial.begin(57600);
  mySerial.begin(9600);
}

char inByte=0;
int i=0;
void loop() {
    
  delay(1000);
  
  if (mySerial.available())
  {
    if(i==0)
    {
        Serial.write("H");
      digitalWrite(relay1,HIGH);
      i=1;
    }
    else
    {
      i=0;
      Serial.write("L");
      digitalWrite(relay1,LOW); 
    }
    Serial.write(mySerial.read());
  }
  
  if (Serial.available())
  { 
    mySerial.write(Serial.read());
  }
}

------------------
android code

public void Reg()
{
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if (!mBluetoothAdapter.isEnabled()) {
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
((Activity)mContext).startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
// Otherwise, setup the chat session
}

IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
((Activity)mContext).registerReceiver(mReceiver, filter);
}


public final BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {

if (BluetoothDevice.ACTION_FOUND.equals(intent.getAction())) {

BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.d(this.getClass().getName(), "device.getName = " + device.getName());
Toast.makeText(mContext, device.getName(), Toast.LENGTH_SHORT).show();

if (device.getName().equals("HC-05")){
try {
Log.d(this.getClass().getName(),"Connect success = " + device.getName());

mBluetoothAdapter.cancelDiscovery();

mBluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
mBluetoothSocket.connect();

mOutputStream = mBluetoothSocket.getOutputStream();

String message = "h";
mOutputStream.write(message.getBytes());
mOutputStream.flush();

} catch (IOException e) {
Log.d(this.getClass().getName(),"Exception = " + e.getMessage());
}
}
}
}
};

------------------

參考資料: