同樣都是開發(fā),為什么你不如別人?
2020年由于疫情的影響,大批量的公司破產(chǎn)倒閉,即使能堅持下來的,也是推出了很多財務(wù)削減和人員裁減計劃(也有美名為人員優(yōu)化),這導(dǎo)致了大量人員的失業(yè),當(dāng)然也包括了我們這些做開發(fā)的程序猿。
疫情時間,為了能快速找到工作,很多人又開始四處尋找面試材料復(fù)習(xí)開始備戰(zhàn)面試,但就在復(fù)習(xí)的過程中有些人可能會發(fā)現(xiàn),原來自己工作了這么多年,水平可能都不及一個擁有三年開發(fā) 經(jīng)驗的新人。
那么問題來了,同樣是開發(fā),為什么你不如別人?如何才能讓自己變得更加優(yōu)秀?下面我將從三個方面闡述我的思考。
一、做事的藝術(shù)
在工作中,我們可能會碰到各種各樣的問題,如何優(yōu)雅地處理這些事情,非??简炓粋€人的能力。
1.嚴謹和一絲不茍的態(tài)度
有人經(jīng)常這樣向我抱怨:面試造火箭大炮,工作擰螺絲。我想即便你是擰螺絲的工作,也務(wù)必要保持一絲不茍的態(tài)度把這擰螺絲的工作做好,否則你的這步?jīng)]能擰好,很有可能導(dǎo)致造出來的 整個火箭還沒飛上天就爆炸了。
我覺得干咱們研發(fā)這一行,嚴謹和一絲不茍的態(tài)度是必須具備的基本職業(yè)素養(yǎng)。因為可能就是你的一點小疏忽或者情況考慮不周,可能給別人帶來多大的麻煩和后果。
可能一、兩次地這樣坑別人,別人還能原諒你,幫你填坑。但如果由于你的不嚴謹和不認真的態(tài)度,導(dǎo)致三番五次地坑別人,時間長了即便你人再好,別人也不會再相信你,這樣你在團隊中 就舉步維艱了。
2.把握問題的本質(zhì)
在工作的時候,我們經(jīng)常會遇到各種各樣的奇怪的bug。面對這些bug,不同的人處理的方式也是不盡相同。有的人是恨得咬牙切齒,恨不得和提bug的人干一架;有的人則是非常淡定,一邊 詢問bug的詳細情況,一邊靜靜地坐著打斷點、打日志分析問題。兩者處理的方式不同,帶來的結(jié)果也不盡相同。
那么當(dāng)我們在開發(fā)過程中遇到問題時,我們該如何解決呢?我想核心的解決方法就是 把握問題的本質(zhì)。
如何把握問題的本質(zhì),以下是我常用的方法論供大家參考:
-
了解問題的詳細情況,收集問題出現(xiàn)的條件和現(xiàn)象:只有了解問題才能解決問題;
-
模擬問題出現(xiàn)的場景,對問題進行場景復(fù)現(xiàn);
-
將偶現(xiàn)問題轉(zhuǎn)化為必現(xiàn)問題,從中尋找規(guī)律;
-
善用排除法,篩除干擾項;
-
斷點+日志相結(jié)合進行問題跟蹤,深入源碼探尋問題的本質(zhì)。
一旦把握了問題的本質(zhì)之后,一切便會迎刃而解。后面你需要做的就是找到方法,并解決它。你可以自己想辦法;搜索網(wǎng)上有沒有人和你遇到同樣的問題;請教這方面熟悉的人...
3.事前永遠比事后更重要
事前埋下的坑,也許需要事后付出數(shù)倍的努力才能把坑填完。很多時候我們經(jīng)常會忽視事前計劃、設(shè)計的重要性,往往是走一步看一步,等功能實現(xiàn)到一半的時候才突然發(fā)現(xiàn)這條路越走越崎 嶇或者根本行不通,這個時候你是非常難受的。
繼續(xù)走下去,可能前面的坑會越來越多;不繼續(xù)走,重新想方案,項目延期,進度趕不上,要被問責(zé)。
因此在做任何事前之前,一定要自己要做的事情想清楚了再去做,避免南轅北轍的尷尬。
以下是我給出的幾點建議:
-
在做一些較為復(fù)雜的功能前,盡量做好設(shè)計。這里的設(shè)計主要包括:
-
流程圖:把所有可能出現(xiàn)的情況都考慮進去,越詳細越好;
-
設(shè)計類圖:包括UML圖和時序圖等。好的設(shè)計往往事半功倍,這里我推薦大家多學(xué)學(xué)設(shè)計模式;
-
性能設(shè)計和可拓展設(shè)計。
-
養(yǎng)成良好的編碼規(guī)范,在關(guān)鍵的、難懂的地方多加些注釋,這樣可以避免長時間后的遺忘,導(dǎo)致代碼晦澀難懂,大大增加維護難道和bug產(chǎn)生的幾率。
-
提高代碼的質(zhì)量,在實現(xiàn)功能的同時,注重代碼的性能,對于一些常見的性能問題要爛熟于心。
-
在問題出現(xiàn)任何端倪之前就立馬進行解決,即使不能完全解決也要預(yù)先想出替代方案。否則時間長了或者上線了之后,你可能需要付出數(shù)倍的精力才能解決,并有可能帶來非常不好的影 響。
4.低調(diào)做人高調(diào)做事
Talk is cheap. Show me the code. 這句話可謂是IT圈里最朗朗上口的一句話。
咱們干研發(fā)這一行的不同于其他職業(yè),并不需要極力向外推銷自己來獲取更高的業(yè)績。我們絕大多數(shù)的研發(fā)人員都是務(wù)實派,靠的是一行一行碼出來的代碼去實現(xiàn)自己的價值,少說話多敲幾 行代碼會更有價值得多。
所以,那些成天夸夸其談,開口就是講上一堆技術(shù)架構(gòu),閉口寫起代碼又是一團亂麻的人,是比較不受歡迎的。
我們做技術(shù)的不要成天拿著技術(shù)出來顯擺。要知道人外有人天外有天,比你技術(shù)牛逼的大有人在,沒必要整天要在技術(shù)上比個高低貴賤的,也不需要刻意讓別人知道自己有多么厲害,因為你 寫的代碼就能證明你的技術(shù)水平,時間一長大家自然心知肚明。
5.幫助別人的藝術(shù)
在幫助別人的同時,還能讓自己對這塊的技術(shù)掌握得更加透徹,何樂而不為呢?
幫助別人,而不是施舍,這一點尤為重要。我們要樂于助人,但是也要注重方法。幫助他人是建立在相互尊重的基礎(chǔ)上的,否則你的好心幫助會被別人理解為同情施舍或者多管閑事。
因此我們在幫助別人的時候要注意以下幾點:
-
不要有幫助人的企圖,只有在別人需要幫助的時候才去伸出援助之手;
-
給予被幫助人最起碼的的尊重;
-
不要借著幫助他人的名義去干預(yù)被幫助人的成長,最好的幫助就是點到即止,剩下的順其自然。
二、學(xué)習(xí)的藝術(shù)
從事開發(fā)工作,無論你是在產(chǎn)品線上寫業(yè)務(wù)代碼,還是在技術(shù)平臺進行技術(shù)研究,我們都不能放棄學(xué)習(xí),放棄對新技術(shù)的嘗試。放棄學(xué)習(xí)就好比戰(zhàn)士上戰(zhàn)場弄丟了自己的槍,很快你將會被一 浪又一浪的技術(shù)浪潮所淘汰。
1.學(xué)習(xí)和汲取他人的長處
對于大多數(shù)的人來說,發(fā)現(xiàn)別人的缺點很容易,但是發(fā)現(xiàn)別人的優(yōu)點卻很難,這也是很多人不能快速成長的原因所在。
優(yōu)秀的人總是善于發(fā)現(xiàn)別人的優(yōu)點并加以學(xué)習(xí)。學(xué)習(xí)、模仿并最終超越是他們戰(zhàn)無不勝的秘訣。他們并不在于你身上有多少缺點,他們只在乎能從你身上學(xué)到多少東西。
他們不僅會向身邊的人學(xué)習(xí),還會向以下幾個方面進行學(xué)習(xí):
-
優(yōu)秀的源碼。這里包括系統(tǒng)源碼和優(yōu)秀的開源項目源碼;
-
優(yōu)秀的技術(shù)書籍、文章;
-
優(yōu)秀的理念和思想。
2.把握學(xué)習(xí)的廣度和深度
漫無目的地學(xué)習(xí)必然導(dǎo)致效率的極其低下,我們在學(xué)習(xí)之前一定要給自己設(shè)定一個目標:到底是想學(xué)習(xí)不同領(lǐng)域額的技能,成為一名全才;還是想就某一領(lǐng)域深入研究,成為一名專才,這就 涉及到學(xué)習(xí)的廣度和深度的選擇了。
因為你不同的選擇可能導(dǎo)致不同的人生軌跡,就目前而言,大廠更偏向于某一領(lǐng)域的專才,而小廠更偏向于擁有更多技能的全才,當(dāng)然這也不是那么絕對。就選擇而言,大廠固然很好,但是 又有多少人能進入大廠呢;小廠雖說待遇各方面都不敵大廠,但是小廠的機遇多啊,說不定哪天公司發(fā)展得不錯,你就能爬上領(lǐng)導(dǎo)的位置了呢。
所以無論你是選擇學(xué)習(xí)的廣度還是學(xué)習(xí)的深度,其實都是沒有錯的,唯一錯的就是你壓根就沒有思考過這事。
當(dāng)然這里的選擇也不是絕對的,每個人在不同的階段可能選擇的方向并不相同。當(dāng)你初涉社會剛開始工作,你可能追求的是學(xué)習(xí)的廣度,但慢慢的當(dāng)你對某一領(lǐng)域感興趣或者表現(xiàn)出異于常人 的天賦時,你可能又會轉(zhuǎn)而追求學(xué)習(xí)的深度。
每個人的技術(shù)都有可能在某一刻達到瓶頸。如果現(xiàn)在的你翻開一年前你提交的代碼,卻發(fā)現(xiàn)和你現(xiàn)在提交的代碼并無差別時,這個時候你就要小心了,很可能你已經(jīng)達到你的技術(shù)瓶頸了,這 個時候考慮換一個學(xué)習(xí)的緯度可能是不錯的選擇。
3.持續(xù)不斷地學(xué)習(xí)
技術(shù)在日新月異地不斷變化和發(fā)展著,前幾年還比較流行的技術(shù),可能沒過幾年就被人們所拋棄。當(dāng)革命性的突破技術(shù)取代舊的技術(shù)時,這是歷史巨輪不斷向前發(fā)展、不可阻擋的趨勢。
不要以為你現(xiàn)在掌握的技術(shù)就能夠養(yǎng)活你一輩子,我們需要對技術(shù)的發(fā)展保持著極大的敏銳觸覺。一旦你所掌握的技術(shù)逐漸被新技術(shù)所替代時,你就要小心了,可能留給你學(xué)習(xí)的時間不多了 。
4.利用好學(xué)習(xí)的工具
利用好學(xué)習(xí)的工具,能夠極大地提高我們的學(xué)習(xí)效率。
這里我主要介紹關(guān)于自學(xué)一門技術(shù)可以利用的工具:
-
專業(yè)性的入門書籍。對于新手和小白而言,我還是建議大家先找?guī)妆緦I(yè)性和權(quán)威性最強的書籍作為自己的入門指南。因為書本講解得更詳細也更成體系,對于入門而言還是相當(dāng)不錯的。
-
專業(yè)領(lǐng)域較強的技術(shù)論壇和博客。在這里我們可以學(xué)到很多書本上所沒有的一些前沿技術(shù)的資訊和技術(shù)交流心得。這里推薦掘金和思否。
-
開源代碼托管平臺。在上面擁有海量開源的項目,其中也不乏許多優(yōu)秀的開源項目可以供我們學(xué)習(xí)和參考。學(xué)習(xí)和借鑒別人優(yōu)秀的代碼和設(shè)計思想,能讓我們快速提高自我的coding能力。 這里我主要推薦Github和Gitee。關(guān)于如何使用開源代碼托管平臺,可以參考我之前寫的一篇文章:《你真的會使用github嗎?》。
三、提問的藝術(shù)
我們每個人都不是萬能的,都會遇到很多我們不懂的問題,需要向別人進行求助。但是并不是每個人的問題都能夠得到別人的答復(fù),這完全取決于提問者提問的水平。
這里我先模擬一個場景:當(dāng)你在github上使用了某人開源的輪子時,遇到了問題需要向作者提問或者提issue,你會怎樣進行提問?
-
提問者A:大佬幫幫忙,我在使用xxx的使用遇到問題了,請問怎么解決???
-
提問者B:老哥,我說xxx小白,在使用你的xxxx搞了一天了都沒有運行得起來,能不能幫幫忙,我實在沒辦法了。
-
提問者C:您好,大佬。我在使用xxxx時,頻繁xxxx,導(dǎo)致xxxx,但是xxxx, 又會xxxxx, 但是呢...(以下省略500字)??赡芪倚稳莸夭皇呛芮宄?,你可以試一下就知道了。
-
提問者D:請問怎么解決,......(以下省略數(shù)百行的日志)
-
提問者E:你這xxx根本不能用,......(以下省略約一百字的抱怨的話)
-
提問者F:您好,我在使用xxx的xxx版本的時候,遇到了xxx問題。下面是我出現(xiàn)問題時的現(xiàn)象(....)以及日志(....)。我是這樣xxx,然后xxx,最后導(dǎo)致xxxx。我出現(xiàn)問題的設(shè)備型號是 xxxx,在xxxx上沒有出現(xiàn)問題,是不是xxxxx導(dǎo)致的?
上面6個人提問的方式是完全不同,我想可能只有提問者F才能夠最終得到別人的答復(fù)并順利解決問題,下面我將幫你逐一分析原因:
-
提問者A是很多人經(jīng)常犯的錯誤,那就是只拋出了問題,并沒有給出問題出現(xiàn)的現(xiàn)象和依據(jù),這會讓被提問者無從下手,沒有絲毫回復(fù)的欲望。畢竟你是求別人幫你解決問題,而不是領(lǐng)導(dǎo)發(fā) 號施令。
-
提問者C的問題就是說得太多,沒能精確描述問題是什么。這樣表述不清的提問只會讓被提問者滿臉的問號,然后直接回復(fù):???。
-
提問者B是很多初學(xué)者(學(xué)生)常犯的毛病,沒有明確的問題,沒有明確的解決預(yù)期,有的就是祈求式的求助,甚至連要幫什么忙都沒有表述清楚。對于這種提問,絕大多數(shù)人是不予理睬的 ,因為他們并不想把時間浪費在一個什么都不明白的菜鳥身上,畢竟他們不是你的老師,沒有義務(wù)教你基礎(chǔ)知識。
-
提問者D也是很多人經(jīng)常犯的錯誤。出現(xiàn)問題之后的第一反應(yīng)不是先去進行一番思考嘗試自己解決,而是無腦地將一堆無用的錯誤日志貼出來,請求別人給出解決方案。對于這樣的問題,可 能絕大多數(shù)人的第一反應(yīng)就是:能百度解決問題的,請不要來煩我,謝謝!
-
提問者E就不用多說了,這種提問明顯不是沖著解決問題的目的來的。對于這種不友善,懷有敵意的提問,我想大部分人的反應(yīng)不是去幫忙解決問題,而是在想:這人不會是傻*吧?
分析了上面人的提問方式后,我們可以總結(jié)出如下幾個問題時的技巧:
-
首先明確問題是什么;
-
優(yōu)先自我思考解決,解決不了再向別人尋求幫助;
-
清晰地描述問題;
-
問題解決及時反饋并表達謝意。
1.明確問題是什么
在提問之前,首要任務(wù)是要搞明白自己到底要問什么,訴求是什么,這是對被提問者最起碼的尊重。
什么都沒搞明白就稀里糊涂地跑去問別人,這會讓別人覺得你很唐突無知,給人留下非常不好的印象,這也會直接導(dǎo)致別人不愿意幫助你解決問題。
為什么這么說?因為別人要想幫你解決問題,還得先搞明白你的問題到底是什么,你的訴求是什么,然后還需要幫你分析問題出現(xiàn)的原因,最后才能幫你想出解決的辦法,這花費的精力和代
價實在是太大了。要知道這不是在學(xué)?;蛘哚t(yī)院,沒人會愿意這么大費周折地幫你。
所以,要想自己的問題能夠得到別人的答復(fù)和幫助,你必須想明白你要問的問題到底是什么!
2.優(yōu)先自我思考解決
你可能也會遇到這樣的情況,經(jīng)常有人會在論壇上、qq群里、博客評論區(qū)里,動不動就貼出數(shù)百行的報錯日志,然后不加一點說明,開口就問:這是什么問題,能幫我解決嗎?
像這樣不經(jīng)大腦思考就草率的發(fā)問只能得到草率的回答,或者根本得不到任何答案便會石沉大海。其實我特別不建議大家在QQ群或者微信群里向別人問問題,因為懂的人可能不屑于回答( 覺得這樣的問題太low了,即使回答對了也體現(xiàn)不出自己的厲害),不懂的人即便回復(fù)你了也沒有任何價值,反而有可能會把你帶偏了。
現(xiàn)在這社會,大家的時間都很寶貴,沒有哪個真正厲 害的技術(shù)大牛是在QQ群和微信群里活躍的,大牛的時間都很寶貴。那些成天在QQ群或者微信群里活躍的人,八成是閑的沒事干的人。
因此要想得到別人高質(zhì)量的答復(fù),必須擁有與之相匹配的高質(zhì)量的問題才行,這樣別人才會愿意幫你解決。所以并不是什么問題都是值得向別人提問的。
我們在提問之前,一定要有自己的思考,優(yōu)先嘗試自己解決問題。下面是我提供的幾個自我解決問題的途徑:
-
斷點+日志相結(jié)合進行問題跟蹤,深入源碼探尋問題的本質(zhì)并予以解決;
-
仔細通讀作者編寫的使用手冊,不要拉下每一個細節(jié)(切忌想當(dāng)然),試著自己找答案;
-
在FAQ里找答案。如果有開源地址的話,建議優(yōu)先在Issue中查找是否有相關(guān)的問題,并借鑒其中的解決方法;
-
在網(wǎng)上搜索相關(guān)問題(條件允許的話,優(yōu)先使用google,百度太坑,搜到的大多千篇一律);
-
向你身邊精于此道的朋友咨詢。
如果經(jīng)過以上5種方法你都沒能解決問題,這個時候你再向別人進行提問,我相信你一定能夠把問題解決。因為帶著思考向別人提問題,才更能夠得到別人高質(zhì)量的答復(fù)。如果可以的話,你 可以直接把自己想的幾個解決方法闡述出來,這樣別人可能會更愿意幫你解決,畢竟大家都喜歡做選擇題,而不是論述題。
3.清晰地描述問題
有這樣一部分人,每次遇到問題需要向別人求助的時候,經(jīng)常表現(xiàn)的是舉足無措,慌張地描述了一大堆看上去和問題有關(guān)又或者無關(guān)的話,滔滔不絕口若懸河,問得被提問者一臉懵逼。
面對這樣的問題難免會讓別人頭大。講了一大堆卻分不出主次和主要矛盾,就連問題是什么都沒有搞得很明白,別人怎么幫你解決?
因此我們在闡述問題的時候,需要注意以下幾點:
-
問題描述要言簡意賅,盡量控制在50字以內(nèi)。
-
問題描述要條理清晰,把握主要矛盾。與問題無關(guān)或者相關(guān)性較低的話就不要說了。
-
建議問題中包括如下幾部分的內(nèi)容:
-
問題描述;
-
使用版本;
-
如何重現(xiàn);
-
期望的效果;
-
出錯現(xiàn)象(截圖或者視頻);
-
設(shè)備信息(環(huán)境);
-
附加信息(可以是日志或者源碼鏈接等);
4.問題解決及時反饋并表達謝意
現(xiàn)實生活中常常有這樣一部分人,在得到別人幫助了之后,連一句問題是否被解決的答復(fù)或者感謝也沒有便消失得無影無蹤,這會極大地打擊被求助者的積極性。
因為問題久拖未決會讓人灰 心,他們渴望看到問題被解決,并從中得到幫助別人帶來的滿足感,這點非常重要。否則下次再有人向他提問題時,可能就不太愿意幫忙了。
所以,在問題解決后,向所有幫助過你的人發(fā)個說明,讓他們知道問題是怎樣解決的,并再一次向他們表示感謝。