面向需求編程才是常態(tài),聊聊我的經(jīng)歷
這篇文章中的內(nèi)容在幾年前曾經(jīng)發(fā)過(guò),之所以今天整理一下再發(fā)一次,是因?yàn)樽罱簧儆腥藛栁翌愃频膯栴}:
工作無(wú)聊,主要是增刪改查。
現(xiàn)有項(xiàng)目很爛,在上面修修補(bǔ)補(bǔ)
沒有從事過(guò)高并發(fā),大流量的項(xiàng)目,簡(jiǎn)歷沒有亮點(diǎn)......
想想我自己這10多年的開發(fā)經(jīng)歷,主要做企業(yè)應(yīng)用開發(fā),業(yè)務(wù)復(fù)雜,業(yè)務(wù)邏輯都不講邏輯,要求穩(wěn)定性,很少有機(jī)會(huì)去設(shè)計(jì)高并發(fā),大流量的項(xiàng)目。連從頭開始一個(gè)項(xiàng)目的機(jī)會(huì)都不多,大部分時(shí)間都是在現(xiàn)有項(xiàng)目的基礎(chǔ)上面向業(yè)務(wù),面向需求做開發(fā)。
我想這才是中國(guó)軟件業(yè)的常態(tài)吧!在這種情況下,抱怨沒用,跳個(gè)槽估計(jì)也差不多,還不如自己多思考,看看在工作中怎么搞點(diǎn)事情,提升自己的價(jià)值,我舉幾個(gè)我自己的案例。
01
我原來(lái)做過(guò)一段稅務(wù)系統(tǒng)的開發(fā),公司有一個(gè)自研的平臺(tái),包括了表單設(shè)計(jì)和工作流設(shè)計(jì),把底層的Java EE都給封裝起來(lái)了,在上面做開發(fā),讓人很絕望,什么底層都接觸不到。
實(shí)現(xiàn)了一些稅務(wù)的具體操作以后,我就慢慢的發(fā)現(xiàn)了這些操作的共性,但就是不知道該怎么描述出來(lái), 思考了很久也沒有頭緒。
有一天騎自行車回家的路上, 突然間就“頓悟”了:奧,這些稅務(wù)操作其實(shí)就是點(diǎn)(x,y)在二維坐標(biāo)系下的移動(dòng) !
第二天回去就把這個(gè)東西整理成文檔, 并且把代碼也做了改寫,因?yàn)橛欣碚撝笇?dǎo),代碼變的特別簡(jiǎn)單,很健壯--- 之后這就成為我簡(jiǎn)歷中的亮點(diǎn)了。
一個(gè)月后有個(gè)老外來(lái)北京, 看到了我抽象出來(lái)的關(guān)于稅務(wù)的操作,吃驚不已, 一直在問:這是你搞出來(lái)的嗎?
02
使用那個(gè)自研平臺(tái)的工作流開發(fā)出來(lái)的程序,必須得部署到app server中才能測(cè)試,并且只能手工測(cè)試,費(fèi)時(shí)費(fèi)力,我當(dāng)時(shí)就想能不能像Junit那樣寫好腳本,然后自動(dòng)化地去測(cè)試啊,把這個(gè)想法給Leader說(shuō)了,他非常支持,就按照這個(gè)想法去實(shí)現(xiàn), 后來(lái)發(fā)現(xiàn)和數(shù)據(jù)庫(kù)緊密耦合,難以完整實(shí)現(xiàn)。雖然如此,這也是我工作中的亮點(diǎn)了。
值得一提的是,這些亮點(diǎn)最終都指向了業(yè)務(wù)目標(biāo):更好更快地實(shí)現(xiàn)需求,而不僅僅是show 技術(shù)。技術(shù)是為業(yè)務(wù)服務(wù)的,仔細(xì)想想公司的業(yè)務(wù),流程,用的工具,從技術(shù)角度好好想想,是能發(fā)掘出東西來(lái)的。
03
我曾經(jīng)在一個(gè)研究所工作過(guò)幾年,雖然有開發(fā)任務(wù),但是很少有進(jìn)度的壓力, 在那里是很清閑的。
當(dāng)時(shí)在做一個(gè)小數(shù)據(jù)集成項(xiàng)目,需求明確, 系統(tǒng)也不復(fù)雜 ,開發(fā)著也挺無(wú)趣的, 我就琢磨著能不能搞點(diǎn)別的事情, 后來(lái)就發(fā)現(xiàn)了敏捷軟件開發(fā), 對(duì)里邊的實(shí)踐非常認(rèn)同,于是就學(xué)習(xí)了單元測(cè)試,TDD(測(cè)試驅(qū)動(dòng)開發(fā)),結(jié)對(duì)編程,用戶故事 等實(shí)踐, 在項(xiàng)目中也嘗試著做了應(yīng)用, 尤其是TDD, 的確不錯(cuò)。
再后來(lái)就進(jìn)了IBM, 沒想到幾年前種下的種子開花結(jié)果了。IBM 也開始提倡敏捷轉(zhuǎn)型,于是我?guī)啄昵暗姆e累就用上了, 不僅僅幫助本團(tuán)隊(duì)做了敏捷轉(zhuǎn)型, 還走出去幫助工行、農(nóng)行、華為、鼎橋等公司做了敏捷咨詢, 不但進(jìn)一步提升了水平, 也為自己的簡(jiǎn)歷增光不少。
04
剛進(jìn)IBM的時(shí)候做了一個(gè)極其簡(jiǎn)單的小項(xiàng)目, 就是用戶登錄, 然后顯示一個(gè)Applet (沒錯(cuò),就是上古時(shí)代的Applet), 這個(gè)Applet 基于IBM 的Samtime , 實(shí)現(xiàn)了讓用戶和公司的客服實(shí)時(shí)通信功能, 類似于QQ, 但是只能發(fā)文本消息。
后來(lái)由于Sametime升級(jí), Applet也要更新, 我就接觸了Applet的源碼,做了改動(dòng), 一切看起來(lái)沒什么大不了的, 很正常。
唯一的不同是我多做了一點(diǎn)工作, 深入的研究了Sametime 的SDK, 帶來(lái)了兩個(gè)重要的好處:
(1) 在developerWorks上發(fā)表了第一篇中文的sametime sdk文章,后來(lái)形成了一個(gè)系列。
這一系列文章被很多人看到, 并且直到6,7年以后,我都離開IBM了,還有人發(fā)信問我相關(guān)的問題, 影響力應(yīng)該是很深遠(yuǎn)的。
(2) 徹底理解了基于事件的編程模型 , 因?yàn)镾ametime SDK的編程就是基于事件的, 等到幾年后Node.js 開始出現(xiàn)并且流行開來(lái)時(shí), 我發(fā)現(xiàn)它和當(dāng)年的Sametime 編程模型幾乎是一樣的,都是異步的、事件驅(qū)動(dòng)的, 就像喝涼水一樣輕松掌握了, 后來(lái)寫了一篇文章《Node.js:我只需要一個(gè)店小二》
看完了我的故事,也許你有所觸動(dòng),像那些高并發(fā)、大流量的項(xiàng)目不是每個(gè)人都能接觸到的,面向需求編程才是常態(tài)。
在開發(fā)過(guò)程中,建立對(duì)整個(gè)系統(tǒng)端到端的理解,在業(yè)務(wù)、流程、工具等領(lǐng)域多想一想,肯定能發(fā)現(xiàn)讓自己閃光的、有價(jià)值的點(diǎn)。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】
























