介紹
入行已久增蹭,中毒很深。和那些職場(chǎng)新人相比較磅摹,已經(jīng)顯得“老邁”了很多滋迈,精力霎奢、體力都已經(jīng)從優(yōu)勢(shì)變成了劣勢(shì)。但是饼灿,身為“懶惰”的程序員幕侠,如何才能可持續(xù)地保持自己的這份“自豪感”呢,畢竟這是個(gè)殘酷的世界——沒(méi)人會(huì)關(guān)心你的過(guò)去碍彭,只在意你是否還有戰(zhàn)斗力晤硕!
有核心競(jìng)爭(zhēng)力的人,才會(huì)有持續(xù)的戰(zhàn)斗力庇忌!為了不讓自己過(guò)快窗骑、過(guò)于凄慘地被淘汰,我每天都在磨練漆枚、探索自己的核心競(jìng)爭(zhēng)力创译。各位看客,你的每一天都是怎么度過(guò)的呢墙基?
?測(cè)試
一直對(duì)測(cè)試這份工作了解很少软族,雖然身為開(kāi)發(fā)的屌絲是經(jīng)常和測(cè)試MM有工作上的交集。很多情況下残制,我們止步于功能完成立砸,沒(méi)有報(bào)錯(cuò),Bug庫(kù)里沒(méi)有自己的名字初茶;但這遠(yuǎn)遠(yuǎn)不夠颗祝!
對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),設(shè)計(jì)恼布、編碼完成后螺戳,還要做“自測(cè)”——點(diǎn)點(diǎn)頁(yè)面,單元測(cè)試折汞。我們大部分做到的是倔幼,通過(guò)界面來(lái)操作,然后查看生成的數(shù)據(jù)是否符合要求爽待;或者只是看看頁(yè)面上有沒(méi)有報(bào)錯(cuò)损同。但,開(kāi)發(fā)人員的自測(cè)其實(shí)還可以做的更加深入和細(xì)致鸟款。
頁(yè)面膏燃、瀏覽器控制臺(tái)、服務(wù)器日志上都不能有未預(yù)料到的異常報(bào)錯(cuò)何什,或者本來(lái)應(yīng)該有異常但是又沒(méi)有給出異常提示或者日志组哩。之后,再到數(shù)據(jù)庫(kù)中核實(shí)數(shù)據(jù)是否符合預(yù)期。至于單元測(cè)試嘛禁炒,大家都在喊著要做而咆,也都認(rèn)為非常地重要,但沒(méi)有幾個(gè)人或者團(tuán)隊(duì)做到了幕袱。很多情況下暴备,他們寫(xiě)的程序?qū)Α皽y(cè)試”并不友好,在編碼過(guò)程中完全沒(méi)有思考該如何進(jìn)行測(cè)試——因?yàn)槊峭悖覀儾涣私鉁y(cè)試到底應(yīng)該怎么進(jìn)行涯捻。
這里,我提出一個(gè)概念望迎,先設(shè)計(jì)障癌,再思考如何測(cè)試,最后編碼辩尊。
每一個(gè)開(kāi)發(fā)人員涛浙,都應(yīng)該是一個(gè)非常出色的測(cè)試。功能摄欲、WebUI轿亮、性能、安全胸墙、壓力測(cè)試等等我注,我們一個(gè)都不能少。自己寫(xiě)出來(lái)的東西迟隅,居然不會(huì)測(cè)試但骨,也不知道實(shí)際的效果(性能)是什么情況,怎么好意思說(shuō)這個(gè)是你做的智袭。
寫(xiě)一個(gè)自動(dòng)化測(cè)試平臺(tái)奔缠,然后用這個(gè)平臺(tái)來(lái)對(duì)自身做WebUI測(cè)試。另外补履,性能添坊、安全測(cè)試都必須上。JMeter箫锤、Selenium、SoapUI都是應(yīng)該下功夫搞定的雨女。下面是我開(kāi)源的自動(dòng)化測(cè)試平臺(tái)的項(xiàng)目源碼谚攒,歡迎拍磚!
https://github.com/LinuxSuRen/autotest.platform
?源碼
閱讀源碼將不再是件神秘的事情氛堕,不高深馏臭,也不值得吹噓,我們必須每天看、經(jīng)忱ㄈ澹看绕沈。因?yàn)椋覀円呀?jīng)到了必須盡快地掌握技巧帮寻,就和高中的語(yǔ)文閱讀理解一樣乍狐,抓重點(diǎn)、弄明白中心思想固逗;提高閱讀過(guò)程中的腦容量——有層次浅蚪,看結(jié)構(gòu),挑刺烫罩,要無(wú)恥地把別人的東西統(tǒng)統(tǒng)變成自己的惜傲,哈哈!是不是很邪惡贝攒。
打算走技術(shù)路線的人盗誊,一定是要保持在最前線,讀碼隘弊、編碼浊伙、調(diào)碼一個(gè)都不能少。
?審查
說(shuō)到代碼審查长捧、重構(gòu)嚣鄙,有些人不屑一顧,認(rèn)為這是每個(gè)程序員的自我欺騙串结。而我要說(shuō)的是哑子,有這種想法的人,是因?yàn)槟阕龅牟粔驅(qū)I(yè)——至少是沒(méi)有專業(yè)精神肌割,沒(méi)有工匠精神卧蜓。當(dāng)然,如果你是在給“別人”寫(xiě)代碼把敞,環(huán)境不容許你有重構(gòu)弥奸、審查代碼的時(shí)間,是情有可原的奋早;但盛霎,你為什么不給“自己”寫(xiě)點(diǎn)代碼呢,難道就完全沒(méi)有時(shí)機(jī)嗎耽装。
根據(jù)項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn)來(lái)說(shuō)愤炸,有以下幾種情況:
1.看著別人寫(xiě)的代碼很爛,自己又想不出更好的辦法來(lái)改進(jìn)掉奄,周圍又沒(méi)有可供咨詢规个、學(xué)習(xí)的前輩(或者覺(jué)得沒(méi)有這個(gè)必要),所以就“同流合污”。
2.看著別人的代碼很爛诞仓,很難改缤苫,但還是要努力跟上“爛”的節(jié)奏,盡力把任務(wù)完成墅拭。有的領(lǐng)導(dǎo)認(rèn)為這種人很上進(jìn)活玲,不怕困難,值得表?yè)P(yáng)帜矾∫沓妫可是,你在想想屡萤,他除了把之前“爛”(可讀性差珍剑、難以維護(hù))的代碼變的更多以外,有什么貢獻(xiàn)的死陆;關(guān)鍵是招拙,他哪天離職了,又有新人補(bǔ)充進(jìn)來(lái)怎么辦措译?這部分代碼會(huì)漸漸地變成誰(shuí)都不敢動(dòng)的地方别凤。
3.我能把功能、任務(wù)完成就不錯(cuò)了领虹,人家之前也寫(xiě)了那么多的代碼和功能规哪,也能使用啊,大家都聽(tīng)不容易的塌衰。
4.項(xiàng)目經(jīng)理說(shuō)诉稍,不要輕易對(duì)代碼或者模塊進(jìn)行重構(gòu)甚至改進(jìn),這樣的風(fēng)險(xiǎn)很大最疆,測(cè)試的同事們還會(huì)因?yàn)槟愕母膭?dòng)不知道要加多少班杯巨。
所以說(shuō),在實(shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中努酸,想要做到代碼質(zhì)量的持續(xù)改進(jìn)是非常低困難的服爷,主客觀因素都是飽滿的。
在這里获诈,我給希望能做到精益求精仍源、持續(xù)改進(jìn)成長(zhǎng)的童鞋們提一個(gè)建議:做開(kāi)源項(xiàng)目吧。你是項(xiàng)目的發(fā)起人烙荷,你就是架構(gòu)師镜会、項(xiàng)目經(jīng)理、需求终抽、開(kāi)發(fā)、測(cè)試,甚至你還是銷售昼伴、運(yùn)維匾旭;你將有機(jī)會(huì)接觸到項(xiàng)目的全流程,你將會(huì)有權(quán)利來(lái)做任何程度的改進(jìn)圃郊、重構(gòu)价涝,甚至,你可以把項(xiàng)目推翻持舆,重來(lái)一次色瘩。只要你的熱情是飽滿的!當(dāng)然逸寓,假設(shè)某天居兆,你發(fā)起的開(kāi)源項(xiàng)目做大了,也是不能隨隨便便地做改變竹伸;但是泥栖,從你剛進(jìn)入開(kāi)源的事業(yè)來(lái),到你能搞大一個(gè)項(xiàng)目勋篓,路還很長(zhǎng)吧享;你真的走到那一步的生活,也就真的成了架構(gòu)師了譬嚣,你的項(xiàng)目也能做到高內(nèi)聚低耦合钢颂。怎么樣,有興趣嗎拜银。
在我GitHub中的項(xiàng)目殊鞭,都會(huì)不定期地進(jìn)行代碼審查,只為了能做到更專業(yè)盐股!歡迎監(jiān)督钱豁、拍磚。
?部署
說(shuō)到項(xiàng)目部署疯汁,有的人可能認(rèn)為是運(yùn)維或者實(shí)施的人應(yīng)該去做的事情牲尺。但我還是那句話男杈,連寫(xiě)好的程序都不會(huì)部署越妈,你還好意思說(shuō)這是你寫(xiě)的嗎驰徊?
項(xiàng)目部署絕非是件簡(jiǎn)單的事情僵蛛,想想有多少人是死在環(huán)境的路上革砸。雖然吨岭,Docker的出世就是為了解決環(huán)境的問(wèn)題休溶,但它本身不也需要一個(gè)環(huán)境嗎府阀?持續(xù)集成漩仙,應(yīng)用虛擬機(jī)搓茬,構(gòu)建工具我們都是要熟練地使用犹赖。在Windows上編碼習(xí)慣了的人,Linux應(yīng)該是必須會(huì)的吧卷仑。
首當(dāng)其沖的峻村,是JVM的部署或者安裝了。Windows和Linux下的Java環(huán)境變量的配置锡凝,PATH粘昨、CLASSPATH、JAVA_HOME等變量的準(zhǔn)確含義必須要弄明白窜锯。另外张肾,Java的版本也是很重要的一塊。每個(gè)程序都會(huì)有一個(gè)支持的最低版本锚扎。
?分享
我不是個(gè)多么高尚的人吞瞪,但隨著閱歷的增長(zhǎng)和對(duì)生活的理解,事實(shí)就是這樣的——我們每個(gè)人都對(duì)周圍的人工秩、家庭尸饺、生活應(yīng)該肩負(fù)起一定的責(zé)任。好了助币,這是個(gè)虛的理由浪听。你可以忽略不管。但是眉菱,下面我再給出一個(gè)自私的理由迹栓,誰(shuí)讓我骨子里總是有自私的成分呢,哈哈俭缓。
如果您以為您對(duì)某個(gè)技術(shù)或者問(wèn)題已經(jīng)掌握的很好克伊,甚至已經(jīng)可以成為這方面的專家了,那么华坦,這個(gè)結(jié)論一定是有待考證的愿吹。您一定也不希望自己是個(gè)自以為是,井底之蛙的人(假設(shè)碰巧是的話惜姐,請(qǐng)繞道)犁跪,那么我推薦一個(gè)可以驗(yàn)證您是否“權(quán)威”的方法。那就是去給別人講歹袁,講給你周圍的人坷衍,講給圈子里的人,講給外行抽熱鬧的人条舔。
假如枫耳,您能講明白了,大家伙也都聽(tīng)明白孟抗,而且都感覺(jué)有所收獲的時(shí)候迁杨,您才可以誠(chéng)惶誠(chéng)恐地認(rèn)為自己也許是某方面的專家或者權(quán)威了钻心。或許仑最,到這時(shí)候扔役,您會(huì)覺(jué)得自己只是個(gè)剛剛跨過(guò)這個(gè)領(lǐng)域的小學(xué)童而已帆喇。
分享警医,除了可以讓您成長(zhǎng),還可以發(fā)揮余熱——照亮別人坯钦。溫故而知新预皇,也許就是這個(gè)道理。
但是婉刀,到這里就算完事了嗎吟温。記住一句話,學(xué)習(xí)和成長(zhǎng)之路是沒(méi)有盡頭的突颊。我們除了自己要變得喜歡做分享以外鲁豪,還得努力感染別人也如此這般。我認(rèn)為律秃,一個(gè)好的團(tuán)隊(duì)的特點(diǎn)之一爬橡,應(yīng)該包括熱衷于分享,熱衷于互相幫助成長(zhǎng)棒动!
?問(wèn)題跟蹤
Jira是比較優(yōu)秀的一款問(wèn)題(bug)跟蹤管理系統(tǒng)糙申,可以推薦給各位使用(當(dāng)然,這是個(gè)收費(fèi)的)船惨。
如果柜裸,您已經(jīng)做到了這個(gè)年頭上,不論您是否已經(jīng)走到管理崗位上粱锐,都應(yīng)該多花點(diǎn)時(shí)間來(lái)把這個(gè)(或者其他的問(wèn)題管理工具)玩的熟練了疙挺。我這里有個(gè)比較自私的理由,您遲早會(huì)用到這個(gè)的怜浅,不然您到時(shí)候怎么去管理铐然、帶領(lǐng)一個(gè)團(tuán)隊(duì)來(lái)干硬仗。
我認(rèn)為海雪,不管是項(xiàng)目經(jīng)理還是開(kāi)發(fā)技術(shù)經(jīng)理锦爵,都已經(jīng)對(duì)當(dāng)前項(xiàng)目中的所有問(wèn)題都掌握的很清楚。包括:?jiǎn)栴}的數(shù)量奥裸、嚴(yán)重程度的分布险掀、問(wèn)題負(fù)責(zé)人的分布等。
?爭(zhēng)
如果您有幸已經(jīng)到了管理崗位湾宙,最應(yīng)該做的事情就是給團(tuán)隊(duì)里的每一位成員極力地爭(zhēng)取樟氢。更多有關(guān)這方面的看法冈绊,請(qǐng)參考《團(tuán)隊(duì)建設(shè)》。
?本系列文章
Java開(kāi)發(fā)成長(zhǎng)之路第一年
Java開(kāi)發(fā)成長(zhǎng)之路第二年
Java開(kāi)發(fā)成長(zhǎng)之路第三年
Java開(kāi)發(fā)成長(zhǎng)之路第四年
Java開(kāi)發(fā)成長(zhǎng)之路第五年
Java開(kāi)發(fā)成長(zhǎng)之路第六年
Java開(kāi)發(fā)成長(zhǎng)之路第七年