做一個有批判性思維的程序員!


作爲一名程序員,要學會對自己和別人的代碼進行批判,爲什麼要這樣寫,這個註解有什麼用、有沒有更好的實現方式等等。對自己寫的每一行代碼、用到的每一個工具類,都要理解,不然不知道這個工具類都做了什麼,怎麼敢保證用了之後不會帶來Bug?


好的遊戲一定要讓玩家玩的很爽嗎?王者榮耀和吃雞遊戲的成功,讓這個問題的答案似乎毫無爭議,不能帶給玩家刺激的遊戲就不是好遊戲。

什麼樣的遊戲才能吸引玩家不斷的玩下去?答案就一個字,爽,用羅胖的話說就是,從前打一局CS,讓你十幾分鍾爽一次,現在,來一盤農藥,讓你幾分鐘就爽一次。然後,吃雞,一款讓你爽的更頻繁的遊戲又出來了,緊接着,各個大廠的吃雞遊戲陸續上線,大家都在力爭帶給玩家更多的刺激,因爲他們都相信,只有讓玩家爽下去,他們纔不會把遊戲卸載掉。

就在遊戲製造商們爲生產出更加痛快的遊戲殺紅了眼的時候,一隻青蛙,一邊旅行着,一邊給家裏寄照片,默默的嘲笑道,“他們真俗!”。
這裏寫圖片描述
就是這樣一款只有兩個場景、玩家除了給蛙準備便當、拔拔雜草就幾乎沒什麼事幹的遊戲,上線後卻刷爆了朋友圈。

而試想一下,如果在王者榮耀、吃雞火的不行的時候,你能夠稍微質疑一下,反問一句,“佛系遊戲難道就不能火嗎?”,說不定你就造出一款“旅行的喵”了呢!

這種質疑的態度,其實就是我們今天要講的主題——批判性思維。所謂批判性思維,其實就是對待外部的輸入,首先持一種懷疑的態度,過濾掉那些自己認爲錯誤的東西之後,剩下的纔是自己的。

1.不會批判性思維的你,顯得很傻

有人說,整天疑神疑鬼的,過着會很累,但是,我想說,如果學會質疑,你不僅會錯過旅行的蛙,而且還會顯得你很傻

你看到一篇文章,《成功的人,沒有哪個是不閱讀的》,文章寫得非常勵志,讓很久沒有讀書的你非常慚愧,心想,都怪自己太懶,要是利用業餘時間多讀點書,現在說不定都身家千萬了,於是你轉發了這篇文章,轉發時還不忘附上一句:從今天起,我要堅持天天讀書[奮鬥臉]

朋友看到你的朋友圈,心想,這人真傻,這話也信,沒讀過書造樣過得很舒服很幸福的人多得是。 於是你成了朋友眼中那個很傻的人。其實,閱讀是件好事,但是轉發這樣的文章,就顯得你很沒主見,顯得很low,很雞湯,甚至有點“中老年表情包”的範。

缺少批判性思維給你帶來的傻還不止與此,你看了上面那篇文章後開始看書、開始關注各種微信公衆號,你看到一篇文章說“晚上吃薑對身體有害”,於是有一天晚上聚餐,你看到服務員上了一盤姜蔥雞,就硬是讓服務員把菜退了。
這裏寫圖片描述

你聚餐完回到家,刷朋友圈時發現剛剛一起吃飯的小劉,轉發了一篇文章,《晚上吃薑有害健康?哈佛教授用實驗告訴你真相》,文章中列舉了各種真實可靠的實驗數據,你頓時有點臉紅了,更要命的是,你看到小劉這條朋友圈下面,一堆點贊,而且,點讚的,都是晚上一塊吃飯的同事……

因爲沒有批判性思維,你把所有的書都視若珍寶,把作者說的話都當成金玉良言,還爲了顯擺自己看過很多書,不斷地再別人面前宣揚書中的各種錯誤觀點,一個字,傻!

所以,是累好還是傻好呢?我想大多數人還是寧願累點吧。

批判性思維就像給大腦裝上了一道防火牆,外界的輸入在進入我們大腦之前,都要經過篩選,通過篩選的觀點和想法,才能進入我們的大腦。

那麼,要怎樣進行批判性思維呢,最近閱讀了《學會提問——批判性思維指南》,作者Marcia Brown對如何批判性思維進行了系統性的介紹。

2.如何進行批判性思維

要想對一個推理進行批判,首先就要找準這個推理的論題和結論,如果連對方在談論什麼話題、對方的立場是什麼都不清楚,那就談不上什麼批判了。

確定了對方的論題和結論之後,就要找到對方的理由,也就是支撐結論的證據。

找到對方提供的證據之後,接下來你就可以開始對它進行全方位的批判了。

總結一下:

對方在討論什麼(論題)-> 對方想說服我相信什麼(結論)-> 對方給出的理由是什麼(證據) -> 這些證據靠譜不(批判)

其中前面三步都很簡單,這裏就不細說,我們直接談談,如何對證據進行批判。

2.1 哪些詞語意思不明確

你以爲的不一定是他以爲的。

“某某牌貼膏,只需三片,即可見效”。

上面是很多藥品廣告的廣告語,藥商往往還會請上幾個健康活潑的老人來念這些廣告詞,但是“見效”這個詞是什麼含義呢?是指讓你再也不會疼痛呢,還是讓你一個月內不再疼痛呢,還是隻是短暫地緩解病情?顯然,這個歧義不解決,你就無法決定是否信服。

類似的歧義還有很多,最常見的就是模糊不清的需求。客戶要求提供一個登錄界面,你以爲只需要做簡單的用戶名密碼校驗就好了,結果呢,客戶不單要求輸錯密碼一次後要輸入驗證碼,還要求輸錯密碼五次後當天不得再次登錄,甚至還要求可以通過手機和郵箱找回密碼……

解決這類問題的辦法——不斷質疑:

“你的意思是……嗎?”

“除了……還需要……嗎?”

“這樣子可以滿足要求嗎?”

在向客戶或者SE的不斷提問的過程中,需求也慢慢得到澄清,我們也慢慢看到了客戶的真實“驗收標準”。

總之,不要猜測,弄清歧義,纔可以下決定。

2.2 推理過程中有沒有謬誤

總有一些推理聽起來非常有說服力,但往往經不起推敲。
“你代碼不能這樣寫,我們組基本上不用這種寫法,而且老黃(某組內專家級人物)推薦要採用另一種寫法……”

很多項目的新人都會遇到類似的說辭,有些人聽完就點點頭,把自己代碼改了。

然而如果你是一個求知慾很強的程序員,聽到類似的解釋,至少會在心裏回懟一句:“憑什麼???”

其實只要仔細思考一下對方的說辭,就會發現對方根本不是在說服你,而是在要挾。

首先,“我們組基本上不用這種寫法”,這是用組內的“江湖規矩”在要挾你,意思是你要入鄉隨俗;

其次,“老黃推薦要採用另一種寫法”,這是用權威在要挾你,你不可以不服從權威。

然而,這些都不屬於證據,真正的證據應該是像這樣的:這樣寫會有什麼性能問題,或者是耦合性問題,用“江湖規矩”和”權威“來試圖說服別人,恰恰犯了書中提到的訴諸公衆謬誤和訴諸可疑權威謬誤。

類似的推理謬誤還有很多,我們不可能一一記住。只需記得,在接受對方觀點之前,不妨多問一句,憑什麼???,喚醒自己的懶人腦,進行理性的批判思考。

2.3 證據的效力如何

證據的來源有很多,常見的有這四種:

  • 個人經歷

  • 典型案例

  • 專家意見

  • 研究報告

這些證據的可信度有多少呢?

2.3.1 個人經歷和典型案例

很多人都知道個人經歷不可信,可是當看到別人炒股賺的盆滿鉢滿、別人追求自己的理想出去創業收穫人生巔峯時,還是忍不住想把對方當做偶像去模仿。

然而,現實是,那些炒股炒的傾家蕩產的、那些創業失敗破產倒閉的人,你是看不到對他們的報道的。《清醒思考的藝術》的作者羅爾夫·多貝里,在書中建議讀者,多去失敗者的“墓地”走走,想想也是很有道理的。

2.3.2 專家意見和研究報告

既然稱爲專家,那麼也就意味着對方經驗豐富、技術高深,在大多數情況下,專家都是對的,不然也不能被人叫做專家。

然而,專家並不總是對的,在這個時候,你也不必對其冷嘲熱諷。我們要做的是,即使是專家的意見,也要批判性對待,不斷提出質疑,敢於挑戰權威,即使最後證明你的質疑是錯的,你的收穫,也比那些把專家意見當做真理的人要多很多。

研究報告也是類似的,很多研究報告都出自著名的實驗室,但是這並不代表他們的結論就是正確的。他們做了那些實驗,不代表就可以得出那些結論,我們同樣需要對他們的實驗過程和推理過程進行批判性思考。

2.4 數據有沒有欺騙性

“大人總是喜歡數字”,小王子的這句話恰恰說明了人性的弱點。

人們往往容易被帶有數字的證據說服,最常見的就是“平均數”陷阱,“XX公司員工平均年收入XXX萬”,這種平均數,根本無法說明問題。九個年薪十萬的員工和一個年薪千萬的員工,平均下來,每人年薪超百萬,但是他們十個人中卻只有一個過上年薪百萬的生活。在很多時候,中位數和衆數,比平均數更能說明問題。

除此之外,數據來源也是你非常值得批判的一個角度,人們總喜歡使用不明來歷的數據來證明自己的觀點。

下次再看到金光閃閃的數據或者圖表時,先想想數據從何而來,這些數據又有多大意義。

3.哪些場合要使用批判性思維

生活中有很多場合都需要用到批判性思維:

3.1 評價別人的觀點

我們每天都會從各種各樣的渠道獲取各種新的觀點,書籍、微信公衆號推送、知乎、簡書等等。在接納這些新觀點,或者爲之付諸行動之前,應該先批判思考一下,有歧義嗎?有謬誤嗎?憑什麼這麼說???

3.2評價自己的想法

批判性思維不僅僅是對外進行批判,對自己進行批判也很重要。

養成記日記的習慣,在回顧自己一天做了什麼的時候,順便批判思考一下,自己今天的哪些行爲做的不好。比如我某天晚上記日記的時候,發現自己寫了一天代碼,但是效率很低,於是第二天就給自己的屏幕錄了視頻,研究一下自己一天對着電腦都做了什麼,看看有哪些可以提高效率的地方。

3.3 寫作

既然對別人的文章可以進行批判,那麼對自己的文章也同樣可以。不妨把自己當做讀者,看看自己寫的文章裏,有哪些沒有依據的斷言、有哪些詞語帶有歧義、有哪些論據帶有謬誤等等。

同時,對於那些技術性較強的文章,在寫完文章初稿之後,不妨接着尋找更多的相關主題的文獻,來證明和衝擊你的觀點。永遠不要滿足於少量文獻,這也是論文通常對參考文獻的數量達到一定數量的原因。

3.4 學習

很多人學習一項知識時,喜歡把書或者其他學習資料從頭看到尾。事實上,這樣做是很沒效率的,因爲你很難保持那麼長時間的專注,尤其是在閱讀一些英文的文獻時,更是如此。

這時候就有一個好辦法,你可以在粗讀了文章,比如文章的標題、文章的開頭結尾、段落開頭結尾之後,向自己提問題,記下問題清單,然後帶着問題清單去文章中找答案,這樣學習起來會非常有效率。

我在學習Kafka的時候,就是閱讀了Kafka官方文檔中Introduction的章節,對着Get Started做了個Hello World,然後就給自己提了一堆問題,什麼Kafka的broker.partition都是啥、Kafka的架構是怎樣體現分佈式和集羣的、Kafka和RabbitMQ相比,有什麼優勢和劣勢,諸如此類自己非常感興趣、很想了解的問題,接着下一步就是把一個個問題給解決掉,在尋找答案的過程中,不知不覺就把文檔翻了好幾遍,而且由於我是主動學習,學習的時候十分專注,效率奇高。

3.5 批判代碼

作爲一名程序員,我也喜歡對自己和別人的代碼進行批判,爲什麼要這樣寫,這個註解有什麼用、有沒有更好的實現方式等等。對自己寫的每一行代碼、用到的每一個工具類,都要理解,不然不知道這個工具類都做了什麼,怎麼敢保證用了之後不會帶來Bug?如果實在來不及去弄清楚,我也會把問題先記下來,等後面有空閒時間了再來慢慢學習。

4.哪些場合不必使用批判性思維

也不是所有場合都適合使用批判性思維的,我們也要用批判性思維去看待批判性思維。

比方說看電影、電視劇, 我身邊很多朋友,喜歡在看到電影一些非常不可思議的巧合的時候,說一句,“怎麼可能這麼湊巧”,每當這時,我就在心裏默默的懟一句,“你這人不適合看電影……”

電影、電視劇、小說等很多虛構的故事,不一定完全符合正常邏輯,但是我們看電影不就是爲了放鬆麼?只要在那一瞬間,劇情打動了你或者逗的你哈哈大笑,看電影的目的就達到了。

我看到的最搞笑的事是,有一次和朋友去看一部喜劇片,看的時候他笑得眼淚都出來了,然後看完電影,他卻在朋友圈發了一張圖片,曬了他在豆瓣上給這部電影打了兩顆星的影評……

總之,善用批判性思維,看穿生活中的那些謬論,做一個清醒思考的程序員。


原文地址: http://mp.weixin.qq.com/s/ItvEnuVCOaxAdq6sDNrF-w

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