軟體工程師必備的五種生產力增強方式與實踐

2020-12-26 51CTO

在如今全球疫情持續蔓延的情況下,人們往往希望通過各種生產力的增強方式,來替代當前無法面對面開展高效協作的狀況。

在本文中,我們將和您討論五種有助於軟體工程師和技術公司提高工作效率的實用方式,其中包括:設計系統(Design systems)、代碼查詢器(code linters),代碼格式工具(code formatters)、持續集成(continuous integration)、以及IaaS/PaaS平臺(IaaS/PaaS providers)。它們能夠幫助您在不犧牲軟體產品質量的情況下,加快整個開發周期和交付進程。

設計系統

設計系統主要包含了各種設計模式、使用指南、文檔、所有權模型、溝通方法、以及產品路線圖等。我們可以簡單地把它理解為一個根據可重用的構建塊(building blocks),來創建某個產品的組件庫。此處的構建塊主要包括:圖標生成器(avatars)、標誌、按鈕、下拉菜單、輸入表單、圖標、連結、模式、進度指示器、以及工具提示等組件。就像樂高積木一樣,這些組件可以被組合起來,以創建應用程式必需的所有頁面和功能。

為了使軟體產品的用戶界面(UI)能夠隨著業務與功能不斷擴展,設計系統能夠給用戶帶來如下好處:

設計系統可幫助您創建一致性的UI,以便您在整個應用程式中都使用統一的構件塊組件。設計系統通過提供一種可以在任何地方實現的通用模式,以方便設計師和軟體工程師加快開發的速度,而不必花費數小時、甚至數天的時間去重構模式。您可以使用一組共享的組件,來輕鬆地在整個應用中一次性進行模式的更改。例如:如果您需要更改某個應用的按鈕樣式,那麼就無需逐個進行調整,而只需在設計系統中統一更改,以便直觀地應用到任何使用相關按鈕的地方。設計系統使您更加專注於提升用戶體驗(UX)。用戶體驗設計師無需花費時間,去逐個決定每個新功能的下拉菜單和模式該如何工作,而是只需在整體上,集中確保其合理性和用戶友好度即可。目前,市場上有許多設計系統類工具可供選用,其中包括:Google的Material-UI、Adobe的Spectrum、以及Ant Design等。當然,如果您有足夠的時間和資源的話,也可以自行構建設計系統。

編碼查看器

上圖是針對JavaScript的ESLint的截圖。它通過對代碼進行靜態分析,協助自動捕獲各種語法錯誤,以及潛在的運行問題。此類查看器不但短小精悍,並且能夠直接被包含在您的構建過程或git hook中。畢竟,它們最擅長的,便是通過自動化執行,在海量代碼中發現各種語法上、以及邏輯上的錯誤。

以上面提到的ESLint為例,它不但具有高度可配置性,並且具有廣泛的插件生態系統。您可以通過安裝eslint -plugin-jsx-a11y之類的ESLint插件,來協助捕獲應用程式中的違規訪問行為;或者是通過安裝eslint-plugin-react,來協助實現React的各種優秀實踐。當然,如果您不想花時間自己去挑選插件的話,也可以使用一些預設好的插件。例如:eslint-config-airbnb插件包,就預設好了一些由Airbnb推薦的ESLint配置項。

代碼格式化工具

諸如Prettier之類的格式化工具,可以對您的JavaScript、HTML、CSS、乃至各種Markdown文件,進行格式化與規範化。與代碼查看器類似,代碼格式化工具可以自動化執行,各種原本需要軟體工程師手動完成的任務。

通過預先配置,Prettier能夠對應該使用的空格、制表符、分號、逗號等各種代碼格式予以自動規範化。在節省代碼審查時間的同時,團隊不但可以在整個存儲庫中保持一致性和標準化,還能夠騰出更多的時間,專注於代碼本身的功能、以及可維護性。

如下Java代碼是Prettier配置的示例:

{ 2 "tabWidth": 2, 3 "useTabs": false, 4 "printWidth": 80, 5 "semi": false, 6 "singleQuote": true, 7 "trailingComma": "es5", 8 "quoteProps": "as-needed", 9 "jsxSingleQuote": false, 10 "jsxBracketSameLine": false, 11 "bracketSpacing": true, 12 "arrowParens": "avoid", 13 "endOfLine": "auto", 14 "proseWrap": "preserve", 15 "htmlWhitespaceSensitivity": "css"16 }

我們來看一個例子。顯然,下面的Java程序代碼,看上去十分雜亂無章:

function HelloWorld({greeting = "hello", greeted = '"World"', silent = false, onMouseOver,}) { 2 3 if(!greeting){returnnull}; 4 5 // TODO: Don't use random in render 6 let num = Math.floor (Math.random() * 1E+7).toString().replace(/\.\d+/ig, "") 7 8 return <div className='HelloWorld' title={`You are visitor number ${ num }`} onMouseOver={onMouseOver}> 9 10 <strong>{ greeting.slice( 0, 1 ).toUpperCase() + greeting.slice(1).toLowerCase() }</strong> 11 {greeting.endsWith(",") ? " " : <span style={{color: '\grey'}}>", "</span> } 12 <em> 13 { greeted } 14 </em> 15 { (silent) 16 ? "."17 : "!"} 18 19 </div>; 20 21 }

通過使用Prettier,代碼會變成如下的樣子:

function HelloWorld({ 2 greeting = 'hello', 3 greeted = '"World"', 4 silent = false, 5 onMouseOver, 6 }) { 7 if (!greeting) { 8 returnnull9 } 10 11 // TODO: Don't use random in render 12 let num = Math.floor(Math.random() * 1e7) 13 .toString() 14 .replace(/\.\d+/gi, '') 15 16 return ( 17 <div 18 className="HelloWorld"19 title={`You are visitor number ${num}`} 20 onMouseOver={onMouseOver} 21 > 22 <strong> 23 {greeting.slice(0, 1).toUpperCase() + greeting.slice(1).toLowerCase()} 24 </strong> 25 {greeting.endsWith(',') ? ( 26 ' '27 ) : ( 28 <span style={{ color: 'grey' }}>", "</span> 29 )} 30 <em>{greeted}</em> 31 {silent ? '.' : '!'} 32 </div> 33 ) 34 }

自動化測試和持續集成

隨著應用程式在複雜性和代碼體量上的增長,我們再也無法單靠一己之力,手動測試目標應用中涉及到的所有內容。我們需要進行動作分解,通過自動化測試來完成單元測試、集成測試、端到端(E2E)測試、以及回歸測試。

由DevOps理念帶來的持續集成(CI)實踐,則能夠確保您代碼的主分支在理論上,一直處於可執行的狀態。為此,您可以使用Travis CI、CircleCI、GitLab CI/CD、以及Heroku CI之類的服務,來為存儲庫設置持續集成。在此基礎上,您可以通過配置CI管道,以便在每次提交後,運行查看器和自動化測試,進而在滿足所有前續條件的基礎上,實現代碼合併。實踐證明,相對於手動測試,自動化測試和持續集成都能夠大幅減少整個開發周期的用時。

IaaS和PaaS平臺

在如今雲服務盛行的時代,我們要學會善用基礎架構即服務(IaaS)和平臺即服務(PaaS),來管理應用的基礎架構。目前,常見的IaaS平臺包括Amazon Web Services、Google Cloud Platform。而常見的PaaS平臺包括:Heroku等解決方案。

同時,通過使用諸如Amazon Relational Database Service(RDS)之類的託管資料庫服務,您不必考慮資料庫的升級、以及安全補丁的安裝。而使用諸如Amazon Simple Notification Service(SNS,)之類的通知服務,您將不必自行構建發送電子郵件或簡訊等服務。

此外,通過將應用程式部署到Heroku平臺上,您的應用程式將隨著使用量的增加,而能夠實現水平方向和垂直方向的自動擴展。

相關焦點

  • 網易數帆亮相中臺戰略大會,解讀雲原生軟體生產力實踐
    近日,第二屆全國中臺戰略大會暨第四屆網際網路架構峰會(IAS2020)在南京召開,網易數帆基礎架構總監張曉龍受邀參加本次峰會,並就雲原生架構下的軟體生產力體系演進這一話題發表主題演講,分享了網易實踐與經驗心得。
  • 電子工程師的頂級PCB設計軟體工具:46種PCB設計的必備工具
    不管他們正在從事哪個項目,電子工程師都必須準確知道電路的布局方式以及工作方式。沒有印刷電路板(PCB),電子工程師的工作將是不可能的。但是,對於電子工程師來說,找到合適的PCB設計軟體工具可能是一項艱巨的任務,因為它們太忙了,需要篩選的工具太多。
  • 谷歌的測試工程師需要很酷(COOL)
    測試工程師是谷歌工程生產力(EngProd)的一部分。我們為用戶代言,提供全面的測試解決方案,並在創造成功和可靠的產品和平臺方面發揮關鍵作用。在Google,測試工程師不是點點點,我們是技術工程師,我們的重點是推進產品的卓越性和工程生產力。
  • 經驗貼丨我是如何用五步招到軟體工程師的
    這篇文章比較長,所以我將它分成五個部分:關於招聘的問題我要找的技能我如何發現候選者我如何招聘工程師我犯過的錯註:如果你正在找一些書來幫助你成為軟體工程經理,這裡有一些我最喜歡的:https://考查程式設計師不需要掌握的東西,並期望了解他們在公司的工作方式,這是妄想。這類面試只會讓招聘團隊有優越感,並確保擁有傳統計算機科學背景的工程師可以獲得更好的結果。我要找的技能為了圍繞軟體工程中真正重要的技能重新設計我們的招聘流程,我把這個問題歸結為 第一性原則。軟體工程師團隊需要具備什麼技能?
  • 「學出位」——機械師F117-X生產力軟體性能測試
    三大生產力軟體實測內容創作離不開專業軟體的支持,常用的就有Adobe家的三件套PS、AE、PR,還有各種3D渲染、視頻轉碼等等應用。Adobe旗下各類型軟體可以說在軟體工具領域遍地開花,只要從事多媒體設計相關的工作者,基本都會用到Adobe的軟體。
  • 宜春BIM應用工程師報名必備知識
    宜春BIM應用工程師報名必備知識   宜春BIM應用工程師報名必備知識    當然,製造業的各方面的水平遠遠高於建築業,這是不爭的事實。  但是,在實踐上,又完全不同於製造業。軟體行業的競爭將會繼續猛烈地進行。
  • 一手就能掌握,能放進口袋的生產力工具:壹號本壹號工程師PC體驗
    轉軸下方的黑色小黑點是壹號工程師PC指紋開機一體鍵,兩種功能整合到一起後,即保證了使用安全,身份驗證也變得更加簡單高效。壹號工程師PC的D面除了傳統設計的防滑墊、散熱孔外,還加入了標準VESA固定孔的支持,搭配VESA託架,適合在各種複雜情況下用來固定壹號工程師PC。
  • 新款iPad Pro能成為生產力工具?「肉體」上差不多了 「靈魂」不太行
    具體來說,它可以測量室內或室外環境中從最遠五米處反射回來的光,有些類似手機上的ToF鏡頭,配和上兩顆攝像頭和運動傳感器和 iPadOS 內的架構協同合作,讓新款的iPad Pro在AR(增強現實)的體驗上更加出色,AR也是蘋果在近些年一直都非常重視的一個點,一直在發掘iPad和iPhone上的AR潛力。
  • 100個Mac裝機必備軟體(2021最新版)
    蘋果電腦,其實真的不僅僅只是顏值高,它的生產力一旦在你真正掌握了它的精髓之後,會無與倫比。除了性能和系統的強大,還包括我經常分享的一些隱藏技巧,實際上更重要的還有一個原因就是你得善於發現和使用Mac上那些真正好用又適合於你的軟體。
  • 軟體測試工程師是什麼?
    IT行業至今還是如火如荼,軟體測試是IT行業的一個細分類目,軟體測試工程師是軟體測試工作的執行者。最近看tester指導猿的文章,學到了。1.什麼是軟體測試軟體測試的經典定義是:在規定的條件下對程序進行操作,以發現程序錯誤,衡量軟體質量,並對其是否能滿足設計要求進行評估的過程。
  • 機器翻譯能解放生產力嗎?
    我們都知道只有技術革命才能解放生產力。在翻譯領域裡,基於自然語言「神經網絡模型」的機器翻譯的出現,終於讓大家看到了顛覆性的技術。從中,大家看到「神經網絡」的革命性和未來性,內心中對這項技術有了些憧憬和疑問,也就有了如此疑問。我們不講總的機器翻譯歷史和時間軸事件,僅從應用角度到來看,軟體翻譯可以有三個階段。
  • 貨運司機必備的五款軟體
    這篇文章我們來推薦五款貨運司機必備的軟體。高德由於行駛中有著嚴格的限高、限寬、限重、限行等限制,貨車是所有車輛類型中對導航、對地圖數據精細度要求最高的。比如,一旦駛入限行路段,貨車掉頭都比較困難,不僅違章須交罰款,還有可能會造成道路擁堵,甚至引發交通安全風險。所以,貨運司機對於手機地圖和導航應用存在很高的依賴度。導航軟體需要針對貨運司機進行特殊優化。
  • 平面設計師必備軟體排行榜
    平面設計用什麼軟體,需要哪些技能?通常在面試平面設計的時候面試官總會問你會某某軟體麼,且不說創意和色彩感覺,可能僅憑不會使用某一款軟體就被pass掉了。並稱為設計領域的三大軟體,想必大家都不會陌生,充當其衝PhotoShop,然後是Corel公司的CorelDRAW[d1] 和Adobe公司的illustrator,因為後面這兩款用屬於矢量圖形設計軟體,所以很多人在選擇上有點頭疼,如何選擇,小編也會給出自己看法。下面我們就來盤點平面設計師必備幾大軟體排行榜。
  • 一名軟體工程師,卻沒能給自己的手機寫過一個程序
    我常常在想到底是什麼樣的一群人在用著和我一樣的手機。他們首先不是iPhone的用戶,也不是三星的用戶。這就已經除去了這個世界上50%的智慧型手機用戶。實踐告訴我,任何拆機工具在拆8x的時候都沒有手指甲來得好使。用吹風機吹化膠水後,卡扣的部分用手指甲完成。到最後,兩隻大拇指都流了血,在指甲裡面,成了紫色。把紅色的殼安上去的時候,電源鍵失靈。       這款手機電源鍵的設計是有問題的。       這不是我手術失敗找的藉口。這臺手機的電源鍵手感生硬,可能是最近幾年公開發布的智慧型手機中最生硬的一個。
  • 運維工程師的必備隨身本:壹號工程師PC A1評測
    比如運維工程師,這類用戶需要經常外出,而且需要專業性很強的PC產品。市面上針對這類用戶的產品並不多,最近我體驗了一款壹號工程師PC A1。這款產品便攜、專業性還極強。這篇文章帶來這款產品的評測。一、 外觀壹號工程師PC A1的外包裝很精緻,是我喜歡的類型。黑色與金色的搭配視覺效果很棒。
  • 四款繪畫相關的APP 讓你的iPad變身生產力工具
    在去年,我入手了一臺iPad pro,沒錯,我就是被蘋果號稱的將來能夠替代電腦成為生產力工具的套路給帶上車的。名稱:procreat價格:68元推薦星級:五顆星關鍵詞:位圖評價:網絡教程很多,甚至有專門的網課,熟悉ps/sai一些電腦繪畫軟體的話上手也不難。
  • 網易易數發布數據生產力平臺,推動人人天天用數據
    餘利華首先通過兩個案例揭示了數據中臺也需要正確的打開方式:一家零售行業頭部企業,基於數據中臺打造了20+個深入業務場景的數據產品,推廣到4000+家門,幫助店長每日及時發現滯銷商品,減少庫存積壓,提高商品周轉,實現銷售額的提升;某大型酒業集團,花費千萬,耗時2年,投入50多人開發數據中臺,規劃了商品、會員、渠道、交易、營銷等十多個主題域,最終因中臺數據無法應用於業務場景引發業務方不滿。
  • 開課吧:Java軟體工程師一般要學習哪些課程?
    零基礎學Java工程師JAVA是一種可以撰寫跨平臺應用軟體的面向對象的程序設計語言,是由SUN公司推出的JAVA程序設計語言和JAVA平臺的總稱,JAVA應用主要由四大方向:JAVA如:Hadoop大數據處理、Android 開發、伺服器開發、網站、軟體開發工具、自然語言處理等等。Java軟體工程師主要學習:首先,無論你以後從事Java的那個方向,web後臺開發還是Andrio開發,那麼你都需要先學習Java的基礎知識。比如8種數據結構,String的常用方法,流程控制語句等基礎知識。
  • Google的軟體工程師面試流程
    縮小科技公司的範圍,下面是對谷歌軟體工程師面試過程的深入探討。以下表示直接申請公開職位申請的一般軟體工程候選人或當前 Google 人員推薦的應聘者的流程。如果招聘人員主動聯繫了應聘者,或者他們申請了特定的團隊或領域,則流程可能略有不同。 簡歷審查 與普遍的看法相反,Google 的所有簡歷均由專人來進行審查。