談談程序員解決問題的能力

談談程序員解決問題的能力

解決問題的能力,程序員立業之本。

一般寫文章我不會特意去寫,而是有感而發的時候剛好又有時間我就會去寫寫文字。本想推些技術文章的,但寫技術文章又很耗時,寫得太淺顯又沒有技術含量,寫多了恐怕大家也沒耐心去看(不就是懶麼,給自己找這麼多借口)。公衆號這麼多,你又能看的了多少呢?小巫這個公衆號不會像某些網紅那樣每天都想破腦袋去寫文章,也不期望這個公衆號能給我帶來什麼,畢竟以我的尿性我讓我每天寫雞湯文我自己都會噁心。好了,進入今天這篇文章的主題,跟大家談談程序員解決問題的能力。

爲什麼會想寫這篇文章?

前面我寫過一篇關於獨立思考的文章-你是怎麼思考的?[1],大家感興趣可以去看下。關於獨立思考,我覺得每個人都應該要有,作爲一個成年人,很多事情都要別人講得很明白才懂得怎麼去做,那別人也不太願意把事情交給你辦,也不太相信你能辦好,你也很難掌控自己的命運。今天的這個主題雖然講的是程序員解決問題的能力,其實也還是講獨立思考的能力,因爲解決問題的能力也是源自你是否會獨立思考。之前寫過一些文章,有的同學想讓我寫寫在鵝廠的一些經驗,其實說真的,在鵝廠工作也是因人而異的,不管在哪裏工作最終還是取決於你是怎麼賦予工作的意義,每天糾結自己工作重複繁重,糾結工作技能得不到提升,糾結薪水滿足不了自己的慾望,糾結這糾結那是毫無意義的。問題的根本也不在於這些,而是你是否足夠沉得住氣去提升自己。如果你連日常工作的一些問題都解決不好,你也別期望自己能在很短的時間內提升很高的水平。還是那句話,就算你有十年的工作經驗,如果你只是一年的工作經驗用了十年,那真的怪不得別人比你厲害了,人到中年的時候那真的有危機了。

吐槽一些開發者白紙一般的腦袋

之從做了SDK開發者之後,每天幫助用戶解決各種各樣的問題,那我真的有理由相信爲什麼國外的月亮會比國內的月亮圓了,因爲國內的一些開發者真的讓我很方啊。國內的開發者複製黏貼的能力是一流的,嗖得一聲就能把功能實現,感覺好厲害的樣子(皮皮蝦,我們走)。集成我們提供的SDK的時候,也是嗖的一聲遇到問題不知道怎麼解決。

小白開發者A:爲什麼升級彈窗提示不了?我已經完全按照文檔集成了啊,求救啊。。
小白開發者B:爲什麼集成熱更新SDK之後,修復不了我的問題?
小白開發者C:集成SDK之後,編譯出錯了,誰能幫忙看下。
小白開發者D:怎麼開啓混淆啊。。。
小白開發者E:爲什麼沒有mapping文件。
小白開發者F:爲什麼接入SDK之後,沒有看到log。
小白開發者G:這個異常怎麼解決?
更多。。。

雖然標註的是小白開發者,但我也遇到很多工作好幾年的開發者同樣這樣問問題,這個已經不是經驗上的的問題了。換個角度思考一下,如果別人向你這樣問問題,你會理睬他麼,說真的我還不如利用這些時間多修幾個bug,很多開發羣最終都會淪爲水羣就是這個道理。大家都有當小白的經歷,人生這一輩子不懂的事情太多了,那你總不能讓別人牽着你走,作爲一個程序員要對得起程序員這個稱號,作爲一個工程師,你是否能體現自己工程方面的能力。如果連基本的解決問題的能力都沒有,那還是儘快放棄當程序員,這一行當沒你想得這麼好玩。

怎樣纔算具備解決問題的能力

我先說一下我的一家之言吧,說這些並不是爲了吹噓自己能力有多強,只是把我看到的和想到的東西用文字說出來,至於別人怎麼去解讀我是無所謂的。

第一點:主動嘗試解決問題

程序員的解決問題能力不是天生的,自然得靠後天的經驗積累。我們工作中會遇到各種各樣的問題,比如需要去跟蹤調試產品所產生的bug,又比如說使用第三方組件所遇到的一些問題,再比如說使用一些插件或者IDE所產生的一些編譯問題。這個時候第一反應不是去別人那裏尋求幫助,而是自己嘗試去看去解決問題。首先得確定這是一個什麼樣的問題,對這個問題下一個定義,看它是自己編碼上的問題,還是一些編譯上的問題,再或者是第三方庫引入的問題。確定之後,你可以根據運行時產生的崩潰信息或者編譯時出現的編譯錯誤,找到錯誤的根源。如果是代碼上的問題其實是很好定位的,我們只需要根據錯誤的堆棧找到出錯的地方,然後你再去看這部分代碼的處理邏輯,只要不是特別複雜的業務處理,基本上能很快解決。如果是編譯時出的問題怎麼辦?你先看具體的編譯錯誤是什麼,看自己以前是否有遇到過,是否能夠確定是什麼環節導致的編譯錯誤,比如是開發環境版本問題,或者是插件的版本問題,又或者是代碼導致的編譯問題,這類問題只要逐個排除相信也能夠輕鬆解決。那如果是業務邏輯導致的問題怎麼辦?那我就建議你自己根據需求重新梳理清楚業務邏輯,可以通過debug來驗證你的結果,又或者可以通過日常寫單元測試用例來保證業務邏輯的正確性。關於各類問題的解決,解決辦法總是能找到,就看你是否足夠耐心去尋求解決方案。

第二點:學會提問

剛纔說的第一點,對開發者能力有一定的要求,並不是所有開發者都能夠做到這一點,那如果依靠自身能力解決不了問題該怎麼辦?沒錯,就是向別人提問,但這裏要注意一下提問的技巧,就不要像我所吐槽的白紙一般的開發者。關於提問的技巧很多人都在提,感同身受最深的應該是那些爲開源項目做貢獻的開發者了,只要一開源就必定會有很多人過來問問題,提issue。以我作爲SDK開發者來說,我希望開發者這樣向我提問:

  1. 首先態度誠懇,平等尊重(這很重要)
  2. 問題標題有針對性
    標題指明環境、錯誤時機、現象。如:
    較差的標題(×):發現一個兼容性bug(太寬泛,完全沒有點進來看的慾望)
    較好的標題(√):Vivo X5上xxx SDK調用初始化時導致崩潰的兼容性問題求解
  3. 問題描述詳細
    問題描述詳細,可以方便其他用戶幫您定位問題。儘量提供詳細的環境、錯誤時機、堆棧、日誌、現象、截圖等等。
    可以參考如下格式:
    【問題描述】
    描述出現問題的環境:Android版本、設備型號、網絡狀態、SDK版本等等
    描述爲了解決問題作出的一些嘗試,例如Google查到的相關資料
    【錯誤堆棧】
    貼出由Bugly分享出來的錯誤堆棧(分享鏈或截圖)

這裏有一篇文章也推薦大家看下- 提問的智慧[2],想提高自己解決問題的能力,首先得學會如何提問。

第三點:經驗總結

我們日常遇到的問題就類似打怪升級一樣,你解決的問題越多你的能力就會越強,經驗自然也會越來越豐富。但人的腦袋不可能記住所有事情,將自己遇到的問題沉澱下來對以後自己查閱也有很大的幫助,就不必每次都要去Google,自己也能夠有一個索引庫。經常自己總結,也能夠提高自己的寫作能力,以後寫文章、ppt總結提煉自然也難不倒你了,也是一舉兩得的事情。還有你以後求職面試過程中,提及自己這方面的能力的時候,也能夠爲自己面試加分哦。

第四點:知識經驗傳承

精神哥說過:不總結哪來的經驗,不分享經驗有何用?

一個人能產生多大價值取決於他的影響力有多大,之前看到有人在我們內部論壇提問說提高影響力有什麼用?你看看馬雲就能知道有什麼用了,他說一句話比你說上百句都管用,畢竟人家的影響力在那裏。很多微商都經常拿馬雲來說話,儘管馬雲自身沒說過這些話,但爲什麼別人拿馬雲來忽悠人,不拿你來忽悠人,這就是影響力的作用。我們程序員做知識經驗的傳承,不僅能夠提高你自身的影響力,還能夠幫助你提升邏輯思維能力,因爲你需要去總結提煉,你需要將問題梳理清楚,並且要將知識點描述得能夠讓別人更容易接受。你的經驗雖然是你自己的,但如果你的經驗能夠幫助到別人,那你的價值就不一樣了。

總結

筆者在寫開發文檔的時候,經常都會去思考怎麼讓開發者通過這個文檔更加輕鬆的接入我們SDK,怎麼樣設計接口會更符合開發者的思維,多提幾個爲什麼可以幫助自己讓自己的思考更加完善,這篇文章是筆者入行這兩三年的一些思考,也希望能夠幫助到廣大開發者能夠清晰認識到自己在這方面的能力,最後謝謝大家能夠看到這裏。

[1] . http://www.jianshu.com/p/e698fea61a39
[2]. https://github.com/tvvocold/How-To-Ask-Questions-The-Smart-Way

發佈了675 篇原創文章 · 獲贊 2753 · 訪問量 574萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章