<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 天天寫(xiě)業(yè)務(wù)代碼的那些年,我們是如何成長(cháng)過(guò)來(lái)的

天天寫(xiě)業(yè)務(wù)代碼的那些年,我們是如何成長(cháng)過(guò)來(lái)的

作者: 時(shí)間:2017-04-19 來(lái)源:網(wǎng)絡(luò ) 收藏

  比起寫(xiě)業(yè)務(wù)更不幸的是,主要工作是修 Bug,bug,buG, bUg。

本文引用地址:http://dyxdggzs.com/article/201704/346804.htm

  在一家大的公司里,不同的人總會(huì )有不同的運氣:

  運氣好的人遇上一個(gè)好的項目,升職加薪,從此就走上了人生的巔峰。

  運氣差的人攤上一個(gè)差的項目,升不了職,少加了薪,并且還獲得不了技術(shù)成長(cháng)。

  我剛畢業(yè)那會(huì )兒,所在團隊的主要工作是,維護一個(gè)『又老又舊』的系統。比起寫(xiě)業(yè)務(wù)更不幸的是,我們的主要工作是修 Bug,bug,buG, bUg。

  那一年多里,盡管都是維護舊系統和少量的新需求,我們還是在飛速的成長(cháng)~~。而來(lái)源主要是:

  組內技術(shù)活動(dòng)。

  花時(shí)間投入練習。

  假想項目的重構。

  當你在有限的條件下,還能做出一定的成績(jì),到底還是相當有成就感的。

  只修 Bug 是怎樣的一種體驗

  在這樣的項目里:

  工作一個(gè)月時(shí),你打開(kāi) Backlog,看看需求卡,發(fā)現那張需要三個(gè)人天的卡,好像會(huì )更有挑戰一些。

  工作兩個(gè)月時(shí):你打開(kāi) Backlog,看看需求卡,發(fā)現完成這卡只是時(shí)間問(wèn)題。

  工作三個(gè)月時(shí):你打開(kāi) Backlog,看看需求卡,發(fā)現清清楚楚地知道修改哪一行。

  有一天,業(yè)務(wù)人員來(lái)了一個(gè)新的需求。雖然只是加上一個(gè)新的導航,但是你總會(huì )小開(kāi)心一會(huì )兒。

  可你來(lái)到這樣的項目時(shí),你總會(huì )想著(zhù)離開(kāi),向自己的 Buddy、PM 、Sponsor 訴說(shuō)??上?,你只是一個(gè)畢業(yè)生,太年輕了。對于你來(lái)說(shuō)有挑戰性的項目,不會(huì )考慮要你的。在你的感覺(jué)里,那種『自己是大公司的輪子』的感覺(jué)就特別強烈。多你一個(gè)不多,少你一個(gè)不少。你走了也不會(huì )影響這個(gè)項目,畢竟招一個(gè)人來(lái)修 bug,還是蠻輕松的。因此,這個(gè)項目走了一個(gè)又一個(gè)技術(shù)好的人,卻也來(lái)不了一個(gè)技術(shù)好的人。

  時(shí)間一久,每個(gè)人都充滿(mǎn)了危機感。我們總是擔心:當你換到另外一個(gè)項目的時(shí)候,別的項目 PM 會(huì )考慮你么——因為你是來(lái)自這個(gè)沒(méi)有挑戰性的項目。這個(gè)時(shí)候,你已經(jīng)無(wú)路可走了,你必須去提高你自己。

  當別人救不了你的時(shí)候,你只能自救。當別人救不了你們的時(shí)候,你們也只能自救。幸運的是,我們當時(shí)還有足夠的時(shí)間,可以提高項目組的水平。于是,我們對組織了各種的組內技術(shù)分享、workshop、培訓等等。

  當你有強烈的改變意識的時(shí)候,那么事件就會(huì )變得很簡(jiǎn)單。真正可怕的是溫水煮青蛙式的,而當你面對的是溫水,你總會(huì )不斷嘗試去離開(kāi)。

  組內技術(shù)活動(dòng)

  當你們項目無(wú)聊的時(shí)候,總會(huì )空余一些時(shí)間。上進(jìn)一點(diǎn),就會(huì )創(chuàng )造一些學(xué)習的條件。有了條件,那么剩下的就是靠人為了。

  于是乎,我們在每周挑取了兩個(gè)時(shí)間,做一些技術(shù)的事情。包含了下面的一些內容:

  技術(shù)分享。

  workshop。

  kata。

  不同的活動(dòng)都有不同的目的,有的可以提高演講者的技術(shù)能力,有的則是可以一起提升能力。下面就讓我們詳細了解一下不同的活動(dòng)。

  技術(shù)分享

  想必大家都已經(jīng)知道這個(gè)是什么了~~。當時(shí)的情況,大概是我們七個(gè)人里,每周會(huì )有兩次技術(shù)分享。分享的主題會(huì )比較廣泛:

  你最近在玩的技術(shù)棧。當你們所用的項目技術(shù)棧,比較老舊的時(shí)候,就想不斷地去嘗試新的技術(shù)。在工作之外,便會(huì )去玩一些『新鮮』的技術(shù)棧(坑)。它就像是一股清流,即使不能幫你清除舊的污水,也能讓人們看到一絲希望。而且除了能提升團隊的視野,還可以將之視為替換現有架構的探索。

  項目相關(guān)的技術(shù)及業(yè)務(wù)。在沒(méi)有結對編程的項目里,共享知識對于團隊來(lái)說(shuō)是一個(gè)頭疼的問(wèn)題,而技術(shù)分享就是最簡(jiǎn)單的方式。不過(guò),對于新人來(lái)說(shuō),讓他們做相關(guān)的技術(shù)分享才是最好的方式。這也視作為我們對新人的考察:

  對于項目的了解程度

  找到缺少的相關(guān)知識

  培養新人的表達能力

  在項目上,這幾乎是每個(gè)新人都會(huì )經(jīng)歷的一個(gè)分享~~。

  特定主題的技術(shù)分享。即,我們限定好一個(gè)大的主題,每個(gè)人挑選一個(gè)特定的主題來(lái)分享,它可以人為地提高整個(gè)組在某一領(lǐng)域的水平。當時(shí)我們做過(guò) SOLID、設計模式、前端相關(guān)等特定主題的分享——每個(gè)人挑選設計模式中的一個(gè)模式,然后做相關(guān)的技術(shù)分享。當你做分享的時(shí)候,你對這模式就比較了解;而別人做分享的時(shí)候,也能引發(fā)你的思考。由于這些主題之間的相關(guān)性比較強,它可以加深對這一領(lǐng)域的印象。

  其他雜七雜八的內容。過(guò)多的技術(shù)分享,可能會(huì )導致大家精疲力盡,因此就會(huì )有一些技術(shù)之外的分享。比如,你喜歡的各種動(dòng)漫啊、知乎上流行的程序員女裝啊等等。

  而就效果來(lái)說(shuō),技術(shù)分享對于分享者的能力提升比較大,聽(tīng)眾則是知道有這個(gè)東西,啟發(fā)性一般都會(huì )比較少。如果是針對于提升能力來(lái)說(shuō),應該采用 workshop 等方式。

  workshop

  當項目上要采用一個(gè)新的技術(shù)棧時(shí),僅僅中是一個(gè)技術(shù)分享是不能解決問(wèn)題的,你還需要有 workshop 這樣的東西。比如你們將在新的項目里引入 Next.js,那么這個(gè)時(shí)候就需要有一個(gè) Next.js Workshop。由組織者來(lái)規劃每一步的內容,第一步做什么,第二步做什么,等等。參與者則是單獨或者結對的形式,按照組織者的步驟一步步往下來(lái)做相關(guān)的技術(shù)練習。比如在 workshop 開(kāi)始前,先 clone 并搭建好基礎(hello, world)。開(kāi)始的時(shí)候,便是先實(shí)現一個(gè)簡(jiǎn)單的 header,然后是添加樣式等等。

  也因此在這樣的 workshop 里,我們不僅可以聽(tīng)過(guò)相關(guān)技術(shù)棧的知識,也能掌握一些相關(guān)技術(shù)棧的具體實(shí)踐。

  kata

  一種編程練習方式,針對某個(gè)題目反復進(jìn)行操練,達到熟能生巧的目的。簡(jiǎn)單的來(lái)說(shuō),就是你一直練習某一個(gè)特別的東西,直到你習慣了。比如,對于 TDD(測試驅動(dòng)開(kāi)發(fā),先寫(xiě)測試,并由測試驅動(dòng)出功能) 的練習。

  在平時(shí)工作的時(shí)候,我們不會(huì )總是習慣于 TDD 的流程:測試 -> 實(shí)現 -> 重構。特別是,當你的卡就要被打包到新的 Release 包時(shí),先實(shí)現總是會(huì )保證交付的。又或者是,當你對代碼庫特別熟悉的時(shí)候,你可能兩三分鐘就改完代碼,然后去喝咖啡,再回來(lái)花個(gè)十幾分鐘寫(xiě)一個(gè)測試。而當你不熟悉 TDD 的時(shí)候,你更不會(huì )采用這種方式,你會(huì )的可能就是 Test First。為了將 TDD 的思維融入你的想法里, 你就需要大量的這種練習~~。

  在這個(gè)時(shí)候,我們就需要嚴格的按照步驟,一步步往下執行。以便于在將來(lái),我們可以嚴格的按照這些步驟來(lái)執行。

  除此,還有一種方式可以做,只是我們沒(méi)有在這個(gè)項目里實(shí)施。

  dojo

  dojo,(日語(yǔ):道場(chǎng))。在西方世界,dōjō 一詞主要指的是一個(gè)專(zhuān)門(mén)針對日本武術(shù)的訓練場(chǎng)所。在敏捷團隊里,Dojo 的進(jìn)行方式比較『詭異』,也比較有意思。

  如果你了解過(guò)結對編程的話(huà),可能就會(huì )對兩個(gè)人的結對過(guò)程比較感興趣。按我的理解,結對編程存在著(zhù)三種不同的階段:teaching(引入門(mén)),driver-navigator(有經(jīng)驗與新手),結對(有經(jīng)驗與有經(jīng)驗)。即在實(shí)現功能的時(shí)候,兩個(gè)人會(huì )輪流寫(xiě)測試和實(shí)現功能——你先寫(xiě)測試,我實(shí)現功能,然后換角色。而 Dojo 就是一堆人在輪流寫(xiě)代碼:   

Dojo

  即在有限的時(shí)間里,每個(gè)人上去實(shí)現同一功能的代碼。

  如,A 實(shí)現了測試,B 上去實(shí)現業(yè)務(wù),C 上來(lái)重構。D 上來(lái)看了看,你們寫(xiě)的代碼都是 xx,于是 Revert 之前寫(xiě)的代碼??上?nbsp;D 的時(shí)間也只有七分鐘,所以 E 上來(lái) Revert Revert。。。

Git revert revert

  笑~~

  花時(shí)間投入練習

  限于之前已經(jīng)有相當多的文章,介紹練習相關(guān)的技巧,如:

  《GitHub連擊500天:讓理想的編程成為習慣》

  《關(guān)于編程,你的練習是不是有效的?》

  《我的成長(cháng)四步曲》

  《我并不聰明,只是多練習和思考》

  假想項目的重構

  哈哈,如果你覺(jué)得你的項目技術(shù)棧老舊,那么你一定在腦子里使用了 N 種技術(shù)棧,對他們進(jìn)行重構了。并且當你有一些時(shí)間可以分配到上面,如下班前的一個(gè)小時(shí)時(shí)間,又或者黑客馬拉松等等。那么,你一定會(huì )開(kāi)始去做這樣的事。

  與上面的技術(shù)活動(dòng)相比,這是一個(gè)對于業(yè)務(wù)(我的意思是,對于公司來(lái)說(shuō))更有價(jià)值,并且更容易說(shuō)服別人的方式。

  學(xué)習別的項目的技術(shù)棧,然后將之應用到現有的系統上。

  使用一個(gè)新的技術(shù)棧練習, 以此作為技術(shù)支撐,在未來(lái)替換現有的系統。

  由于我們與其他項目大組的業(yè)務(wù)是相似的,并且他們的團隊規模差不多是我們的 10 倍。當某個(gè)新的應用完成后,我們要做的便是:fork from xx,將改吧改吧,應用到我們現有的模式上。這個(gè)時(shí)候就有問(wèn)題了,一般這些新的項目都會(huì )采用最新的技術(shù)棧。在正式引入項目之前,我們都是要學(xué)習這些技能,并配合業(yè)務(wù)做一些修改。也因此,我習慣性的將這種項目視為修改 bug、bUg、Bug。

  后來(lái),我們突然有機會(huì )彎道超車(chē)了,我們可以先重構某一部分系統?!阂驗橐呀?jīng)做好相關(guān)的技術(shù)積累,并沒(méi)有遇上一些太大的問(wèn)題』。只是我們實(shí)施一半的時(shí)候,就發(fā)生了一些意外。后來(lái)的后來(lái),這個(gè)項目“到期結束”了

  現在是 2017 年,當你的項目還在使用舊的 jQuery + Backbone,又或者是 Angular 1.x。并且你們覺(jué)得他們有一些問(wèn)題,這些問(wèn)題采用一些新的框架,如 Angular 2,又或者是 React 能解決這個(gè)問(wèn)題的話(huà)。這個(gè)時(shí)候,我們就可以嘗試去學(xué)習新的技術(shù)棧,并驗證它的可行性。當有一天,你們需要去重構現有系統的時(shí)候,你拿出的直接是一個(gè)可行性的 Demo,而不僅僅是一個(gè)理論上的東西。

  當時(shí)我們的項目想替換掉舊的搜索引擎,我們先是用 Solr 實(shí)現了一遍 DEMO,又用 ElasticSearch 做了一遍 DEMO。同時(shí),我們也在計劃替換應用部分的功能,我們先用 React 實(shí)現了一遍 DEMO,又嘗試用生態(tài)純靜態(tài)的方式玩了一遍。。。生命可貴,可以多玩就多玩一些吧。

  小結

  所以,你是因為加班呢,還是因為加班,才沒(méi)有時(shí)間學(xué)習???



關(guān)鍵詞: 代碼

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>