把代碼提交后沐扳,然后同事或領(lǐng)導(dǎo)總是能夠指出我們代碼的不足之處...
“這塊代碼這么寫泥从,會(huì)不會(huì)存在內(nèi)存溢出”,“這里加入緩存會(huì)怎么樣沪摄,性能會(huì)怎么樣”歉闰,“這塊要考慮并發(fā)”,“這的數(shù)據(jù)狀態(tài)只有這兩種狀態(tài)嗎卓起?”......
聽完這些和敬,我編程時(shí)怎么就沒考慮到呢?然后你就如坐針氈地聽領(lǐng)導(dǎo)和同事指點(diǎn)江山戏阅。
那么該如何能避免這種情況呢昼弟,在編程時(shí)需要考慮哪些東西?今天奕筐,我們就討論下舱痘。
我們知道做任何一件事情,都需要經(jīng)歷過三個(gè)階段离赫。
首先芭逝,確定目標(biāo)。不管做任何事情渊胸,都需要知道做這件事情的目的和條件旬盯。讓目標(biāo)驅(qū)動(dòng)我們獲取條件,更讓能我們堅(jiān)持下去;咬牙堅(jiān)持的事情常常半途而廢胖翰,有目的的奮斗常常事半功倍接剩。在行動(dòng)前,我們就給自己定一個(gè)可量化的小目標(biāo)萨咳,例如我的產(chǎn)品需占用20%的全國市場(chǎng)懊缺。
其次,分解目標(biāo)培他。實(shí)現(xiàn)目標(biāo)是非常漫長(zhǎng)的過程鹃两。堅(jiān)持下去,就要為每個(gè)階段設(shè)定階段性成果清單舀凛,不斷刺激自己努力前行俊扳,直到最后完成。積少成多腾降,聚沙成塔拣度,通過無數(shù)個(gè)小成功成就大成功。
最后螃壤,校驗(yàn)?zāi)繕?biāo)抗果。每當(dāng)達(dá)成小目標(biāo)或最終目標(biāo)時(shí),需要好好回過頭去奸晴,想想這個(gè)階段或過程中的得與失冤馏,優(yōu)點(diǎn)與不足,滿意和不足寄啼,好好總結(jié)逮光。有則改之,無則加勉墩划。
編程也是如此涕刚。只有確定了三個(gè)階段,并分別針對(duì)三個(gè)階段過程乙帮,結(jié)合編程具體特點(diǎn)思考杜漠,就自然而然知道我們需要做些什么。
確定目標(biāo)察净。只有確定編程目標(biāo)驾茴,才能選擇匹配的技術(shù)方案和評(píng)判標(biāo)準(zhǔn)。如果是個(gè)人博客氢卡,我們采用單應(yīng)用服務(wù)锈至,快速開發(fā);如果是需要應(yīng)對(duì)百萬級(jí)訪問译秦,我們需要做集群峡捡、做負(fù)載均衡击碗、反向代理等,快速開發(fā)棋返,穩(wěn)定運(yùn)行延都;如果需要應(yīng)對(duì)億級(jí)訪問雷猪,我們需要微服務(wù)化處理睛竣,流量控制、限流限速等求摇,實(shí)現(xiàn)快速迭代射沟、垂直迭代、快速水平擴(kuò)展与境。目標(biāo)決定了我們采用的編程語言验夯、技術(shù)框架、測(cè)試方式摔刁、發(fā)布方式和運(yùn)營方式挥转。
分解目標(biāo)。編程需要考慮的方面是在是太多了共屈,從代碼規(guī)范绑谣、可擴(kuò)展、封裝性拗引、繼承性借宵,到日志監(jiān)控,權(quán)限控制矾削,數(shù)據(jù)安全壤玫,業(yè)務(wù)安全,用戶隱私哼凯,水平擴(kuò)展欲间,會(huì)話管理,消息處理断部,緩存管理猎贴,并發(fā)控制,接口兼容家坎,數(shù)據(jù)MOCK嘱能,包括功能、性能虱疏、極限等的測(cè)試惹骂,灰度、黑度發(fā)布做瞪,運(yùn)營監(jiān)控等眾多方面对粪。這些都不可能畢其功于一役右冻,需要根據(jù)輕重緩急安排先做什么,后做什么著拭。一般而言纱扭,好的產(chǎn)品不僅是研發(fā)出來的,更是運(yùn)行優(yōu)化出來的儡遮。我們首先要確保有可用的功能乳蛾,其次才是良好的性能。有了可以運(yùn)行的產(chǎn)品鄙币,才會(huì)有性能的調(diào)試和優(yōu)化肃叶。有了產(chǎn)品后,就可以快速迭代改善產(chǎn)品十嘿,最終打造出一款好產(chǎn)品因惭。
校驗(yàn)?zāi)繕?biāo)。在實(shí)現(xiàn)好了目標(biāo)后绩衷,我們需要回頭再瞧瞧蹦魔。不忘初衷,拿出我們的目標(biāo)咳燕,和結(jié)果做對(duì)比勿决,到底差別在哪里。哪里做了妥協(xié)迟郎,哪里做得更好剥险,哪里做的有待改進(jìn),擴(kuò)展性怎么樣宪肖,性能怎么樣表制,能承受多大的并發(fā)量等。通過校驗(yàn)?zāi)繕?biāo)控乾,找出需要完善的地方么介,螺旋式使用三個(gè)階段,不斷提升產(chǎn)品質(zhì)量蜕衡。
那么壤短,作為一名程序猿,在負(fù)責(zé)具體某一模塊時(shí)慨仿,我們需要考慮什么呢久脯?
1、功能正確镰吆,做好單元測(cè)試帘撰,業(yè)務(wù)兼容性等考慮。2万皿、代碼具有良好擴(kuò)展性摧找,包括水平和垂直擴(kuò)展核行;3、代碼風(fēng)格一致蹬耘、注釋規(guī)范簡(jiǎn)明芝雪;4、數(shù)據(jù)庫查詢時(shí)必須考慮緩存(代碼層級(jí)緩存)综苔;5惩系、并發(fā)處理(同時(shí)大量訪問會(huì)出現(xiàn)什么問題);6休里、功能接口化蛆挫,不要過多暴露實(shí)現(xiàn)細(xì)節(jié)給外部赃承;7妙黍、異常處理,確保整個(gè)功能模塊的數(shù)據(jù)與業(yè)務(wù)流轉(zhuǎn)是可以形成閉環(huán)的瞧剖;8拭嫁、代碼的設(shè)計(jì)模式(這有點(diǎn)裝逼了,其實(shí)我們總是不知不覺會(huì)應(yīng)用一些簡(jiǎn)單的設(shè)計(jì)模式抓于,例如單例模式)做粤;9、性能問題捉撮,可以從語言特性怕品、IO模式、通信模式和并發(fā)模式等不斷挖掘巾遭。
程序猿從接受任務(wù)到完成任務(wù)肉康,其實(shí)也經(jīng)歷了確定目標(biāo)-分解目標(biāo)-評(píng)估目標(biāo)的一個(gè)完成過程。讓目標(biāo)引導(dǎo)我們灼舍,讓小目標(biāo)驅(qū)動(dòng)我們吼和,讓校驗(yàn)結(jié)果回報(bào)我們骑素,我們也會(huì)讓自己得到升華炫乓。最終擺脫“為啥挨批的總是自己”。