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

2020-12-25 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平臺上,您的應用程式將隨著使用量的增加,而能夠實現水平方向和垂直方向的自動擴展。

相關焦點

  • 電子工程師的頂級PCB設計軟體工具:46種PCB設計的必備工具
    不管他們正在從事哪個項目,電子工程師都必須準確知道電路的布局方式以及工作方式。沒有印刷電路板(PCB),電子工程師的工作將是不可能的。但是,對於電子工程師來說,找到合適的PCB設計軟體工具可能是一項艱巨的任務,因為它們太忙了,需要篩選的工具太多。這就是為什麼我們匯集了46個用於電子工程師的頂級PCB設計軟體工具–節省了您在設計項目時所花費的時間。
  • 軟體工程師必不可少的5種基本技能
    確保將這些技能添加到您的武器庫中Photo by Rich Tervet on Unsplash如今,軟體工程師需要掌握多種技能。 我們都知道明顯的那些。 在該列表的頂部,您會發現需要了解如何編程的知識,因此需要了解一種程式語言。
  • Studio 5000 Logix Designer v24 軟體促進生產力提升
    (2014年11月18日,美國加利福尼亞州阿納海姆市)藉助羅克韋爾自動化的RockwellSoftwareStudio5000LogixDesignerv24軟體,工程師將獲得前所未有的設計能力,從而大幅提升自動化生產力、縮短啟動時間並降低整個項目生命周期的成本。
  • 軟體工程師比電子工程師更有錢途?
    我是在校大學生 專業是電子工程,初中也參加過NOIP。雖說走軟體方向更容易入手 但還是覺得電子更好玩所以選了這個專業。為什麼感覺硬體類的學生很不吃香?比如有很多軟體工程師的個人博客,類似MATRIX67、酷殼、阮一峰等等,但是偏硬體的就很少。
  • 2020軟體工程師必備的11項技能
    如果你有志於軟體開發職業或想找編程方面的工作,那麼本文的內容是你所需要知道的,並且可以用來提高競爭力。廢話少說,這裡列出了一些我個人認為每個程式設計師都應該知道的技能,不管他從事的是什麼工作。這些都是必要的技能,並且長期為你受用。任何在時間、金錢和努力方面的投資都會幫助你在整個職業生涯中獲得回報。
  • 全世界有多少軟體工程師?軟體工程師又造福了多少人的生活?
    全文共1708字,預計學習時長3分鐘不久前,軟體工程師內部就其世界影響力發起了一個討論:全世界有多少軟體工程師?軟體工程師又造福了多少人的生活?埃文斯數據公司稱,2016年北美約有440萬軟體工程師。據數據美國(DataUSA)統計,2017年美國軟體工程師、應用與系統軟體從業人數達到了136萬人。美國Don’t Quit Your Day Job網站給出的預計與埃文斯數據公司十分接近,2019年世界上將有420萬名軟體工程師。
  • crm管理系統軟體是企業必備工具
    當人們談論CRM時,他們通常指的是crm管理系統軟體,這是一種有助於聯繫管理,銷售管理,生產力等的工具。CRM解決方案可幫助您在整個生命周期中關注公司與個人(包括客戶,服務用戶,同事或供應商)的關係,包括尋找新客戶,贏得業務,以及在整個關係中提供支持和附加服務。
  • 軟體開發、項目管理、人員管理3方面全面了解Google軟體工程實踐
    Google還大幅增強和擴展了通過購買小型公司(如YouTube)所獲得的許多產品,並對各種開源項目做出了重大貢獻。Google已經展示了一些尚未推出的驚人產品,例如自動駕駛汽車。Google的成功有很多原因,包括開明的領導力,偉大的人才,高招聘標準,以及在迅速成長的市場中成功獲利的財務實力。但其中一個原因是Google摸索出了優秀的軟體工程實踐,幫助它成功。
  • 工程師常用的17種軟體
    電子工程相關的職業一般分為硬體工程師和軟體工程師。而電子工程師是一個對從事集成電路、電子電氣設備等相關產品生產、研發工作的技術人員的統稱。硬體與軟體是不可分離的,硬體需要軟體來執行其程序實現具體功能。軟體需要硬體做載體,它們之間是一個相輔相承的關係。
  • 谷歌的測試工程師需要很酷(COOL)
    測試工程師是谷歌工程生產力(EngProd)的一部分。我們為用戶代言,提供全面的測試解決方案,並在創造成功和可靠的產品和平臺方面發揮關鍵作用。在Google,測試工程師不是點點點,我們是技術工程師,我們的重點是推進產品的卓越性和工程生產力。
  • 軟體工程師生存指南
    本文涵蓋以下內容:如何在面試中脫穎而出如何在軟體工程師崗位上生存(並壯大)需要持續改進時,應當尋找何種資源在你的軟體工程師職業生涯開啟的那一刻,你不得不面對一個不爭的事實:面試真操蛋。面試對於身處其中的每個人都是夢魘。
  • 電子工程師必備10大免費DIY工具(六):DraftSight、eDrawings
    本篇文章將為您詳細介紹DraftSight和eDrawings兩款電子工程師必備10大免費DIY工具。本文引用地址:http://www.eepw.com.cn/article/201710/369671.htm  9.
  • 淺談電子工程師和軟體工程師差距
    傳統製造業與之相比,其實無論軟體硬體,跟網際網路行業都要差一個檔次。 問題是傳統製造業內部,軟體的發展也也要好於硬體;因而在大多數人看來,軟體工程師相較於硬體工程師,也更加受人青睞,這是為什麼呢? 首先,我們先來了解一下,這兩者工作職責的不同。
  • 8年軟體測試工程師感悟——寫給還在迷茫中的朋友
    前幾年的軟體測試行業還是一個風口,隨著不斷地轉行人員以及畢業的大學生瘋狂地湧入軟體測試行業,目前軟體測試行業「缺口」已經基本飽和。當然,我說的是最基礎的功能測試的崗位需求已經很少了,而自動化、性能、安全乃至於以後可能出現的大數據測試、AI測試仍存在著非常多的機會。很多測試從業者其實會對自己未來的發展感到迷茫,覺得自己的工作其實就是用「滑鼠點點點」,其實不是這樣的,測試工程師有自己的價值。
  • 造價工程師必備:400個算量軟體+405個EXCEL算量表
    領取方式請看尾圖!領取方式請看尾圖!領取方式請看尾圖!造價工程師必備:400個算量軟體+405個EXCEL算量表工程量計算表工程量計算表工作中有效使用這些《97個工程量軟體
  • 經驗貼丨我是如何用五步招到軟體工程師的
    這篇文章比較長,所以我將它分成五個部分:關於招聘的問題我要找的技能我如何發現候選者我如何招聘工程師我犯過的錯註:如果你正在找一些書來幫助你成為軟體工程經理,這裡有一些我最喜歡的:https://考查程式設計師不需要掌握的東西,並期望了解他們在公司的工作方式,這是妄想。這類面試只會讓招聘團隊有優越感,並確保擁有傳統計算機科學背景的工程師可以獲得更好的結果。我要找的技能為了圍繞軟體工程中真正重要的技能重新設計我們的招聘流程,我把這個問題歸結為 第一性原則。軟體工程師團隊需要具備什麼技能?
  • CAD輔助軟體最新版本的Creo 5.0已發布
    最新版本的Creo 5.0,不僅擁有經改進的更加友好用戶界面,最重要的提出了諸多可提高生產力的新功能,包括:傳統功能效率提升、拓撲結構優化設計、面向3D列印的設計、面向模具高速加工、計算流體力學仿真、增強現實設計評審等六大新功能,讓用戶可以在單一設計環境中完成從概念設計到製造的全過程,帶來了極致的機械設計體驗。
  • 軟體工程師
    熱門的軟體工程師崗位競爭相當激烈,每天有六千餘人投簡歷應聘。□金陵晚報記者 蔣曉春招醫生的多是民營企業記者注意到,通過網絡招聘醫生的多是民營企業,有的是集團公司招聘企業保健醫生,也有民營醫院或美容整形機構招全科醫生或是專科醫生。
  • 令人羨慕的月薪過萬的軟體工程師,快來看看你入門了沒有
    無論您腦海中所描繪的是什麼,您都不能否認這樣一個事實,即使軟體工程師似乎是一個無聊的人(實際上他們並不是一個無聊的人),這些人仍然被認為是世界上最聰明和最酷的人。 只需向他們介紹軟體,就可以減少公司中數千名工人的工作量。這些都是很多人想要成為軟體工程師或開發人員的原因,他們喜歡通過構建可以解決他們問題的東西來幫助人們。軟體工程是世界上收入最高的工作之一,但是您在該領域確實需要很多耐心,不斷學習和不斷改進。 1.追求計算機科學相關領域和學位 這是大多數學生追求軟體工程的傳統方式之一。
  • 高級軟體工程師每天都在做什麼?
    工程技術角色匯總我現在是一名高級軟體工程師,但這究竟是幹嘛的?雖然具體的頭銜與職能劃分取決於具體的企業,但根據我們利用谷歌搜索結果進行的建模,整個行業內的定位思路大體相似。我最初是一名軟體工程師(簡稱 SWE),而後是高級軟體工程師(Sr SWE),經歷了短暫的管理適應周期後,我最終晉升為高級管理人員。