發(fā)表日期:2018-05 文章編輯:小燈 瀏覽次數:3242
對于追求效率的程序員來說,影響工作效率的事情,是深惡痛絕的,當大家拿到任務的時候,其實對于工作量的評估,心中大致都是有一個數的,然而,為什么我們交付的時候,大部分情況下會比估算的時間長呢,有時候還會長達幾倍之多?
go
的版本和其他人的不一樣,編譯他人的代碼時會報錯;這里不談技能Level問題,我們統(tǒng)一認為水平為中級程序員即可
本文主要是解決研發(fā)順暢度問題的,從開發(fā)
-> 測試
->發(fā)布
的效率問題,當然,既然上面提出了幾個影響效率的因素,那我就先說一下這幾個問題我們是怎么解決的,雖然不是最優(yōu)方案,但一定是適合我們自己的團隊的,我們團隊人較少,情況大致如下:
但是產品內容較多,比如我們需要和第三方存管系統(tǒng)對接,第三方資產系統(tǒng)對接,需要提供管理員系統(tǒng),手機APP,官網,以及其他周邊的服務系統(tǒng),如果不好好解決效率問題,僅僅憑借這些人員數量,是遠遠不夠的,因為這里僅僅是包含了開發(fā)的任務,后續(xù)還有上線和解決線上問題的任務。
我來簡單說一下我們是怎么解決這些問題的吧,希望大家能夠給予建議,同時也很高興能幫助到大家。
我們是小公司,這個問題。。。。解決不了,大家都在一個特大開間里, 只能帶耳塞和耳機了。。。不過我們的客服大部分是在微信上服務,以及出去跑業(yè)務的,因此干擾度不是特別大;
我強制給大家配備Macbook Pro Retina
, 強制大家使用如下工具:
同時,我要求編譯環(huán)境的庫版本必須是某個特定版本,比如 go
必須使用 1.9.4
, 這些都是硬性要求,其他的大家是可以自由發(fā)揮。
大家可能會認為配備Macbook Pro Retina
筆記本的成本太高,但是我想說的是,這真的是一個提高研發(fā)效率的途徑:
unix-like
,linux上能用的命令,大部分都移植在mac上了,不需要搞什么cygwin
了,那玩意搞得真心難受, 最后效果也不是很好;總之,好處多多,一定要說服你們的老板啊?。
一定要要求程序員做需求反講,先是產品經理講需求,然后是技術消化,最后研發(fā)給產品經理反講,確保雙方理解一致,對于頻繁改需求的問題,這個沒有太好的解決辦法,因為有時候需求就是變了(這里不是說按鈕要放到別的位置,顏色要換成什么,主要的是指功能性的需求)
我們的要求就是后端只能用go
, APP開發(fā)iOS使用ReactNative
,打包自動化用gulp
, Web使用React
, Android就使用原生開發(fā),主要技術桟列表如下:
這么羅列下來,其實已經很多了,我們應該盡可能減緩技術桟列表的增長,要做好技術選型的把控工作,不要隨意使用某個語言,某個框架。
架構本身是隨著環(huán)境的變化而發(fā)生變化的,需求
、體量
、痛點
是推動架構變化的主要原因,我之前做的是廣告行業(yè)的技術架構,當時的痛點有如下幾點(有些記不清了):
研發(fā)環(huán)境
->測試環(huán)境
->生產環(huán)境
都有差異,因為這些差異,找問題需要找很久,有新服務器加入那更是痛上加痛了,上百臺的服務器啊。。。。;SVN
,后來給大家做了GIT
的培訓,搭建了GitLab
, 使用了 GitFlow
CI
, 你就說痛不痛?其實大公司要使用某個工具,某個架構,某個流程,做大批量的更換是挺難的,所以很容易就這么痛下去,都2018年
了,我一個同事入職某60
,這些給研發(fā)人員使用的基礎設施還很原始呢,我同事的原話:完全沒法和我們現(xiàn)在的開發(fā)環(huán)境相提并論。再說說我們P2P行業(yè)的痛點:
我們不跑路,我們是一家很正規(guī)的P2P公司,是金融辦審查過的
P2P的業(yè)務特點如下
對了,大家如果忘記了我們有多少個人,可以往上面再翻一下,另外,這僅僅是我們的一條產品線,我們之前希望把控更多的資產,自己也嘗試開始做資產管理,嗯,做了一個類似鉆石抵押的借款平臺,反正產品線多。。。
除了業(yè)務上有痛點,公司體量小,本身也會有一個致命痛點
招聘難:好的人才可遇不可求,我們面試到的程序員也大多是初級或中級的,高級的不多見。由于我們使用的是go
語言作為后端語言,ReactNative
作為前端APP開發(fā)框架,能找到合適的就是微乎其微了。大家別看這些概念都已經很火了,但在我們小公司里,幾乎是招聘不到有這些實戰(zhàn)經驗的程序員的,大部分是只有一點開發(fā)基礎的,只會一門語言,甚至沒做過項目的,怎么辦?培訓+實戰(zhàn),沒有別的出路。
基于這些問題,我們就有了一個架構設計的思路:
postman
進行測試,或寫自動測試工具進行請求;為了增加把控度,我們自己造了輪子,此框架適用于我們的應用場景,同時也是開源的,所以,非常歡迎大家使用,并給出建議:
go-spirit
想要快速入手go-spirit請戳這里
這項任務是必須要執(zhí)行的,但仍然解決不了初級程序員,尤其是入門級程序員犯這個錯誤,第一是要提升這位程序員的技術水平,在每日例會上要碎碎念,多跟他講講設計、講講哪些東西合理、哪些東西不合理,經常講講行為規(guī)范,比如:
for
循環(huán)里一條條去執(zhí)行sql
來查詢結果,而是應該在for
循環(huán)前先一次性查回來再處理;真的很碎,但這是規(guī)范,也是文化的傳承,小公司可以這么做,因為人少好叨叨,大公司則需要有嚴格的行為準則和制度,但也應該拆團隊,培養(yǎng)主管對規(guī)則和文化的重視。
做完需求反講后,產品經理和研發(fā)人員都對需求有了一定的理解,接下來最好做一下技術實現(xiàn)上的設計,先做好磨刀的工作,再做砍柴的事。尤其是對于初級程序員,應該先聽聽他們的設計思路,應該給予及時的幫助和糾正,總比在最后讓他們改BUG
強。
一定要做好BUG數量的控制,否則技術債務會像滾雪球一樣越來越大,本來我們可以好好做研發(fā)的,卻要去解決焦頭爛額的線上問題,這是不能容忍的。
大致會有如下的阻礙:
我們是這么做的
盡早穩(wěn)定好API
接口的定義,測試人員開始寫MOCK
(只需要寫個javascript
腳本即可,對請求內容進行判斷,然后返回特定內容),這樣就可以了,為什么要這么做?
API
的實際邏輯實現(xiàn)會比較慢,前端需要使用MOCK
來完成對接,快速實現(xiàn)各個頁面的邏輯聯(lián)通;MOCK
腳本的時候,會把業(yè)務場景都過一遍,增加了測試用例的品質;MOCK
給客戶演示?gulp
編譯網站的時候,研發(fā)人員自己的機器能編譯通過,放到別人的機器上編譯就不行,因為安裝的環(huán)境,類庫版本有差異。如果放到指定的docker里去編譯,則不會出現(xiàn)這個問題;CI
上做,就需要寫好CI
腳本,一切都是按照預定的計劃執(zhí)行。所以,研發(fā)人員的研發(fā)環(huán)境,是一種習慣、文化,更是一整套生態(tài),從物理上的工作環(huán)境到電腦里的系統(tǒng)環(huán)境,從功能到架構,從研發(fā)到上線,每個環(huán)節(jié)都可能出現(xiàn)效率上的殺手。
我主要會為大家講解,如何搭建一個完整的從 開發(fā)
到上線
的環(huán)境,并且為大家講解幾個CI
案例, 同時實戰(zhàn)gitlab-ci.yml
的寫法,讓每個團隊享受CI
帶來的便捷和樂趣。
我們用的是阿里云(小公司嘛,哪有錢搞機房),因此,后續(xù)的部署講解均是基于阿里云的,大家也可以按照自己的需求,開發(fā)出部署其他云平臺的模塊,go-flow是插件化的。
涵蓋的內容大致如下(后續(xù)根據實際情況做調整):
gitlab-ci
編譯一個APK
gitlab-ci
編譯一個todo
程序的示例(go
),從代碼提交
到發(fā)布
的整套流程go-spirit
快速發(fā)布mock
服務PKI
(Public Key Infrastructure) 證書使用一句話:不玩虛的,實戰(zhàn)!實戰(zhàn)!
先給大家放幾張我們現(xiàn)在正在使用的系統(tǒng)的圖片,全當時給干澀的文字配個圖了。。。
使用go-flow
搭建下面這些環(huán)境的執(zhí)行截圖,嗯,我給大家?guī)淼氖侨彝埃斎贿@些是基礎環(huán)境,每個公司都會有自己的環(huán)境需要搭建,大家可以為 go-flow
貢獻插件哦?
大家不用嘗試訪問圖中的地址啦,因為我迅速的使用 go-flow 釋放了這些資源?
我們研發(fā)所有的服務都做了客戶端證書的雙向認證,以防止外人的訪問(PKI)訪問服務時,會彈出如下提示:
沒有客戶端證書的人是無法訪問的。
每次提交代碼,都能觸發(fā)自動編譯和測試
部分任務可以指定為手動觸發(fā),比如部署,因為不是每次提交代碼都需要部署
有編譯的詳細過程
不同的Runner用于跑不同的項目,比如編譯蘋果應用的runner就需要跑在mac上,我們公司有一臺專門編譯iOS應用的MacMini
研發(fā)人員登錄公司內部系統(tǒng),都是使用的LDAP,用戶可以自己登錄修改密碼。
日志系統(tǒng),我就喜歡graylog,好用, 結合好 logrus_mate 就可以往不同的系統(tǒng)打日志了。
簡單易用。
能看到最后,說明您很認真,歡迎加入我的QQ群進行更深入的交流:780798965
為研發(fā)人員創(chuàng)造一個高效的研發(fā)環(huán)境(二)- 實戰(zhàn)環(huán)境搭建