一位10年Java工作經(jīng)驗的架構(gòu)師聊Java和工作經(jīng)驗

黃勇,從事近十年的 JavaEE 應(yīng)用開發(fā)工作,現(xiàn)任阿里巴巴公司系統(tǒng)架構(gòu)師。對分布式服務(wù)架構(gòu)與大數(shù)據(jù)技術(shù)有深入研究戒傻,具有豐富的 B/S 架構(gòu)開發(fā)經(jīng)驗與項目實戰(zhàn)經(jīng)驗税手,擅長敏捷開發(fā)模式。國內(nèi)開源軟件推動者之一需纳,Smart Framework 開源框架創(chuàng)始人冈止。熱愛技術(shù)交流,樂于分享自己的工作經(jīng)驗候齿。著有《架構(gòu)探險——從零開始寫Java Web框架》一書熙暴。

我的十年技術(shù)之路

和大家介紹下我目前所從事的工作。

我目前從事分布式服務(wù)架構(gòu)的設(shè)計與開發(fā)工作慌盯,在阿里的大數(shù)據(jù)平臺上進(jìn)行應(yīng)用程序開發(fā)周霉。我們整個系統(tǒng)架構(gòu)采用了“前后端分離”的思想,前端關(guān)注數(shù)據(jù)展現(xiàn)亚皂,后端關(guān)注數(shù)據(jù)生產(chǎn)俱箱,通過 REST服務(wù)將前后端整合起來,所有的應(yīng)用都是無狀態(tài)的灭必,可以做到水平擴(kuò)展狞谱。我們將整個系統(tǒng)拆分成許多“微服務(wù)”,服務(wù)之間通過統(tǒng)一的接口來調(diào)用禁漓,每個服務(wù)是通過容器技術(shù)進(jìn)行隔離跟衅,此外服務(wù)可發(fā)布到統(tǒng)一的服務(wù)管理平臺上,可通過該平臺監(jiān)控每個服務(wù)的運行狀態(tài)與生命周期事件播歼,并為服務(wù)調(diào)用者提供了服務(wù)發(fā)現(xiàn)的能力伶跷,可對服務(wù)進(jìn)行平滑升級。

阿里有許多優(yōu)秀的中間件與基礎(chǔ)服務(wù)秘狞,可以快速幫助我們搭建應(yīng)用系統(tǒng)叭莫,而且這些技術(shù)在阿里內(nèi)部全是開源的,大家可以通過源碼和文檔學(xué)習(xí)到很多有價值的經(jīng)驗烁试。阿里也提供了濃厚的技術(shù)氛圍雇初,每位同學(xué)都非常專注于自己的工作領(lǐng)域,大家對工作一絲不茍减响,相互配合靖诗,方向一致。

我是如何走上技術(shù)這條路的辩蛋?

2006 年大學(xué)畢業(yè)呻畸,我離開了母校武漢理工大學(xué)移盆,在院長薛勝軍老師的推薦下悼院,我來到了上海,這個對于我來說非常陌生的地方咒循。我有幸加入了一家名為“動量軟件”的創(chuàng)業(yè)公司据途,這家公司的老板曾經(jīng)是亞信科技的 CTO绞愚,他也是普元軟件的創(chuàng)始人兼 CTO,他的名字叫黃柳青颖医,他也是薛老師的大學(xué)同學(xué)位衩。于是就這樣,我的老板成為了我的老師熔萧,我習(xí)慣叫他黃老師糖驴,包括公司其他資深的同事也成為了我的老師,因為我很想他們身上學(xué)到更多有價值的東西佛致。

剛開始工作的時候我學(xué)習(xí)了什么是云計算贮缕?什么是 SaaS、PaaS俺榆、IaaS感昼?我們花了三年時間開發(fā)了一款名為 ODE 的 PaaS 平臺,讓用戶可以在該平臺上量身定制自己的軟件罐脊,最終為客戶提供基于 SaaS 的產(chǎn)品定嗓。確實很驕傲,那時我們已經(jīng)在做云了萍桌,只是沒想到后來云會在中國得到這么好的市場宵溅,可能當(dāng)時只有黃老師一個人想到了吧。

在 2008 年上炎,我為公司拿回了“第一桶金”层玲,這也是我從程序員轉(zhuǎn)向項目經(jīng)理的里程碑。當(dāng)時我?guī)ьI(lǐng)團(tuán)隊遠(yuǎn)赴深圳反症,為國信證券公司開發(fā)經(jīng)紀(jì)人管理系統(tǒng)辛块,這個項目對于我個人而言卻是一筆至高無上的財富,我開始學(xué)習(xí)如何與人打交道铅碍,如何做需求分析润绵,如何將需求轉(zhuǎn)變?yōu)榧夹g(shù),如何帶領(lǐng)團(tuán)隊小伙伴一起工作胞谈。學(xué)到了太多太多尘盼,但我依然選擇在我工作第四個年頭里離開了動量軟件,我剛加入動量軟件的時候烦绳,公司只有 5 個人(包括老板和前臺)卿捎,當(dāng)我離開動量軟件的時候,公司已經(jīng)有 200 人左右了径密。感謝黃老師午阵!我在他身上學(xué)到了很多,他的思想和態(tài)度直到今天都還在影響著我。

我的第二份工作還是選擇了我最熟悉的證券金融行業(yè)底桂,同樣也是一家創(chuàng)業(yè)型公司植袍,在這家公司里我擔(dān)任了技術(shù)經(jīng)理,管理了整個技術(shù)團(tuán)隊籽懦,從項目的售前到售后于个,我都親自帶領(lǐng)團(tuán)隊來完成。雖然在這家公司我只做了兩年暮顺,但在這短短的時間里厅篓,我學(xué)會了如何提高開發(fā)效率、如何培養(yǎng)技術(shù)團(tuán)隊捶码、如何選拔技術(shù)人才贷笛、如何建立企業(yè)文化。但最后我發(fā)現(xiàn)了一個問題宙项,越是想做好乏苦,越是很難做好,為了做成一件事情需要做很多的嘗試尤筐,做事情缺乏正確并有效的方法汇荐。

回想我工作的前六年時間里,我一直都是在創(chuàng)業(yè)公司里成長盆繁,雖然可以快速學(xué)到東西掀淘,但似乎很難學(xué)到更加規(guī)范的做事方法。于是我選擇了新的工作機會油昂,來到了 TCL 通訊革娄,這是一家相當(dāng)大的公司,公司的研發(fā)管理流程來源于法國阿里卡特公司冕碟。我在公司擔(dān)任 Java 架構(gòu)師職位拦惋,也算是整個 Java 團(tuán)隊的技術(shù)負(fù)責(zé)人,雖然團(tuán)隊并不是特別地大安寺。我在這家公司做了三年厕妖,學(xué)到了如何整合現(xiàn)有資源、如何按標(biāo)準(zhǔn)流程去做事挑庶、如何設(shè)計系統(tǒng)架構(gòu)言秸、如何進(jìn)行異地工作、如何跨團(tuán)隊工作迎捺、如何用英文來溝通举畸。說實話,當(dāng)時我沒有任何的工作壓力凳枝,可以按時上下班抄沮,從來都不會加班。雖然自己空閑的時間很多,但我并沒有選擇去浪費時間合是,而是開始寫點技術(shù)博客,也正是因為這些技術(shù)文章锭环,才改變了我后續(xù)的職業(yè)發(fā)展道路聪全。

我清楚的記得,那是在 2013 年 9 月 1 日辅辩,我在開源中國(oschina.net)網(wǎng)站發(fā)表了我人生的第一篇博文 《Smart Framework:輕量級 Java Web 框架》难礼,這篇文章影響了我后續(xù)兩年。其實說句心里話玫锋,當(dāng)我第一次寫這篇文章時蛾茉,我心里是沒底的,這個框架只是根據(jù)自己的理解做出來的一個設(shè)想撩鹿,當(dāng)時甚至連一行代碼都沒寫過谦炬。我的想法是先將這個思想發(fā)表出來,讓大家討論起來节沦,我會做一個決策键思,然后再親自做具體實現(xiàn),最后我會將實現(xiàn)過程通過博文的方式展現(xiàn)給大家甫贯,后續(xù)大家會對我的實現(xiàn)進(jìn)行點評吼鳞,我會基于大家的建議進(jìn)行改善。整個開源過程正好與敏捷的思想是一致的叫搁,有效溝通赔桌、小步快跑、擁抱變化渴逻、不斷改進(jìn)疾党。

也許就是我的技術(shù)文章吸引了很多廣大讀者,這里面不排除想邀請我加入的其它公司惨奕。我在 2014 年離開了 TCL 通訊仿贬,加入了易傳媒。為什么我要放棄如此舒適的工作環(huán)境墓贿,去加入一家還在不斷拼搏的企業(yè)呢茧泪?其實我看到的是未來互聯(lián)網(wǎng)的發(fā)展趨勢,廣告程序化交易以及廣告與大數(shù)據(jù)的結(jié)合聋袋,未來最值錢的一定是數(shù)據(jù)队伟。抱著這樣的信心,我加入了易傳媒幽勒,擔(dān)任系統(tǒng)架構(gòu)師職位嗜侮。當(dāng)時易傳媒正處于技術(shù)轉(zhuǎn)型的初期,需要將 .Net 全部遷移到 Java,這件事情對于我而言是非常有挑戰(zhàn)的锈颗。我的做法是:第一步定義開發(fā)規(guī)范與流程顷霹,第二步培養(yǎng)核心技術(shù)人員,第三步分階段進(jìn)行改造击吱。僅半年時間淋淀,我們所有的產(chǎn)品成功地遷移到了 Java 平臺,結(jié)果出乎大家的想象覆醇。公司市場也非常不錯朵纷,產(chǎn)品得到了業(yè)界的認(rèn)可,訂單數(shù)源源不斷永脓,大家每天都很忙碌袍辞,但卻很開心。而易傳媒的“易家人”企業(yè)文化常摧,讓我所感動搅吁,不管是核心技術(shù)部門還是其它支持性部門,大家就像一家人一樣落午,你的事情就是我的事情似芝。

直到 2015 年初,阿里巴巴與易傳媒建立了合作關(guān)系板甘,兩家公司進(jìn)行了深度合作党瓮,易傳媒公司與阿里媽媽事業(yè)部進(jìn)行了整合,新阿里媽媽從此誕生了盐类,于是我也成為了阿里巴巴的一員寞奸,目前負(fù)責(zé)阿里媽媽大數(shù)據(jù)品牌營銷產(chǎn)品的系統(tǒng)架構(gòu)工作。就在兩家公司整合的過程中在跳,我完成了人生中的處女作《架構(gòu)探險 —— 從零開始寫 Java Web 框架》這本書枪萄,目前該書正在各大網(wǎng)上書店售賣,我真心希望這本書能對一些想成為架構(gòu)師的程序員們有所幫助猫妙,由于我個人水平有限瓷翻,又是第一次寫書,寫得不好的地方還請大家多多包涵割坠。

上面提到齐帚,寫博客給我?guī)淼氖斋@頗多,那么我來分享下技術(shù)人如何寫博客彼哼,又應(yīng)該以怎樣的態(tài)度對待对妄。

我認(rèn)為技術(shù)人員寫博客需要注意以下幾點:

思路要清晰,文章要有明確的大綱與標(biāo)題敢朱。

對于實戰(zhàn)類型的文章剪菱,需要分步驟來描述摩瞎。

多用短句,少用長句孝常,能一句話說明白旗们,就不用兩句話。

對于不太好理解的內(nèi)容构灸,最好能打比方來說明上渴。

文章末尾需要有總結(jié),用最精辟的語言歸納出這篇文章的主要內(nèi)容冻押。

寫博客首先是對自己所學(xué)知識的一個總結(jié)驰贷,此外盛嘿,也為其他讀者提供了很好的教程洛巢,知識得到了廣播與傳遞。

技術(shù)一條不歸路次兆,選擇了這條路從未有過放棄的想法稿茉。

做了十年的技術(shù),我從來都沒有放棄過它芥炭,相反漓库,我非常熱愛它,因為我一直以來都很喜歡學(xué)習(xí)园蝠,希望能學(xué)到更多的東西渺蒿,這樣遇到了具體的技術(shù)問題,可以隨時從自己積累的知識庫中找到最佳的解決方案彪薛。此外茂装,目前我在公司雖然不怎么寫代碼了,但我還是會利用自己工作閑暇之余寫一點開源項目或者代碼框架等善延。

工作過很多大大小小的公司少态,那么公司最值錢的東西是什么呢?

我認(rèn)為是實實在在做事情的程序員們易遣。

他們雖然工資不高彼妻,每天坐在位置上敲著代碼,在很多人眼中被稱為“屌絲”或“宅男”豆茫,但我認(rèn)為恰恰就是這些人侨歉,他們才是公司最有價值的人。

他們有自己的理想揩魂,希望能夠通過自己的努力为肮,從中得到那一點點所謂的成就感;

他們需要理解產(chǎn)品經(jīng)理真正的意圖肤京,把想法變成現(xiàn)實颊艳,讓產(chǎn)品真正落地茅特;

他們更容易把握細(xì)節(jié),而這些細(xì)節(jié)往往決定著產(chǎn)品的命運與成斊逭怼白修;

他們突如其來的跳槽,對我們的項目的交付有直接的影響重斑;

他們在一起工作的氣氛兵睛,能體現(xiàn)技術(shù)公司的文化與底蘊。

由此看來窥浪,對程序員的重視是相當(dāng)有必要的祖很,我們需要關(guān)心每一位程序員的職業(yè)發(fā)展,讓他們在團(tuán)隊里能夠充分地發(fā)揮出自己的能力漾脂。

我們也需要對他們倍加關(guān)注假颇,挖掘出有能力、肯吃苦骨稿、敢擔(dān)當(dāng)?shù)娜吮考Γo他們更多的機會,讓他們成為技術(shù)領(lǐng)袖坦冠。

互聯(lián)網(wǎng)技術(shù)公司需要大量這樣的程序員:

他們是一群有著技術(shù)信仰的人形耗,他們是一群熱愛編程的人,他們是一群不解決問題睡不好覺的人辙浑;

他們不是打雜的激涤,不是外包,更不是工具判呕;

他們不喜歡被忽悠倦踢,不喜歡被冷落,更不喜歡被驅(qū)動佛玄;

他們需要尊重硼一,需要培養(yǎng),更需要激情梦抢!

具體說說程序員需要具備哪些素質(zhì)般贼。

我個人是這樣理解真正的程序員的:

深愛技術(shù),一天不寫代碼手就會癢奥吩,就喜歡那種成就感哼蛆;

為了一個問題可以廢寢忘食,有時會在夢中都能寫代碼霞赫;

代碼潔癖癥患者腮介,喜歡優(yōu)雅代碼,寫代碼就像寫詩一樣端衰;

善于分析問題叠洗,能快速看清問題的本質(zhì)甘改,并動手解決它;

喜歡研究優(yōu)秀源碼灭抑,學(xué)習(xí)大師的杰作十艾,善于歸納與總結(jié);

有自己的開源項目或技術(shù)博客腾节,喜歡學(xué)習(xí)忘嫉,更喜歡分享;

會關(guān)注技術(shù)圈子的新聞動態(tài)案腺,時常會參加線下技術(shù)沙龍庆冕;

知道軟件開發(fā)不是一個人在戰(zhàn)斗,更需要的是團(tuán)隊協(xié)作劈榨;

保持良好健康的心態(tài)访递,用一顆積極向上的心去擁抱變化。

十年的職場之路堅持不易鞋既,分享下我的「IT 職場」經(jīng)驗力九。

時光飛逝耍铜,我事業(yè)中第一個十年已然結(jié)束了邑闺。在這十年里,讓我收獲了很多棕兼,跟大家分享一下我在 IT 職場方面的一些個人經(jīng)驗陡舅,不一定對每個人都實用,請大家僅作參考吧伴挚。

大家既然都是做技術(shù)的靶衍,那我們不妨先從技術(shù)這個話題開始說起吧。我要與大家分享的第一點經(jīng)驗就是:

1.把技術(shù)當(dāng)成工具

技術(shù)這東西茎芋,其實一點都不神秘颅眶,它只不過是一個工具,用這個工具可以幫助我們解決實際問題田弥,就這么簡單涛酗。

我們每天在面對技術(shù),市面上也有很多技術(shù)偷厦,真的沒有必要把這些技術(shù)都拿過來學(xué)習(xí)一遍商叹,然后想辦法找個場景去應(yīng)用它。如果真的這樣做了只泼,那么只能說明技術(shù)不是工具剖笙,而是玩具,技術(shù)不是這樣玩的请唱。

我們應(yīng)該從另一個角度來看待技術(shù)弥咪,不妨從自己的實際工作環(huán)境出發(fā)过蹂,現(xiàn)在需要什么,我們就學(xué)什么聚至,而不要漫無目的的追求一些新技術(shù)榴啸。當(dāng)然,對于新技術(shù)還是需要有所關(guān)注的晚岭,至少需要知道這個新技術(shù)是干什么用的鸥印,而且還要善于總結(jié),將有價值的技術(shù)收集起來坦报,以備將來使用库说,當(dāng)需要使用的時候再來深入研究。

人的精力是有限的片择,人的生命也是短暫的潜的,要善于利用自己的時間,合理地學(xué)習(xí)技術(shù)字管。

不要把技術(shù)看得那么重要啰挪,別把它當(dāng)回事兒,把它當(dāng)工具就行了嘲叔,它就像我們寫字的筆一樣亡呵,用鉛筆能寫字,用鋼筆一樣能寫字硫戈。

作為一名技術(shù)人員锰什,除了學(xué)習(xí)與應(yīng)用技術(shù)以外,還需要為自己做一個正確的職業(yè)規(guī)劃丁逝,清晰認(rèn)識自己究竟屬于哪種技術(shù)人才汁胆,是技術(shù)專家類型的,還是技術(shù)管理類型的霜幼。路到底該怎么走嫩码?需要自己做出決定。

在我們職業(yè)路線上罪既,最重要的人莫過于老板(我指的老板可以是公司大老板铸题,也可以是自己的頂頭上司),對待自己的老板萝衩,我也有一些經(jīng)驗:

2.把老板當(dāng)成情人

大家應(yīng)該非常清楚回挽,情人是需要浪漫的,浪漫是需要驚喜的猩谊。老板其實跟情人一樣千劈,也是需要驚喜的。我們做下屬的牌捷,要懂得找到合適的機會給老板帶來驚喜墙牌。我們跟情人談情說愛涡驮,這是一種很好的溝通方式,可別忽略了跟老板“談情說愛”喜滨,我們需要與老板保持良好的溝通捉捅,這種溝通并不僅僅是溜須拍馬。

講一個真實的故事吧虽风。記得曾經(jīng)我的一位同事棒口,技術(shù)非常好,做東西非彻枷ィ快无牵,質(zhì)量也很高,同事們都覺得他是牛人厂抖,但他從來都不懂得在老板面前表現(xiàn)自己茎毁,老板也只是覺得他是可以做事的,但升職加薪的事情往往總是不會優(yōu)先考慮他忱辅。

大家很定會問:怎樣在老板面前表現(xiàn)自己呢七蜘?其實方法有很多,由于篇幅有限墙懂,我先提供三招吧:

第一招:在給老板做程序演示的時候橡卤,不要只是單純的演示,不妨先用一個 PPT垒在,簡單表達(dá)一下自己的解決方案蒜魄,然后再做演示扔亥,這樣效果會好很多场躯。老板會認(rèn)為自己是花了心思的,是想把事情做得更好的旅挤。

第二招:把自己每天的工作簡單記錄一下,每周匯總一次,以郵件的形式發(fā)送給老板拗秘,讓老板知道自己每天在做什么贷帮。每月寫一篇本月工作總結(jié)與下月工作計劃,同樣發(fā)郵件給老板柒瓣。年底可以寫一個年終工作總結(jié)儒搭,打印出來,悄悄地放在老板的桌子上芙贫。

第三招:借匯報工作為理由搂鲫,定期請老板出去吃飯,制造面對面單獨溝通的機會磺平。在談話過程中魂仍,強調(diào)自己愿意幫助老板分擔(dān)工作壓力拐辽。

對待老板其實很簡單,只要能幫他做事擦酌,又能讓他開心俱诸,他基本上就搞定了。老板搞定了赊舶,自己的職業(yè)發(fā)展才會平步青云睁搭。但千萬別忽略了還有一群人,他們或許是自己的團(tuán)隊?wèi)?zhàn)友笼平,或許是自己的競爭對手介袜,沒錯!他們就是同事出吹。如何處理同事關(guān)系呢遇伞?以下便是我的經(jīng)驗:

3. 把同事當(dāng)成小孩

處理與同事關(guān)系,其實比處理與老板關(guān)系要稍微復(fù)雜一點捶牢,因為同事有多種身份鸠珠,他們可以是隊友,也可以是對手秋麸。如果大家在一起做同一個項目渐排,那么這樣的同事就是隊友;如果為了競爭某個項目灸蟆、崗位驯耻、資源,導(dǎo)致同級別的同事之間發(fā)生利益上的競爭炒考,那么這樣的同事就是對手可缚。

對于隊友而言,要學(xué)會主動給他們提供幫助斋枢,讓大家能夠體會到團(tuán)隊協(xié)作的氣氛帘靡,在一起學(xué)習(xí),在一起成長瓤帚,在一起分享描姚。可以時常跟大家一起聚餐戈次,買點零食讓大家品嘗轩勘。

隊友關(guān)系往往比較好處理,關(guān)鍵在于自己能否真正懂得去分享怯邪。很多技術(shù)人員绊寻,最不愿意的就是分享,因為擔(dān)心自己花了很多精力學(xué)到的知識,分分鐘就被別人學(xué)會了榛斯,自己失去了優(yōu)勢观游。這種心態(tài)最好不要在團(tuán)隊里產(chǎn)生,這樣只會讓自己變得越來越封閉驮俗,越來越渺小懂缕,隊友們也會逐漸排擠自己。

對于對手而言王凑,要想辦法讓自己成為他的兄弟搪柑,告訴他,咱們是兄弟索烹,應(yīng)該相互幫助工碾。如果有機會,可以在老板面前百姓,當(dāng)著對手的面渊额,夸獎自己的對手。做出這樣的行為垒拢,其實并不會讓老板覺得自己不如對手旬迹,而會讓老板認(rèn)為自己在用心去容納對手。大家在一起工作求类,就是一種緣分奔垦,都是跟老板打工的,真的沒有必要搞得不愉快尸疆。

其實同事就是自己的小伙伴椿猎,不妨把他們當(dāng)成是單純可愛的小孩吧,用自己的心去“收買”他們寿弱。

老板與同事犯眠,他們都是公司內(nèi)部的人,不管怎么說脖捻,大家都在同一條船上阔逼,大家可以關(guān)上門吵一架,只要事情能夠解決就行地沮。但對于我們的客戶而言,就需要用另外一種方法來處理好關(guān)系了羡亩。我是這樣認(rèn)為的:

4. 把客戶當(dāng)成病人

客戶有需求摩疑,但沒有技術(shù),而我們有技術(shù)畏铆、有經(jīng)驗雷袋、有產(chǎn)品,正好可以幫助他們實現(xiàn)需求,從而提高他們的工作效率楷怒,這樣客戶才會心甘情愿地把錢放入我們的口袋蛋勺。所以,在客戶面前鸠删,我們要表現(xiàn)出高超的專業(yè)精神抱完,不要被客戶牽著我們的鼻子走,我們在客戶面前就是技術(shù)權(quán)威刃泡,就需要這樣的自信巧娱。從服裝、言行烘贴、郵件禁添、文檔等各個方面,都要做到專業(yè)桨踪。

我們打算把自己的產(chǎn)品賣給客戶的時候老翘,千萬不要一上來就對自己的產(chǎn)品夸夸其談,這往往會讓客戶感到厭煩锻离。我們不妨先告訴客戶酪捡,他們已經(jīng)“生病”了,而且病得不輕纳账,如果不及時用藥的話逛薇,后果將不堪設(shè)想。也就是說疏虫,要讓客戶意識到自己現(xiàn)在所面臨的困境永罚,讓客戶緊張,當(dāng)他們正在思考如何應(yīng)對的時候卧秘,我們再告訴他們呢袱,“藥”已經(jīng)準(zhǔn)備好了,可以隨時服用翅敌。

要讓客戶有種雪中送炭的感覺羞福,這樣就對了,他們一定會主動了解我們的產(chǎn)品蚯涮。我們要做到這一切治专,必須花精力來分析行業(yè)現(xiàn)狀,揣測客戶老板們每天在想什么遭顶。如果有機會進(jìn)入客戶所在的公司工作一段時間张峰,相信自己的感受會更加深入。

Java 會在很長的一段時間內(nèi)是主流

為什么開發(fā)Java Web都要用框架棒旗?

我個人覺得框架有以下幾點作用:

讓開發(fā)更加高效喘批,屏蔽底層技術(shù)細(xì)節(jié),讓開發(fā)人員關(guān)注在具體業(yè)務(wù)上。

框架實際上也是一種規(guī)范饶深,可以讓每位開發(fā)人員保持同樣的編碼風(fēng)格餐曹。

會使用主流框架的開發(fā)人員,在人才市場上比較好獲取敌厘。

現(xiàn)在做Java Web開發(fā)都用哪些框架呢台猴?

常用的比如Spring MVC、Struts2 等额湘,國內(nèi)的 JFinal卿吐、Nutz 等也不錯,當(dāng)然Smart 也是一個很好的選擇锋华。

有一定Web前端開發(fā)經(jīng)驗的人嗡官,很多都會有這么個想法:那些寫框架的人好厲害,什么時候我才能寫一個自己的框架呢毯焕?有時候看看別人的框架代碼衍腥,又覺得很復(fù)雜,對此我有一些建議以及新人學(xué)習(xí)需要什么基礎(chǔ)纳猫?分享一些好的方法婆咸。

對于接觸 Java 不太久的朋友,建議按照以下幾個步驟來學(xué)習(xí):

學(xué)習(xí) Java 基礎(chǔ)語法與核心技術(shù)芜辕,包括 Servlet尚骄、JSP、JDBC 等侵续。

熟練使用流行開源框架倔丈,包括Spring、MyBatis 等状蜗。

研究開源框架源碼需五,并吸取其中優(yōu)秀的架構(gòu)。

此外轧坎,在學(xué)習(xí)的過程當(dāng)中宏邮,建議做學(xué)習(xí)筆記,最好能通過博客的方式來記錄自己的收獲缸血。

使用 Python蜜氨、Perl、PHP属百、Ruby 等腳本語言開發(fā) Web 程序记劝,跟使用 Java 開發(fā) Web 程序相比有什么不同或者優(yōu)劣?

前者屬于動態(tài)語言族扰,無需編譯,可通過解釋的方式來運行,而且 Java 需要首先通過編譯渔呵,將源文件轉(zhuǎn)為字節(jié)碼怒竿,且載入 Java 虛擬機才能運行,相對來說扩氢,Java 對環(huán)境的要求較高耕驰,但 Java 具備更強的面向?qū)ο竽芰Α4送饴疾颍琂ava 還擁有較廣的開源社區(qū)以及流行的開源中間件朦肘。因此,如果是做大型系統(tǒng)双饥,建議使用 Java 來開發(fā)媒抠,而并非那些腳本語言。

針對 Web咏花,Java趴生、PHP、Python昏翰、.NET 之中未來發(fā)展前景最好的會是什么苍匆?

我認(rèn)為 Java 在未來還會有一段很長的路,需要在語言本身上做到更加輕量級棚菊,用最少的代碼來實現(xiàn)目標(biāo)功能浸踩;PHP 相對來說會比較平穩(wěn),它的特點非常突出统求,上手快且易于開發(fā) Web 項目检碗;Python仍然不會有太大的用戶群體;.NET 加入開源社區(qū)太晚球订,且較 Java 而言并沒有太強的優(yōu)勢后裸,可能會走下坡路。

在軟件開發(fā)中有很多的設(shè)計模式冒滩,也有一些很高冷微驶,談?wù)勎覍浖O(shè)計的理解,以及讓一些設(shè)計原則接地氣开睡。

了解設(shè)計模式的朋友們因苹,想必都聽說過“六大設(shè)計原則”吧。其實最經(jīng)典的 23 種設(shè)計模式中或多或少地都在使用這些設(shè)計原則篇恒,也就是說扶檐,設(shè)計模式是站在設(shè)計原則的基礎(chǔ)之上的。所以在學(xué)習(xí)設(shè)計模式之前胁艰,很有必要對這些設(shè)計原則先做一下了解款筑。

GoF(四人幫)智蝠,傳說中的四位大神們,他們聯(lián)手搞出了一套設(shè)計模式奈梳,堪稱 OOD(面向?qū)ο笤O(shè)計)的經(jīng)典之作杈湾!震驚了整個軟件開發(fā)領(lǐng)域。但這四個老家伙非常怪異攘须,總是喜歡顯擺一些高深的理論漆撞,甚至有時候不說人話,十分讓人費解于宙。

除了最經(jīng)典的六大設(shè)計原則以外浮驳,還有一些其他的設(shè)計原則也非常重要。我將盡可能地解釋這些晦澀的理論捞魁,希望看完之后至会,會讓您對這些設(shè)計原則稍微加深一些理解。若有不正確的地方署驻,懇請大家指正奋献!

六大設(shè)計原則

先看一幅圖吧:

這幅圖清晰地表達(dá)了六大設(shè)計原則,但僅限于它們叫什么名字而已旺上,它們具體是什么意思呢瓶蚂?下面我將從原文、譯文宣吱、理解窃这、應(yīng)用,這四個方面分別進(jìn)行闡述征候。

1.單一職責(zé)原則(Single Responsibility Principle - SRP)

原文:There should never be more than one reason for a class to change.?

譯文:永遠(yuǎn)不應(yīng)該有多于一個原因來改變某個類杭攻。?

理解:對于一個類而言,應(yīng)該僅有一個引起它變化的原因疤坝。說白了就是兆解,不同的類具備不同的職責(zé),各施其責(zé)跑揉。這就好比一個團(tuán)隊锅睛,大家分工協(xié)作,互不影響历谍,各做各的事情现拒。?

應(yīng)用:當(dāng)我們做系統(tǒng)設(shè)計時,如果發(fā)現(xiàn)有一個類擁有了兩種的職責(zé)望侈,那就問自己一個問題:可以將這個類分成兩個類嗎印蔬?如果真的有必要,那就分吧脱衙。千萬不要讓一個類干的事情太多侥猬!

2.開放封閉原則(Open Closed Principle - OCP)

原文:Software entities like classes, modules and functions should be open for extension but closed for modifications.?

譯文:軟件實體例驹,如:類、模塊與函數(shù)陵究,對于擴(kuò)展應(yīng)該是開放的眠饮,但對于修改應(yīng)該是封閉的奥帘。?

理解:簡言之铜邮,對擴(kuò)展開放,對修改封閉寨蹋。換句話說松蒜,可以去擴(kuò)展類,但不要去修改類已旧。?

應(yīng)用:當(dāng)需求有改動秸苗,要修改代碼了,此時您要做的是运褪,盡量用繼承或組合的方式來擴(kuò)展類的功能惊楼,而不是直接修改類的代碼。當(dāng)然秸讹,如果能夠確保對整體架構(gòu)不會產(chǎn)生任何影響檀咙,那么也沒必要搞得那么復(fù)雜了,直接改這個類吧璃诀。

3.里氏替換原則(Liskov Substitution Principle - LSP)

原文:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.?

譯文:使用基類的指針或引用的函數(shù)弧可,必須是在不知情的情況下,能夠使用派生類的對象劣欢。?

理解:父類能夠替換子類棕诵,但子類不一定能替換父類。也就是說凿将,在代碼中可以將父類全部替換為子類校套,程序不會報錯,也不會在運行時出現(xiàn)任何異常牧抵,但反過來卻不一定成立笛匙。?

應(yīng)用:在繼承類時,務(wù)必重寫(Override)父類中所有的方法灭忠,尤其需要注意父類的 protected 方法(它們往往是讓您重寫的)膳算,子類盡量不要暴露自己的 public 方法供外界調(diào)用。

該原則由麻省理工學(xué)院的 Barbara Liskov 女士提出弛作,她是美國第一位獲取計算機博士學(xué)位的女性涕蜂,曾經(jīng)也獲得過計算機圖靈獎。

4.最少知識原則(Least Knowledge Principle - LKP)

原文:Only talk to you immediate friends.?

譯文:只與你最直接的朋友交流映琳。?

理解:盡量減少對象之間的交互机隙,從而減小類之間的耦合蜘拉。簡言之,一定要做到:低耦合有鹿,高內(nèi)聚旭旭。?

應(yīng)用:在做系統(tǒng)設(shè)計時,不要讓一個類依賴于太多的其他類葱跋,需盡量減小依賴關(guān)系持寄,否則,您死都不知道自己怎么死的娱俺。

該原則也稱為“迪米特法則(Law of Demeter)”稍味,由 Ian Holland 提出。這個人不太愿意和陌生人說話荠卷,只和他走得最近的朋友們交流模庐。

5.接口隔離原則(Interface Segregation Principle - ISP)

原文:The dependency of one class to another one should depend on the smallest possible interface.?

譯文:一個類與另一個類之間的依賴性,應(yīng)該依賴于盡可能小的接口油宜。?

理解:不要對外暴露沒有實際意義的接口掂碱。也就是說,接口是給別人調(diào)用的慎冤,那就不要去為難別人了疼燥,盡可能保證接口的實用性吧。她好粪薛,我也好悴了。?

應(yīng)用:當(dāng)需要對外暴露接口時,需要再三斟酌违寿,如果真的沒有必要對外提供的湃交,就刪了吧。一旦您提供了藤巢,就意味著搞莺,您將來要多做一件事情,何苦要給自己找事做呢掂咒。

6.依賴倒置原則(Dependence Inversion Principle - DIP)

原文:High level modules should not depends upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.?

譯文:高層模塊不應(yīng)該依賴于低層模塊才沧,它們應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細(xì)節(jié)绍刮,細(xì)節(jié)應(yīng)該依賴于抽象温圆。?

理解:應(yīng)該面向接口編程,不應(yīng)該面向?qū)崿F(xiàn)類編程孩革。面向?qū)崿F(xiàn)類編程岁歉,相當(dāng)于就是論事,那是正向依賴(正常人思維)膝蜈;面向接口編程锅移,相當(dāng)于通過事物表象來看本質(zhì)熔掺,那是反向依賴,即依賴倒置(程序員思維)非剃。?

應(yīng)用:并不是說置逻,所有的類都要有一個對應(yīng)的接口,而是說备绽,如果有接口券坞,那就盡量使用接口來編程吧。

將以上六大原則的英文首字母拼在一起就是 SOLID(穩(wěn)定的)疯坤,所以也稱之為 SOLID 原則报慕。

只有滿足了這六大原則,才能設(shè)計出穩(wěn)定的軟件架構(gòu)压怠!但它們畢竟只是原則,只是四人幫給我們的建議飞苇,有些時候我們還是要學(xué)會靈活應(yīng)變菌瘫,千萬不要生搬硬套,否則只會把簡單問題復(fù)雜化布卡,切記雨让!

補充設(shè)計原則

1.組合/聚合復(fù)用原則(Composition/Aggregation Reuse Principle - CARP)

當(dāng)要擴(kuò)展類的功能時,優(yōu)先考慮使用組合忿等,而不是繼承栖忠。這條原則在 23 種經(jīng)典設(shè)計模式中頻繁使用,如:代理模式贸街、裝飾模式庵寞、適配器模式等⊙Ψ耍可見江湖地位非常之高捐川!

2.無環(huán)依賴原則(Acyclic Dependencies Principle - ADP)

當(dāng) A 模塊依賴于 B 模塊,B 模塊依賴于 C 模塊逸尖,C 依賴于 A 模塊古沥,此時將出現(xiàn)循環(huán)依賴。在設(shè)計中應(yīng)該避免這個問題娇跟,可通過引入“中介者模式”解決該問題岩齿。

3.共同封裝原則(Common Closure Principle - CCP)

應(yīng)該將易變的類放在同一個包里,將變化隔離出來苞俘。該原則是“開放-封閉原則”的延生盹沈。

4.共同重用原則(Common Reuse Principle - CRP)

如果重用了包中的一個類,那么也就相當(dāng)于重用了包中的所有類苗胀,我們要盡可能減小包的大小襟诸。

5.好萊塢原則(Hollywood Principle - HP)

好萊塢明星的經(jīng)紀(jì)人一般都很忙瓦堵,他們不想被打擾,往往會說:Don’t call me, I’ll call you. 翻譯為:不要聯(lián)系我歌亲,我會聯(lián)系你菇用。對應(yīng)于軟件設(shè)計而言,最著名的就是“控制反轉(zhuǎn)”(或稱為“依賴注入”)陷揪,我們不需要在代碼中主動的創(chuàng)建對象惋鸥,而是由容器幫我們來創(chuàng)建并管理這些對象。

其他設(shè)計原則

1.不要重復(fù)你自己(Don’t repeat yourself - DRY)

不要讓重復(fù)的代碼到處都是悍缠,要讓它們足夠的重用卦绣,所以要盡可能地封裝。

2.保持它簡單與傻瓜(Keep it simple and stupid - KISS)

不要讓系統(tǒng)變得復(fù)雜飞蚓,界面簡潔滤港,功能實用,操作方便趴拧,要讓它足夠的簡單溅漾,足夠的傻瓜。

3.高內(nèi)聚與低耦合(High Cohesion and Low Coupling - HCLC)

模塊內(nèi)部需要做到內(nèi)聚度高著榴,模塊之間需要做到耦合度低添履。

4.慣例優(yōu)于配置(Convention over Configuration - COC)

盡量讓慣例來減少配置,這樣才能提高開發(fā)效率脑又,盡量做到“零配置”暮胧。很多開發(fā)框架都是這樣做的。

5.命令查詢分離(Command Query Separation - CQS)

在定義接口時问麸,要做到哪些是命令往衷,哪些是查詢,要將它們分離口叙,而不要揉到一起炼绘。

6.關(guān)注點分離(Separation of Concerns - SOC)

將一個復(fù)雜的問題分離為多個簡單的問題,然后逐個解決這些簡單的問題妄田,那么這個復(fù)雜的問題就解決了俺亮。難就難在如何進(jìn)行分離。

7.契約式設(shè)計(Design by Contract - DBC)

模塊或系統(tǒng)之間的交互疟呐,都是基于契約(接口或抽象)的脚曾,而不要依賴于具體實現(xiàn)。該原則建議我們要面向契約編程启具。

8.你不需要它(You aren’t gonna need it - YAGNI)

不要一開始就把系統(tǒng)設(shè)計得非常復(fù)雜本讥,不要陷入“過度設(shè)計”的深淵。應(yīng)該讓系統(tǒng)足夠的簡單,而卻又不失擴(kuò)展性拷沸,這是其中的難點色查。。

一個成功的項目撞芍,離不開每個人的努力秧了,分享下我曾經(jīng)的項目管理經(jīng)驗。

給大家提出以下 10 點建議及其目標(biāo):

Sprint 第一天序无,需要將目標(biāo)定義清楚验毡,并讓團(tuán)隊所有人都知道「確保建立一致的目標(biāo)并使之明確」;

若出現(xiàn)需求變更帝嗡,則優(yōu)先排到下次迭代晶通,特殊情況需特殊處理「確保本次迭代可以按時完工」;

Scrum Master 將迭代中的需求分解為任務(wù)哟玷,每個任務(wù)只能有一個任務(wù)負(fù)責(zé)人狮辽,且不超過一個人天「確保每日任務(wù)可評估」;

讓 Product Owner 直接與相關(guān)開發(fā)人員確定需求碗降,Scrum Master 需一同參與「確保需求與實現(xiàn)不會發(fā)生偏差」隘竭;

每日定時站會,時長不超過 15 分鐘讼渊,規(guī)模不要太大「確保任務(wù)完成情況與計劃保持一致」;

每日進(jìn)行一次代碼評審尊剔,由 Scrum Master 負(fù)責(zé)爪幻,并在次日將評審結(jié)果通知給相關(guān)開發(fā)人員「確保代碼質(zhì)量不要下降」;

各個團(tuán)隊的 Scrum Master 保持每日溝通一次须误,時間不要超過 15 分鐘「確保項目管理不會出現(xiàn)風(fēng)險」挨稿;

每次迭代結(jié)束,讓大家稍微放松一下京痢,可提供一些團(tuán)隊活動奶甘,比如聚餐「確保團(tuán)隊能夠更加凝聚」;

Scrum Master 需要給團(tuán)隊一些承諾祭椰,比如項目獎金或特殊福利等「確保團(tuán)隊更加有激情」臭家;

對于情緒異常的員工,Scrum Master 需及時與其溝通「確保不要讓一個人的情緒影響整個團(tuán)隊」方淤;

此外钉赁,作為項目管理者,需要不斷在團(tuán)隊中加強以下5點文化:

方向一致

當(dāng)面溝通

全情投入

充分信任

說到做到

真正的開源并非只是代碼的開源携茂,而是思想的開源

談?wù)勎覍Α搁_源」的看法你踩,國內(nèi)的開源的現(xiàn)在如何,對比國外呢?

我個人認(rèn)為带膜,真正的開源并非只是代碼的開源吩谦,而是思想的開源。在做開源項目之前膝藕,建議能將自己的想法共享出來式廷,而不是 埋頭閉門造車。我不反對“重造輪子”束莫,因為我們需要更好的輪子懒棉,輪子好了車子才能跑得快。凡是有利也有弊览绿,我們也不能盲目地選擇開源技術(shù)策严,因為并不是適合 別人的技術(shù)就適合自己,而是需要根據(jù)自身的需求饿敲,選擇最適合的開源技術(shù)妻导,搭建恰如其分的架構(gòu)。

有大量的新技術(shù)怀各,我首先會去關(guān)注它倔韭,了解它是做什么的,可以解決什么問題瓢对,但我一開始絕不會去深入研究它寿酌,更不會去看它的源碼,因為一旦遇到這方面的需求場景硕蛹,我就會從這個“知識庫”中去尋找最好的解決方案醇疼,如果仍然尋找不到最合適的開源技術(shù),我才會嘗試自己去實現(xiàn)法焰。

技術(shù)人的歸途

走技術(shù)這條路秧荆,歸途是什么?是否轉(zhuǎn)型又該如何抉擇呢埃仪?

至少有好幾條路線是可以走的乙濒,比如:深入技術(shù)、轉(zhuǎn)型做產(chǎn)品卵蛉、轉(zhuǎn)型做管理等颁股,需要根據(jù)自己的特長和性格來選擇,做自己喜歡的事情毙玻。

從技術(shù)轉(zhuǎn)管理豌蟋,對自身的要求比較高,說具體點桑滩,需要看自己的情商梧疲,為人處世的經(jīng)驗允睹,與人溝通的技巧,自己也需要有足夠的胸懷幌氮,去包容一些事情缭受,還需要自己有足夠的人格魅力去吸引別人,讓別人愿意跟著你一起做事该互。管理有些東西是很難從書本上學(xué)到的米者,但一些經(jīng)典的管理理論是必須要去學(xué)的。

相比較而言宇智,繼續(xù)深入技術(shù)或者從技術(shù)轉(zhuǎn)產(chǎn)品會容易一些了蔓搞,因為很多時候都不太需要與人打交道。

更多的干貨也會在我們的大神交流群:561614305? 里面會有定期的資料分享和大神之間交流的火花随橘。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喂分,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子机蔗,更是在濱河造成了極大的恐慌蒲祈,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝嘁,死亡現(xiàn)場離奇詭異梆掸,居然都是意外死亡,警方通過查閱死者的電腦和手機牙言,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門酸钦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咱枉,你說我怎么就攤上這事钝鸽。” “怎么了庞钢?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長因谎。 經(jīng)常有香客問我基括,道長,這世上最難降的妖魔是什么财岔? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任风皿,我火速辦了婚禮,結(jié)果婚禮上匠璧,老公的妹妹穿的比我還像新娘桐款。我一直安慰自己,他們只是感情好夷恍,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布魔眨。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪遏暴。 梳的紋絲不亂的頭發(fā)上侄刽,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音朋凉,去河邊找鬼州丹。 笑死,一個胖子當(dāng)著我的面吹牛杂彭,可吹牛的內(nèi)容都是我干的墓毒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼亲怠,長吁一口氣:“原來是場噩夢啊……” “哼所计!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赁炎,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醉箕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后徙垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讥裤,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年姻报,在試婚紗的時候發(fā)現(xiàn)自己被綠了己英。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡吴旋,死狀恐怖损肛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荣瑟,我是刑警寧澤治拿,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站笆焰,受9級特大地震影響劫谅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嚷掠,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一捏检、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧不皆,春花似錦贯城、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲫骗。三九已至,卻和暖如春悲雳,著一層夾襖步出監(jiān)牢的瞬間挎峦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工合瓢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留坦胶,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓晴楔,卻偏偏與公主長得像顿苇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子税弃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容