新手和老手的區別---解決問題的能力


通常我們區別一個人是新手還是老手,可以看一下幾個方面:

  • 新手,百度的主要是語法。老手,Google的基本是解決方案或者疑難bug。
  • 新手,一頓操作猛如虎,一旦發測全是bug,甚至有需要顛覆設計來修改的。老手,先想,甚至畫畫圖,不緊不慢開始寫,甚至有寫幾行,喝幾口茶的感覺,但是寫出來的穩得一批。
  • 新手,面對bug,首先就是猜,應該是那里,改了再說,恩,好了,然后其他地方出問題了。老手,先分析代碼,然后看日志,復現,修改,再復盤一下。

那么,如果我上面的都做到了,就是老手了么?不一定,還有一個很重要的因素---解決問題的能力。

可以說,工作3-5年,上面3點基本都能達到,畢竟熟能生巧,但是解決問題的能力,真的是天賦和努力都需要。

同樣一個問題,新手只想怎么打補丁,老手想的是怎么從源頭解決而不影響大局,但是大神,往往會想有沒有更優方案。

舉個例子,sql錯誤秒殺系統超發了。

  • 新手可能一看,哦,這個SQL有問題,改一下。
  • 老手一看,這么改可能有並發瓶頸,優化一下。
  • 大神一看,這個可以加個隊列,解決並發問題,然后對於客戶端體驗怎么優化一下,產品可以提供一下響應的友好提示等等。

簡單的說,就是格局和視野不一樣

那么,我們要怎么鍛煉我們解決問題的能力呢?

事無巨細,悉以咨之。

學習的最好途徑就是經歷,我們可以抓住工作中遇到的每一個問題,看看別人是怎么解決的,想想有沒有更好的方案,記下來自己復盤。

很多論壇上的求助,或者大佬們對於行業痛點的解決方案,多看看,體會一下他們的優劣和特點,同行就是最好的老師。

最后就是多思考。

只要思想不滑坡,辦法總比困難多。

優化流程

很多時候,我們可能會疑惑,為什么別人能想到我想不到。

首先是知識儲備的問題。

你永遠想不到你並不知道的東西。

也就是貧窮限制了我們的想象力,這個需要我們多積累,多看多學。

其次就是思考模式的優化,這里主要談談這個。

場景分析,拋開程序思維

我常常開玩笑:如果解決不了,就干掉那個提需求的人

意思就是如果一個需求或問題比較棘手,可以先問問提需求的人,原始需要是什么,可能會找出一個程序實現簡單,而且更符合原始需求的方案。

雖然這種機會很少,畢竟產品和程序不打起來已經不錯了,但是有時候真的有奇效,會減少很多開發時間。最起碼你了解了為什么要做這個東西,也不至於怨天怨地。

定義問題,抽象模型

想要解決問題,首先要明白到底是什么問題。

比如,CPU占用非常高,我們把耗CPU的干掉一些把。

首先,CPU占用高並不是問題,CPU就是拿來用的,不卡就不用解決。

其次,優化不等於干掉,先找出有沒有空耗CPU的,其次再分析有沒有低效利用CPU的。

最后,在確定解決方案。

如果方向錯了,怎么努力都是錯的。

刨根問底

比如一個接口經常超時,有人說,超時時間改長點不就好了。這里你會也許覺得很挫。但是在實際工作中,這種補丁數不勝數。

一旦你選擇了妥協,那么就會一直妥協。久而久之,你就會變得不願意思考,逐漸平庸。

任何現象的背后,一定有原因,補丁只能一時,不能一世,為了業務的正常運作,可以打補丁,但是一定要在下一步將這個問題揪出來。

這就比如,你去看醫生,說我經常感覺冷。醫生說你多穿點不就好了。你會怎么想?

程序員看bug,其實和醫生看病是一樣的,望聞問切,尤其是服務端,可以說每次修改都是動手術,一定要穩准狠。

驗證和復盤

凡是問題,先復現,抓不到就拼命加日志,直到揪出來再改。

無法復現,就無法驗證,一旦邏輯鏈不完整,就一定還有雷,總有一天它會炸。

每次解決之后,多復盤,再次思考有沒有更優方案,這樣你會因為一個問題成長多次,而且形成模型后,你解決問題的速度會快很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM