1. 程式人生 > >做一個有批判性思維的程式設計師

做一個有批判性思維的程式設計師

來源:SexyCode

連結:http://codebay.cn/post/7714.html(點選尾部閱讀原文前往)


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


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


就在遊戲製造商們為生產出更加痛快的遊戲殺紅了眼的時候,一隻青蛙,一邊旅行著,一邊給家裡寄照片,默默的嘲笑道,“他們真俗”。


640?wx_fmt=jpeg


就是這樣一款只有兩個場景、玩家除了給蛙準備便當、拔拔雜草就幾乎沒什麼事幹的遊戲,上線後卻刷爆了朋友圈。


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


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


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


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


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


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


缺少批判性思維給你帶來的傻還不止與此,你看了上面那篇文章後開始看書、開始關注各種微信公眾號,你看到一篇文章說“晚上吃薑對身體有害”,於是有一天晚上聚餐,你看到服務員上了一盤姜蔥雞,就硬是讓服務員把菜退了。你聚餐完回到家,刷朋友圈時發現剛剛一起吃飯的小劉,轉發了一篇文章,《晚上吃薑有害健康?哈佛教授用實驗告訴你真相》,文章中列舉了各種真實可靠的實驗資料,你頓時有點臉紅了,更要命的是,你看到小劉這條朋友圈下面,一堆點贊,而且,點讚的,都是晚上一塊吃飯的同事……


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


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


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


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


如何進行批判性思維


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


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


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


總結一下:


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


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


哪些詞語意思不明確


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


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


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


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


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


“你的意思是……嗎?”


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


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


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


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


推理過程中有沒有謬誤


總有一些推理聽起來非常有說服力,但往往經不起推敲。


“你程式碼不能這樣寫,我們組基本上不用這種寫法,而且老黃(某組內專家級人物)推薦要採用另一種寫法……”


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


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


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


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


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


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


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


證據的效力如何


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


  • 個人經歷

  • 典型案例

  • 專家意見

  • 研究報告


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


1、個人經歷和典型案例


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


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


2、專家意見和研究報告


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


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


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


資料有沒有欺騙性


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


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


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


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


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


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


1、評價別人的觀點


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


2、評價自己的想法


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


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


3、寫作


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


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


4、學習


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


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


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


5、批判程式碼


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


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


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


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


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


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


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



640?wx_fmt=png