程序員到 28 歲時應該具有 28 種能力

序——程序員到底是做什麼的?

       偶然翻出了以前買的一本雜誌,名字叫《程序員到 28 歲時應該具有 28 種能力》。以前翻過一遍,現在再翻翻看看,感覺收穫良多。書常看,人常新,相同的書,不同的時間看,帶給你啓示也不一樣。現在看這本書,我想到了一個問題——程序員到底是做什麼的?

       做軟件,寫程序,測試,寫文檔,開會。。。。對,那是程序員的主要工作內容,注意,僅僅是工作內容而已,而目的是什麼呢?只有一個,解決不斷出現的問題。這些問題都圍繞在你周圍,包括你自己的問題,同事的問題,公司的問題,客戶的問題。。。。。這裏的問題並不僅僅是技術問題,而往往比技術問題更難以解決。

       如果上升到這個角度來考慮我們的工作,我想我們的工作就會有意思很多。既然要解決這麼多的問題,除了要有技術能力之外,還需要更多種類的能力,這本書就給了我這樣的一個指導。因爲這本書是日文的,我就把它所說的每一種能力的要點列出來,並加上自己的點評。我得點評也就是自己思考過程,因爲我自己也尚未具有裏面所提到得種種能力,就算是給自己一個激勵。另外,雖然題目裏面有個 28 歲,我想多半出於吸引人的目的,大家不必理會。

之一——保持健康的能力
       這個能力並不是排在這本書的第一個,但是我卻想把它第一個提出來,因爲程序員往往被要求不斷的提高工作能力,技術水平,卻很少被要求有自我管理健康的能力。 書中的要點如下:
健康管理支撐着你的工作。從公司的角度考慮,一個經常患病的人,是不會被委以重任的。從個人角度考慮,經常患病給自己和家庭都帶來很大的煩惱。俗話說身體是革命的本錢,有個好身體,幹什麼都有可能簡單的每日檢查。 
       首先,體重的檢查。對程序員來說,每日測量一下體重是最可行的方法,每個人都有標準體重,通過每天的測量,你就可以有意識的通過減少飯量,多做運動來保持自己的體重。然後是吃飯,如果因爲工作很晚才能吃飯的話,就考慮一下自己的睡覺時間,把飯量減一減。少吃油膩的東西,多吃蔬菜。每天喝一升的茶,多喝無糖的水。感到疲勞的時候吃點維生素。
      職業病的處方。程序員因爲長時間保持坐姿,長時間面對電腦畫面,容易引起肩膀疼,腰疼和眼睛疲勞。所以應該每工作一個小時就起身活動 5 分鐘左右,這個活動包括身體的屈伸,肩部運動等等。同時,閉上眼睛轉動眼球,使用眼藥等對緩解眼睛疲勞比較有效。去廁所,去買東西的時候,做做這些,也算是對時間的有效利用吧。
       對付睡眠不足。幹 IT 的沒有不加班的,所以很多時候就容易睡眠不足。爲了保證睡眠時間就要合理的安排好自己的工作,分好優先級,把今天最應該幹完的做完就可以了,然後早點回家睡覺。這一點,書裏講的我想有點牽強,在中國或許沒有什麼很好的辦法來解決加班的問題,在全世界或許都是個問題。
       心理健康很重要。不要光注意身體,也要時常注意自己的心理健康,程序員常年面臨各種各樣的壓力,不斷重複的工作,保持自己的心理健康,也是一個非常重要的課題。方法很簡單,就是自己獎勵自己。解決了一個 bug ,完成了一個複雜的算法,明白了一個需求,都可以適當的獎勵自己。獎勵的形式多種多樣,總之自己喜歡什麼就幹什麼。其實這裏也給項目的領導者一個啓示,就是要適當的對手下的程序員予以鼓勵和獎勵,完成了一個階段計劃,完成了一次測試,解決了一個關鍵問題,都可以組織大家輕鬆一下,有利於提高團隊的凝聚力和個人的工作熱情。
       盡情的放鬆。如果項目時間很長,結束遙遙無期或者項目陷入了泥潭,無法前進的時候,爲了保持自己的工作勁頭,不妨選擇適當的一天,什麼也不做,讓自己好好放鬆,換換大腦,有利於更有效率的工作。
       最後說一下簡單的營養補給。平常吃點食物纖維和複合維生素,肩膀疼的時候多吃維生素 E 比較有效,眼睛疲勞時多吃維生素 A 。 
       以上列出了幾個有關健康管理的要點。自己的健康自己管理,意識到自己的健康的重要,不要勉強自己做一些會損害自己健康的事情,例如連續通宵等等。良好的健康,對自己,對家庭,對公司都是一筆財富。年輕的時候用健康換錢,上了年紀就不得不用錢來換健康了。


之二——取信於人的能力
      程序員除了要學習技術知識以外,掌握更多的工作以及與人相處的技巧也是十分重要的,取信於人的能力當屬其中的重中之重。 
       爲什麼要具備取信於人的能力呢?
我想對程序員來說,具備了這種能力至少有以下兩點好處更多的工作機會。公司都喜歡把重要的工作交給值得信任的人來做,你也就獲得了比別人更多的工作機會,同時也會不斷的提高自己,至於經濟上的利益,一定也會少不了的。更廣泛的人際關係。如果你是一個值得信任的人,那麼就會有好多人和你交朋友,你的社交圈也就比別人要廣,這往往意味着更多的機會。
       那麼如何取信於人呢?以下幾點我與大家共勉。一:不說假話。日常生活和工作中迫於各種各樣的壓力而說假話應該是司空見慣的事情。做到不說假話真的很難,不過不要緊,先把下面說的幾點做好。二:答應的事情一定做到。反過來說,就是做不到的事情就不要答應。與任何人做的約定無論是口頭的還是書面的都是非常重要的。如果一件事情你做不到的話,那麼最好一開始就不要答應。常常有這種情況,面對客戶或者上司,迫於面子和經濟利益,不得不說保證會做到什麼什麼事情這樣的話,如果這種事情是你不可能做到的,那麼千萬不要答應,後果往往很嚴重,別人很生氣,自己很受傷。 三:不確定的事情不要斷言。自己都不確定的事情不要去斷言。對了到還好說,如果錯了,就跟說假話一樣,很容易失去別人的信任,而信任這東西,一旦失去,想再找回來很難。四:降低別人對自己的期待。如果幹的工作比預想的要好得話,別人會很高興,相反,如果低於預期的話,那就會很失望。人人都想努力做的比預想的要好,可是事實是更多的時候我們做的工作的成果比預想要有差距。所以,爲了不讓別人對你失望,需要降低別人對你的期望值。方法就是,提前將一些悲觀的信息,問題,或者困難傳達給對方。例如,這個東西我沒做過,我試試看。我同時還有測試的任務,這個工作可能會往後拖一拖。等等。重要的就是要告訴對方,我很想努力做好,但是有些困難不得不考慮。五:學會示弱。都希望得到別人的認可,把自己最強的一面展現給別人。如果總是以強者的姿態出現,同時又不是真正的強者的時候,需要注意了,你會發現工作起來很費勁,因爲給你的工作都是你力所不能及的。所以,不妨在一定的限度下,展示自己的弱點,這不是做作,而是讓自己更順利的提高,成爲真正的強者。 六:傳達風險。這個世界上沒有風險的事情基本不存在,工作中更是如此。軟件開發中的風險因素更多,需求的不穩定,計劃的不完善,人員的流動,測試的遺漏等等。所以說話的時候不妨這樣說,正常情況下,怎麼怎麼樣,如果出現了什麼什麼問題,會怎麼怎麼樣。傳達風險,其實也就是給自己留有餘地,問題發生的時候讓自己不至於太被動。七:提出解決對策。對別人尤其是上司說我不能是比較難開口的。別人對你有所期待,所以才拜託你做一些事情,力所不能及的時候,簡簡單單的一句我不能並不是最好的解決辦法,說我不能的同時,說說你能怎麼怎麼做,給別人提出一個解決對策。例如,客戶要求週末交付使用,但這個實在是不可能的,可以對客戶這麼說,週末交付實在不可能,但是能夠在下週一早上交付,這樣對工作也不會有太大影響。基本原則就是,告訴別人你不能做什麼的同時,也告訴別人你能做什麼。八:約定的東西要雙方留有記錄。最好的工具莫過於電子郵件了,商量好的事情,整理到郵件裏面,然後給對方發過去確認。一旦出了什麼問題,誰的責任也就不言自明瞭。九:答應好的事情努力去做。這不用多說,是最基本的原則。努力到最後 一旦再怎麼努力也做不到的時候,也不能放棄努力,一定要努力到最後。這不是做給別人看得,是爲了挽救自己的信譽。 做不到的話,一定要真誠的道歉。一旦失敗,好好總結,不犯相同的錯誤。除了不去做之外,這是避免失敗的最有效的方法。 以上是關於取信於人的幾個要點,其實做到並不難,都是很簡單的方法,別人的信任其實是一個人的驕傲和財富。希望大家都能獲取這份財富。

 

之三——彙報的能力

       技術再出色,如果沒有良好的溝通能力,也不會成爲一名好的程序員的。溝通是雙方的互動,把自己得信息傳達給對方,再從對方獲得反饋,如此循環往復。那就先說說把自己這一方的信息準確地傳達出去的能力。首先是寫報告。程序員經常要寫日報,週報,月報,在很多人的眼裏,這是一個可有可無,對日常工作沒有什麼幫助的體力活。可是真的是這樣麼?報告裏面要記錄自己完成了什麼工作,出了什麼問題,怎麼解決之類的一些信息,可是作用不僅此而已,還有更重要的作用。責任的分散。這出現在工作中發生問題的時候,想象一下,如果出現了一個 bug ,出於某種目的,你沒有及時把這個情況告訴別人,而是想自己解決,這種情況下,關於這個問題的所有責任全部壓在了你自己身上,解決了到還好辦,解決不了的話,相關模塊,甚至整個項目都要受到牽連,你需要負這個責任。如果你能把這個信息通過日常報告及時傳達出去,那麼大家都會知道這件事情,那麼這個問題的責任就不是你自己的了,而是整個團隊的,團隊的力量是無窮的,那個問題會很快迎刃而解。說到這裏,或許有點推卸責任的意思,其實不然,項目的進行要以成功爲目的,以團隊協作爲手段,任何問題都不是個人的,而是大家的,你也沒有必要沒有權利去規避任何問題,公佈出來,更有利於項目的順利進行。防止問題的發生。個人的能力畢竟是有限的,由於經驗的不足,知識的欠缺會導致對某些問題的判斷失誤。這種時候,你如果能把對某個問題的分析判斷以報告的形式公佈出來,那麼比你更有經驗的人就會注意到你的判斷中的失誤以及遺漏,及時指出來也就避免了問題的發生,節省了由此而發生的各種成本。經驗的借鑑。發生了問題,報告出來,有經驗的人回來幫助你解決,你也會跟着學習處理這種問題的方法和技巧。消除上司的不安。一項工作佈置給你了,進行到什麼程度了,有沒有什麼問題,這是上司比較關心的問題。如果能夠及時彙報的話,就會讓上司及時掌握工作的進行情況,有利於工作更好的進行。構築良好的信任關係。常常把自己的工作情況予以彙報,減少了別人對你的擔心,很容易讓別人對你產生信任。取信於人的好處就不多說了。
       報告的形式。報告的形式有多種多樣,但是其基本模式並沒有太多變化。這裏分兩類進行說明。
第一類,初級程序員的報告。誰都有從菜鳥走過的歷程,作爲初級程序員更多的是從別人那裏獲取經驗,而日常的報告是一個比較有效的途徑和工具。報告的形式應該是這樣: 
現狀   描述一下現在的情況,就是怎麼做的,都做了什麼 
預測   根據自己的判斷預測一下進行的情況 
確認   詢問自己的判斷有沒有什麼問題
而出現了問題的時候除了描述現狀和分析一下問題之外,第三個就應該詢問該採取什麼對策了。

第二類,初級以上程序員的報告。作爲有經驗的程序員,對很多問題都有自己的分析和解決方法了。所以這時候的報告就沒有必要老是詢問,更多的是自己的主張和建議,但是注意一定要把自己的判斷的根據說清楚,跟論文一樣,通過論據和論證來讓你的論點成立。

彙報前需要考慮什麼?

       最重要最基本的是需要好好想想我到底要傳達什麼。但是這個時候要注意,自己想傳達的信息和自己應該傳達的信息是不一樣的。應該好好想想你彙報的對象最想從你的報告裏面獲取什麼信息,什麼信息對當前的工作順利進行最有用,當然一切要以事實爲基礎,不能爲了取悅別人而說假話。

以上就是有關寫彙報的一些介紹。應該這麼說,這些信息對技術提高沒什麼用,但是對如何做好自己的工作或多或少有所幫助。因爲程序員的工作並不是僅僅面對計算機,還要面對各種各樣角色的人和各種各樣的問題,能把自己這邊的信息,準確有效的傳達出去,有利於一切工作的順利進行。另,強力推薦大家看餘世維的有效溝通系列錄像,一定會有所收穫的。

 
之四——信息整理的能力 

       會議的資料不知道哪裏去了。

       以前的一個客戶的名片沒有了。

       那個有關需求定義的電子郵件找不到了。

       某某類的設計文檔在哪裏?
       日常工作中,有各種各樣的找不到的情況,想找卻找不到東西也是五花八門,但是歸根結底,我們找不到並不是什麼東西,而是附着於該物體上的信息。解決這個問題的最好辦法就是分類整理。分類整理的意思就是按照一定的標準,把符合這個標準的信息發到一起,便於查找。

       分類的標準,大體上也就五個。類別,時間,位置,字母順序,還有某一個數值的大小高低。所謂分類整理也就是適當的運用這幾個分類標準對各種信息進行歸納分類。學問就在這個適當運用四個字上,那麼什麼樣的分類纔算適當呢?

       首先,不要分的過細。就拿類別標準來說,個個類別之間應該是排他的,不能互相有重疊的部分。如果類別分的過細,很容易出現某一個信息,既屬於 A, 又可以屬於 B 的情況,這個時候你怎麼辦,那就再造一個 C 吧,專門存放這類信息,那麼你的分類就會越來越多,這就直接導致了想找什麼找不到的局面。

      其次,分類而不是分離。相關的幾個信息,可能有的打印在 A4 的紙上,有的存在電子郵件裏面,有的印在名片上,這是一種信息的分離。分類與分離的不同點是,前者是根據內容來分的,後者是根據形式來分的。所以,相關的信息不限於其形式,儘量把它們整理到一起,不要讓它們因爲不同的形式而分開。

       下面說說幾個具體技巧:

       一: 減少紙張的使用。軟件開發中,各種各樣的信息,不是存在於紙張上,就是存在於電腦裏面,作爲整天與電腦打交道的程序員,或許更喜歡把各種信息整理到電腦裏面,那麼下面的方法或許對你有用。日常的聯絡方式有郵件,面談和電話,程序員或許都比較喜歡用郵件,但是因爲電話和麪談的迅速與直接我們很多時候也是通過這些來進行交流的。那麼,最好養成一個習慣,談完的事情,要在郵件裏面整理一下留作備份,也可以給對方發過去予以確認。無論如何都只有通過紙張來保存信息的情況下,最好能通過掃描把信息數字化。

       二:紙張信息的整理。上面說到減少紙張的使用,但是現實是紙張也確實有其優勢,例如,看起來舒服等等。那麼紙張的信息該如何整理呢?這裏介紹一個按照時間來分類整理的方法。把相關資料放到一個檔案袋裏面(文件夾也行,隨你喜歡),然後在外面寫上日期,題目,在書架上由左向右開始擺,使用過的檔案袋,放回的時候要放回左邊。這樣有兩個好處,最新的資料和經常使用的資料總是在最左邊,想找的信息一下子就能找到,而右邊的資料就是使用率最低的了,合適的時候就可以扔掉。

       三:數字信息的整理。程序員的電腦裏面有各種各樣的資料,工具,程序等等,不好好整理的話,別說找,時間長了自己有什麼都忘了。但是說實話,這種理並不是很好做的,但是首先自己一定要有這種意識。郵件的分類,文檔的分類,程序的分類等等。另外,有好多桌面工具都可以用來整理自己的資料。只有一個原則,要嚴格按照自己的分類來存放資料,有時候因爲懶惰,隨手就把資料存放到桌面上了,那麼以後桌面上的東西就會越來越多,弄得你想找個我的電腦都找不到,隨手一放,貽害無窮。不要懶惰,嚴格執行應該是最有效的辦法。

        以上,就是有信息整理的一些介紹。突然想到一句題外話,好像是聽餘世維的講座聽到的,美國的珍珠港被炸了很多年後,纔在他們的文件堆裏面發現了國民黨政府發給他們的警告,告訴他們日本會襲擊他們的珍珠港。其實,任何沒有整理好的信息,沒人願意去看,包括你自己。那就啥話都別說了,開始幹吧。

 
之五——把握十分鐘的能力
        不知道大家周圍有沒有這種情況。工作內容大致相同,但是不同的人,工作進行的速度是不一樣的。有的人累死累活好不容易趕在交付期限前把工作完成,有的人不怎麼加班卻能提前把設計書以及代碼交付。同時,後者往往不知什麼時候,學習了別人還沒來得及去學的新知識,對最近出現的新技術要點也瞭然於胸。如果你的周圍有後面這種人的話,恭喜你,趕緊向他討教。其實,後面這種人如果不是絕頂聰明,那麼他一定是具備了別人所不具備的把握時間的能力。這種能力就是把握十分鐘的能力。

    不妨想一下,給你 10 分鐘你能幹什麼,或許你說,做什麼都做不完,那麼給你一個小時呢,其實 1 個小時不也就是 6 個十分鐘組成的,如果你認爲 10 分鐘什麼也做不了的話,那麼你就真的什麼也做不了。可是有的人卻能將這十分鐘活用起來,充分的發揮了 10 分鐘的威力。細想想,一天裏面零散的十分鐘有多少?等車的十分鐘,開始工作前的十分鐘,吃完午飯的十分鐘等等,能不能用好這樣的十分鐘,決定了你的工作能不能有效率的進行。那麼該怎麼用呢,舉幾例子來說說讀書的十分鐘。假如等車的話,不妨把等車的十分鐘利用起來讀書。其實也不一定要是書,什麼材料都可以,只要你認爲對你有用的。這樣做的目的只有一個,就是知識儲備。這直接決定了你能不能快速解決客戶提出的問題,完成上司交給的工作。常常聽到要抽出一段時間學習什麼什麼這樣的話,真的能抽出時間麼,如果真的如自己所願能抽出時間的話,那我很羨慕你的運氣,如果不能,我想利用好瑣碎的十分鐘也是一個很好的方法。個人推薦的實踐是,把自己感興趣又沒有時間讀的技術資料打印出來,也就是 10 分鐘左右能讀完的那種,放在隨身攜帶的包裏,如果有這樣的十分鐘,就拿出來讀一讀。例如,我想了解 AOP 方面的知識,利用 10 分鐘時間上網蒐集一下材料,把涉及基本概念的打印出來,如果有十分鐘的空餘,就讀一下,不明白的記下來,再利用十分鐘去網上搜索一下,不斷的這樣循環,我想有個十天半個月,等車的功夫,你就能領會 AOP 的要義了。讀的時候最好隨身帶一支筆,便讀邊做個記號。

       記憶的十分鐘。最好的利用瑣碎的時間方法莫過於記憶。技術人員有好多需要記憶的東西,環境的配置參數, API 的接口定義,設計模式的使用環境,利用瑣碎的十分鐘,不妨試着背一下這些東西,用的時候也就不用去查文檔看資料了,也就比別人省出好多時間。有人說重複是最好的記憶方法,這樣的十分鐘用來進行重複記憶最好不過了,第一次沒記住或者沒記全不要緊,下一個十分鐘再拿出來看看,再有這樣的十分鐘再拿出來看看,幾次也就記住了。

       會議前的十分鐘。開會前的十分鐘也很重要。至少得把會議相關資料掃一眼吧,要不然開什麼會都不知道。 那跟演什麼電影都不知道就去看電影有什麼區別,毫無目的性。如果能大致瞭解一下會議的相關資料,那麼你就能準確把握會議的重點,快速察覺別人發言裏面的問題,不是什麼會都沒有用的,關鍵是你抱着什麼態度去開會。

       休息的十分鐘。休息的十分鐘對程序員來說是非常重要的,你可以利用十分鐘閉目養神,或者打個盹,睡不着的話,不如在座位上做個伸展運動,把四肢儘量向前伸,可以放鬆全身。總之,工作中的 1 個小時裏面,抽出十分鐘來稍微放鬆休息一下,餘下的 50 分鐘你會工作的更有效率。尤其是解決項目中出現的問題的時候,不要一個勁的拼命解決,適當的休息一下,或許會給你帶來意想不到的收穫。張弛有度,才能體會到工作得快樂。我就經常在坐車的時候突然想到一個問題的解決方案。

       不浪費屬於你的十分鐘,首先你要明白給你十分鐘你能幹什麼,回郵件,技術調查,尋找Sample Code等等,總之,意識決定行動,你覺得十分鐘很寶貴的話,你就會自然而然的運用好它。另外,充分利用十分鐘的時候,需要注意要保持所作的事情的連續性,讀書的話,不妨把讀到的那一頁折一下,工作的話不妨作個筆記,記錄一下自己現在做到哪裏了,就是說要知道自己現在處於什麼位置。這種記錄並不是僅僅爲了備忘,更重要的是讓你明確自己所作的工作。其次要明白什麼事情不適於在十分鐘裏做。日常工作中,還是某種程度上需要大塊的時間的工作比較多,給你 6 個間斷的十分鐘,你並不能完成平常需要整整一個小時才能做完的工作。所以做事的時候要有所選擇和區別,什麼工作可以利用瑣碎的時間來完成,什麼工作不行,不行的就儘量保證有大塊的時間來做。

       以上總結了一下運用十分鐘的能力。其實,瑣碎的時間很多,平常不用就根本看不出它們的作用,有意識的好好利用一下,你會發現,有好多工作根本不需要加班就能完成。當然了,如果你願意加班而且你們公司願意給你加班費的話,就算我沒說。

 
之六——不被別人替代的能力
       對於程序員來說,什麼最重要? 
       最重要的莫過於對技術的掌握,可是應該還有更重要的東西,那就是思考的能力。   作爲有一定經驗的程序員來說,會發現學到的並運用的知識大體上分爲兩類,就是比較具體的知識和相對來說不那麼具體的知識,例如:
    Oracle 的性能優化有關的設置項目
    Java 語言裏面字符串的各種 method 的使用
    Unix 負載測量的方法。
    這些都可以說是比較具體的知識,基本上的類型都是 how to 。學習這樣的知識,最好的方法就是讀書,上網讀讀文檔,也就是說經過一定的學習和訓練就能掌握的知識。通過一定的學習,每個人對這些知識的掌握不會有太大差別,換句話說,這些知識就是屬於那種查一下書就知道的那種。當然了,還有另外一種,看看下面的例子。

    從客戶那裏獲取需求的方法。

    項目的進行中順利的進行溝通的方法。

    對於業務信息化的要求,決定採取什麼樣的技術的思考能力。

這些知識相對來說不是很具體,比較抽象,正因爲比較抽象,所以獲取這些知識的途徑和方法並不是很明確。而且,同樣的學習每個人的所掌握得程度也不一樣。就拿順利溝通來說,不和很多人進行實際的交往和溝通,不經歷過一些失敗和挫折,不嘗試一些好的溝通方法和技巧,並不斷的總結,光看書是不會學習到如何溝通的。

       那麼這兩種知識哪一種更有價值就不言自明瞭,一百個程序員裏面有一百個人會說第二種更有價值,更有用。那麼我們不妨再考慮一下,換一個角度,不作爲程序員而作爲公司的管理者來來考慮這個問題。對公司來說,熟練使用 java 和 oracle 的人有很多,光考慮這一點的話, A,B 兩個人,僱誰都一樣,也就是說,如果光具有前面所說的具體的知識的話,你跟別人沒有任何差別,沒有差別說白了也就是沒有競爭優勢。你可能會想,那麼我學點 .net, 再來點 python,這樣總算可以了吧。其實,只要是技術,存在即有其存在的價值和理由,那麼就肯定會有人掌握這些東西 , 也就是說,只要出錢,公司一樣能找到這樣的人來代替你。

       中國那麼多程序員,但是熟悉這個行業的人都清楚地知道,好的程序員還是很少,大家都去學習 java, 都去學習struct,spring,hibernate, 每個人好像都是很了不起,當你驕傲的時候,不妨想一想,你是不是不可替代的,你能不能做別人不能做的事情。要做一個一流的程序員,具體的知識當然要學習,同時更應該去學習那些抽象的知識。對於一個項目來說,那些只懂技術的程序員就是一個標準件,標準件對公司的好處就是替換起來很容易。那麼,好的程序員,在項目中起到舉足輕重的作用,別人無法替代,做這樣的程序員才應該是我們的目標。

       再舉一個例子,我們都有過參加這種會議的經驗,負責企劃的部門和負責技術的部門一起開會,企劃一方經常會提出各種方案並向技術部門詢問其可行性,而技術部門的人,馬上就說不能實現,並且用各種各樣技術詞彙來解釋爲什麼不行,企劃的一方,根本不懂這些技術詞彙,會議也就不歡而散了。在這種情況下,一個好的程序員就會說,這個根據目前的情況還不能判斷能不能實現,在我們做出 Yes 或者 No 這樣的結論之前,不妨好好想想怎麼才能實現。這樣的話,會議的氣氛就會向思考“怎麼做才能實現”這樣的積極的方向發展,大家也都會更有興趣。

       寫程序,寫設計書,管理自己的日程這些都是最最基本的素質,僅有這些並不會成爲一個好的程序員。好的程序員應該是不斷地考慮,如何讓項目順利的進行,如何讓對方積極的迴應你的意見,並付諸於實踐,而且能夠實現。這樣的程序員,才具有了別人不可替代的價值。

       那麼如何成爲這種不可替代的程序員呢?沒有特別好的方法,建議到有一個。就是在日常的工作中有意識的要求自己去具有這種能力,不斷的考慮,現在的自己應該如何思考才能成爲一個不可替代的人,自己在哪些方面還有所欠缺,不斷的想這些問題,不知不覺也就有了去深入思考的潛意識,具有了這種潛意識之後,你平常所作的事情都會不知不覺地向這個目標靠攏,一切都是在不知不覺中進行的,這是第一步,也是最關鍵的一步。寫到這裏,我不禁想起了前一陣在一個 Forum 裏面聽的一個人力資源方面的講座,講座的老師就提出了一個社會人要有能不依賴於公司的能力,這種能力是什麼,說簡單了就是離了公司你能活的很好,再進一步的話,就是公司離了你損失很大。成爲這種人,人生的選擇就會更加自由了。我想具有不依賴公司的能力與這裏面所說的做一個好的別人無法替代的程序員的提法是比較統一的,只是從不同的角度闡述而已。

       如果從談技術的角度來看的話,做一個好的程序員並不是會使用最新的技術,會使用什麼什麼框架,而是有良好,全面,紮實的基礎。技術的發展並不是跳躍的,而是連續的,任何的一個所謂的新技術,無非是某一箇舊知識的重新包裝和整合,東西還是那麼多東西,只不過用的方法和方式不一樣了。如果有一個好的基礎,無論什麼東西,你都會快速理解,看透其本質,掌握其精髓。但是任何一個人,都不可能一開始就把基礎打得天衣無縫,一個好的程序員的學習曲線我想應該是上上下下的,學習上面的新技術的同時,靜下心來好好學習一下相關的底層的基礎知識,不斷的循環往復,不斷的積累,並且不浮躁,應該是一個成爲好的程序員的途徑。

 

之七——傾聽的能力

       有很多程序員常常爲不會說話而煩惱,那不如先去學會傾聽。造物主給我們兩個耳朵,一個嘴巴,或許就是暗示我們要多聽少說。能夠很好的傾聽,引導對方把他自己希望表達的內容表達出來並獲取自己一方所需要的信息,是一個看似簡單其實頗具挑戰性的實踐能力。其實應該認識到,良好的傾聽是解決問題的一個重要開始。在軟件開發中,首先是獲取客戶需求,作爲信息接收得一方,需要良好的傾聽能力。當客戶發現他說的內容並沒有被真正理解和接受的時候,會感到不安和不滿,更嚴重的是明明沒有聽懂卻作出一副聽懂的樣子迷惑了客戶,結果作出的東西根本不符合要求,這種失敗的例子並不少見。

       那麼如何才能進行良好的傾聽呢?與其去尋求一些傾聽的技巧不如先從最最基礎的細節做起,細節做好了自然而然也就掌握了傾聽的技巧。

       傾聽的表情從微笑開始。微笑的人給人以好感,所以要讓人對你有好感的話,不妨先微笑對人。用軟件行業的行話來說,就是把傾聽時的缺省表情設置爲微笑。當然了,隨着對方表述內容的不同,表情是應該不斷的變化的。

       點頭。說話人的行動很容易受到聽衆的影響而變化。如果聽衆對自己講話表現出完全不感興趣態度,那麼說話人的信心和積極性就會受到打擊。所以,作爲一個會傾聽人,應該傳達給說話者這樣的信息,就是我正在津津有味的聽你在說話。最有效的方法就是點頭。即使不完全同意對方的觀點也應該點頭,這不是諂媚,而是告訴對方我聽懂了你說得話。

        讚許。對說話人最大的褒獎就是聽衆都同意他所說的話。所以,如果真的覺得對方說的很對,不要吝嗇,把你的讚許通過你的眼神和態度表示出來吧。

        疑問。 如果說話人的傳達的信息你不能馬上理解或者存在疑問,那麼也不用客氣,表達出來。雖然多少會打擊對方的情緒,但是同時也告訴對方你是在認真傾聽,並且特別希望理解對方的意思。好的傾聽必然伴隨着好的發問,記得小時候老師常常告訴我們,不要羞於問問題,因爲能問問題的學生纔是聽懂了課的學生。日語裏面把聽和問都用漢字聞來表達,我想也是有一定道理的。

       下面介紹一下發問時需要注意的地方。首先要明確問問題並不可恥。有很多人會覺得問別人是一件讓人不好意思的事情,因爲會讓人覺得自己能力不行。這是完全錯誤的,問問題並不是說明自己不行,而是爲了更好的解決問題而進行的信息收集,所以,不要害怕和退卻,大膽的問你想問的問題吧,然那些嘲笑你的人見鬼去。自己的發問得不到對方的回答這種情況也經常出現。解決這個問題,就需要在問問題的同時也把對方應該回答這個問題的理由說明一下。一般來講,應該從以下幾個方面說明。

       問題意圖的說明。有時候爲了消除對方的疑問和不信任感,必須向被詢問一方說明我爲什麼要向你詢問這個問題,不妨同時有禮貌的請對方騰出時間來回答這個問題。最重要的一條就是要告訴對方我問這個問題是爲了對方的利益着想,這樣對方也會很認真的來回答你的問題先調查後發問對方和你一樣,工作也很忙。所以,問問題之前,儘可能的自己多做一些調查,將自己需要問的內容具體化。讓對方覺得你並不是一味等着人來教你,你自己也主動學習了很多,當然有不明白的地方,就需要對方來解答了。這種時候,大部分人都很樂意幫助你的。

       顯示關心。交流的過程中也有不順暢的時候,這時候不妨對對方的情況顯示一下關心,詢問一下對方工作中遇到的不快,和他們聊聊工作的辛苦,讚許一下他們的長處。從人的心理角度出發,很多人都喜歡將自己的辛苦和得意之處跟別人說,不妨借用這個來讓你們的交流更順暢。

       想得到具體的回答,就需要問具體的問題。問一個比較抽象的問題,對方往往不知道應該怎麼回答,即使勉強回答了,答案也未必是你所需要的。所以問題越具體越好。所謂具體就是把該問題的前因後果以及關聯的信息都提供給對方,這樣對方纔能作出比較滿意的回答。

       預先判斷。問對方問題的時候,應該對對方會如何回答這個問題做一個假設和預先判斷。這麼做的目的是讓自己的問題更加明瞭,讓對方更容易回答,同時還可以隨時判斷對方的回答是不是自己想要的,如果不是,還可以進一步發問。

       最後,說一下問問題分爲閉式發問和開式發問。

       所謂閉式發問就是需要對方回答 YES 或者 NO 的問題。優點:問題意圖明確,對方不需要過多思考。缺點:發問方要做很多工作,將問題具體化對方選擇的餘地變小。

       所謂開式發問就是不能僅僅回答 YES 或者 NO 的問題。優點:不用過多考慮問題的細節,對方選擇的餘地很大。缺點:容易導致所答非所問,給對方以思考的負擔,有時對方會無法回答。

 

之八——說話的能力
       如果你已經是善於傾聽了,下一步不妨提高自己說的能力。或許有人經常苦惱於別人總是不好好聽自己的說話,這裏面的主要原因正是你自己。

       語言交流雖然方便迅速,但是說出去的話,潑出去的水,很快就消失於無形,被人們所忘記。所以,如何良好的表達自己的意思,如何讓聽衆準確地理解自己的思想,是一個很值得研究和學習的課題。

      下面列舉了幾個在語言交流中容易出現的問題以及應對之策。

       聽衆的態度問題。聽衆如果沒有以認真的姿態來聽你講話,那麼你講多少都是沒用的,得不到良好的反饋。這種情況下,自己如果一味的從最重要的部分開始講起,往往達不到預期的效果或者效果很差,不得不重新再講一遍。對一件事情重複多次的經歷,我想誰都有過,費了很大力氣,效率還不高。這種問題的對策很簡單,就是在說話之前先把自己要說的內容作一個簡單的概括。例如,今天我們要對今後項目中使用的文檔列表做一個說明。這樣做有兩個好處,其一,先拋出題目,可以引起對方的注意力,大家聽你的話的就不會漫不經心,其二,明確了題目之後,建立了一個上下文,有助於大家理解你的話。

       話語的邏輯難於把握。說完的話,很快也就消失了,不要指望你說的任何東西都會被別人記住,那是不可能的,所以,說話的過程中,聽衆往往對你所說的內容的邏輯關係,前後順序感到迷惑。這種問題的對策就是,承前啓後。說話的過程中,說完一個小題目之後,總結一下剛纔說的話,然後再簡單扼要的說明一下下面要說的內容。這有助於聽衆瞭解你的說話的來龍去脈,並對你現在所說的內容在整體之中的位置有一個良好的把握。

       沒聽到的內容再也無法彌補。這個經驗大家都有,一個不注意,剛纔講什麼就不知道了。要不然上課老師老是強調認真聽講呢。最簡單的對策就是把自己講話內容裏面重要的部分不斷的重複,多給聽衆理解你的機會,也是爲了自己好。

      上面列舉了幾個說話過程中容易出現的問題以及應對策略,下面談一談在談話交流中比較實用的一些技巧。

      重複對方的話。重複對方的話,意思並不是簡單的重複,而是提示對方希望對方能把這部分再詳細說明或者用更簡單易懂的方式進行說明。舉個例子,對方說這部分內容比較重要。如果你不明白爲什麼重要,不妨說一句,這部分是麼?這時候,對方就會將話題深入下去,解釋爲什麼重要了。

      總結對方的話。談話的過程中在適當的時機對對方的話進行總結是一個很好的方法,不僅可以明確論點和主張,也有利於對方瞭解自己的話是不是被你正確地理解了。例如,我想您說的是不是這麼一回事?您看我這麼理解行麼?等等。

       用沉默來讓對方發話或者做決斷。沉默是金,談話中的沉默表達出的是更爲複雜豐富的內容。持續一段時間的沉默,會讓對方意識到是該自己說些什麼的時候了。沉默的好處是,讓對方自己來決定作什麼,而不是通過詢問來強制對方作出反應,往往不會引起反感。

       說話之前想象一下對方的反應。想象一下,寫完報告書後,自己總要再看一邊,看看有沒有錯別字,標點符號的錯誤,排版的錯誤。可是,對於說話,我們往往就沒有那麼多耐心了。不過,爲了事後不後悔,在說話之前我們應該想象一下對方的反應。

       不說“不“。對方表述了自己的意見後,如果與自己的想法不同,一般來講有三種回答的方式,雖然傳達的是同樣的內容和意思,但是傳達的方式不一樣,給人的印象也是不一樣的。

       直接說不。這是最直接的說法,直接表明了彼此立場的不同。

       Yes,but. 這種說法的意思就是,我仔細傾聽了你的意見,但是我還是主張自己的意見是正確地。

       Yes,and. 這種說法的意思是在充分尊重對方的意見的基礎上,更進一步提出自己的看法。

       舉個例子來說,對方說,能不能再快點完成?你的回答有三種方式。

        不,再不能快了。

        我明白你想讓我們快點完成,可是爲了保證質量,我們需要更多的時間。

        是呀,確實需要快點完成,正因爲這樣,這塊的工作才需要充足的時間來保證做好。

        上述的第三個方式應該是比較聰明的回答方式。爲什麼呢?意見的交流都是建立在有共同的利益的基礎之上的,反過來說,沒有共同的利益,也就沒有交流的必要了。所以,交流的過程中不要讓意見對立起來(就是直接說 NO 的做法),而是儘量的求同存異,這樣,對雙方都有好處。交流的目的也是爲了雙贏,而不是爲了讓自己去說服別人。找到一個雙方都認同的基點,之後的工作會更好的進行。

 

/* 深表歉意,程序員的能力系列沒有寫完,感覺非常對不起曾經支持自己的朋友。那本書借給朋友之後就再也沒回來,無法進行其他能力的說明和解釋。感覺自己沒有做好應該做的事情,深表歉意!*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章