自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

關(guān)于軟件工程,經(jīng)常被你忽略的一些真知灼見

開發(fā) 項(xiàng)目管理
通常,開發(fā)人員只有在處理別人編寫的代碼并經(jīng)歷了試圖理解和修改它的挑戰(zhàn)之后,才會(huì)意識(shí)到編寫可維護(hù)代碼的價(jià)值。
  • 很少有人從頭開始構(gòu)建代碼
  • 對(duì)領(lǐng)域的認(rèn)知比會(huì)寫代碼更重要!
  • 文檔編寫沒有得到足夠重視
  • 代碼是次要的,商業(yè)價(jià)值才是第一的
  • 你需要和不稱職的人打交道
  • 大部分時(shí)間都在與不確定性打交道
  • 假設(shè)所有東西都有bug
  • 這不是一份理想的工作
  • 美學(xué)是教不來的
  • 即使你不想給出估算,但還是會(huì)有人問你
  • 并非所有的會(huì)議都是無用的
  • 結(jié)論

按照慣例,首先聲明,以下內(nèi)容皆為個(gè)人觀點(diǎn)。但,無論你是經(jīng)驗(yàn)豐富的專業(yè)人士還是剛剛?cè)胄械男“?,都希望下面這些見解能夠給你帶來一些幫助。

我從2023年年中就想寫這篇文章了,但很多觀點(diǎn)我一時(shí)無法全部記住。所以在過去的一年里,我一直在收集想法并把它們記錄下來,現(xiàn)在我有了足夠的觀點(diǎn),下面來分享給大家。

很少有人從頭開始構(gòu)建代碼

在大學(xué),他們會(huì)教你如何編寫一個(gè)400行的程序,從頭到尾地解決一個(gè)問題。你手頭有一個(gè)白板,你需要展示一些花哨的算法,以證明你具有可以找到走出迷宮的知識(shí)和能力。最后,你找到了完美解決方案去解決那個(gè)超簡單的問題。

這看起來很像真實(shí)的世界,對(duì)吧?但現(xiàn)實(shí)并非如此。在現(xiàn)實(shí)世界中,你有一個(gè)幾十萬行的代碼,當(dāng)你試圖弄清楚你的同事在寫這部分代碼時(shí)到底在抽什么風(fēng),你需要在文檔和更了解代碼的人之間來回切換。當(dāng)一周快結(jié)束時(shí),你寫了10行代碼來修復(fù)某個(gè)bug,然后循環(huán)往復(fù),直到人們找到你,向你解釋他當(dāng)時(shí)為什么要這樣寫。

代表開發(fā)者的日常生活代表開發(fā)者的日常生活

專業(yè)的軟件開發(fā)人員在團(tuán)隊(duì)中工作,一般只處理大型軟件代碼庫的一小部分,并且通常只是修復(fù)一些東西,而不是從頭開始構(gòu)建。它并不像培訓(xùn)機(jī)構(gòu)所描述的那樣迷人,而且修復(fù)所付出的開銷要比寫代碼多得多。

對(duì)領(lǐng)域的認(rèn)知比會(huì)寫代碼更重要!

我驚訝地發(fā)現(xiàn),當(dāng)你理解了它是如何(更重要的是為什么)工作,以及工作的基本原理后,編寫代碼會(huì)變得容易得多。

在構(gòu)建銀行移動(dòng)端APP的時(shí)候,你可以更好地理解交易是如何運(yùn)行的,貨幣結(jié)算是如何運(yùn)作的,賬本是如何工作的等。

在為餐廳構(gòu)建銷售系統(tǒng)時(shí),你最好弄清楚服務(wù)員是如何工作的,在烹飪清單中如何做庫存管理,以及信用卡授權(quán)是如何工作的?;旧希@就是你的軟件運(yùn)行域的內(nèi)部和外部。

構(gòu)建醫(yī)療、物流和記賬方面的軟件也是如此。

如果不了解這些,個(gè)體是很難做出有意義的貢獻(xiàn)的,對(duì)雇主來說也就沒有價(jià)值了。例如,如果你有銀行APP的經(jīng)驗(yàn),那么你很容易在金融領(lǐng)域再找到一份新的工作,因?yàn)槟阋呀?jīng)熟悉該領(lǐng)域。

文檔編寫沒有得到足夠重視

大學(xué)經(jīng)常為學(xué)生提供軟件開發(fā)職業(yè)所需的基本技術(shù)技能,如算法和數(shù)據(jù)結(jié)構(gòu)。然而,他們通常不會(huì)優(yōu)先考慮編寫整潔、文檔良好和可維護(hù)的代碼。

圖片圖片

通常,開發(fā)人員只有在處理別人編寫的代碼并經(jīng)歷了試圖理解和修改它的挑戰(zhàn)之后,才會(huì)意識(shí)到編寫可維護(hù)代碼的價(jià)值??上攵?,當(dāng)我看到正確的文檔時(shí),我是多么高興。然而,這些都不是在課堂上學(xué)到的,而是通過實(shí)踐經(jīng)驗(yàn)總結(jié)的。通過編寫文檔和易于理解的代碼可以節(jié)省大量時(shí)間和精力。

代碼是次要的,商業(yè)價(jià)值才是第一的

沒有人會(huì)過來對(duì)你說:“哇,這行代碼寫的真棒!”相反,他們會(huì)說:“用戶對(duì)你寫的功能相當(dāng)滿意”,或者“你的代碼把整個(gè)網(wǎng)站都搞垮了”。

雖然這聽起來可能令人驚訝,但軟件工程師的主要工作重點(diǎn)不是編寫代碼,而是通過使用已編寫的軟件來創(chuàng)造價(jià)值。代碼只是實(shí)現(xiàn)這一目標(biāo)的工具。代碼->軟件->價(jià)值。

你寫的東西需要滿足世界上的一些需求——一些用戶使用的工具,一些降低成本的自動(dòng)化,一些人們?cè)敢飧冻觯ǜ冻鏊麄兊臅r(shí)間、金錢或注意力)的東西。我們可以簡化它。如果你用糟糕的技術(shù)構(gòu)建了一些為用戶提供巨大價(jià)值的東西——恭喜你,你已經(jīng)完成了作為軟件工程師的目標(biāo)。但,如果你用優(yōu)秀的技術(shù)構(gòu)建了一些東西,但卻為用戶提供了糟糕的價(jià)值——那么很遺憾,你并沒有達(dá)到目標(biāo)。

優(yōu)雅的代碼,最佳實(shí)踐,智能解決方案,設(shè)計(jì)模型——這些都是為了你的軟件工程師同事,他們將在你之后處理這些代碼庫,而不是幫助你實(shí)現(xiàn)帶來價(jià)值的目的。(請(qǐng)注意,帶來價(jià)值也可以意味著構(gòu)建一個(gè)不會(huì)崩潰的可伸縮的解決方案,這要求代碼寫的至少像點(diǎn)樣。)

你需要和不稱職的人打交道

大多數(shù)工作環(huán)境中都會(huì)有不稱職的人。不是指他們就是你的經(jīng)理,他們可以是提供API的合作伙伴公司的經(jīng)理,也可以是客戶的某些高管。和不稱職的人協(xié)作是非常令人沮喪和疲勞的。他們創(chuàng)造了一種有害和低效的工作環(huán)境。他們花了太多時(shí)間來做決定,或者做出了糟糕的決定,從而給團(tuán)隊(duì)和項(xiàng)目帶來了負(fù)面影響。這導(dǎo)致了持續(xù)的延遲和返工,浪費(fèi)了寶貴的時(shí)間和資源。

我花了相當(dāng)多的時(shí)間來尋找有效的方法來處理這些事情,同時(shí)又不會(huì)成為一個(gè)混蛋。我認(rèn)為大學(xué)應(yīng)該傳授此技能。

圖片圖片

我發(fā)現(xiàn)了一種有效的方法就是不管別人怎樣,都要專注于高效。我試圖尋找其他可能更有效的解決方案,以及避免無效的人參與。比如,記錄一切也是很有幫助的。這可以提供具體的證據(jù),證明他們的不稱職對(duì)項(xiàng)目進(jìn)程的影響。

最終,應(yīng)對(duì)不稱職的最好方法是積極主動(dòng),找到繞過他們局限性的方法。這可能涉及:

  1. 尋求額外的資源或支持。
  2. 想辦法把任務(wù)委派給更有能力的人。
  3. 實(shí)現(xiàn)故障保護(hù)和回退機(jī)制,這樣事情不會(huì)卡在你這邊。
  4. 以面對(duì)面的方式告訴對(duì)方,他們阻礙了這個(gè)進(jìn)程。
  5. 再說一遍,沒必要當(dāng)混蛋。

大部分時(shí)間都在與不確定性打交道

與人打交道很難。處理不確定性也很難。與不確定的人打交道更難。這就是你作為一個(gè)軟件開發(fā)人員要做的。

人們并不總是知道他們想要什么,有時(shí)他們沒有意識(shí)到一個(gè)簡單的改變可能是非常復(fù)雜的——“哦,你的意思是我們不能僅僅是變更支付供應(yīng)商?而是整個(gè)信用卡付款流程的改變,對(duì)吧?”

他們?cè)诖髮W(xué)里對(duì)你說的一個(gè)大謊言是,你的項(xiàng)目經(jīng)理會(huì)給你適當(dāng)?shù)?、結(jié)構(gòu)化的、簡單的指令,告訴你需要做什么,然后你編寫代碼。“畫一個(gè)曼德勃羅特集”或“渲染一個(gè)環(huán)境遮蔽的Rabbit mesh”。在一天結(jié)束的時(shí)候,你有了一個(gè)解決方案,你和你的經(jīng)理擊掌,然后微笑著回家。

實(shí)際上會(huì)發(fā)生的是,你的產(chǎn)品經(jīng)理會(huì)給你一個(gè)任務(wù)的粗略輪廓,“我們需要一些東西來把我們從A點(diǎn)帶到B點(diǎn),但我們還沒有任何設(shè)計(jì),第三方集成也不會(huì)立馬交付,除非我們告訴他們我們想要什么,X老板希望它是紅色的,Y老板希望它是綠色的?!边@就是軟件工程師的“真正工作”開始的地方——收集需求,弄清楚需要做什么。

需求收集在編程中可不是簡簡單單的。這沒有寫代碼那么有趣。但作為程序員,這需要你花費(fèi)大量的時(shí)間,因?yàn)樗枰c人而不是機(jī)器合作——打電話給提供第三方集成的機(jī)構(gòu),并與他們的開發(fā)人員交談,以了解什么是可行的,什么是不可行的。與利益相關(guān)方坐下來,告訴他們,他們的想法沒有意義,我們可以這樣做,不能那樣做。

編寫第一行代碼可能需要數(shù)周時(shí)間。你需要弄清楚需求,然后弄清楚它需要放在哪里,然后弄清楚它需要如何構(gòu)建,然后弄清楚它可能會(huì)在哪里出錯(cuò),然后才真正開始編寫第一行代碼。

假設(shè)所有東西都有bug

這是很多開發(fā)人員對(duì)于信任的一個(gè)普遍誤解:

  • 你很少充分信任你的代碼,因?yàn)槟阒滥阋彩侨?,也?huì)犯錯(cuò)誤。
  • 你使用的第三方庫可能會(huì)有bug,但它們是由比你更有能力的人編寫的,對(duì)吧?
  • 標(biāo)準(zhǔn)操作系統(tǒng)庫不應(yīng)該有任何bug,對(duì)吧?它們是由更聰明的人寫的。
  • CPU/硬件應(yīng)該永遠(yuǎn)不會(huì)出錯(cuò),對(duì)吧?他們花了好幾年研發(fā)這個(gè)東西;它不應(yīng)該壞。
  • 供電是不應(yīng)該中斷的啊。哎。

但事實(shí)是——我們永遠(yuǎn)不能完全相信我們的代碼、庫甚至硬件不會(huì)在某些時(shí)候中斷;相反,我們需要假設(shè)它會(huì)。即使是聰明人也會(huì)犯糊涂。

圖片圖片

如果你查看任何流行庫(操作系統(tǒng)或應(yīng)用程序級(jí)別)的GitHub issue,你會(huì)看到大量未定義的操作等待被修復(fù)。天啊,我的Linux機(jī)器有多少次因?yàn)榉侄喂收媳罎⒘??這太瘋狂了。

通過假設(shè)一切都可能發(fā)生故障或有bug,我們可以采取措施來預(yù)防或減輕潛在的問題,這最終有助于確保系統(tǒng)的可靠性和穩(wěn)定性。

這不是一份理想的工作

你的大學(xué)或培訓(xùn)機(jī)構(gòu)都會(huì)告訴你,一旦你開始工作,你將擁有的美好生活是什么。但那都只是一個(gè)空洞的承諾。

圖片圖片

  • 這是一項(xiàng)艱苦的工作。你一天大部分時(shí)間都坐在電腦后面。
  • 工作和生活很難平衡。一般其他職業(yè)是,一天的工作在18:00結(jié)束,然后就可以完全忘記工作。但在這不是的。你很可能一直在線并查看代碼,即使是在深夜。
  • 你很少會(huì)有時(shí)間做自己喜歡的事情。而且通常情況下,這是一項(xiàng)需要完成的乏味工作。
  • 職業(yè)發(fā)展機(jī)會(huì)有限。即使你是一名優(yōu)秀的員工,在公司里也可能沒有提升的空間。
  • 壓力的環(huán)境。最后期限、bug和滿足客戶期望的壓力都會(huì)導(dǎo)致壓力倍增。
  • 遠(yuǎn)程工作可能導(dǎo)致孤立。根據(jù)公司和團(tuán)隊(duì)結(jié)構(gòu)的不同,軟件工程師可能會(huì)長時(shí)間獨(dú)處(不包括視頻通話),導(dǎo)致缺乏真正的社交互動(dòng)。
  • 工作保障有限。隨著技術(shù)的不斷發(fā)展,軟件工程師可能會(huì)面臨被更新、更高效的技術(shù)取代的風(fēng)險(xiǎn)。

美學(xué)是教不來的

大學(xué)課程教會(huì)了我們做出優(yōu)秀代碼的基礎(chǔ)知識(shí),但是軟件開發(fā)中的真正美學(xué)是無法在課堂上教授的。

軟件開發(fā)中的美學(xué)是指代碼的整體外觀和感覺。關(guān)鍵在于它是否易于閱讀、理解和維護(hù)。美觀的代碼是干凈、有組織并遵循邏輯模式的代碼。這是一種讓你在看到它的時(shí)候感覺優(yōu)雅的代碼?;蛘咴谠愀獾臅r(shí)候讓你畏縮。

不幸的是,美學(xué)不能在一個(gè)學(xué)期的課程中教授。它是通過經(jīng)驗(yàn)、閱讀大量好代碼和維護(hù)壞代碼獲得的。

經(jīng)理們都喜歡數(shù)字、估算,以及用寫在餐巾上的想法來要求估算。這就是現(xiàn)實(shí)世界的運(yùn)作方式——企業(yè)有一些利潤目標(biāo),但在批準(zhǔn)立項(xiàng)之前,他們需要了解成本。

在大學(xué)里很難傳授這一點(diǎn),因?yàn)闇?zhǔn)確性高度取決于你構(gòu)建系統(tǒng)的經(jīng)驗(yàn)。你多年來解決的問題越多,就越容易估計(jì)未來的工作。

圖片圖片

我不打算討論做估算的最佳方法;有很多方法可以做到。但我要說的是,估算是企業(yè)唯一能理解的東西。如果你開始談?wù)摗拔覀冇虚L期計(jì)劃,但我不知道我們什么時(shí)候能完成”,那么在這種前提下,公司很難生存。

在Mindnow,我們通常會(huì)粗略地估算整個(gè)項(xiàng)目,以估算需要分配多少預(yù)算——這是長期的優(yōu)先事項(xiàng)。然后,我們開始基于沖刺的計(jì)劃,整個(gè)團(tuán)隊(duì)討論、確定優(yōu)先級(jí)并提交到短期可交付成果中,使我們更接近長期優(yōu)先級(jí)。

即使你不想給出估算,但還是會(huì)有人問你

經(jīng)理們都喜歡數(shù)字、估算,以及用寫在餐巾上的想法來要求估算。這就是現(xiàn)實(shí)世界的運(yùn)作方式——企業(yè)有一些利潤目標(biāo),但在批準(zhǔn)立項(xiàng)之前,他們需要了解成本。在大學(xué)里很難傳授這一點(diǎn),因?yàn)闇?zhǔn)確性高度取決于你構(gòu)建系統(tǒng)的經(jīng)驗(yàn)。你多年來解決的問題越多,就越容易估計(jì)未來的工作。

圖片圖片

我不打算討論做估算的最佳方法;有很多方法可以做到。但我要說的是,估算是企業(yè)唯一能理解的東西。如果你開始談?wù)摗拔覀冇虚L期計(jì)劃,但我不知道我們什么時(shí)候能完成”,那么在這種前提下,公司很難生存。在Mindnow,我們通常會(huì)粗略地估算整個(gè)項(xiàng)目,以估算需要分配多少預(yù)算——這是長期的優(yōu)先事項(xiàng)。然后,我們開始基于沖刺的計(jì)劃,整個(gè)團(tuán)隊(duì)討論、確定優(yōu)先級(jí)并提交到短期可交付成果中,使我們更接近長期優(yōu)先級(jí)。

并非所有的會(huì)議都是無用的

既然,軟件工程師的工作并不是花大量時(shí)間寫代碼,那時(shí)間都去哪了呢?答案——會(huì)議。

會(huì)議的目的是確保一切進(jìn)展順利,按時(shí)進(jìn)行。他們讓人們圍繞一個(gè)共同的目標(biāo)保持一致,并讓每個(gè)人都走上正軌。市場(chǎng)營銷部門知道有些東西正在開發(fā)中,他們可以為功能的最終發(fā)布做準(zhǔn)備。項(xiàng)目經(jīng)理了解開發(fā)人員的工作方向,并在需要時(shí)進(jìn)行微小的修正??蛻糁С謳砹俗罱K用戶的反饋。質(zhì)量保證部門分享他們發(fā)現(xiàn)的問題。管理層分享利益相關(guān)方的最新情況。

圖片圖片

所有這些都是相互關(guān)聯(lián)的,而會(huì)議是信息共享的場(chǎng)所。作為一名軟件工程師,需要對(duì)這種信息共享的一部分負(fù)有責(zé)任,因此阻礙它是不負(fù)責(zé)任的。雖然你可能不喜歡這樣,但是必須共享信息以保持系統(tǒng)的效率。

結(jié)論

如果你正在考慮從事軟件工程師的職業(yè),請(qǐng)準(zhǔn)備好面對(duì)這些事實(shí)并擁抱這成長的機(jī)會(huì)。你不太可能給世界帶來多么有意義的改變,但說到底,這只是一份工作,你可以通過其他方式做出有意義的貢獻(xiàn)。

最重要的是——不忘初心,享受工作。

責(zé)任編輯:武曉燕 來源: 架構(gòu)精進(jìn)之路
相關(guān)推薦

2017-05-17 08:52:07

開源數(shù)據(jù)驅(qū)動(dòng)

2009-07-29 17:29:40

.NET和J2EE

2015-08-18 09:28:30

程序員七條箴言

2009-09-17 10:10:10

Oracle學(xué)習(xí)

2023-10-25 13:37:04

Git

2022-09-26 08:26:38

軟件定時(shí)器函數(shù)

2013-05-31 02:18:47

ASP.NET.Net

2015-03-16 09:08:48

編程教訓(xùn)金典老者教訓(xùn)

2011-07-13 09:13:56

Android設(shè)計(jì)

2021-08-04 11:56:09

AI 數(shù)據(jù)人工智能

2022-05-07 10:50:53

數(shù)據(jù)庫Facebook項(xiàng)目

2019-03-25 12:00:13

Go編程語言開發(fā)

2013-04-07 10:40:55

前端框架前端

2009-06-18 09:51:25

Java繼承

2012-09-25 10:03:56

JavaJava封面Java開發(fā)

2011-01-19 10:50:31

軟件設(shè)計(jì)師

2021-09-07 14:35:48

DevSecOps開源項(xiàng)目

2009-06-04 16:28:43

EJB常見問題

2011-03-11 09:27:11

Java性能監(jiān)控

2012-04-19 10:06:55

微軟Windows 8 E
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)