那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

編程與軟件工程

Linux閱碼場 ? 來源:Linux閱碼場 ? 作者:Linux閱碼場 ? 2022-09-22 10:56 ? 次閱讀

在軟件工程的概念被提出之前,IT行業(yè)經(jīng)歷了軟件危機[1]。當(dāng)時IT行業(yè)開發(fā)的軟件正在經(jīng)歷從小規(guī)模到大規(guī)模的過程,而沒有系統(tǒng)化的方法論指導(dǎo)大規(guī)模軟件的開發(fā)過程,導(dǎo)致軟件工程師之間的協(xié)作非常的低效且質(zhì)量難以得到保證。

直到IT行業(yè)意識到軟件需要一種工程化的方法論來指導(dǎo)開發(fā)過程。

軟件工程是將系統(tǒng)化的、規(guī)范的、可度量的方法用于軟件的開發(fā)、運行和維護的過程,即將工程化應(yīng)用于軟件開發(fā)中(IEEE,1993)。

編程與軟件工程

編程是利用某個編程語言實現(xiàn)某個算法或技術(shù)方案從而來解決某類問題,但這類問題規(guī)模一般很小,也不太會隨著時間產(chǎn)生變化,或者其生命周期也很短,不需要考慮長期維護的問題。但軟件工程與編程的區(qū)別在于前者需考慮時間與規(guī)模帶來變化的影響。

時間的因素使軟件工程需要考慮質(zhì)量的問題,糟糕的質(zhì)量會產(chǎn)生很多認知負荷,最終難以長期維護。規(guī)模的因素使軟件工程需要考慮協(xié)作的問題,低效的協(xié)作可能與溝通方式有關(guān),最終拖垮交付進度。

軟件工程發(fā)展史

早期的軟件工程借鑒了項目管理的流程,而傳統(tǒng)的項目管理關(guān)注生產(chǎn)過程大過于人。

15784476-3a11-11ed-9e49-dac502259ad0.jpg

以過程為中心的軟件工程過程方法論主要有瀑布式與統(tǒng)一軟件開發(fā)過程。這種軟件開發(fā)過程需要產(chǎn)生大量的正式文檔,通過嚴格的流程管理控制軟件的開發(fā)過程。但軟件開發(fā)過程卻是一個知識密集型的生產(chǎn)過程,過于關(guān)注流程而忽略人的因素導(dǎo)致這類方法論很難適應(yīng)需求變化,花費很多時間開發(fā)出的產(chǎn)品很難滿足變化迅速的市場,最終逐漸被淘汰。

以人為中心的軟件開發(fā)過程是為適應(yīng)需求變化的代碼編寫和團隊組織方法論。這類逐漸產(chǎn)生以極限編程與敏捷過程兩種方法論。

15cb36fe-3a11-11ed-9e49-dac502259ad0.jpg

這里以敏捷過程為例,敏捷開發(fā)至今已經(jīng)成為很主流的軟件開發(fā)過程。

15ec27d8-3a11-11ed-9e49-dac502259ad0.jpg

敏捷開發(fā)倡導(dǎo)信任人而非死板的流程與計劃管理,通過一系列如上所示的實踐來營造一個信任為主的文化土壤,從而打造一個高效的研發(fā)團隊,最終開發(fā)出高質(zhì)量的軟件成品。

當(dāng)然本文不是介紹敏捷開發(fā)過程的,而是介紹Google公司的軟件工程實踐。

Google是一家偉大的互聯(lián)網(wǎng)公司,同時研發(fā)出來了大量知名的軟件產(chǎn)品。Google是怎么做到的?在2020年Google的三位工程師@TitusWinters[2]@manshreck[3]@hyrumwright[4]出版了《Software Engineering at Google[5]》這本書來介紹Google的軟件工程實踐,這給了我們一個機會一窺究竟。

本文是Google軟件工程系列的上篇之文化篇,來介紹軟件工程最重要的一個基石:文化要素。

Google軟件工程文化

以下是《Software Engineering at Google》一書第二部分文化篇的思維導(dǎo)圖,由于此部分占全書近20%,所以本文不會詳細的介紹其中的概念,想詳細了解的讀者建議閱讀原書。本文會結(jié)合此書這部分內(nèi)容分享作者的個人理解及相關(guān)經(jīng)驗。

1615c5b6-3a11-11ed-9e49-dac502259ad0.jpg

文化為何是軟件工程很重要的一個要素?我在剛?cè)隝T行業(yè)時對軟件開發(fā)的理解只是學(xué)習(xí)某個編程語言來寫代碼。之后經(jīng)過多年多個項目的歷練,我逐漸對整個軟件開發(fā)的全貌有了一定的理解。但還是停留在對軟件開發(fā)過程的了解及相關(guān)工具的使用,直到讀完這本書的文化篇后才意識到了文化的重要性。

文化雖然是和技術(shù)沒有直接關(guān)系的一些軟性的東西,但文化就像水一樣,利用好它的力量,可以讓軟件開發(fā)變得更高效、高質(zhì)。

團隊協(xié)作的基石

軟件開發(fā)早已不是單兵作戰(zhàn)的時代了,雖然人們喜歡聽黑客奇跡般的故事,但現(xiàn)在的中大型軟件都是團隊的集體智慧產(chǎn)出。

16db1fdc-3a11-11ed-9e49-dac502259ad0.jpg

17068834-3a11-11ed-9e49-dac502259ad0.jpg

如上是兩大頂級開源基金會@TheASF[6]與@linuxfoundation[7]的知名項目,成千上萬的軟件工程師的集體協(xié)作開發(fā)了達上億的代碼行數(shù)最終才誕生了這些偉大的項目。

而團隊協(xié)作最重要的是成員間的謙虛、尊重與信任。如果沒有這些最基本的條件,集體協(xié)作將會困難重重,團隊成員無法形成穩(wěn)固的合作關(guān)系,時間和精力很容易被內(nèi)耗完。

打造知識共享文化

軟件工程與傳統(tǒng)工程的區(qū)別在于其是一項知識密集型的活動,其中涉及到了大量的知識管理工作。知識管理[8]很容易做差,最終產(chǎn)生了以下的一些問題:

?缺乏心理安全:當(dāng)一個新成員進入組織的時候,會因為缺乏心理安全感而不敢暴露自己不懂的知識,這會阻礙該成員的個人成長,最終也會傳導(dǎo)到團隊的開發(fā)效率上來。?知識孤島:知識沒有分享的文化土壤,每個團隊都悶頭搞自己的項目,會逐漸產(chǎn)生很多重復(fù)造輪子的現(xiàn)象。?知識單點故障:團隊內(nèi)的重要信息只有一個人知道,而這個人又沒有分享給其他人,一旦這個人不在場,團隊將無法正常運轉(zhuǎn)。?團隊知識斷層:團隊內(nèi)的技術(shù)專家并沒有意愿將個人的經(jīng)驗傳授給團隊其它成員,導(dǎo)致團隊的運轉(zhuǎn)離不開一小部分技術(shù)專家,一旦這些人離開,整個團隊將無法正常運轉(zhuǎn)。?鸚鵡行為:這種很容易出現(xiàn)在團隊新成員,由于經(jīng)驗限制或背景上下文了解有限,而在不了解其原理的情況下復(fù)制一些代碼。雖然系統(tǒng)可以運行,但潛在的埋下了一些問題。?知識禁區(qū):團隊成員由于經(jīng)驗限制或不了解背景上下文,而不敢修改代碼庫的某些遺留代碼。

這些都是組織學(xué)習(xí)文化中會遇到的一些挑戰(zhàn)。Google在打造知識共享文化上做了很多嘗試,比如營造安全的學(xué)習(xí)環(huán)境,鼓勵新人通過提問與分享來提高個人的技術(shù)。這些實踐在敏捷過程中也可以看到,比如:

?鼓勵個人反饋的文化(Feedback)。對事不對人,根據(jù)事實對成員提供建設(shè)性的反饋,幫助成員變的更好。?鼓勵團隊成員定期做分享(Session)。比如每周某個成員可以做某個主題的Session,這種實踐能讓分享者對分享的主題有更深的了解。?每日站會同步工作進度。不僅可以讓其它成員了解你所工作的范圍,還能告知其它成員潛在的交付風(fēng)險。?定期回顧(Retro)。團隊定期舉行迭代回顧的會議,回顧最近工作中好的、不好的的方面及相關(guān)建議,最終制定出一些行動來提升團隊的工作效率、質(zhì)量與幸福感。?團隊Wiki工作區(qū)。團隊知識沉淀的體現(xiàn),新人可以通過查閱這些資料迅速了解項目背景上下文。?代碼評審(Code Diff)。代碼評審在Google的軟件工程中是一項全員必須執(zhí)行的實踐。代碼評審可以提高團隊成員的編碼水平,發(fā)掘代碼潛在Bug,識別代碼壞味道,形成統(tǒng)一的編碼風(fēng)格,共享業(yè)務(wù)與技術(shù)知識,消減團隊知識斷層的影響,甚至可以解決鸚鵡行為與知識禁區(qū)的問題。比如我所在的項目上團隊所有開發(fā)成員每天會拿出一小時做集體的Code Diff,雖然成本不低,但其收益也很高。?結(jié)對編程(Pair Programming)。結(jié)對編程看起來是兩個人在做一個人的活,但一般也有兩種模式:乒乓模式(Ping-Pong)與領(lǐng)航員觀察者模式(Navigator-Observer),前者適合以TDD的方式開發(fā),后者適合老帶新。結(jié)對編程是成本高但非常高效的知識共享的實踐,需結(jié)合項目實際的帶寬決定當(dāng)前是否采用此模式開發(fā)。比如我們項目會在交付時間不緊張時采用此開發(fā)模式。

以上的一些實踐需結(jié)合組織或項目的實際帶寬來決定是否使用,比如Code Diff一般是建議或者強制的,而結(jié)對編程是可選的,分享(Session)和回顧可能是定期或不定期的。

領(lǐng)導(dǎo)團隊(Tech Lead

當(dāng)做了一段時間獨立貢獻者(Individual Contributor)后,可能有機會做Tech Lead了。Tech Lead是一個團隊必備的角色,具有一定的職權(quán)影響力,當(dāng)然更多的是采用非職權(quán)影響力去帶領(lǐng)團隊。

如何領(lǐng)導(dǎo)團隊是個復(fù)雜的工作,對技術(shù)人員來說,從技術(shù)到管理是很難的事情。

175839d6-3a11-11ed-9e49-dac502259ad0.jpg

對于此我的個人經(jīng)驗也不是很豐富,所以想了解此部分的推薦閱讀此書原文。當(dāng)然下面這些文章也不錯:

?The Definition of a Tech Lead[9]?What Does a Software Tech Lead Do?[10]?Tech Lead[11]

工程效率測量

沒有測量就沒有優(yōu)化。只有測量到團隊的工程效率后,我們才有可能制定提升效率的行動。Google設(shè)計出了GSM框架來測量工程效率。

1815a4a8-3a11-11ed-9e49-dac502259ad0.jpg

工程效率的測量一般發(fā)生在大規(guī)模團隊或組織級別,我所經(jīng)歷的項目上并沒有此實踐。對小型團隊來說,可以通過簡單的一些問卷調(diào)查這類定性的方式來收集團隊成員的反饋,當(dāng)然也可以通過一些量化的指標(biāo)如流水線構(gòu)建速度、迭代開發(fā)速率、代碼靜態(tài)分析結(jié)果、測試覆蓋率等指標(biāo)測量團隊的工程效率。

總結(jié)

軟件工程是一項復(fù)雜的知識工程,這讓其區(qū)別于傳統(tǒng)的項目管理。Google的軟件工程文化與以人為中心的敏捷過程所倡導(dǎo)的理念有很多相似之處。

但反觀國內(nèi)很多軟件公司雖然也用上了敏捷過程的方法論,但底層的文化土壤還是以過程為中心的方法論,對團隊成員的不信任,沒有分享文化,團隊領(lǐng)導(dǎo)一言堂還是存在的。希望這種現(xiàn)象能隨著國內(nèi)IT行業(yè)的逐漸成熟越來越少吧。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3637

    瀏覽量

    93986
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1950

    瀏覽量

    34988
  • 軟件工程
    +關(guān)注

    關(guān)注

    1

    文章

    31

    瀏覽量

    11112

原文標(biāo)題:Google軟件工程之文化篇

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Testin云測獲智能化軟件工程工作組優(yōu)秀單位榮譽

    隨著人工智能技術(shù)的深度應(yīng)用,大模型等AI技術(shù)在推動軟件行業(yè)智能化進程中的重要性日益凸顯。軟件工程,作為大模型、智能體等AI技術(shù)落地應(yīng)用的前沿領(lǐng)域,正加速推進智能化轉(zhuǎn)型。在這場變革中,企業(yè)、科研機構(gòu)以及眾多行業(yè)專家紛紛投身其中,共同探索智能化
    的頭像 發(fā)表于 01-21 10:46 ?122次閱讀

    特斯拉招募軟件工程師強化無人駕駛與機器人遠程操作

    近日,據(jù)外媒最新報道,特斯拉正緊鑼密鼓地招募軟件工程師團隊,旨在加強其無人駕駛出租車及Optimus機器人的遠程操作能力。這一舉措標(biāo)志著特斯拉在推動自動駕駛與人工智能領(lǐng)域邁出了重要一步。 特斯拉此次
    的頭像 發(fā)表于 11-27 10:26 ?611次閱讀

    DLPC3439軟件編程人員指南

    電子發(fā)燒友網(wǎng)站提供《DLPC3439軟件編程人員指南.pdf》資料免費下載
    發(fā)表于 10-31 10:01 ?0次下載
    DLPC3439<b class='flag-5'>軟件</b><b class='flag-5'>編程</b>人員指南

    歐姆龍的PLC編程軟件有哪些?

    歐姆龍(OMRON)是全球領(lǐng)先的自動化解決方案提供商,其可編程邏輯控制器(PLC)編程軟件在工業(yè)自動化領(lǐng)域具有廣泛的應(yīng)用。歐姆龍PLC編程軟件
    的頭像 發(fā)表于 10-18 15:48 ?1405次閱讀

    淺談PLC編程軟件的特征

    優(yōu)秀的PLC編程軟件通常具備以下特征。
    的頭像 發(fā)表于 09-20 14:59 ?368次閱讀

    esp32用什么軟件編程

    ESP32是一款由樂鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍牙雙模微控制器,廣泛應(yīng)用于物聯(lián)網(wǎng)、智能家居、智能穿戴等領(lǐng)域。要對ESP32進行編程,需要選擇合適的編程軟件和開發(fā)環(huán)境
    的頭像 發(fā)表于 08-19 17:24 ?4328次閱讀

    三菱plcfx3u用什么編程軟件

    三菱PLC FX3U是一款非常受歡迎的小型可編程邏輯控制器,廣泛應(yīng)用于工業(yè)自動化領(lǐng)域。為了編寫和調(diào)試FX3U PLC程序,我們需要使用專門的編程軟件。本文將詳細介紹三菱PLC FX3U的編程
    的頭像 發(fā)表于 06-20 10:15 ?2988次閱讀

    嵌入式軟件工程師如何提升自己?

    的基礎(chǔ) 嵌入式軟件工程師需要具備扎實的計算機科學(xué)和工程知識。因此,在職業(yè)生涯的起步階段,建議將重點放在學(xué)習(xí)基礎(chǔ)知識上,包括數(shù)據(jù)結(jié)構(gòu)、算法、操作系統(tǒng)、編程語言等。通過深入學(xué)習(xí)這些基礎(chǔ)知識,打下堅實的理論基礎(chǔ),為將來
    發(fā)表于 06-12 11:20

    這個工程是用什么上位機軟件編程

    這個工程是用什么上位機軟件編程的*附件:22041701ES-X86-R-Flank8 10 12組.rar
    發(fā)表于 06-03 18:30

    索尼誠邀軟件工程師參與PS免費手游平臺設(shè)計

    據(jù)悉,近日,澳大利亞知名媒體TweakTown發(fā)現(xiàn),索尼互動娛樂正在為其旗下的PlayStation Studios Mobile招募一名資深的軟件工程師,負責(zé)設(shè)計PlayStation的免費手機游戲平臺。
    的頭像 發(fā)表于 05-23 17:08 ?779次閱讀

    共讀《軟件開發(fā)珠璣》

    作為項目經(jīng)理,要處理好五大過程組和十大領(lǐng)域; 作為軟件配置管理,對軟件工程、算法和應(yīng)用開發(fā)還不夠了解,本書介紹的軟件開發(fā)和管理60條經(jīng)驗教訓(xùn),從標(biāo)題就吸引到我了,有趣實用,期待試讀。
    發(fā)表于 05-21 11:28

    嵌入式軟件工程師和硬件工程師的區(qū)別?

    和通信協(xié)議,以及熟練掌握一種或多種編程語言和開發(fā)工具。 主要負責(zé)的任務(wù)和領(lǐng)域 嵌入式軟件工程師的工作涉及到各種任務(wù),主要包括: * 系統(tǒng)設(shè)計:包括確定系統(tǒng)功能、分配資源、優(yōu)化性能等。 * 軟件
    發(fā)表于 05-16 11:00

    AI代碼助手,企業(yè)軟件工程未來主流工具

    AI代碼助手不僅能自動生成和完善代碼,更是一位高效的協(xié)作伙伴,通過激發(fā)創(chuàng)新思維和提升代碼質(zhì)量,助力開發(fā)者提升效率,進一步提升其技術(shù)水平和對各類編程框架的掌握能力。
    的頭像 發(fā)表于 04-12 15:58 ?476次閱讀

    Cognition發(fā)布首款A(yù)I軟件工程師Devin

    據(jù)報道,Cognition公司今日公布了其首款人工智能軟件工程師——Devin,掀起了打造軟件模式變革的序幕。該產(chǎn)品在SWE-bench代碼測驗中展現(xiàn)出卓越表現(xiàn),甚至超過了部分頂級人類工程師的水準(zhǔn)。
    的頭像 發(fā)表于 03-13 10:57 ?660次閱讀
    2013现金棋牌游戏| 百家乐官网棋牌外挂| 24山玄空飞星排盘图| 威尼斯人娱乐场 澳门赌场| 真人百家乐官网网西陆| 百家乐英皇娱乐城| 体育| 百家乐路单规则| 清水县| 百家乐博彩策略| 鸿宝娱乐| 网上百家乐投注技巧| qq德州扑克怎么玩| 三元风水24山水法| 新利娱乐开户| 新澳博百家乐现金网| 菲律宾太阳城投注网| 百家乐稳一点的押法| 汝阳县| 新朝代百家乐开户网站| 百家乐官网机器昀程序| 海王星百家乐的玩法技巧和规则| 百家乐官网三路秘诀| 丽都百家乐的玩法技巧和规则| 至尊百家乐官网奇热网| 皇室百家乐娱乐城| 无为县| 盛大百家乐的玩法技巧和规则| 百家乐官网美国玩法| 大发888真钱游戏娱乐城下载| 24 山杨公斗首择日吉凶| 皇冠网新2| 百家乐高手的心得| 线上百家乐官网平台| 大发888现金存款| 星河百家乐官网的玩法技巧和规则 | 最好的百家乐官网游戏平台1| 大发888在线娱乐城代理| 百家乐视频视频| 网上百家乐官网心得| 蓝盾百家乐娱乐场开户注册|