題:
我該如何與拒絕接受通用軟件工程設計模式的經理打交道?
rexcfnghk
2018-01-09 19:13:19 UTC
view on stackexchange narkive permalink

背景

我是公司的軟件工程師和 TDD從業人員。我的經理還負責編碼(如果需要),並管理他的工程師下屬。

最近與我的經理就使用軟件設計模式進行了激烈的辯論。

問題

通常,當我受命執行功能和代碼時,在我的代碼審查期間,經理會因使用常見的軟件設計模式而受到挑戰。他認為這是不必要的,因此應該盡可能“直截了當”地編碼。我引述直截了當,因為我們似乎不同意“功能”的範圍。在許多情況下,此功能不像我的經理認為的那樣“簡單明了”,並且要求使用設計模式來分離職責並最大程度地減少對(未經測試的)代碼庫的影響。

有兩種常見用法情況下,我將應用設計模式來解決問題:

  • 實現需要更改不可測試的舊類的新功能

    • decorator應用於原始界面,以便可以輕鬆地對我編寫的新代碼進行單元測試,並確保我的代碼與舊版代碼很好地集成。
    • 他的回答是他他發現使用一個接口的多個實現令人困惑,並且他認為用另一個名稱(具有相同成員)創建一個新接口是可行的方法。但是,這違反了依賴倒置原則,因為現在已更改了高級邏輯以適應低級的細節。
    • 我試圖通過解釋我試圖通過最大程度地減少對未經測試的代碼的更改來最大程度地降低風險,再加上我的設計更易於進行單元測試並被證明是正確的,但他認為我的工作量過大。
  • 通過連接未知數來解決不確定性

    • 經常沒有對新功能的要求進行徹底考慮。面對最後期限,我們必須在代碼中留下“漏洞”,以便讓企業下定決心而不影響進度。
    • 例如,我可能正在實現一個接口以從中檢索運行時值一些未知的數據源,我實現了一個裝飾器,該裝飾器在運行時使用 IRuntimeValueProvider 進行檢索。我可以保留實際的實現方式,直到做出決定為止,而不會影響其他業務邏輯。
    • 經理認為我正在引入具有自己不熟悉的名稱的接口,例如 IHttpContentFactory IHttpClientProvider 。他仍然對我的解釋和論證感到不滿意,這些解釋和論證表明這些工廠在構造組件中具有特定目的,並為可擴展性提供了接縫。
      • 在我使用 IHttpClientFactory 來抽象在他的使用者之外構造 HttpClient 的過程中,他特別提到,他認為使用者應該負責構造每個實現細節,這將導致構造邏輯遍及整個地方。

由於類似的設計會議,我們陷入了一些爭論。在一個激烈的爭論中,甚至有人告訴我“ [他]從事編程已有20多年了!” ,這意味著我什至不敢質疑他的權威。

我為緩解此問題所做的嘗試

  • 對一些不太明顯的組件寫了詳細的評論,為什麼我需要這些組件以及它們的作用是什麼 l​​i>
  • 被動地證明了我的設計
    • 與其他大多數組件相比,我構建的組件的bug計數明顯降低
    • 正確預期了需求的變化,這使得實現該目標所需的代碼更改最少要求
  • 當我受到挑戰時,我會通過解釋自己的思維過程和推理來解決他的擔憂。
    • 但是,我仍然因過分設計代碼而受到譴責。
  • 與我的同事們進行了非正式的討論,並私下徵求他們的意見。
    • 他們中的大多數人都讚賞我的做法合理,甚至有人提到他從我那裡學到了很多東西。大多數工程師喜歡與我討論他們的編碼問題,因為我通常可以向他們提供有用的建議或指出他們可能會錯過的一些東西
  • 舉行非正式的演講會來教育我為何我在這里和那裡應用設計模式的其他工程師(和經理)

我不想因為說我的編碼技能絕對比我的經理更好而自大即使在演示,解釋和向他展示了客觀結果之後,也沒有足夠的想法說服他。一方面,我想交付無錯誤,經過良好單元測試和設計的代碼。另一方面,我因設計不佳而不斷受到批評,並且肯定將其強制為“批准”方式來“複雜化”我的代碼。

我們如何找到中間立場?


更新

由於我收到了很多關於遵循軟件工程原則的教條式,甚至過分狂熱的態度的評論,因此我想澄清一下:

我不是在教條,也不是在發狂。我願意關心人們是否閱讀和理解我的代碼,無論他們是否使用/理解設計模式。我要求同事在代碼審查期間提供反饋,以了解他們是否了解我的代碼。他們說他們這樣做,並且他們理解我為什麼以這種方式設計組件。在一種情況下,我對設計模式的使用有助於將配置查找邏輯集中在一個位置,而不是分散在數十個位置,而這經常需要更改。

說實話,看到如此強烈的刻板印象“為什麼工程師不能像經理一樣思考”,我感到非常失望。歸根結底,每件事都可以說是過度設計:為什麼將字段標記為 private 而不是公開所有內容,為什麼要進行單元測試,如果沒有用戶執行一個單元,

我使用設計模式或實際上進行任何軟件工程的動機是最小化風險為公司帶來價值(例如減少了代碼庫中不必要的邏輯散佈,以便可以在一個位置進行管理。

對不起,如果聽起來像是一聲喧。我一直在尋找“我們如何找到中間立場”的答案,而不是像“工程師認為通過應用沒人能理解的設計模式而變得聰明”這樣的屈從性答案。

評論不作進一步討論;此對話已[轉移至聊天](http://chat.stackexchange.com/rooms/71508/discussion-on-question-by-rexcfnghk-how-can-i-deal-with-managers-that-refused-至)。
您沒有提到的一件事情似乎很重要:您在軟件開發方面的經驗如何?具體來說,您從事了多少年的工作,並且從事過多少個明顯不同的問題領域?“問題域”通常等效於“公司”,但可以是大公司內部的不同項目。
您團隊中的其他人是否能夠像您所說的那樣修改/更改您的代碼?
我投票結束這個問題是題外話,因為它在錯誤的網站上。它用於軟件,編程或TDD站點。
@Fattie:這不是編程問題。這裡沒有詢問有關如何編程的單個問題。這是關於員工和經理之間的營業場所人際關係的問題。衝突恰好是編程過度。
嗨,@Ellesedil-我不同意,所以這就是投票的原因!
十一 答案:
Kate Gregory
2018-01-09 19:48:29 UTC
view on stackexchange narkive permalink

您的方式對您有幫助嗎?您是否曾經有一次使用過間接和注入以及額外的接口,並且在最後一刻出現了轉彎,並且所有操作都順暢而精美,而且沒有髒話?即使在以前的工作中,如果您從未能夠在此處提交過該代碼?

我將假設存在。練習講那個故事。這是具體而真實的。不是“ x可能會發生”或“ y可能會發生變化”,而是“從前,我是這樣做的,這就是它的工作原理”。經理(我是這樣說的)對於花費可能發生的事情花錢(相信我,您編寫的其他人一眼不理解的更複雜的代碼是花錢)。他們不想為可能僅基於“書籍學習”和互聯網流行的炒作提供資金。但是,當您借鑒自己的經驗時?完全是另一回事。

我不是工廠,供應商,噴油器之類的忠實擁護者。通常,它們是為永遠不會發生的事情(從MS SQL切換到Oracle)而設置的,或者在這樣做時影響很小(更改保存文件的文件夾)的設置。它們確實在高度可變的安排中佔有一席之地,您似乎在其中。因此,您需要證明他們擁有那個地方。您似乎是從“這是正常的做事方式,我需要一個不這樣做的理由”的立場出發。您的經理來自“這是不正常的;正常是簡單明了的。請給我一個很好的理由在此基礎上再加一層。”為此工作。處理一個過去時真實發生的成功故事,其中的額外工作節省了數天或數週的工作。證明您的工程合理,否則確實是過度工程。

評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/71485/discussion-on-answer-by-kate-gregory-how-can-i-deal-with-managers-that-拒絕-t)。
您不能“從SQL切換到Oracle”,因為Oracle數據庫使用SQL。您是說“從SQL Server切換到Oracle”嗎?
您顯然從未與Oracle一起使用過@MT0。*不寒而栗*
Patricia Shanahan
2018-01-09 21:37:37 UTC
view on stackexchange narkive permalink

您的其中一條評論中的這句話使我感到困擾。

作為一名軟件工程師,“做一些可能沒有的事情”已成為我的第二天性。 -“表面上的好理由”,比如說我提到的未知數。不得不不斷地對技術性很強(有時甚至是自以為是)的主題進行自我解釋,這讓我很煩。

  • 熟練的編程團隊提供了一種不同的編程方法。
  • 儘管存在任何弊端和缺點,但人們認為它應該被普遍使用幾年,長達十年之久。局限性。在此階段中,只需說“我正在應用方法X”,而無需分析X是否是淨收益。
  • 它過時了,但它最有用的想法仍然存在。軟件開發工具包,只要它們帶來淨收益就可以撤出並使用。

在我看來,TDD和設計模式都徘徊在編程第二和第三階段之間方法生命週期。我確信,TDD和許多設計模式在工具包中將擁有很長的寶貴生命,只要它們能帶來的好處多於傷害,就可以使用。我也認為它們可能仍然是習慣性的而不是刻意的思考。您的使用。相反,在應用設計模式之前,請仔細考慮這種特殊情況下的成本和收益。如果其收益確實超過了成本,那麼您應該確切地知道原因,因此,解釋折衷方案不會浪費您。如果其收益不超過成本,則不要使用它。同樣,如果被問到為什麼不使用可能適用的設計模式,那麼您自己對設計的思考應該使您準備好回答。

請記住,您需要在程序的整體可維護性方面考慮這些折衷,而不僅僅是讓您的工作迅速進行。過多的間接操作可能會使將來的程序員更難發現實際情況。

整個事情+1,但對於範例生命週期尤其如此。當我開始工作時,目標就是一切。現在,它們是一個有用的工具。
模式已經進入第三階段:https://softwareengineering.stackexchange.com/a/335894/92517
我承認我可能無法通過“做表面上沒有好的理由”來說明自己。也許用一個例子可以更好地說明問題:有人問我為什麼在特定的地方使用裝飾器->我說是要實現一個涉及更改無法測試的類的新功能,因此我解釋說,我將裝飾器包裝在它上面我可以根據某個運行時值來攔截該調用並將其重定向到新邏輯->我的經理解釋說,很難理解,因為接口有兩個實現。
然後我回答說,這就是接口(如C#/ Java中)用於多態的原因->他對我的解釋不滿意,以至於我們對OO的基本觀點基本不同,這就是為什麼評論說我無法再解釋自己了。這導致我根據舊界面在許多地方進行了更改,以切換到成員完全相同的新界面。
與OO的其餘部分一樣,@rexcfnghk多態只是一個可能帶來收益或增加網絡複雜性的工具。鑑於只有十幾種用途都可以很容易地找到,因此我將在對其進行編輯或添加多態性之間進行選擇,從而使程序更簡單,更具可讀性。
同意需要證明的理由,不同意在12個用例中使用開關而不是多態。
“很難理解,因為接口有兩種實現。”基本上與我對接口的看法相反。當一個接口*沒有*具有多個實現時,我會感到懷疑。我意識到這不是擁有接口的唯一原因,但是以一種通用的方式處理多個實現類一直是我使用接口的主要原因。
雖然一切都PS說的是正確的,我們現在不妨在此站點上公開討論***代碼語法問題***。這項質量檢查很荒謬,您無法彌補。這裡有關於函數命名,反演,接口語法等的實際討論-完全荒謬(有趣)。只需單擊“關閉”。OP,請務必將您感興趣的問題移至comp.sci。網站或最佳地點。
-1
@Fattie:包括有關編碼範例的討論在內的答案實質上在挑戰該問題的範圍。問題很清楚地問到如何解決員工與經理之間的衝突,而不是員工應該如何進行不同的編碼。如果將這個問題轉移到軟件工程上,那麼它很可能成為話題,因為它與員工/經理關係中的衝突有關。
@ThomasW在編寫標記器(從有限狀態機派生,可能有12種以上的情況)時,使用多態性而不是`switch'會對語言解析器造成性能上的損害,並且更難以閱讀。總會有權衡取捨。
感謝@jpmc26,,我有時會使用解析器。但是我不認為這個問題屬於詞法分析器/解析器或FSM的領域-建議使用裝飾器模式,接口名稱(如IRuntimeValueProvider,IHttpClientFactory,IHttpContentFactory等)。
bvoyelr
2018-01-11 00:53:35 UTC
view on stackexchange narkive permalink

我是唯一一個困惑於工作場所的人嗎?我們看到如此多的注意力集中在編碼實踐上,而不是實際的工作場所衝突上?因此,我將採用另一種方​​法。

這是我所看到的問題的概括性方面:

  1. 您所處的領域技術嫻熟,需要合作
  2. 記錄了有關如何進行協作工作的書面程序
  3. 對於如何進行協作工作存在分歧
  4. 其中一位反對者是您的經理
  5. ol>

    在我看來,您的團隊需要聚在一起,就您將採用什麼標準和實踐達成共識,並在全球範圍內採用這些標準,以求好壞。因為對於產品而言,沒有什麼比不斷出現爭執的團隊更糟糕的了,與您的雇主之間的關係也比不斷與他們反复爭論更糟糕

    因此,請讓您的團隊團結一致,商討一些標準,並利用該會議為您所採用的做法辯護。如果得到它們,那就太好了!如果沒有,那就這樣吧。您的工作不是編寫漂亮的代碼。您的工作是交付成品。如果您的老闆(由經理體現)很多人堅持要求您以某種方式這樣做,那麼您是誰來說服他們呢?

    但是,聽起來就像您的大多數團隊都同意您的觀點一樣,因此在這些討論中應該很明顯地看到您的經理很奇怪。如果此人仍然拒絕更改團隊共識,那麼這是功能障礙,我們無法幫助您解決(建議您搬到其他團隊之外)。

您對答案的重點是正確的。來自作為軟件開發人員的我們中的許多人。
我不同意OP提出的設計問題可以通過設置標準來解決。“從不使用技術X”或“在適用的地方都使用技術X”都不可能很好地工作。相反,應該在如何快速實施新功能和長期可維護性之間做出取捨方面進行任何討論。
如果您想編寫精美的代碼*並*交付成品怎麼辦?它們不是真的互斥嗎?
這是因為OP對他如何設計軟件非常具體。而且他的做法也不是沒有爭議,有很多方面可以看,而且很多人都有很強的見解。還有一個問題是:“我該如何與拒絕使用通用設計模式的經理打交道……”,很多人的直覺是:“因為那樣做很愚蠢。”因此,回答如何與經理打交道的問題將成為與上述做法達成的協議。也許,如果從問題中刪除任務的細節,那就更好了。
是的,可能可能需要將其遷移到軟件工程。
“我是唯一一個對工作場所感到困惑的人嗎?**不同意**。
C Bauer
2018-01-10 01:58:26 UTC
view on stackexchange narkive permalink

不幸的是,他是您的經理,並且您並不是以他希望您編寫的方式編寫代碼。如果他是管理層,他可能不打算像大多數開發人員計劃的那樣在2-3年內離開公司。您正在編寫的代碼很難替您的替換程序解決,這就是為什麼他會這樣要求您來構建它。

如果我被允許在這裡做一個假設,那麼您就會知道我可能不合時宜,這是為什麼寫的?如果不只是LOB應用程序,我會感到非常驚訝。設計模式可能會使不需要特別複雜的LOB應用程序的代碼過於復雜。

在我10年的開發中,只需要三遍真正的策略/工廠模式,其中兩個來自工作:

  • 在顯示產品信息的應用程序中,其中某些產品本質上是一堆較小的產品,我們使用一種策略來確定哪個工廠需要將產品信息(通過密鑰請求)轉換為視圖。雖然不是很光榮,但確實做到了。如果我被允許與您對錯誤的謙虛相提並論,那麼在我的整個任期內,我們永遠都不會遇到一個錯誤! (我離開後報告了一個錯誤,但後來發現是用戶錯誤:)。)
  • 在一個向用戶顯示去參加他們正在上課的課程的應用程序中,我們使用了工廠和抽象來允許在Bing Maps API和Google Maps API之間快速切換。這是因為兩者都有成本/收益,而且公司在確定使用哪種方法方面沒有取得進展。最終,我們從家庭辦公室聽說我們已經為其中一個提供了API密鑰,並且能夠在發布前的最後一秒將其轉到該API。

第三個是我正在處理的項目,該項目對Windows服務器進行服務器監視:

  • 我使用一個接口來輸出監視數據和監視器本身。監視器是高度可配置的(基於應用程序設置)。輸出實現會有所不同,具體取決於我是否正在測試新的監視器或要進行部署,因此IOutputInterface會將ConsoleOutput和SqlOutput作為實現可能會有所不同。

請注意,我的個人項目立即比我的工作項目更頻繁地使用模式和控制反轉(IoC)。

如果我能在這之後給您任何建議,那就這樣吧:工作是一項工作,如果您想以自己的方式做事,請嘗試尋找快樂的媒介。技術人員通常不會留任很長時間,因此不值得與管理人員就如何完成工作進行鬥爭。讓您的個人住宅項目成為您想要的模式堆。

善用策略模式。
縮寫“ LOB”代表什麼?
我曾經參與過的項目中,程序員已經在各處應用了設計模式,以前有2個類(一個接口和一個實現),現在有7個類。OP,您真的需要ProxyProviderDecoratorFactory嗎?您正在提高其他所有人的複雜程度。您的經理也可以看到。Google“ YAGNI”,並嘗試簡化操作。
@ThorbjørnRavnAndersenLOB代表業務線,通常是用於支持某種業務流程的應用程序。
@C Bauer“在我發展的10年中,只需要三遍真正的策略/工廠模式”,我很難相信,您是否使用其他任何方式來實現多態?像模板/泛型或函數指針?您如何應用開閉原則?當然,您每次需要新功能時都無法修改界面嗎?
基本上是這樣。如果您做任何有問題的事情(由於問題太高級或其他原因),那麼當您不在身邊時,這將成為您經理的問題。
guru_florida
2018-01-10 09:54:04 UTC
view on stackexchange narkive permalink

如果面對這些人,您將面臨最大的阻力,蚱grass。當我策略性地達到正確的壓力點時,我最有效地帶來了變化。它需要很多耐心和付出很多。在對薄弱環節施加壓力之前,我必須首先適應他們

清空您的頭腦,變得無拘無束。無形,像水。如果將水倒入杯子中,它將變成杯子。 ...現在,水會流動或崩潰。 -李小龍

聽他們問很多問題。 真正地 :傾聽某人的聲音會消除他們抵抗的慾望。了解什麼會激發他們的思維,然後說出他們的語言。由於您的信念是軸向的,此刻,他很可能反映出您的固執,蔑視和沮喪。由於您是下屬,因此他的選擇是不加入自己的團隊,而建立橋樑則是您的責任。

當您看到他時,您將看到自己。當您對待他時,您將善待自己。當您想到他時,您會想到您自己。永遠不要忘記這一點,因為在他裡面你會發現自己或迷失自己。 -海倫·舒克曼(Helen Schucman)

一位詠春拳功夫大師將對手拉近並拉近距離,然後尋找並攻擊他最脆弱的中線。不要僅僅為了贏得勝利而爭辯細節,要找到更大問題的中心線並集中精力解決問題。

我每天與工程師打交道,他們拒絕改組或學習新的編程範例,而我有人給我某種形式的“自打卡以來我就一直在這裡”這樣的論點,這比我數不勝數。我估計我已經輸掉了80%的戰鬥,但是那20%...哇...我做了更改。我聽起來可能含糊不清,但是對其​​中一些關鍵字進行了Google研究,您就會明白我的意思了。

此外,嘗試進行一個新的 squirrel項目,您可以按照自己的方式來做。如果它確實有效並且可以節省時間或金錢,那麼人們將轉而採用您的思維方式。如果沒有新項目,請在業餘時間創建一個項目來解決公司遇到的難題,並且沒人願意花時間解決。

我喜歡你的風格。如果使用得當,類比是一個功能強大的工具。
Dima Tisnek
2018-01-10 12:54:37 UTC
view on stackexchange narkive permalink

簡便的解決方案:退出

硬解決方案:在任何分歧中,一半的麻煩都在你身上

請抽出一些時間,研究其他團隊的工作方式,找出您和另一方之間的阻抗不匹配。儘早經常與他們面對面交談。如果做得好,雙方都會學會理解對方的顧慮和資歷,並且他們會根據您的投入,經驗和堅定的見解來重視您。以下是需要考慮的幾個方面:

  • 優質產品與上市時間
  • 優質產品與優質代碼
  • 智能密碼與自我解釋性代碼
  • 自上而下的公司文化與自下而上的工程文化

如果效果不佳,請考慮另一個角色團隊中的另一個團隊,或者最後是另一個公司

Neo
2018-01-09 19:21:10 UTC
view on stackexchange narkive permalink

我該怎麼辦?

在軟件工程中,編寫(或重寫)代碼的方式總是受某種程度的解釋(意見)。對我來說,您正在採取我所要擔任的職位,但最終您的經理是需要看到光線的人 ....繼續向他展示光線。

我將繼續,盡其所能地痛苦 ,準確地完成您的工作,並指出在使用設計模式時投資的回報 ,而不會使您的經理看上去很糟糕。

請勿更改您的工作除非,否則您會感到自己受到責備的風險更大。不斷向他們展示使用該模式的好處,最終他們應該會出現。

當您繼續奮鬥時,嘗試贏得團隊中的其他盟友。這樣,您不是唯一聽到此聲音的人。

但是在某些時候,如果,他們拒絕您選擇是否適合這種環境為了你。我認為您還沒有到那兒,但是您可能不得不轉向更適合良好編碼實踐的環境。

請記住,您所經歷的這場鬥爭是一場馬拉松強>。如果您想更改編碼文化,則取決於您來證明模式的價值。

我沒有停止自己一直在做的事情,但是我對不斷的辯論和對代碼的自我辯護感到厭倦。作為一名軟件工程師,“做些可能在表面上沒有很好的理由的東西”成為我的第二天性,就像我提到的未知數之間進行交互一樣。不得不不斷地對技術性很強(有時甚至是自以為是)的主題進行自我解釋,這讓我很煩。
並沒有拒絕投票,但我認為建議OP繼續採取行為,導致他與他的經理髮生衝突,這可能不是最好的建議。
如果@cdkMoose希望改變編碼文化,那麼毅力是唯一的方法。並不是說他在此過程中不需要採取任何行動。
也可能是被解僱的良方,比Advil花費更多。如果經理不得不說不夠頻繁,那麼持久性就會變得不服從。在不了解項目歷史記錄的更多細節的情況下,我不清楚OP完全在此處。強制對舊項目進行良好的編碼實踐仍會引起其他團隊成員的困惑和錯誤。
@cdkMoose您提出了一個有效的觀點。
@rexcfnghk“對我來說,“做表面上可能沒有好的理由”是我的第二天性”。等待。您是說出於某種原因而需要深入了解表面的東西嗎?如果是這樣,請向您的經理詳細說明。還是您的意思是說您確實不知道任何正當理由的東西?因為那隻是[貨運培訓](https://en.wikipedia.org/wiki/Cargo_cult#Metaphorical_uses_of_the_term)。
每個項目都填充“正確”和“錯誤”的東西。碰巧的是,在許多項目中,“正確”往往是“錯誤”。忽略經理的明確指示,去做您認為是“正確的道路”的事情,往往不會很順利。頂頭和堅持不懈不會創造一個“快樂的”工作環境。正確的方法是首先證明自己。對於那些一直堅持不懈地使自己的想法被接受的頂尖開發人員而聞名的人,而不是指向互聯網的人,要容易得多。
我目睹了一位高級開發人員被取消罐頭,因為他會以他認為最好的方式去實現功能。經理試圖解釋他想要幾次做事的方式,然後最終將他踢到路邊。沒有人是不可替代的,合規性通常被認為比原始技術技能更為重要。正如我的經理(他是一個非常好的人,並不會輕易開除高級開發人員)隨後告訴我們的那樣,“我需要代碼,您的任何人都可以進行更新/調試/擴展。一個只有一個人就能完成的奇特解決方案理解弊大於利”。
@AndreiROM是的,可能會發生。
-1
@AndreiROM:的故事聽起來還像您的開發團隊錯過了建立新的編碼技能的絕佳學習機會。
@ellesedil-相信您想要的。開發人員不僅僅是程序員,我們是問題解決者。解決方案並不一定總是完美的。
Michael Kay
2018-01-13 00:58:58 UTC
view on stackexchange narkive permalink

首先,我們不能從給出的信息中分辨出誰是正確的。實際上,如果我被要求審核項目,那麼確定誰是正確的人可能仍然會遇到困難,因為您可能在設計時考慮了不同的目標。但是我的猜測是老闆比你更了解目標。

其次,您的問題是:“我如何說服老闆?”答案是,您可能不會。最後,他是老闆。我唯一一次說服老闆改變他對軟件工程的想法是在我們花了一年的時間修補了一個不可靠的軟件後,該軟件以他想要的方式編寫,我們告訴他除了設計之外,我們無法使其可靠。不一樣。

gnasher729
2018-01-14 22:40:58 UTC
view on stackexchange narkive permalink

從少數幾個技術角度來看,我們不知道誰在這裡-可能是經理陷入了過去,或者是新開發人員盲目相信所有炒作。

但是他是您的經理,您不與該經理打交道,您要處理他拒絕做您認為最好的事情,並堅持要做他做的事情他認為是最好的。這就是您的經理做出決定的正常狀態。他最終對成功或失敗負有責任,而不是您,這也是事物的正常狀態。他有權限。他是對的,你不應該質疑他的權威。您可以質疑他是否正確,而不是他的權威。因此,您要么處理它,要么轉到一家按自己的方式做事的公司。

同時,不要以為事情不會像您希望的那樣發展,而是要考慮如何在限制範圍內產生最佳質量的代碼。許多事情可以用不同的方式完成。有“直截了當,設計不好”和“直截了當,精心設計”。爭取後者。

eee
2018-01-15 02:06:07 UTC
view on stackexchange narkive permalink

經驗可以判斷設計模式帶來的好處在將來是否可能實現。如果主管知道並且仍然拒絕該模式,那麼當應用此模式或類似模式無法獲得回報時,他可能會意識到這種情況。有時,經驗會與規則相抵觸,或者更有可能是它們的解釋。

有一種眾所周知的觀點,即更短,更直接的代碼更易於理解,並且對重大更改更開放。

Thorbjørn Ravn Andersen
2018-01-10 16:09:55 UTC
view on stackexchange narkive permalink

我建議結對編程和同行評審。這將幫助您的同事更好地理解您的代碼,因為您需要在執行操作時解釋為什麼如何,而不是事後解釋。

他們要么向您學習,看看它為什麼如此聰明,要么您將學習到最好的程序員編寫其他人可以維護的代碼。

假定他們還不了解,但是他們可能根本不同意這樣做的必要性,或者認為這樣做不划算。而且,OP不能在企業上強加像成對編程這樣的生產系統。他最多只能提出建議。OP似乎是盲目的,可能他完全錯了並且可能錯過了全局。
-1
對我來說,聽上去好像OP傳達了他的觀點“太多,而且太積極”,但是有機會這樣做。他聽起來像他缺乏在一個不是很高級的組織中按自己想要的方式完成事情所需要的軟技能(也許還有耐心)。他的老闆實際上聽起來很生氣-時間讓事情平靜下來並表示他尊重他的老闆,而不是更多地推動工作-他必須優先於保持良好的工作關係,而不是他個人的技術意見(無論技術優劣可能聽起來很固執)。
@StephenG也許。這就是為什麼我將這種情況轉變為指導的情況,希望有經驗的高級開發人員可以指出OP的假設鏈失敗的地方。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...