最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

軟件工程 - 軟件部分

2023-03-21 13:42 作者:貓爺在此  | 我要投稿

作者:addyosmani


今天,我將分享一些軟件工程“軟技能”,這是我在使用 Google Chrome 的前 10 年中學(xué)到的,我在 Google Chrome 擔(dān)任高級員工工程經(jīng)理。在我入職 10 周年之際,我想反思一些一直伴隨著我的教訓(xùn)。我希望這些在您的職業(yè)生涯中對您有用。

成為一名優(yōu)秀的工程師就是要積累經(jīng)驗(yàn)。每個項(xiàng)目,即使是小項(xiàng)目,都是向您的工具箱添加新技術(shù)和工具的機(jī)會。當(dāng)您可以通過將在一個項(xiàng)目中學(xué)到的技術(shù)與在另一個項(xiàng)目中學(xué)到的工具配對來解決問題時,這會帶來更多價(jià)值。這一切加起來。

首先,我會說我不重要、不明智且缺乏原創(chuàng)性。YMMV :)

學(xué)習(xí)新事物

以下要點(diǎn)應(yīng)該可以幫助大多數(shù)初級或中級職業(yè)開發(fā)人員在遵循軟件工程范例中的標(biāo)準(zhǔn)流程和發(fā)現(xiàn)新的最佳實(shí)踐的同時,繼續(xù)前進(jìn)、應(yīng)對不斷變化的技術(shù)并構(gòu)建復(fù)雜的系統(tǒng)。盡可能應(yīng)用首要原則。學(xué)會將問題分解成更小的部分是生活中最重要的技能之一。

精通

精通技術(shù)意味著交付的價(jià)值與工作時間的比率很高。

這意味著您可以識別增加價(jià)值的任務(wù),并幫助您的團(tuán)隊(duì)將精力集中在那個方向上。這也意味著你知道如何避免不為團(tuán)隊(duì)/公司提供價(jià)值的工作——最好的工程師甚至可以引導(dǎo)整個團(tuán)隊(duì)遠(yuǎn)離沒有那么有用的工作。處理最重要的事情。

我經(jīng)常被問到,“我怎么知道我是否在充分利用我的時間?”。幾乎總會有一些任務(wù)可以讓您“感到”忙碌。這里真正的訣竅是確保你在做正確的事情。如果您想移山,請專注于移動針頭的任務(wù),即使該移動很小。

您可以問自己一些問題:

  • 我的目標(biāo)是什么?我關(guān)注的任務(wù)是否符合這些目標(biāo)?

  • 有什么我可以做的不同或更好的嗎?

即使問自己這樣的問題也會非常強(qiáng)大。

批判性地思考并制定有充分理由的論點(diǎn)

批判性思維是使用認(rèn)知技能獨(dú)立思考以做出深思熟慮的決定的能力。投資這項(xiàng)技能可以提高您的思維清晰度。

作為工程師,我們有時會急于立即解決問題,這樣感覺就像我們正在取得進(jìn)展或看起來我們正在對利益相關(guān)者做出回應(yīng)。如果我們沒有充分考慮因果關(guān)系,這可能會帶來風(fēng)險(xiǎn)。換句話說,批判性思維是有目的地思考并形成自己的結(jié)論。這種以目標(biāo)為導(dǎo)向的思維可以幫助您專注于根本原因問題,避免因未牢記因果關(guān)系而產(chǎn)生的未來問題。

概括地說,我喜歡基于批判性思維提出的一些問題是:

  • 我們怎么知道我們正在解決正確的問題?

  • 我們怎么知道我們正在以正確的方式解決問題?(即根據(jù)我們對問題和約束的理解,平衡嚴(yán)謹(jǐn)性和效率)

  • 如果我們不知道問題的根源,我們?nèi)绾未_定根本原因?

  • 我們?nèi)绾螌㈥P(guān)鍵問題分解成更小的問題,以便我們進(jìn)一步分析?

  • 一旦我們有了一個或多個假設(shè),我們?nèi)绾螛?gòu)建工作來評估它們?

  • 如果我們在限制(時間壓力)的情況下不過度損害我們圍繞問題的分析嚴(yán)謹(jǐn)性,我們可以采取哪些捷徑?

  • 證據(jù)是否足以支持結(jié)論?

  • 我們怎么知道什么時候完成?什么時候解決方案“足夠好”?

  • 我如何向所有利益相關(guān)者清晰、合乎邏輯地傳達(dá)解決方案?

我發(fā)現(xiàn)這些問題通常很有幫助。有時我們會解決問題的癥狀,卻發(fā)現(xiàn)還有其他癥狀突然出現(xiàn)。在其他時候,我們可能會快速交付一個解決方案,但會在以后產(chǎn)生更多問題。借助批判性思維,我們可能會挑戰(zhàn)假設(shè),仔細(xì)研究風(fēng)險(xiǎn)/收益,尋找相互矛盾的證據(jù),評估可信度并尋找更多數(shù)據(jù)來建立我們正在做正確事情的信心。

例如,我見過工程師犯的一個常見錯誤是假設(shè)相關(guān)性意味著因果關(guān)系(即僅僅因?yàn)閮杉孪嚓P(guān)并不一定意味著一個導(dǎo)致另一個)。一個批判性的思想家可能會反駁這樣的假設(shè),問我們?yōu)槭裁聪嘈潘鼈兪钦娴摹?/p>

批判性思考者:

  • 提出有意識的問題,清晰準(zhǔn)確地表述它們

  • 收集和評估相關(guān)信息,驗(yàn)證他們?nèi)绾位卮饐栴}

  • 得出合理的結(jié)論和解決方案,并根據(jù)相關(guān)標(biāo)準(zhǔn)和標(biāo)準(zhǔn)對其進(jìn)行測試

  • 在不同的思想體系中以開放的心態(tài)思考,根據(jù)需要識別和評估它們的假設(shè)、含義和實(shí)際后果

  • 與他人有效溝通,找出復(fù)雜問題的解決方案

注意:批判性思維既是“軟技能”又是“硬技能”,因此包含在本文中。

筑牢基地

掌握基礎(chǔ)知識并反復(fù)應(yīng)用它們以獲得新技能。

學(xué)習(xí)基礎(chǔ)知識的長期價(jià)值在于它們是可遷移的。短期是它們可以幫助您做出更好的決策,并使代碼更有效率。

可轉(zhuǎn)移技能

可轉(zhuǎn)移技能是那些你可以從一個項(xiàng)目帶到另一個項(xiàng)目的技能。讓我們從基本面的角度來談?wù)勊鼈儭?/p>

基礎(chǔ)知識是任何軟件工程職業(yè)的基礎(chǔ)。它們有兩層——宏觀和微觀。宏觀層是軟件工程的核心,微觀層是實(shí)現(xiàn)(如技術(shù)棧、庫、框架等)。

在宏觀層面上,您學(xué)習(xí)的編程概念在很大程度上不受語言影響。語法可能不同,但核心思想仍然相同。這可以包括以下內(nèi)容:數(shù)據(jù)結(jié)構(gòu)(數(shù)組、對象、模塊、哈希)、算法(搜索、排序)、架構(gòu)(設(shè)計(jì)模式、狀態(tài)管理)甚至性能優(yōu)化(例如急切與惰性求值、記憶、緩存、惰性- 加載等)。這些是您會經(jīng)常使用的概念,因此向后了解它們可能具有很大的價(jià)值。

在微觀層面,您將學(xué)習(xí)這些概念的實(shí)現(xiàn)。這可能包括:您使用的語言(JavaScript、Python、Ruby 等),您使用的框架(例如 React、Angular、Vue 等),您使用的后端(例如 Django、Rails 等),以及技術(shù)您使用的堆棧(例如 Google App Engine、Google Cloud Platform 等)。其中涉及的細(xì)節(jié)對于獲得有效的專業(yè)知識可能很有價(jià)值,但并不總是可轉(zhuǎn)移的。

通過學(xué)習(xí)基礎(chǔ)知識,您可以獲得技能組合和工具,然后忽略基礎(chǔ)知識并成長。

也就是說,從實(shí)用的角度來說,沒有人有時間在他們職業(yè)生涯的開始就學(xué)習(xí)所有的東西。有一點(diǎn)你不應(yīng)該過度索引基礎(chǔ)知識并學(xué)習(xí)為現(xiàn)實(shí)世界實(shí)際構(gòu)建應(yīng)用程序所需的內(nèi)容。這就是“邊做邊學(xué)”方法的用武之地。

效率

很好地理解基礎(chǔ)知識可以幫助您編寫更高效的代碼。這包括時間復(fù)雜度(運(yùn)行代碼所需的時間)、內(nèi)存使用以及性能和可維護(hù)性之間的權(quán)衡等概念。這些想法允許您在構(gòu)建任何相當(dāng)大的應(yīng)用程序時做出有用的權(quán)衡。速度對于現(xiàn)代應(yīng)用程序通常至關(guān)重要,并且通常會以明顯的方式影響最終用戶體驗(yàn)。

更好的決策

充分了解宏觀和微觀基礎(chǔ)知識可以幫助您做出更好的決策。

您可以根據(jù)任何項(xiàng)目的目標(biāo)和約束,使用您獲得的知識更好地決定使用哪些技術(shù)以及避免使用哪些技術(shù)。這可以幫助您避免為工作選擇錯誤的技術(shù)或工具的陷阱。

“在你明白什么時候不應(yīng)該使用它之前,你還沒有掌握一種工具?!?- @kelseyhightower

軟件工程涉及考慮許多不同的層次——核心語言、實(shí)現(xiàn)、基礎(chǔ)設(shè)施、工具和人員。只有對這些層次有一個表面的認(rèn)識絕對可以讓你更快地構(gòu)建。但真正了解基礎(chǔ)知識(包括 O(n) 時間復(fù)雜度)可以幫助您走得更遠(yuǎn),尤其是當(dāng)語言和框架的格局隨時間變化時。

相關(guān)閱讀:

  • 軟件工程基礎(chǔ)知識的價(jià)值

  • 為什么學(xué)習(xí)基礎(chǔ)知識很重要

  • 了解良好開發(fā)人員心態(tài)的基礎(chǔ)知識

專注于用戶,其余的將隨之而來

從用戶體驗(yàn)開始,然后倒退到您需要的技術(shù)。

史蒂夫·喬布斯 (Steve Jobs) 曾說過一句名言:“你必須從客戶體驗(yàn)開始,然后倒退到技術(shù)。你不能從技術(shù)開始,然后再想辦法把它賣到哪里去?!?。

這句話讓我印象深刻,因?yàn)樽鳛楣こ處?,從想要使用特定解決方案的地方開始太容易了——無論是由于受歡迎程度、開發(fā)人員經(jīng)驗(yàn)還是僅僅是個人偏好——并試圖找到一種合理化使用它們的方法。相反,我們應(yīng)該關(guān)注我們?yōu)檎l而建,他們有什么問題,以及當(dāng)前可用的選項(xiàng)如何不足。

出色的用戶體驗(yàn)來自于結(jié)合兩種觀點(diǎn)——客戶和技術(shù)。向人們展示您認(rèn)為他們想要什么,并注意他們所說的話。當(dāng)然,這個問題空間存在巨大的細(xì)微差別——哪些工程選擇可以讓您在移動硬件上提供出色的體驗(yàn)?哪些選擇會影響工程速度?或規(guī)模?或招聘?最終,我們受益于首先不懈地關(guān)注客戶,然后在我們必須處理的限制范圍內(nèi)導(dǎo)航什么使我們能夠滿足他們的需求。

最好的軟件是由對用戶有同理心的工程師開發(fā)的。

商業(yè)成功取決于客戶滿意度,在軟件的情況下,客戶滿意度通常轉(zhuǎn)化為用戶體驗(yàn)。了解最終用戶如何體驗(yàn)產(chǎn)品或服務(wù)。確保您的解決方案不會妨礙他們高效完成工作的能力。如果您的職位允許您直接與最終用戶互動,請嘗試更好地了解他們的需求和痛點(diǎn)。

提升技能

選擇適合您的用例的內(nèi)容,而不是當(dāng)月的風(fēng)格。

使用“無聊”技術(shù)(經(jīng)過嘗試和測試的技術(shù))與炒作火車是可以的。語言、框架和庫經(jīng)常發(fā)展。選擇有助于交付出色最終產(chǎn)品的技術(shù)。開始新項(xiàng)目時,從“無聊”技術(shù)開始(但很好理解)然后有意地決定從中選擇解決問題的最佳工具。

在選擇要學(xué)習(xí)或使用的新技能時,不要害怕選擇無聊且不在新聞中的東西。當(dāng)涉及到技術(shù)時,無論是語言、框架、庫還是工具,F(xiàn)OMO 可能都不會產(chǎn)生效果。雖然了解使用什么很重要,但您的主要目標(biāo)是交付出色的最終產(chǎn)品。請不要追逐閃亮的新技術(shù),除非您認(rèn)為它們可以為您的解決方案增加價(jià)值。同時,不要因?yàn)檎務(wù)摰貌粔蚨喽乇苣承┦虑椤?/p>

利用新項(xiàng)目學(xué)習(xí)新技術(shù)。

同時,個人和黑客馬拉松項(xiàng)目可以成為學(xué)習(xí)新技術(shù)的絕佳機(jī)會。與在已經(jīng)做出許多決定的現(xiàn)有代碼庫上工作相比,我們中的許多人很少有機(jī)會開始全新的事情。此類項(xiàng)目可能是研究新技術(shù)、評估其優(yōu)勢和劣勢(小規(guī)模)并積累一些對您未來可能有價(jià)值的第一手知識的低風(fēng)險(xiǎn)方式。

保持好奇心,永不停止學(xué)習(xí)

寫下你學(xué)到的東西。它會促使您更好地理解主題。有時,只有當(dāng)您嘗試向他人解釋事情時,您的知識差距才會變得清晰。如果沒有人讀你寫的東西也沒關(guān)系。為你做這件事,你會得到很多。

學(xué)習(xí)應(yīng)該是一個持續(xù)的過程——聲稱對特定技術(shù)無所不知的人往往不是專家。真正的專家精通這項(xiàng)技術(shù),但意識到總有學(xué)習(xí)和改進(jìn)的余地。好奇心驅(qū)動學(xué)習(xí) - 所以如果你對一個新框架感到好奇,谷歌它,閱讀文檔,嘗試教程,閱讀源代碼!學(xué)習(xí)不需要發(fā)生在課堂上。它可以隨時隨地發(fā)生。每天花半小時閱讀課本中的一章、收聽技術(shù)播客、閱讀開發(fā)博客或?qū)W習(xí)一門新的編程語言。

領(lǐng)導(dǎo)者在不知道某事時承認(rèn)是很有力量的。

擁有這種信心會降低對高級工程師必須無所不知的期望。你絕對不需要知道所有的答案,但能夠承認(rèn)你是人,并致力于弄清楚如何與你的團(tuán)隊(duì)一起解決問題是重要的部分。

領(lǐng)導(dǎo)者犯錯也要承認(rèn)。

重要的是要教會您的團(tuán)隊(duì)如何謙虛地處理錯誤以及學(xué)習(xí)和改進(jìn)的愿望。現(xiàn)實(shí)世界并不完美,向您的團(tuán)隊(duì)展示讓他們?yōu)榇俗龊脺?zhǔn)備并不完美是完全可以的。

做一個看守者,而不是主人。

在開源項(xiàng)目的早期階段,像所有者一樣思考是很常見的。您通常直接擁有證明價(jià)值、開發(fā)功能、回答問題和宣傳的權(quán)利。這對于采用某些東西可能非常有用,但可能不是在人員變動或您自己的時間有限時擴(kuò)展項(xiàng)目的最佳方式。

在最初的緊縮之后,另一種思考角色演變的方式是成為看守人,而不是主人??词厝丝赡軙W⒂跀U(kuò)大自己的規(guī)模。這可以通過與其他維護(hù)者、貢獻(xiàn)者和社區(qū)共享盡可能多的知識來完成(通過設(shè)計(jì)文檔、代碼評論和其他記錄在案的最佳實(shí)踐)。它還有助于增加具有足夠上下文的審閱者庫,以便在您不再參與時做出正確的決定。

這通常是項(xiàng)目需要在未來多年可持續(xù)發(fā)展的條件。

技能的深度和廣度

考慮成為萬事通和精通大師是否適合您。

您可以掌握的最重要的技能之一就是學(xué)習(xí)如何學(xué)習(xí)。這應(yīng)該優(yōu)先于說,只是深入研究特定的編程語言或框架。它有助于保持好奇心。一旦你有了這方面的經(jīng)驗(yàn),你可能會質(zhì)疑你應(yīng)該以成為專家還是萬事通為目標(biāo)。

我個人喜歡T 型工程師的想法。這些工程師精通一種或少量技能(T 的豎線),但對構(gòu)建和運(yùn)行產(chǎn)品所需的許多其他技能(橫線)有基本的了解。一些團(tuán)隊(duì)喜歡通過一系列不同的專業(yè)輪換團(tuán)隊(duì)成員,以建立更多的 T 型團(tuán)隊(duì)成員。

我發(fā)現(xiàn),在大中型團(tuán)隊(duì)中,如果有必要,讓在某一領(lǐng)域擁有專業(yè)技能并且具備技能、多才多藝和協(xié)作能力的人來填補(bǔ)其他人的空缺是很有效的。

體驗(yàn)就是學(xué)習(xí)

學(xué)習(xí)一門新語言時,專注于用它構(gòu)建一些有形的東西,讓你有第一手的經(jīng)驗(yàn)。

如果您正在學(xué)習(xí)一門新語言,則無需記住其所有語法或文檔即可成為一名優(yōu)秀的開發(fā)人員。更重要的是知道如何解決問題。通過編寫大量相關(guān)代碼或從現(xiàn)有代碼中學(xué)習(xí)來獲得經(jīng)驗(yàn)。結(jié)果應(yīng)該可以幫助您用該語言編寫高效的代碼。正如這里提到的,“軟件的主要價(jià)值不是產(chǎn)生的代碼,而是產(chǎn)生它的人所積累的知識”。但是,在試驗(yàn)新技術(shù)時請不要在生產(chǎn)中進(jìn)行試驗(yàn)。

技術(shù)復(fù)雜性

通用代碼與特定代碼

專門針對手頭的問題編寫代碼,但盡量找出可以負(fù)擔(dān)得起的地方,使其變得有點(diǎn)通用。

通常,我們試圖編寫盡可能通用的代碼,并最終制作出無助于解決問題的有效代碼湯。相反,專門針對這個問題構(gòu)建,但試圖找出可以讓它變得更通用的地方,這完全消除了我知道如果我沒有想到的話我以后不得不再次重構(gòu)的時間。

有幾個通常討論的原則來討論設(shè)計(jì)復(fù)雜性。在極限編程世界中,您擁有:

  • YAGNI或 You aren't gonna need it,它指出程序員在必要時不應(yīng)添加功能。

  • 做可能有效的最簡單的事情——快速進(jìn)步而不是為未來做計(jì)劃。

這兩個原則都旨在防止過度工程。然而,這些原則可能會被濫用來創(chuàng)建多個不能很好集成的簡單解決方案。

另一方面,您擁有抽象原則,旨在通過抽象和概括在可行的情況下減少代碼中的重復(fù)結(jié)構(gòu)。我更喜歡通過使代碼稍微通用一些來在極端抽象和極端簡單之間采取中間立場。AHA (避免倉促抽象)原則提倡類似的想法。

深層模塊

編寫代碼為其他開發(fā)人員解決復(fù)雜問題,但通過清晰的界面公開功能。

如果您是 API 設(shè)計(jì)者或開發(fā)者——您的責(zé)任是提供一個接口來為其他開發(fā)者簡化復(fù)雜的功能。如果界面太難理解并且給使用它的程序員帶來成本,那么目的就落空了。這種想法反映在Deep Modules的概念中——“最好的模塊是那些收益最大且成本最低的模塊。模塊提供的收益是它的功能,而模塊的成本是它的接口。”

雖然接口的簡單性是可取的,但復(fù)雜的問題有時需要復(fù)雜的代碼來解決(這雖然不是普遍規(guī)則,但通常是正確的)。這種復(fù)雜性最好嵌入代碼中。當(dāng)復(fù)雜的功能被抽象出來時,提供給最終用戶或界面用戶的價(jià)值更高。

與使用較少公共函數(shù)/類實(shí)現(xiàn)相同功能的另一個 API 相比,具有包含某些功能的多個可見函數(shù)和類的 API 更加復(fù)雜且難以搜索。新函數(shù)和類增加了維護(hù)程序員和庫用戶的接口成本。

習(xí)維護(hù)項(xiàng)目

在舊系統(tǒng)中處理遺留代碼時,了解應(yīng)該保留的代碼和應(yīng)該刪除的代碼之間的區(qū)別。

任何高級工程師都應(yīng)該努力理解應(yīng)該留下的代碼和應(yīng)該離開的代碼之間的區(qū)別。

大型、長期的生產(chǎn)系統(tǒng)將有一些錯誤的代碼或沒有充分理由繼續(xù)保留的代碼。理解為什么會有某些東西是健康的(好理由?壞理由?)。刪除壞代碼并保留好代碼。

我曾在許多公司工作過,在這些公司中,人們認(rèn)為遺留代碼是不可觸及的,或者是出于充分的理由按照原樣設(shè)計(jì)的,已經(jīng)被時間流逝了。這可能會導(dǎo)致害怕改變,因?yàn)槟阒皇遣粩嗟叵虮∪醯幕A(chǔ)添加抽象。

軟件行業(yè)已經(jīng)到了這樣一個階段,許多項(xiàng)目都涉及舊系統(tǒng)或遺留系統(tǒng)的維護(hù)和遷移。如果您發(fā)現(xiàn)自己在這樣的團(tuán)隊(duì)中,請不要感到沮喪。通過查看舊代碼,您可以獲得許多特定領(lǐng)域的知識。雖然生產(chǎn)中存在舊代碼/驗(yàn)證可能有充分的理由,但最好不要假設(shè)每一行仍然相關(guān)。

一些軟件工程師對接觸生產(chǎn)中的代碼持謹(jǐn)慎態(tài)度,因?yàn)楹ε乱脲e誤。因此,它們包含條件并為較新的用例重復(fù)一些代碼。這樣的解決方法可能會在那一刻節(jié)省時間,但隨著時間的推移它們會變成維護(hù)的噩夢。不要假設(shè)現(xiàn)有代碼是有福的或絕對可靠的。您可能會解決以前忽略的可擴(kuò)展性或效率的某些方面。

學(xué)習(xí)新項(xiàng)目

試驗(yàn)、創(chuàng)新、快速失敗并更好地解決問題。

當(dāng)您的任務(wù)是從頭開始構(gòu)建系統(tǒng)時,您的學(xué)習(xí)旅程將完全不同。當(dāng)您開始原型設(shè)計(jì)或以迭代方式實(shí)現(xiàn)功能時,您會了解哪些有效,哪些無效。敏捷方法和快速失敗原則可幫助您以更少的資源更早地驗(yàn)證您的想法。它們使您能夠分而治之,解決復(fù)雜的問題。

完成的定義

定義“完成”的內(nèi)容可以節(jié)省時間,因?yàn)樗梢詭椭浪闼璧墓ぷ髁?、制定開發(fā)計(jì)劃并避免以后進(jìn)行不必要的修改。

另一個在處理復(fù)雜性時派上用場的敏捷原則是就完成的定義達(dá)成一致。除了滿足用戶要求和驗(yàn)收標(biāo)準(zhǔn)外,這還可以包括其他條件,例如代碼審查、測試、文檔等。

分階段推出

一個單一的大型版本可能會被分成一系列低風(fēng)險(xiǎn)且易于理解的發(fā)布。

在規(guī)劃大規(guī)模生產(chǎn)系統(tǒng)的發(fā)布時,推出計(jì)劃與體系結(jié)構(gòu)和代碼一樣重要。具有迭代開發(fā)的分階段發(fā)布可幫助您更好地管理由于重大更改而帶來的風(fēng)險(xiǎn)。您還可以使用開發(fā)和測試策略創(chuàng)建發(fā)布策略,以便為復(fù)雜的發(fā)布制定端到端的計(jì)劃。

系統(tǒng)調(diào)試

調(diào)試時,應(yīng)盡量系統(tǒng)、嚴(yán)謹(jǐn)?shù)亟鉀Q問題,以解決所有測試條件。

始終閱讀錯誤消息(和堆棧跟蹤)。那里可能有有價(jià)值的信息,可以幫助您隔離問題,以便解決問題。在尋求調(diào)試幫助之前,數(shù)量驚人的工程師忽略了錯誤消息可以提供的洞察力。假設(shè)你的機(jī)器告訴你哪里出了問題,也可能是正確的,而不是假設(shè)進(jìn)行小的編輯并不斷重新運(yùn)行代碼會更快地解決問題。如果您編寫了一個拋出異常的解決方案并且沒有仔細(xì)閱讀異常,那么您可能是在浪費(fèi)時間。通常,錯誤或異常消息是一個很大的提示,表明實(shí)際上出了什么問題。

設(shè)計(jì)文檔

設(shè)計(jì)文檔的重要性

設(shè)計(jì)文檔不應(yīng)該是事后才想到的,而應(yīng)該是軟件工程過程的一個組成部分。

設(shè)計(jì)文檔是一種無處不在的工具,可以幫助您從需要與您的系統(tǒng)部分進(jìn)行交互的同行或其他團(tuán)隊(duì)那里獲得共識。來自他人的反饋使您能夠找出差距并改進(jìn)您的設(shè)計(jì)。設(shè)計(jì)文檔還可以為將來加入團(tuán)隊(duì)的工程師提供寶貴的幫助。這將幫助他們了解問題空間以及設(shè)計(jì)解決方案時考慮的權(quán)衡和備選方案。設(shè)計(jì)文檔提供了一個空間來捕獲參與設(shè)計(jì)的所有參與者及其作為文檔歷史的一部分的貢獻(xiàn)。這有助于其他人了解是誰推動了具體的決定,以及應(yīng)該聯(lián)系誰進(jìn)行進(jìn)一步的闡述。

文檔處理

協(xié)調(diào)對設(shè)計(jì)文檔的審查,并將設(shè)計(jì)的演變與原始文檔進(jìn)行比較,以驗(yàn)證是否解決了所有相關(guān)約束。

雖然一個人可以記錄設(shè)計(jì),但實(shí)際的設(shè)計(jì)過程發(fā)生在一系列白板會議、隨機(jī)的面對面討論、閑談或電子郵件/電話討論中。只有在將其寫在紙上之后,您才能識別相互矛盾的承諾,并查看您討論的不同部分是否適合。創(chuàng)建初始草案后,協(xié)調(diào)審查可確保所有相關(guān)方都參與其中。但是,可能會發(fā)生實(shí)施的設(shè)計(jì)與記錄的內(nèi)容不匹配的情況,因?yàn)樵诖诉^程中發(fā)生了一些變化。

溝通

謙虛、清晰地溝通并尊重他人。友善不需要任何成本,但影響是無價(jià)的。有些人可能會說良好的溝通需要精力和體貼。應(yīng)該有更多的能量用于慈悲。

溝通是成為有效、多產(chǎn)和高效軟件工程師所需的軟技能或人際交往能力的關(guān)鍵部分。溝通不暢會導(dǎo)致功能不正確、代碼不兼容或攻擊性團(tuán)隊(duì)動態(tài)。溝通可以幫助人們更好地理解需求并防止問題升級。

世界可能會把軟件工程師想象成整天寫代碼的人。然而,為了確保我們的產(chǎn)品對他人有幫助,我們必須將我們的努力與團(tuán)隊(duì)中的其他人以及業(yè)務(wù)和用戶的期望同步。這使得協(xié)作和溝通成為我們工作的關(guān)鍵支柱。

初級開發(fā)人員主要與其他團(tuán)隊(duì)成員、測試工程師和團(tuán)隊(duì)負(fù)責(zé)人交流,以分享想法并討論解決問題的備選方案。隨著我們職業(yè)生涯的發(fā)展,有效完成工作所需的溝通量也會增加。電子郵件、會議和公開演講的數(shù)量增加了。我們必須與業(yè)務(wù)領(lǐng)導(dǎo)、經(jīng)理、利益相關(guān)者和團(tuán)隊(duì)成員進(jìn)行溝通。你的工作越專業(yè),別人不容易理解你的風(fēng)險(xiǎn)就越大。

定制通訊

使用與您的聽眾相關(guān)的語言、概念和詳細(xì)程度。

無論我們對問題或情況的理解程度如何,當(dāng)我們與他人討論時,我們都必須調(diào)整我們的措辭,以便他們能夠快速掌握與他們相關(guān)的內(nèi)容:

  • 與業(yè)務(wù)人員交談時,談?wù)勀龅氖虑閷I(yè)務(wù)的影響。避免使用過于專業(yè)的術(shù)語。

  • 與工程管理人員交談時,傳達(dá)技術(shù)影響或挑戰(zhàn)。

  • 與決策者交談時,您描述的是可用選項(xiàng)及其影響和風(fēng)險(xiǎn),而不是選項(xiàng)如何運(yùn)作的細(xì)節(jié)。

  • 在提供狀態(tài)更新時,請注意還發(fā)生了什么以及您的更新與項(xiàng)目目標(biāo)的相關(guān)性。

同樣的原則也適用于撰寫電子郵件和向更多觀眾展示時。寫下與接收消息的人相關(guān)的內(nèi)容。演講時,您可能必須捍衛(wèi)自己的想法。以深思熟慮的方式表達(dá)問題和回答。膝跳反應(yīng)通常不利于溝通。

善良體貼

友善是一種超能力——運(yùn)用它。

冷靜、友善和樂于助人比切斷別人的聯(lián)系更能讓你走得更遠(yuǎn)。對團(tuán)隊(duì)中的人友善,因?yàn)檫@將有助于使團(tuán)隊(duì)更強(qiáng)大和成功。對團(tuán)隊(duì)以外的人也要友好。平等尊重組織中的所有職能(人力資源、財(cái)務(wù)或營銷)。你可能不會直接幫助他們,但你總能理解他們的工作,感同身受。當(dāng)別人做得好或獲得贊譽(yù)時,向他們表示祝賀或贊賞。善良是會傳染的。您一直友好的人將來更有可能回應(yīng)任何幫助請求。

大方地告訴人們他們做得很好。

雖然在需要改進(jìn)時提供反饋很重要,但如果事情進(jìn)展順利,給人們積極的反饋也很重要。這有助于您的團(tuán)隊(duì)知道他們正在發(fā)揮作用并且受到重視。

NO的力量

說不比過度承諾更好。

我們大多數(shù)人都不擅長在涉及更多工作時說“不”。要么是因?yàn)樗麄儧]有意識到“不”是一種選擇,要么是因?yàn)槲覀兿矚g挑戰(zhàn)。然而,過度使用是一種負(fù)擔(dān),因?yàn)樗鼤?dǎo)致延誤。讓對方知道你盤子里已經(jīng)有什么,并合理估計(jì)需要多長時間是一種尊重的表現(xiàn)。它讓其他人有機(jī)會考慮他們的選擇——詢問其他人或延長他們的時間表。如果管理層知道這會顯著影響產(chǎn)品質(zhì)量,他們就不會要求您在創(chuàng)紀(jì)錄的時間內(nèi)交付產(chǎn)品。如果您是高級經(jīng)理,請授權(quán)您的團(tuán)隊(duì)拒絕壞主意。

“高級開發(fā)人員(或任何有生產(chǎn)力的人)擅長說不。人們會要求你花費(fèi)比你騰出的時間更多的時間。你可以溫和但堅(jiān)定地說不,將人們帶到別處(委托),或者要求人們與你的經(jīng)理是否可以分配更多的時間來幫助他們?!?[1]

您無法取悅所有人——在說“是”與“否”時要格外小心。

領(lǐng)導(dǎo)者對一切都說“不”的對應(yīng)物是對一切都說“是”并且沒有設(shè)定明確的界限。承擔(dān)比您當(dāng)前資源實(shí)際可以合理執(zhí)行的范圍更大的范圍,可能會讓您、您的團(tuán)隊(duì)乃至您的客戶感到心痛。這對于領(lǐng)導(dǎo)者來說尤為重要,因?yàn)槠渌藭竿銥樗麄儜?yīng)該說“是”或溫和地反擊的時間設(shè)定規(guī)范。

納與尊重

當(dāng)您不知道某事時要承認(rèn)并樂于尋求幫助,即使是向后輩尋求幫助。

當(dāng)你不知道某事時,承認(rèn)是可以的。軟件最重要的技能之一是能夠找到答案并從中學(xué)習(xí)

作為高級領(lǐng)導(dǎo)者,要學(xué)會接受你周圍的初級人員可能更了解項(xiàng)目的技術(shù)細(xì)微差別。不懂就承認(rèn),讓低級工程師解釋,也無妨。他們會因?yàn)槟愕恼\實(shí)和對學(xué)習(xí)的興趣而更加尊重你,你會更好地了解正在發(fā)生的事情并為其增加價(jià)值。作為一名初級工程師,您應(yīng)該向年長者公開或秘密地解釋技術(shù)概念,這取決于他們的舒適程度。

信息共享

利用會議和問答環(huán)節(jié)提出正確的問題、交流知識并通知團(tuán)隊(duì)。

主持會議時,不要成為唯一發(fā)言的人。會議是其他人分享想法和提供誠實(shí)反饋的機(jī)會 - 所以傾聽并為其他人貢獻(xiàn)空間。

初級工程師可能會回避問太多問題。如果您是高年級學(xué)生,您可以通過提出上下文來提示他們提出正確的問題?;卮饐栴}時,讓提問的人知道您很高興他們提出這個問題。

靈活性

尖銳地捍衛(wèi)你的觀點(diǎn),但每當(dāng)你有新的證據(jù)與它們相矛盾時,也要重新審視它們。

傾聽他人的意見是溝通的關(guān)鍵部分。這很重要,因?yàn)橐粋€問題可能有不止一種解決方案。與其固執(zhí)己見,不如傾聽并評估其他選擇。也許他們會提出你之前忽略的一個方面。Paul Saffo 的“強(qiáng)勢觀點(diǎn)弱化”原則告訴我們要堅(jiān)決捍衛(wèi)我們的觀點(diǎn),但每當(dāng)我們有新的證據(jù)與它們相矛盾時也要審查它們。這是一種基于科學(xué)證據(jù)的方法,不考慮提出想法或意見的人。

保持記錄

非正式會議后的友好電子郵件有助于重申討論中的要點(diǎn)或承諾。

完全口頭交流的一個缺點(diǎn)是它可能會被遺忘或記錯。記錄所有發(fā)生的事情并在相關(guān)討論上簽字可以消除這種風(fēng)險(xiǎn)。如果您或其他人同意幫助完成一項(xiàng)任務(wù),請通過電子郵件確認(rèn)截止日期,以確保包括您的主管在內(nèi)的每個人都在同一頁面上。記錄此類計(jì)劃外工作在評估討論期間也很有幫助。

誠信

知道什么時候保持安靜并觀察游戲中的動態(tài)。

在某些情況下,您可能不理解某些決策,或者出于技術(shù)和業(yè)務(wù)原因它們沒有意義。這可能發(fā)生在多團(tuán)隊(duì)討論中。善意參與并假設(shè)人們不會冒公開惡意的風(fēng)險(xiǎn)??赡苣涣私馔暾闆r,或者他們有不同的優(yōu)先級。提出問題并陳述您的意見,但不要對最終決定感到生氣或沮喪。

資歷

我們渴望在我們的職業(yè)生涯中成長,無論是在我們的角色還是在能力方面。有些人對高級技術(shù)職位感興趣,而另一些人則希望擔(dān)任領(lǐng)導(dǎo)或管理職位。無論哪種情況,資歷較高的人都會表現(xiàn)出一些關(guān)鍵特征。在您的整個旅程中,您可能會有導(dǎo)師指導(dǎo)您的成長。以下是我培養(yǎng)可以為高級職位做好準(zhǔn)備的素質(zhì)的方法。

資歷與戰(zhàn)略思維

不要在不確定的情況下做出決定或采取行動。

很多時候你會發(fā)現(xiàn)做任何決定都比什么都不做要好。至少能讓別人知道你的傾向。有時,作為領(lǐng)導(dǎo)者,我們沒有花足夠的時間來思考我們的團(tuán)隊(duì)希望我們做出哪些決定,但我們沒有做出,因?yàn)槲覀儾荒?100% 確定我們掌握了所有事實(shí)。我們可以而且應(yīng)該嘗試構(gòu)建盡可能完整的細(xì)節(jié)圖,以做出自信的決定,但這并不總是可能的(例如在時間緊迫的情況下)。這可能會導(dǎo)致團(tuán)隊(duì)長時間等待/不確定,這有助于在信息有限的情況下積極改進(jìn)自己如何做出決策。

領(lǐng)導(dǎo)者是那些拓寬了視野,能夠進(jìn)行戰(zhàn)略性思考并為他人制定路線圖的人。

理想情況下,您的戰(zhàn)略性思考和計(jì)劃以及將您的思維應(yīng)用于更大范圍的能力應(yīng)該隨著經(jīng)驗(yàn)的增長而增長。作為個人貢獻(xiàn)者,您可以專注于分配的任務(wù)或您正在處理的功能。當(dāng)您攀登階梯時,您的工作影響超出了特定的任務(wù)和項(xiàng)目。在權(quán)衡選項(xiàng)時,您會學(xué)會從好處和限制的角度來看待更大的圖景。軟技能的應(yīng)用范圍也越來越大。例如,如果之前您正在為一個團(tuán)隊(duì)做決定或向您團(tuán)隊(duì)中的其他工程師講話,那么隨著您的成長,您的選擇和溝通會影響多個團(tuán)隊(duì)。

以身作則

教你的團(tuán)隊(duì)釣魚。不要總是為他們解決問題,而是溫和地引導(dǎo)他們發(fā)展自己解決問題的技能。

工程領(lǐng)導(dǎo)者授權(quán)。隨著您的資歷越來越高,放棄您的玩具、指導(dǎo)、委派并讓您的團(tuán)隊(duì)取得成功會有所幫助。這就是你衡量效率的方式。這可以通過提出更好的問題而不是(僅僅)給出答案來實(shí)現(xiàn)。

您在評估具有挑戰(zhàn)性的問題時以身作則,并在有人提供解決方案時提出相關(guān)問題。

技術(shù)軌道的資深人士負(fù)責(zé)團(tuán)隊(duì)內(nèi)外的協(xié)調(diào)、談判和建立共識。他們有助于提高整個團(tuán)隊(duì)的產(chǎn)出,而不僅僅是他們自己的產(chǎn)出。作為一名高級工程師,您可能偶爾會通過編碼來獲得新技能或了解實(shí)際情況,但這不是您工作描述的一部分。相反,您是確保體系結(jié)構(gòu)圖中沒有任何遺漏的部分或代碼中沒有漏洞的人。你應(yīng)該能夠用證據(jù)或理由來解釋你的決定,說明它們將如何提供技術(shù)或商業(yè)價(jià)值。

高級工程師應(yīng)該擅長架構(gòu)軟件系統(tǒng)和人類系統(tǒng)或團(tuán)隊(duì)。您可以領(lǐng)導(dǎo)多元化的工程師團(tuán)隊(duì),將任務(wù)委派給他們,指導(dǎo)他們關(guān)心代碼質(zhì)量/性能/簡單性。您可以在需要時提供反饋,并在必要時為他們辯護(hù)。同時,您應(yīng)該能夠推銷自己、您的工作以及您解決具有挑戰(zhàn)性問題的能力,從而在組織中獲得知名度。總的來說,您應(yīng)該管理與團(tuán)隊(duì)和管理層人員的關(guān)系。

擴(kuò)展你的效率。

世界上最好的工程壯舉是由工程師團(tuán)隊(duì)而非個人完成的。因此,如果您想取得更多成就,或者表明您已準(zhǔn)備好在公司中變得更“資深”,請通過協(xié)作和指導(dǎo)來提高您的效率。展示這如何不僅為您自己而且為您團(tuán)隊(duì)的其他成員增加價(jià)值。

當(dāng)我意識到要擴(kuò)大自己的規(guī)模時,我覺得自己正走在成為谷歌高級工程師的道路上,我必須將思維方式從“我”轉(zhuǎn)變?yōu)椤拔覀儭薄Mㄟ^與他人合作,分享我學(xué)到的東西,并專注于提升我周圍人的技能和專業(yè)知識,我們開始完成更多的工作。

當(dāng)您開始作為個人貢獻(xiàn)者時,您可能沒有領(lǐng)導(dǎo)的專門“團(tuán)隊(duì)”,但您可以找到志同道合的人合作(可能與您的目標(biāo)一致)并共同完成比您單獨(dú)完成的更多的工作.?隨著您的資歷越來越高,您會將這種思維發(fā)展為建立團(tuán)隊(duì)和持續(xù)提高您的效率。

冒名頂替綜合癥

承認(rèn)犯錯、不知道答案或?qū)で笾笇?dǎo)是可以的,這有助于克服冒名頂替綜合癥。

在某些時候,我們所有人都覺得不適合特定的角色或工作。冒名頂替綜合癥是真實(shí)且非常普遍的。它甚至?xí)绊懩切┟黠@成功的人。即使其他人向您尋求建議,您也可能會覺得自己像個冒名頂替者。你可能永遠(yuǎn)無法治愈這種綜合癥,但它會促使你產(chǎn)生好奇心并學(xué)習(xí)新事物。

輔導(dǎo)

指導(dǎo)他人

通過提供及時的信息成為護(hù)欄,這樣您的受訓(xùn)者就不會在完全錯誤的地方結(jié)束,而是通過自己做事來掌握。

您可能會發(fā)現(xiàn)自己在職業(yè)生涯的不同時期擔(dān)任導(dǎo)師或受訓(xùn)者的角色。指導(dǎo)不一定是一個正式的過程。您可以尋找機(jī)會指導(dǎo)他人或讓自己接受非正式的指導(dǎo)。指導(dǎo)他人讓您有機(jī)會自己學(xué)習(xí)人際交往能力。以下是指導(dǎo)時要記住的一些要點(diǎn)。

指導(dǎo)是指導(dǎo)人們自己發(fā)現(xiàn)答案,而不是給他們現(xiàn)成的解決方案。允許您的受訓(xùn)者在解決他們的問題時進(jìn)行實(shí)驗(yàn)。他們最適合評估風(fēng)險(xiǎn)和收益。但是,請給他們尋找答案所需的工具。如果這是一個技術(shù)問題,建議嘗試的想法和選項(xiàng),但讓他們做實(shí)際的跑腿工作。讓他們分享他們的想法并仔細(xì)聆聽、提出問題并參與對話。

如果有人無法自行找出解決方案,請向他們展示您將如何處理該問題以及您為什么選擇特定模式來解決它。教他們?nèi)绾畏治鼋Y(jié)果或調(diào)試問題。在您診斷問題、嘗試解決方案、實(shí)施和調(diào)試解決方案時分享您的思考過程。分享您解決問題的技巧,而不僅僅是答案。

全組織指導(dǎo)

確保指導(dǎo)是高級工程師角色的一部分,還有助于在某人調(diào)動到另一個團(tuán)隊(duì)、職位或組織時保留關(guān)鍵的領(lǐng)域知識。

假設(shè)你真誠地指導(dǎo)某人,這也是你工作描述的一部分。在這種情況下,您必須在日程安排中抽出時間進(jìn)行指導(dǎo)活動。這將使您能夠正確地做到這一點(diǎn),并改變您的受訓(xùn)者的生活。一些組織可能還根據(jù)職業(yè)發(fā)展階梯和每個步驟的要求為導(dǎo)師/受訓(xùn)者討論制定了明確的流程。

導(dǎo)師可以為您提供建議,但您是唯一可以采取主動并根據(jù)任何建議采取行動來管理您的職業(yè)和成長的人。

假設(shè)您是一名希望在組織中成長的初級工程師。在這種情況下,只有一條建議適合您。尋找可以幫助您駕馭成長階梯的強(qiáng)大導(dǎo)師。

在您的職業(yè)生涯中,您會遇到您敬仰的教練、導(dǎo)師或同事。他們可以為您提供有關(guān)如何發(fā)展技能的建議,但您是可以采取行動的人。在吸收建議時,請注意有關(guān)技術(shù)的籠統(tǒng)陳述。不同的情況需要不同的原則,適用于一個項(xiàng)目的方法可能不適用于另一個項(xiàng)目。

有效的團(tuán)隊(duì)

建立信任

信任可以團(tuán)結(jié)團(tuán)隊(duì)成員朝著共同的目標(biāo)努力,而官僚主義會使他們分裂。

當(dāng)工程師聚集在一起進(jìn)行思想開放和公正的頭腦風(fēng)暴時,它為推動創(chuàng)新的新想法和不同觀點(diǎn)鋪平了道路。這導(dǎo)致了高效和多產(chǎn)的團(tuán)隊(duì)。然而,只有團(tuán)隊(duì)成員之間的溝通和關(guān)系健康,團(tuán)隊(duì)成員之間的有效協(xié)作才有可能。這里有一些關(guān)于建立、維護(hù)和成為有效團(tuán)隊(duì)的一部分的建議。

建立信任是團(tuán)隊(duì)建設(shè)中最關(guān)鍵的組成部分。整個層次結(jié)構(gòu)的團(tuán)隊(duì)成員之間的信任對于快速完成工作和團(tuán)隊(duì)有效是必要的。團(tuán)隊(duì)成員可能會使用不同的軟件工程過程,例如審查和測試來審查項(xiàng)目的健康狀況。然而,如果沒有信任,這些過程就會變得乏味和官僚。例如,如果您相信某個工程師會處理某些代碼,那么您在代碼審查期間可能會更少吹毛求疵。

了解商業(yè)模式

了解變更對業(yè)務(wù)的影響。

當(dāng)您收到一組新的需求時,了解它們背后的動機(jī)。不要瀏覽需求文檔的“目的”或“業(yè)務(wù)目標(biāo)”部分。提出問題以了解業(yè)務(wù)模型及其與這些要求的關(guān)系。現(xiàn)有代碼庫或與主題專家 (SME) 交談可以提供有關(guān)領(lǐng)域和架構(gòu)的見解。請參閱文檔或?qū)⒐δ芎陀美成涞较到y(tǒng)流程和數(shù)據(jù)流。

“許多軟件工程師喜歡通過技術(shù)挑戰(zhàn)來解決問題。了解事物的業(yè)務(wù)方面并能夠提出具有成本效益的解決方案可能會更有價(jià)值。請記住,您的用戶/客戶也是嘗試做的人他們的工作,像你一樣度過一天或一周。盡量不要讓他們的生活比現(xiàn)在更艱難?!?[1]

增加影響力

對商業(yè)軟件等式的洞察力和敏銳度會增加您工作的影響力。

獲得業(yè)務(wù)和產(chǎn)品的 360 度全方位視圖有助于您為團(tuán)隊(duì)和項(xiàng)目做出積極貢獻(xiàn)。如果您了解銷售或市場營銷的思維方式,您就能更好地做出正確的決定并開展高影響力的工作。隨著您對團(tuán)隊(duì)成功的影響增加,您的工作滿意度和薪酬也會提高。你的上司會認(rèn)識到你作為一個自我啟動者的能力,可以在沒有監(jiān)督的情況下獨(dú)立工作,并通過做適合團(tuán)隊(duì)、項(xiàng)目和業(yè)務(wù)的事情來提高整體效率。

工作與生活的平衡

如果您掌握了技術(shù)能力、人為因素和領(lǐng)域知識,那么您作為軟件工程師的技能將不可避免地受到需求。你的團(tuán)隊(duì)和組織中的人會咨詢你。除了您的工程承諾之外,您還將成為協(xié)作過載的受害者。臨時請求會占用您的時間并阻止您做您熱衷的事情。

時間管理

為深度工作優(yōu)化你的日歷

在日歷上預(yù)留時間專注于深度工作。我已經(jīng)這樣做了很多年,發(fā)現(xiàn)它對于編寫設(shè)計(jì)或策略文檔或處理一個棘手的技術(shù)問題非常有效。深度工作是一種無干擾、高度集中的工作,可以在短時間內(nèi)創(chuàng)造大量價(jià)值。Cal Newport 的 Deep Work 很好地涵蓋了這個主題。

注意力殘留是 Cal 談到的一個想法,它解釋了為什么長時間深度工作如此有益。每次你從一項(xiàng)任務(wù)切換到另一項(xiàng)任務(wù)時,你的注意力都會停留在前一項(xiàng)任務(wù)上。這使得很難將必要的注意力集中在真正重要的事情上。

通過專注于一項(xiàng)任務(wù),深度工作可以最大限度地提高您在有限時間內(nèi)擠出的生產(chǎn)力。沒有干擾,沒有推特,沒有聊天或電子郵件。你為認(rèn)知繁重的任務(wù)保留深度工作。我強(qiáng)烈建議您嘗試一下。

我還發(fā)現(xiàn),改變我的位置有時可以幫助深度工作。我們有時會掉入陷阱,將特定地點(diǎn)(如辦公桌、房間或建筑物)與特定類型的任務(wù)相關(guān)聯(lián),添加一點(diǎn)變化可以幫助我們重振精神。

避免打斷你的工作時間

當(dāng)一個小時的工作由于分心而被分解成幾分鐘的小塊時,你就會感到壓力。確定分心的原因(無論是你還是其他人)并解決它。否則你的一天將不會那么富有成效。

過度工作不是良好職業(yè)道德的一部分。

你永遠(yuǎn)不可能比世界上任何人都更努力。許多公司將員工超負(fù)荷工作作為“標(biāo)準(zhǔn)”,錯誤地認(rèn)為這與擁有良好的職業(yè)道德是一樣的。成功來自許多因素,而不僅僅是過度勞累。

不斷地試圖超越你的標(biāo)準(zhǔn)是不現(xiàn)實(shí)的。

我為此感到內(nèi)疚。如果你想培養(yǎng)冷靜并避免瘋狂的工作環(huán)境,你必須適應(yīng)足夠的環(huán)境。作為經(jīng)理或領(lǐng)導(dǎo),您的團(tuán)隊(duì)可能會帶頭解決這個問題。足夠好可以樹立一個很好的榜樣。

時間是有限的。與其試圖爭取更多時間,不如消除不必要的任務(wù)。

許多指導(dǎo)都談到了更好地重新安排工作。真正的問題是一開始就試圖完成太多。與試圖管理有限的時間相比,無情地消除不必要和浪費(fèi)時間的工作。

你不必知道最后發(fā)生的每一件事。

我們中的許多人都害怕錯過每一個新故事或更新。這就是人們沉迷于每小時查看 Twitter、Reddit、Instagram 等的原因之一。我當(dāng)然經(jīng)歷過這個。實(shí)際上,這些信息中的大部分都沒有那么重要。相反,請嘗試切換到該新聞的摘要視圖或限制您查看它的頻率。

在Jason Fried 的“?It doesn't have to be crazy at work?”中對這個話題有進(jìn)一步的思考。

最好通過學(xué)習(xí)說不、知道何時停止以及計(jì)劃時間以包括工作之間的休息時間來主動避免精疲力竭。

時間管理和保持良好的工作與生活平衡對于各級工程師都至關(guān)重要。經(jīng)常加班會導(dǎo)致倦怠和壓力。壓力會導(dǎo)致其他身心健康并發(fā)癥。在您收工之前解決問題可能很誘人,但隨著時間的推移它可能會成為一種習(xí)慣。

鼓勵您和您的團(tuán)隊(duì)休息、休假和休假。

您的健康和家人至關(guān)重要。如果您作為一名高級工程師意識到這一點(diǎn),并為團(tuán)隊(duì)中的其他人樹立了良好的榜樣,這將促進(jìn)整體幸福感。另一方面,精疲力盡和倦怠會導(dǎo)致工作場所中毒。

隨著您對問題的理解的提高,更新估計(jì)

對于您的工作,幾乎總會有客戶或利益相關(guān)者想知道何時可以交付項(xiàng)目或任務(wù),以及這筆費(fèi)用是否值得。這是完全合理的。有時他們想要在最后期限之前完成,或者在其他地方有依賴項(xiàng)需要支持您需要規(guī)劃的工程工作。

眾所周知,軟件截止日期很難準(zhǔn)確預(yù)測?;诠烙?jì)的最后期限只應(yīng)在項(xiàng)目處于特定階段時給出。隨著時間的推移,隨著我們更多地了解團(tuán)隊(duì)解決問題的能力(“知情”估計(jì)),估計(jì)應(yīng)該得到更新。第一次估計(jì)(“規(guī)模調(diào)整”)通常是最不可靠的,但它是一個可以隨著時間的推移得到完善的起點(diǎn)。這個初始估計(jì)通常是非常保守的——如果產(chǎn)品要求、用戶體驗(yàn)或依賴關(guān)系不清楚,一個更大的保守估計(jì)通常對第一個“尺寸”有幫助。當(dāng)此類估算與 PM 協(xié)作進(jìn)行時,我經(jīng)常在這里取得最大的成功,因此我們都在同一頁面上改進(jìn)它們。

軟件估算的問題在于,當(dāng)?shù)谝淮未致怨浪惚还潭橛涗浻?jì)劃而不是初稿時。當(dāng)關(guān)鍵路徑上的團(tuán)隊(duì)采用它但將對估算的調(diào)整視為工程問題時(相對于知情估算的第 1/n 步),這可能是一個問題。一旦項(xiàng)目獲得批準(zhǔn),更好地弄清楚細(xì)節(jié)——這可能意味著基于對滿足需求的內(nèi)容的更深入理解,三個月的估計(jì)變成了兩個(或四個)。

您幾乎總是希望估算驅(qū)動您的日程安排,而不是盡可能讓日程安排驅(qū)動估算。在我的團(tuán)隊(duì)中,雖然我們有時確實(shí)有不可改變的截止日期(例如會議),但如果估計(jì)超過這些日期(通常)很好 - 更改消息(例如“預(yù)覽”),框架(“在不久的將來”)或踢球未來總是我們可以與領(lǐng)導(dǎo)層討論的選擇。我當(dāng)然承認(rèn)這并不總是微不足道的。當(dāng)確實(shí)要安排時間表時,您可以將工作分解為必須具備的和最好具備的(并將它們移至未來的沖刺),然后檢查必備項(xiàng)是否符合您的截止日期。

如果日程仍然太緊,您還可以提出其他問題,例如“我們可以為這個項(xiàng)目增加更多的工程師嗎?”?以及“是否有大量的范圍縮小仍然會使按時發(fā)貨具有吸引力?”。

取消項(xiàng)目有時是正確的(如果不舒服的話)。

織最健康的長期決定。如果它在有機(jī)會啟動之前被取消,則尤其如此,獲得牽引力然后最終不得不棄用,因?yàn)椴辉倌軌蚓S持其人員配置。如果人們想知道,是的,我讀過Killed By Google。旨在盡可能減少導(dǎo)致項(xiàng)目被取消的情況。我最近取消了一個多年項(xiàng)目,它很粗糙。

這什么時候可以發(fā)生?您可以就某個時間點(diǎn)做出正確的新項(xiàng)目投資決策。在那個時間點(diǎn),明星們很可能已經(jīng)一致(市場契合、組織認(rèn)可、人員配置承諾)以使其完全有意義。一年下來,事情可能會發(fā)生變化——市場、領(lǐng)導(dǎo)力、項(xiàng)目的重要性。定期檢查您在項(xiàng)目開始時所做的假設(shè)是否在其整個生命周期中繼續(xù)保持真實(shí)是至關(guān)重要的。

您對假設(shè)仍然正確的信心越強(qiáng),項(xiàng)目成功啟動并繼續(xù)得到支持的機(jī)會就越大。由于多種原因,取消很難,尤其是有真實(shí)的人以真實(shí)的情感投資于構(gòu)建他們希望推出的東西。作為領(lǐng)導(dǎo)者,引導(dǎo)人們從一個已取消的項(xiàng)目中退出到另一個成功啟動的項(xiàng)目是復(fù)雜的,但對于讓人們回到心理安全、信任和幸福的地方很重要。在客戶方面,請注意用戶信任以及您的長期決策如何影響這一點(diǎn)。


關(guān)于技術(shù)債務(wù):一盎司的預(yù)防勝過一磅的治療

Titus Winters 將技術(shù)債務(wù)定義為“我們今天擁有的代碼和系統(tǒng)與我們希望擁有的代碼和系統(tǒng)之間的差異”,其中某些類型的債務(wù)比其他類型的債務(wù)具有更大的影響。有些債務(wù)可能是由于沒有及早發(fā)現(xiàn)的錯誤(疏忽)造成的,有些是由于事后學(xué)到的(后見之明)造成的,還有一些是由于技術(shù)系統(tǒng)的變化(背景)造成的。

我發(fā)現(xiàn)始終優(yōu)先解決技術(shù)債務(wù)有時很困難,因?yàn)槟荒芸偸橇炕闯霈F(xiàn)的錯誤或未發(fā)生的中斷,因?yàn)槟皟斶€債務(wù)足夠多”。保持團(tuán)隊(duì)對此類工作的興趣并在績效評估期間給予獎勵也非常重要。然而,一旦問題隨著時間的推移真正開始堆積,“治愈”的成本可能會高得多。與污染類似,在多年的過程中,預(yù)防技術(shù)債務(wù)是一種比稍后緩解的成本更低的策略。


你能做些什么來防止債務(wù)累積?除了構(gòu)建新功能外,技術(shù)主管還應(yīng)定期在沖刺中投入時間進(jìn)行清理和償還債務(wù)。審稿人應(yīng)該意識到短期速度的推動實(shí)際上可能會導(dǎo)致進(jìn)一步的問題。經(jīng)理和董事應(yīng)注意批準(zhǔn)與現(xiàn)有項(xiàng)目重疊的新項(xiàng)目,除非您確定權(quán)衡取舍是值得的(例如,解決現(xiàn)有系統(tǒng)中的債務(wù)不值得與構(gòu)建新項(xiàng)目相比)。在所有這些之上,對項(xiàng)目運(yùn)行狀況的監(jiān)控非常重要。

如果沒有休息和良好的工作/生活平衡,您或您的團(tuán)隊(duì)可能會精疲力竭。

職業(yè)倦怠是由于工作場所壓力未得到成功管理而導(dǎo)致的一種疲憊。我看到許多工程師在大流行期間因工作壓力而精疲力盡,但它一直存在于技術(shù)領(lǐng)域。這些天,我問我的下屬,“你的壓力水平如何?我能做些什么來幫助你?”?在每個 1:1。

我對倦怠的經(jīng)驗(yàn)是它發(fā)生得很慢,最后以冷漠告終。您會慢慢開始感到精力不足、沒有動力和精疲力盡,同時盡您所能應(yīng)對工作壓力。您質(zhì)疑自己是否有問題,但沒有意識到您的身體正在加班加點(diǎn)地工作以彌補(bǔ)您缺乏的能量。你不斷地推動自己越來越努力,但最終感覺好像沒有多少東西可以付出了。

大約 5 年前我感到精疲力盡,但我很高興地說我扭轉(zhuǎn)了局面。是什么導(dǎo)致了它?這是一大堆事情。多年來,我一直把工作放在首位,工作時間越來越長,而且說“不”的次數(shù)不夠多。我從來沒有足夠的休息或假期。我平均每晚睡 5 個小時。當(dāng)我在家時,我的精力非常低落,以至于我?guī)缀鯖]有像家人那樣“在場”?!靶迯?fù)”是做與這些事情相反的事情:休息一下,多睡一會兒,從我工作的時間中榨取更多價(jià)值,更好地授權(quán),并有一個明確的“停止時間”工作。

作為管理者,為了避免我們的報(bào)告過時,我認(rèn)為嘗試鼓勵我們的團(tuán)隊(duì)利用他們的休假時間、休息一下并定期檢查人們在壓力方面是否真的做得很好是很重要的。

在大型組織中執(zhí)行可能感覺很慢。有一些方法可以解決這個問題。

我與工程師進(jìn)行了多次對話,歸結(jié)為“為什么在(大型組織)中運(yùn)送 X moon-shot 如此困難?”。Alex Komoroske 有一個很好的類比,將大型組織比作粘液霉菌。也就是說,由于協(xié)調(diào)障礙,即使是執(zhí)行簡單的事情也會開始感覺比您預(yù)期的要慢得多。組織具有復(fù)雜的系統(tǒng)、結(jié)構(gòu)和動態(tài),當(dāng)必須協(xié)調(diào)項(xiàng)目的人數(shù)增加時,不利因素就會增加。

這里有很多因素在起作用,包括低估他人任務(wù)的難度(例如,如果他們正在建立依賴關(guān)系)。您不能忽視這些問題,因?yàn)樗鼤构δ苷系K擴(kuò)散??朔@種不利因素的一種方法是盡可能地解耦事物,以便它們能夠落在一個 OK 的時間線上,并最終匯聚到交付 X。

與其從一開始就解決所有 X,不如避免只為登月計(jì)劃(巨大的風(fēng)險(xiǎn)努力)而努力,而是定義讓您更接近目標(biāo)的屋頂計(jì)劃(釋放價(jià)值的安全步驟)。如果這個問題聽起來很熟悉,我強(qiáng)烈建議閱讀 Alex 的套牌。


關(guān)注問題與項(xiàng)目

假設(shè)您的用戶有未解決的需求(例如問題)。當(dāng)您是特定項(xiàng)目的工程師時,通常會詢問您的特定項(xiàng)目如何將解決這個問題(局部最大值)。在擁有類似形狀項(xiàng)目的大型組織中,很可能會看到多個工程師試圖以這種方式獨(dú)立思考(“我的項(xiàng)目如何解決這個問題?”)。然而,當(dāng)您擁有一個項(xiàng)目組合時,這可能不是很明確。如果用戶可能同時使用您的許多項(xiàng)目怎么辦?如果他們每個人都以略微不同的方式解決問題而不知道彼此的方法,那不是很奇怪嗎?相反,您想問“這個問題的正確端到端解決方案是什么?”?然后回過頭來看看哪個項(xiàng)目或?qū)σ幌盗许?xiàng)目的更改最能全面滿足這一需求。這可能需要讓從事多個相關(guān)項(xiàng)目的人們進(jìn)行更深入的協(xié)作。然而,這可以帶來更好的,

結(jié)論

“追求卓越,與最擅長的人一起工作”——布賴恩·史陶芬比爾 (Brian Staufenbiel)

與可以學(xué)習(xí)的人建立友誼和關(guān)系。對他們的指導(dǎo)、指導(dǎo)、他們的成功和失敗持開放態(tài)度。永遠(yuǎn)不要害怕尋求幫助或見解。在很多情況下,這只是一個問題。

在每個階段,請記住,必須隨著時間的推移培養(yǎng)對給定組織的技術(shù)、業(yè)務(wù)領(lǐng)域和人力資源的掌握。一個組織不能從另一個人那里聘請大師,并期望他們從第一天起就富有成效。如果您是一名優(yōu)秀的工程師,您將為組織的發(fā)展做出貢獻(xiàn)。作為回報(bào),您將獲得新的途徑,讓您獲得新技能并成長。

感謝 Leena Sohoni、Joshua Cruz、Kara Erickson、Jeff Posnick、Houssein Djirdeh 和 Sriram Krishnan 的友好反饋和貢獻(xiàn)。



軟件工程 - 軟件部分的評論 (共 條)

分享到微博請遵守國家法律
饶平县| 台山市| 平陆县| 子长县| 蓬莱市| 瑞金市| 揭东县| 绥滨县| 耒阳市| 将乐县| 兴化市| 姜堰市| 五大连池市| 夏津县| 宝兴县| 永顺县| 株洲县| 芜湖市| 大埔区| 蓝田县| 花垣县| 尼玛县| 南康市| 广元市| 泰顺县| 乌苏市| 云梦县| 西青区| 沂源县| 静宁县| 红安县| 大足县| 土默特左旗| 堆龙德庆县| 浙江省| 旬邑县| 迁西县| 潼南县| 泰州市| 濮阳市| 建宁县|