題:
您對那些認為編程工作可以互換的老闆說些什麼?
grn
2016-01-04 10:41:55 UTC
view on stackexchange narkive permalink

我在這家軟件公司裡,有趣的是,到目前為止,我只經歷過兩位經理,但是這兩位經理認為編程工作與砌磚沒有太大不同。他們總是強調,你們應該隨時擔任彼此的工作。

結果,我們的代碼具有“組所有權”-沒有人擁有任何東西,也沒有人負責任何事情。換句話說,每個人都擁有一切,每個人都應對一切負責。如果發生任何故障,無論是誰造成了問題,都可以派人滅火。如果您打開代碼,那就很混亂了,因為不同的人有不同的處理方式。而且,在不花大量時間首先了解別人的情況下修復別人的代碼,很快就會以補丁為基礎的補丁而告終。這永遠不會打擾我們的老闆,因為他們注重結果。即,他們從不費心去看代碼級的內容。

有些人可能不敢相信,但這是絕對正確的,而且我們是一家純粹的軟件公司!

他們的辯解是,當​​每個人都對所有事情負責時,當任何人休假時,其他人可以/應該立即換入並掩蓋他/她,因此他/他可以隨時享受假期。一個人為一個新模塊準備了一個多月的時間,然後放假,就在他離開之前,他告訴我們的老闆所有問題都解決了,它準備開始編碼。因此,在第二天的混亂中,我的老闆告訴我,下週我們必須完成這項工作,您能取下來嗎?

我簡直不敢相信我聽到的消息,那個傢伙已經準備好了它已經存在了一個多月,但從未與其他任何人分享過他的發現,現在我的老闆要我在沒有任何先驗知識的情況下突然拿起它,並在一周內完成。

我不記得詳細信息,但是我很幸運地發現一些後勤原因/藉口來躲開致命的子彈。也就是說,他甚至沒有這樣的觀念:中途接管別人的工作對程序員來說是最痛苦的事情。

這對於軟件公司來說是常見的嗎?您如何建議我向這些(笨手笨拙的)傢伙們傳出壞消息,那就是編程與砌磚大不相同,不會讓他們感到尷尬,也可以說服他們,因為他們都堅信每個人都應對所有事情負責?

傻瓜們,在這裡聊天和討論很多。請注意,評論不適合進行深入討論-一切都[開始聊天](http://chat.stackexchange.com/rooms/33988/discussion-on-question-by-grn-what-would-you-say-掌握編程知識)。也請進一步討論該聊天室。謝謝!
十三 答案:
Cronax
2016-01-04 17:15:35 UTC
view on stackexchange narkive permalink

我會告訴他們他們是正確的,那麼我們如何在實踐中實現該目標?

原則上,這是一個值得稱讚且可以實現的目標。讓我們看一下具體情況:

如果每個開發人員都以自己的風格在自己的小島上孤立地工作,並獨立做出自己的選擇,那將是災難。他們的工作將如何與其他人融合?如果他們生病或休假怎麼辦?如果上帝禁止,他們出了事故而無法工作甚至死亡怎麼辦?如果他們是唯一知道其代碼的工作方式的人,並且他們的同事需要大量時間才能理解該人的工作,那麼這將威脅到公司的連續性!(有時稱為總線係數

同時,每個開發人員都有自己的一套技能和專長。並非每個人都同樣精通所有內容,這沒關係!這就是為什麼您要為實現共同目標而團隊協作的原因。

那麼,為了實現可行的狀況應該怎麼做?

首先,團隊應坐在一起,選擇要採用的一組編碼準則,或將其自己組合在一起。這消除了代碼中的“混亂”因素:由於每個人都將以相同的方式來做事,所以對程序員來說,理解事情的工作方式應該容易得多。

其次,應該建立一個提供知識共享機會的系統。如果您的所有時間都花在編寫代碼上,那麼您就沒有時間共享知識,因此問題仍然存在。程序員應該有時間記錄他們的代碼,或者與其他人(或者最好是兩者)積極地分享他們的知識。還應建立代碼文檔編制準則,以防止由於文檔不完整或不足而引起的潛在問題。雖然專家可能只需短短的幾行就可以理解某項功能,但是不經常使用該功能的人將需要更多的信息以加快速度。該文檔應為第二種情況提供足夠的信息。

理想情況下,這種知識共享由對彼此工作的定期審查來支持。這為審閱者提供了增加他們對代碼的知識的機會,同時還幫助您的團隊提高了代碼的整體質量,因為額外的關注將有助於發現可能的錯誤。它還有助於團隊增進對產品整體質量的了解。如果必須以“ hacky”的方式解決很多問題,那麼顯然產品的質量將比如果使用清晰的代碼可以解決相同的問題要低得多。

類似於理髮師,理想的是所有理髮師(編碼員)都能完成彼此的工作,因為:

  • 它們都使用相同的髮型

  • 所有使用相同或至少等同的技術和工具進行剪裁的人

  • 使用約定的系統記錄他們在理髮上的進度,注意他們做了什麼,他們如何做以及為什麼這樣做

  • 他們經常花一些時間來回顧彼此的工作,從而幫助他們對此很熟悉

要解決OP對問題的“態度”,很可能是現實中,隨著程序員的時間(由於期限和對如何花費時間的期望)以及高度專業化的性質在每個程序員的工作中,這個目標在實踐中都是無法實現的。不管怎樣,幫助您的經理親自了解為何無法實現目標的方法要容易得多,然後指出這種情況,然後為之辯護。因此,如果有人提出一些您認為主要問題的建議,請嘗試以建設性的態度做出回應,即“當然,但是我們如何解決X,Y和Z?” 而不是做出消極的回應。響應,即“由於X,Y和Z,這永遠都行不通!” 。這有助於管理層以更積極的眼光看待您,最終可能會產生一個更好,更愉快的工作環境。

如果實現目標A意味著花費大量時間,精力或金錢來解決問題X,Y和Z,那麼麻煩就不值得了,但這是管理層應該做出的決定,因此作為員工,我們的工作是為他們提供必要的信息,以便他們做出明智的決定。

是的,一個建設性的答案暗示了一個建設性的解決方案。
如果所有管理團隊都可以交換工作,那將是很好的。會長出來了嗎沒問題。
*“如果所有管理團隊也都可以調換工作,那就太好了” *,哈哈,那是一個好人,一個非常好人。
_“如果他們是唯一知道其代碼的工作方式的人,並且他們的同事需要大量時間才能理解該人的工作,那麼這將威脅到公司的連續性!” (https://en.m.wikipedia.org/wiki/Bus_factor)。
-1
這是一個了不起的答案!我建議有一個準則,即至少2位開發人員必須首先理解每一個接受的代碼。它可以是編碼器和審閱者,也可以是一對一起編寫的程序員。現在,足夠頻繁地混合成對使用,這樣您就可以很好地融合編碼方式。
優秀。在閱讀問題標題時,我的第一個想法是“他們是正確的”。當然,這很簡單,但是您已經很好地介紹了它。不,我們不是瓦工,但我們所做的許多工作都是可以互換的,而標準正是使之可行的原因。
編寫代碼比剪頭髮要難一些。一個更好的類比可能是設計建築物。一位建築師離開,另一位建築師進場並完成。如果第一位建築師僅完成了95%的支撐樑的繪製,則第二位建築師將不得不注意到這一點。這可能不是很明顯。需要大量的溝通。
也許在答案上加上一點點即可表明共同所有權需要時間。如果您的老闆希望您擁有共同所有權,那麼他們需要留出時間讓您參與進來。如果整個團隊始終都在交火,那麼您就無法擁有共同所有權。應允許團隊成員自行開會,而無需管理人員的參與或乾預。
@PaulRowe這基本上就是我談論“共享知識”時的意思。我將看看是否可以找到一種方法來澄清這一點。
@superluminary,這就是為什麼您需要一個唯一的建築師從頭到尾全部負責該項目的原因。您的示例非常合適,從根本上講,那些缺失的大樑可能就是您是否製作人煎餅的區別。 (如果牽引力控制子系統有未處理的異常會發生什麼?我敢肯定,我的軟件都無法想像會直接殺死任何人的風險)
@superluminary不會低估進行高級剪髮所需的培訓和技能。
真?您是否將理髮或理髮師與編碼進行比較?剪髮那可笑的比較沒有內在的邏輯。
@lambdapool我沒有在兩者之間進行字面比較,也沒有聲稱兩者相等。我只是*做一個抽象來說明我的觀點*,即兩個具有相同基本技能的同事應該能夠完成彼此的工作,並且開發過程應將必要的事情放在適當的位置以使之成為可能。不要從字面上拿走一切。如果您以某種特定的方式看待任何類比,它都不會失效,但這不會削弱它作為從不同角度審視問題的工具的價值。
@superluminary我認為與醫生進行比較會更好—儘管我們都知道基礎知識,但是在我們擁有一定專業水平之後,因此泌尿科醫師比神經科醫師對大腦的了解不多,所以我可能是一名數據庫專家客戶端javascript技能有限的人。
我認為不同的風格會造成巨大的痛苦。如果您將軟件開發視為工程學,那麼就不會有太多主觀的地方。在給定的上下文中,決策是正確的還是錯誤的。至少,代碼審查是討論某些可行方法的好工具。當我不明白如何編寫代碼時,很難記住這種情況。通常,很難理解為什麼代碼以這種方式工作。無論是功能還是錯誤。好談代碼風格:https://vimeo.com/97329157
Fredrik
2016-01-04 13:45:23 UTC
view on stackexchange narkive permalink

集體代碼所有權是敏捷開發中的一件事,通常被認為是一件好事。但是,看來您的老闆只是從適合他們的敏捷宣言中拿走了他們喜歡的一件事,而忽略了其他所有人。

要實現這一目標,您需要有一個緊密合作的團隊並經常交流。大多數作業應通過結對編程來解決,代碼審查應該是常見且早起的,應該進行高度的測試以激發對質量的信心,最好使用測試驅動的開發等進行開發。

通用的代碼標準甚至不是敏捷的東西,它只是常識。

+1。我認為OP正在嘗試解決錯誤的問題-很明顯,開發人員內部或開發人員與管理層之間沒有通信。經理應該總是能夠要求別人在度假時接一個開發人員。因此,他們需要組織(並在必要時實施)知識共享。
我同意你們倆。預期的實踐是好的,它們正在試圖促使您使用這些方法,現在需要進行思維轉變。團隊需要找到一種方法來共享這些知識,包括代碼審查,設計審查,結對編程以及通常-彼此交談
@SigalShaharabani可能比“ _團隊需要..._”更重要的是“ _ **管理層需要允許**團隊進行..._”,並接受這種情況會嚴重影響生產力。
@TripHound好吧……不是。管理層不在乎,也永遠不會在乎,這就是事實。開發是開發人員的責任-這是他們的日常工作。關鍵是要在進行更改的同時保持交付狀態-向Netscape / Mozilla等公司的經驗學習。並且不要以任何方式將“代碼審查,配對編程...”與開發“分開”。如果測試不是綠色的,則代碼尚未準備就緒。如果構建未運行,則代碼未準備好。如果未審查代碼,則說明代碼尚未準備就緒。這將使您的生活更加輕鬆:)
@TripeHound不僅允許,而且鼓勵和“促進”共享-聽起來像現在,執行此任務的編碼人員都只是簡單地做他們“感覺”正確的事情,並且不互相尋求建議或分享任何他們的計劃,不是因為他們覺得這不會提高他們的生產力,而是因為他們只會因為最終結果而獲得回報。如果編碼人員願意,他們可以加緊並做更多的事情,但這是管理層的工作,鼓勵這種行為。
@Zibbobz(和@Luaan)兩者都是:開發人員必須要進行更改,理想情況下,由知道如何進行更改的人(與知道目的地的人不同)領導。管理層必須鼓勵這種改變**,並且**要知道/接受在這種改變期間生產率可能會下降。
有人真的配對程序嗎?還是我們只是將其用作良好實踐的示例?
我有時會做@djechlin。通常,當畢業生/大三學生加入我的團隊時,他們才能起床,教會他們良好的做法並分享深入的知識。
@djechlin是的,我目前在一個非常敏捷的團隊中工作,我們將程序配對並進行常規代碼審查。它確實確實可以提高質量和更多的知識共享。但是您確實需要一個團隊以及允許和鼓勵它的管理層。
集體所有權是一件好事,但是,如果代碼不平凡,則需要花費一些時間才能將其加載到頭腦中。如果我們要處理體系結構,則可能要花一兩天才能真正掌握它。
@superluminary就是為什麼將事物分成大小合適的子系統並讓每個人單獨地在每個子系統上工作的原因。每個子系統可能都不是男人來自火星,女人不是來自金星。代碼審查/體系結構審查應確保沒有人在構建自己的特殊痛苦之島。
@ChrisMarisic-您不會發現我不同意這一點。傳遞有關該子系統中已完成的內容和尚未完成的內容的信息仍然需要大量的通信。它會拋出什麼異常?我們如何處理錯誤狀態?如果網絡在更新期間出現故障怎麼辦?編寫什麼測試?需要編寫哪些測試?溝通是敏捷團隊的重要組成部分,但似乎在這裡缺少。
@superluminary有些人比我聰明得多,他們將這些問題的答案描述為組織的成熟度。為這些問題提供清晰,明確的答案表示對細節和文檔的承諾,它是實際的重要信息,與軟件項目中超過一半的“文檔”不同。
Pieter B
2016-01-04 15:12:54 UTC
view on stackexchange narkive permalink

我認為問題出在您身上,而不是您的經理。

不同的人在做事上有不同的方式

您需要製止這種權利現在,設置編碼標準,開始進行設計,並且可以互換。

當我的一位同事休假時,我們得到了他正在從事的工作,進展是什麼以及哪些突出問題的文檔。

我認為問題的核心在於,您應該開始更多地以團隊形式工作。

如果您不能以同事的身份到達那裡,那麼實現這一目標是管理層的工作,為此他們會得到報酬。

OP和管理人員之間的關係如何? OP應該能夠採用不同的編碼標準,但是他應該遵循bob使用的標準還是票據使用的標準?
@Taemyr Bob和Bill和OP應該聚在一起並就編碼標準達成共識。如果Bob,Bill和OP無法做到,管理人員的工作就是使這一過程發生。
+1表示“設置編碼標準,開始使用設計”。代碼的共有所有權是一個標準。當程序員說“不同語言”時,這只是一個問題
“我認為問題的核心是你應該開始更多地作為一個團隊來工作。” =>我們*全部*需要在該論壇中為單個句子添加“ +100”按鈕。
我從來沒有在一個沒有領導過任何團隊的團隊工作過,但我只關心以相同的方式編碼。如果他/她不是團隊負責人,您如何建議OP使每個人都同意並遵循編碼標準?
-1
在您的答案中,您說在什麼地方讓程序員設置編碼標準,使用設計並可以互換是一項管理工作?也許您應該對其進行編輯以使其突出。
-1
您說:“我們得到了一個文檔……(說)文檔所在的位置。”大聲笑。如果找不到,該怎麼辦?
IME,如果沒有管理層的大力支持,您將無法從其他程序員那裡買來製定標準,等等。不是團隊領導的人將無法實現您的答案。我感覺到您的團隊在加入時已經在執行您所描述的事情,而您還沒有看到沒有完成他們的團隊或沒有參加使他們就位的團隊。
剛開始閱讀時,我以為OP是在說人們在使用不同的編程語言,這就是為什麼它看起來如此混亂的原因。但是,現在我認為這是編碼風格的問題,這實際上是關於開發人員聚集在一起,共享知識並建立最佳實踐的問題。我同意這個答案。
“我認為問題的核心是您應該開始更多地作為一個團隊來工作。”參見,那是一個管理問題。這個問題的核心是,如果一切都已描述,那麼這很可能是一個問題。那些擺脫管理人員的公司,因為這些人沒有乾他們的工作。
CTO負責設置編碼標準,您需要進行代碼審查和配對編程,以在組織中進行傳播。如果這些事情沒有落實到位,那不是開發人員的錯。
@superluminary CTO可能不在乎編碼標準,因為它的細節太細微了。如果這是一家只有幾個開發團隊的小公司,則取決於CTO。通常,這取決於負責多個開發團隊的人員。下一代的大小只是不關心細節的低層次,他們將關注企業範圍的*互操作性*而不是單獨的代碼行。
優秀的軟件開發人員將為團隊帶來解決方案,並填補管理方法中的空白。 OP開發人員並未擔任該領域的專業專家。相反,他指責管理層不了解自己的局限性。 ...他應該認識到團隊和軟件的局限性,並意識到他未能實現管理目標,無法與其他專業人員一起設定切合實際的期望和技術開發目標,從而使團隊和管理人員處在同一位置。
RemcoGerlich
2016-01-04 15:13:37 UTC
view on stackexchange narkive permalink

每個程序員都可以在軟件的每個部分上都能很好地工作的集體代碼所有權是一個理想,應該針對(因為好處是實實在在的),但要付出艱辛的努力。

團隊需要實施一種編程風格,以便每個人都可以立即識別代碼。團隊需要進行嚴格的代碼審查,以便在編寫代碼後就立即共享一點代碼的知識,並確保質量的通用標準。您需要使用“完成的定義”,以確保在對文檔進行記錄,測試和檢查之前,沒有任何事情稱為“完成”。團隊的新成員需要時間和培訓來掌握所使用的所有技術。

如果管理人員在沒有首先投資實施過程的情況下就要求這種過程的結果,那麼他們是不現實的

我認為您應該與同事討論您想對工作流程進行什麼樣的更改以使其更可行,例如從代碼審查或結對編程開始,或者就通用的編碼風格達成共識。 。

然後,去找您的經理,說些類似

的話,我知道您希望所有程序員都可以互換,這樣我們可以解決可能出現的任何問題。但是,我們還不存在-我們所有人實際上只知道圍繞部分代碼庫的方式,很難適應其他人的工作方式。 但是,我們確實認為這是一個好主意,因此我們建議實施X和Y以開始朝著這個目標努力。

我認為可以通過列出OP的步驟來獲得此答案,這將改善上述答案,而這是最後一段的必要條件。 IME通常是一個程序員關心此類問題,其餘的則不想讓其他人告訴他們如何編碼。
@AmyBlankenship:我同意一位程序員的關心,但是我不能為這個問題添加答案(因為作為團隊中的一位程序員,我還沒有找到如何做的...),我覺得它也會成功遠遠超出了所問的問題。無論如何,他需要說服管理層,如果管理層開始推動變革,事情就會發生變化。作為一個團隊成員,管理層對我的經驗並不在乎,您做不到。
“代碼樣式”參數被誇大了。共享樣式可以解決某些團隊問題,但不能解決根本問題。樣式指南很有用,因為開發人員的文盲。開發人員需要練習閱讀其他代碼才能識字。 ...一個只能閱讀自己的英語論文的人不是英語素養的人,一個不能閱讀其他開發人員的代碼的開發人員同樣是文盲....如果這不是很麻煩,請下載並重寫一個大型的開源項目,每月4-6個月。您將對如何輕鬆閱讀代碼感到驚訝。
@Nathaniel:,我想到的是一位尊敬的同事,他寫了800多個行的功能,我發現它不可讀,而且他認為是有品味的問題。他用很多小的方法不理解我的課。當然,我們的代碼閱讀技巧總是可以提高的,但是我希望對此達成某種協議。當然,強調測試也可以解決該問題(他無法對功能進行單元測試)。
如果有人使用OO語言來實踐程序編程的方法,則應予以糾正。每種語言都有大量說明方法使用正確的文檔。方法只能執行方法名稱所描述的工作。例如,如果他們碰巧將其方法命名為DoAllTask​​sAssociatedWithTheCreationOfANewUserAndUserProfile,則該方法可能很大,但您應該能夠使用相同的方法。您可能會指出,它有2個問題。另一方面,如果只說SaveUser,並且它執行了許多其他默認工作。
Patricia Shanahan
2016-01-04 15:47:58 UTC
view on stackexchange narkive permalink

在我看來,開發人員和管理人員在從個人代碼所有權到共同責任的頻譜上都處於極端相反的立場。

開發人員可以做更多的事情來實現管理人員的理想:

  • 編碼標準。不應混亂,因為不同的人有不同的做事方式。
  • 考慮對編程。這樣,至少有兩個人可以理解每個更改。
  • 養成尋找根本原因的習慣,而不是在補丁上應用補丁。我認為大多數經驗豐富的程序員都必須找出他們未編寫的代碼中的錯誤。確實需要花費時間和精力。
  • 文檔,審閱,文檔,審閱...。這個人已經工作了一個月的設計應該已經被一些人寫下並理解了。人。

您可能無法獲得經理想要的最大靈活性,但是您應該能夠超越所有人,只有一個可以為每個人工作的人一段代碼。您有時可能需要告訴他們“ Joe或Nancy可以更快地做到這一點”,然後讓他們決定是否支付費用讓其他人來收取。

除了我更願意看到好名字(例如,httpResponseData而不是data)和測試(工作且簡單)而不是文檔以外,我在所有方面都達成了一致。後者是主觀的,並且保證是不完整的(否則將是代碼)。
@l0b0在代碼方面,我同意您的看法。我希望在諸如所需的特殊設置,專用的工具,內部標準與標準之間的差異以及其他難以理解的事物(如閱讀代碼和通常是部落知識)方面有所不同。
如果沒有完整記錄接口,那麼@l0b0代碼將更難以閱讀。有時我不得不深入研究幾層,才能回答一個簡單的問題,例如“該指針是否允許為空?”。
Jane S
2016-01-04 10:50:09 UTC
view on stackexchange narkive permalink

簡短的回答: b>指出它是多麼的荒謬。

我以前確實遇到過這個問題,我只是說了些類似的話:

如果需要腦外科手術,您會去看足科醫生嗎?他們都是醫生,對嗎?!

您去找裁縫剪頭髮是因為裁縫就像美髮師一樣使用剪刀?

然後指出,每個專業都有非常不同的技能集。告訴他們編程是一樣的。一些開發人員在一個領域中技能很高,但是在另一個領域中卻完全不知所措。

並不是說您不能學習其他技能,但這需要時間和意願。要。

技能交叉對於實現業務連續性非常有用。在我的辦公室裡,我是唯一的.net開發人員,我們周圍有很多C#。如果我被公共汽車撞到,他們就會被帶走。
@Gusdor參見上面的評論。沒有人否認資源冗餘和知識共享的必要性。但是,您不會將系統的密鑰交給沒有適當技能或經驗的人。
我不認為此答案適用於此,因為OP沒有提及其他技能。這與代碼所有權有關。
如果其他人指出這太荒謬了,那就太好了。我當時正在管理一台價值100萬美元的工業鍋爐的供應商。我們對控制原理有很大的爭議,這導致BMS(燃燒器管理系統)在現場重新編程。修訂後的文檔通過現場時,檢測人員要求辦公室人員對其進行審核。他的第一個問題:“什麼是BMS?”我對老闆的回應讓他感到寬慰:我不會接受Pauls在這些文檔上的簽名,因為他沒有參與有關控制哲學或其在BMS現場的實施的激烈討論。
@Chris如果希望您從經驗為零的另一個團隊那裡獲得大型,複雜的系統,我的答案仍然適用。您可能了解開發工具和語言,但您不一定具有領域知識,也不一定是團隊如何設計和實現它。是的,文檔,但是如果由於生產中斷而承擔了修復他人系統的任務,那麼即使是最有經驗的開發人員也要花時間來修復它。
如果您要去足病醫生,但他病了,您希望替換的足病醫生得到您的檔案,並從另一個停止的地方接診。
@PieterB是。但是,您會_希望他們是足病醫生!
如果您的商店有C#開發人員和php開發人員,那麼@JaneS很好,管理層應該了解這些技能不是可互換的技能,但是我完全希望C#開發人員能夠接替彼此的工作。
-1
@Chris如果他們屬於同一團隊並且具有兼容的技能,則我完全同意您的意見,我的回答不適用。但是,OP暗示(至少對我而言)存在技能差異,這就是為什麼我像我一樣回答。
見上文,將蘋果與蘋果而不是香蕉進行比較
還取決於上下文,如果我躺在那裡心髒病發作,如果他們是唯一的醫生,我會請直腸科醫生
這個建議似乎很客氣,而且很諷刺,不太可能贏得他的老闆的青睞。用具體的術語指出問題(例如參考有關程序員生產力的任何文獻)並提供一些有關如何改進的建議(例如公認的通用編碼標準)可能更具建設性。
我同意這有點荒謬。在一段時間內看不到*一個人自己的*代碼需要花費一些時間,因此理解別人的代碼肯定會花費一些時間。而且,您只能把很多東西塞進腦袋:學習別人的東西不會持續很長時間。分擔代碼責任有實際的限制。
@PieterB“您希望替代的足病醫生得到您的資料,並在其他人停下來的地方繼續工作。”我想住你無論身在何處。我對任何有說服力的醫生的經驗是,要讓這位“相同”的醫生在他離開的地方繼續接教是非常困難的。
“缺乏意願”通常應導致“缺乏工作”
ChrisW
2016-01-04 21:29:17 UTC
view on stackexchange narkive permalink

您寫道,

沒有人擁有任何東西,也沒有人負責任何事情。換句話說,每個人都擁有一切,每個人都應對一切負責。

這對於軟件公司來說是常見的嗎?

取決於程序員的數量,有各種各樣的可能性。

一種是為每個組成部分分配一個小組(由幾個組成)。期望團隊中的任何人/每個人(如有必要)對整個組件負責。一個團隊可能會或可能不會只有一個首席開發人員或團隊負責人,他們可能也可能不是團隊在外界(管理和質量保證)之間的正式聯繫點。

我建議的最低要求是代碼審查。每個人都對自己的開發負責,需要花幾天的時間來編寫一些新功能,然後一個或多個其他人要花費數小時來檢查完成,測試和簽入的內容。代碼審閱者可以提出更改建議,並可以合理地進行建議。期望(管理層)了解他們所審查的內容。例如,評論評論(在他們接受或“退出”更改之前)可能是“我不理解,您最好對其進行一些修改和/或更好地解釋”,或“這是什麼?它執行的功能是什麼(例如,在功能規範中可見),自動功能回歸測試將在其中進行測試”。

(如果有)他們會在更改後簽字,經理說:“讓鮑勃去度假和/或退出公司是很合理的;我們認為您審查的這個模塊存在問題,並且/或者我們想向其中添加新功能。看看嗎?您已經很熟悉(更不用說負責了),因為您在實現時就進行了代碼審查。”

代碼審查有許多目的,包括:

  • 對哪些組件的功能以及如何實現它們進行交叉培訓
  • 確保通用/一致的標準(編碼,文檔和/或測試)
  • 質量控制(即“白盒”測試,尋找潛在的錯誤)
+1代表您對代碼審查過程的細分,而不僅僅是說“做代碼審查”。
同意敏捷之間的平衡是,開發人員應該具有專業知識領域和責任領域,但這應該有機地形成。在敏捷所有權中,沒有人進出的安全軍事設施。它是一個像公園一樣的共享空間,公園護林員負責防止其被破壞並與志願者合作以改善每個人的空間。
@Nathaniel“敏捷”是否使用分配給組件的團隊和/或團隊負責人?例如。我曾經有一份工作,當時我是最高級的“首席開發人員”,後來(最終)有20或30個其他開發人員:其他人做了他們的事情(被賦予開發特定組件的責任),但我期望在某個緊要關頭(例如他們退出),以便能夠接管或重新分配其代碼的維護。
20-30個開發人員對於敏捷團隊來說太大了。通常,當一個團隊變得如此龐大時,嚴重的事情就錯了。查看弱代碼所有權:http://martinfowler.com/bliki/CodeOwnership.html
gazzz0x2z
2016-01-04 16:08:06 UTC
view on stackexchange narkive permalink

這很常見嗎?沒有那麼多。

超出此範圍的想法是避免將人員視為單點故障。當然,這是有代價的,程序員會為此付出代價。這就是為什麼您的老闆很難說服這是一個壞主意。他擁有所有優點,而您擁有所有缺點。

花費時間與其他程序員交流知識和實踐是有意義的。這可以通過查看,配對編程或其他適合您的方法來完成。我加入了22人的團隊,其中一位顧問(從那以後開始)就將大部分時間都花在了走廊上而不是編程上。他是團隊的膠水,團隊中至少有15個人可以從事我所做的程序。可能還有其他需要的東西,非正式的討論,咖啡機的知識交流.....

但這是有代價的。值得付出恕我直言,但如果每個人都在使用相同的技術,則成本不會太高。成本是沉重的通信開銷。這就是您應該與老闆交流的更多內容,因為他的想法本身並不壞。只是,他必須了解這是一項具有非即時獎勵的投資。

Deduplicator
2016-01-05 04:40:25 UTC
view on stackexchange narkive permalink

一旦一個人為一個新模塊準備了一個多月,然後休假,就在他離開之前,他告訴我們的老闆所有問題都解決了,它準備開始編碼。因此,在第二天的混亂中,我的老闆告訴我,下週我們必須完成這項工作,您能取下來嗎?

您那裡有個經理不理他。

是的,對於每個開發人員,在每個單獨的任務(包括對新模塊的設計進行哈希處理)上,應該至少與他緊密合作(結對編程等)。

但這與說切換中途沒有開銷的說法不同:
應該是相同的開銷,或者理想情況下要少一些,就好像原始開發人員放棄該任務時沒有綁鬆散的一端以處理緊急情況,然後在經過一周的其他工作後不得不再次加大工作量。

現在,如果您他們不是,不是他從事這項工作的人,而是只有他的筆記,無論筆記多麼好(這可能並不出色,或者考慮到您的描述更像是不存在的斑駁), ply無法涵蓋您同事在當月制定的所有詳細信息。

這就像去醫院,花時間讓一位醫生仔細檢查您的病情並反複檢查,樣本,心電圖,放射線照相以及其他可能有用的東西,然後立即去給外科醫生治療,切勿讓兩者交流任何有用的東西。


如果您不是他的工作對象,您應該指出是哪個同事做的,並且還警告即使他接任的時間要比您容易得多,但仍然存在相當大的成本,因為他不是自己準備的人

如果沒有其他人對此準備非常熟悉,您應該提到應該有,並且(取決於研究記錄的方式)您可能需要x%左右的價格(關於


最後,似乎是管理失敗:
團隊負責人必須與其他開發人員並製定了編碼標準,並開始實際進行結對編程,單元測試,代碼審查以及所有其他活動,以確保質量和在團隊中傳播知識。

user8365
2016-01-05 02:36:22 UTC
view on stackexchange narkive permalink

他們的理由是,當每個人都對所有事情負責時,任何人休假時,其他人都可以/應該直接交換身分並掩蓋他/她,因此他/他可以隨時享受假期。

我知道一家公司( Menlo Innovations)按照設定的時間表將“所有人”圍繞“每個”項目輪換。有一種方法可以使它起作用。

管理部門已將其設定為目標,但是完全放棄了進行使它起作用所需的責任。隨著更長的交貨時間,將需要雇用更多的人。他們可以通過證明長期結果來證明這一點,而不是被某個認為他是地球上唯一有能力對其特定項目進行編碼的專家的人質扣押。

真正的問題是試圖實施孤立地進行一些練習。他們應該考慮過免費的實踐,例如:團隊開發,測試,更詳盡的文檔,每日會議,以分享和使每個人都能快速了解其他人在做什麼。

由於某些原因,`edit`鏈接被禁用。該公司是Menlo Innovations,網址是https://www.menloinnovations.com/
@Dancrumb-我更正了創新的拼寫。網址正確。
要指出的是,很少有組織需要召開日常會議。每週幾個。但是,從星期五的站立和星期一的早晨發生了什麼?布皮克斯。 (除非您喜歡按小時計劃任務,否則您會感到同情)
@ChrisMarisic-因此,在星期一早上的一次站起來開會,週五您將要發言,我什麼也沒做,其他什麼都沒有改變,所以我今天要去做我說過星期五要去做的事情?
@JeffO在大多數情況下,我參加過的每次站立會議的大部分時間都是“我正在按照我今天所說的-X天前所做的工作”,也許一個人每週一次或兩次說:“ Y完成,請轉到Z ”(在任何可訪問的狀態指示器(看板,積壓的訂單等)中可見)。我曾經參加過的唯一其他類型的站立會議變成了全場會議,人們圍著30-75分鐘討論了小組一半可能在幾分鐘內安排好的事情。
@ChrisMarisic-難道沒有人遇到過整體設計,特定框架或其他問題嗎?您是通過電子郵件還是其他對話來解決所有這些問題?這些干擾應該推遲到每天開會。否則,如果您的項目運行順利,那麼您就不需要每天開會。
grn
2016-01-09 05:25:58 UTC
view on stackexchange narkive permalink

我認為以下是一個平衡的結論,很不幸,有人只是不喜歡聽這個。我已收到一再要求刪除它們的請求。在民主世界中,每個聲音都應該被聽到。您不希望聽到這是一回事,但是試圖讓我保持沉默是另一回事,這不是很好的IMO。因此,我的結論又一次從我的OP中取消了。

結論

我認為現在是我們停止行動的時候了。討論並從此開始。經過仔細審查,我選擇了一個“建議建設性解決方案的建設性答案” 作為答案。但實際上,所有答案都很好,希望我可以選擇多個答案。

從答案中,我意識到這是一個頗具爭議的話題,這讓我大開眼界,因為在此之前,我一直以為老闆是無知的。現在我意識到我以前是一無所知。

正如帕特里夏·沙納漢(Patricia Shanahan)所說,“開發人員和管理人員在從個人代碼所有權到共同責任的頻譜上都擺出了極端對立的立場”。 /評論來自經理:

  • “經理應該總是能夠要求其他人在度假時為開發者服務”
  • “我認為問題的核心是,您應該開始更多地以團隊合作。”
  • “您需要做的事不涉及您的經理” / em>
  • “團隊需要找到一種方法來使用代碼審閱,設計審閱,結對編程以及一般的方式來共享這些知識,彼此交談”

在做出這樣的結論之前,請再次考慮以下事實, 那個傢伙準備了一個多月,但從未與其他人分享他的發現,現在我的項目經理希望我在沒有任何先驗知識的情況下拿起它,並在一周之內完成它。而且,對於我們提交休假請求,我們至少需要一個月的時間,而更經常的是,我們在休假前兩三個月提交該請求。由此,我相信每個人都會知道問題出在哪裡。我完全同意TripeHound的觀點,

可能比“團隊需要...”更重要的是“管理層需要允許團隊...”,並接受會有重大打擊

承認與否,真正的問題已由gazzz0x2z指出:”這是有代價的,程序員要為此付出代價。這就是為什麼您的老闆很難說服這是一個壞主意。他擁有所有優點,而您卻有所有缺點” ,我個人同意RemcoGerlich,“如果管理人員要求這樣一個過程的結果,沒有先投入資金來實施它,他們就變得不現實” ,因為畢竟,正如沒有人理解的那樣,“在一段時間內不看代碼甚至需要重新理解自己的代碼,因此當然,了解別人的知識也需要時間。而且,您只能將很多東西塞進腦袋:學習別人的東西不會持續很長時間,這是一個實際的限制o分擔代碼責任” “如果所有管理團隊也都可以交換工作,那將是件好事。”

好吧,我知道我把它推得太遠了,這裡的大多數經理可能不同意我的看法。因此,讓我強調一下,這些是我自己的個人觀點,讓我們結束討論並繼續前進。這也是我選擇一個“建設性答案,提出建設性解決方案” 作為答案的主要原因-經理和開發人員需要更好地相互理解,而往往是經理們需要更好地了解開發人員。有了這樣的理解和建設性的解決方案,我們將在那裡,只是不會一overnight而就。

mag
2016-01-04 14:45:50 UTC
view on stackexchange narkive permalink

我在這家軟件公司工作,有趣的是,到目前為止,我只經歷過兩位經理,但是這兩位經理對編程工作的看法與打磚塊沒有太大區別。他們總是強調,你們應該隨時擔任彼此的工作。

那是一個完全荒謬的概念。編程是一個高度專業化的領域,並且編程的不同方面需要千差萬別的技能。您能做的最好的就是向他們指出。儘管與其他職業的類比可能是禮貌和合體(裁縫剪頭髮等),但您的老闆可能不相信它們,因此請指出編程方面的一些巨大差異,例如,UI設計與性能測試的差異。 / p>

但是,是的,您一定要設法消除經理的想法,以免當他們發現自己有多大錯誤時,他們會感到非常刺耳。

我不認為此答案適用於此,因為OP沒有提及其他技能。這與代碼所有權有關。
-1
尚不清楚經理們是否這樣說,這可能是OP的意思。
“編程的不同方面需要非常不同的技能集”是正確的,但是在其他團隊成員的工作中具有交叉技能(即使僅在一定程度上)的開發人員比堅持不做任何開發工作的人員更具聘用能力。離開自己的專長。
當前的趨勢是面向全棧開發人員,因此似乎可以預期,至少一些開發人員會精通編程的多個方面
@Chris:真的僅涉及代碼所有權,還是涉及任務之間切換的一般費用?
@Deduplicator:是的,只有代碼所有權。
lambdapool
2016-05-12 18:01:16 UTC
view on stackexchange narkive permalink

您可以標準化編碼約定,工具,文件夾和處理方式。但是,您不能使它等同於有關某些內在函數以及某些代碼部分如何工作的知識。只有那些花費數小時思考的人才擁有。向您的老闆解釋說,它根本不是在砌磚,我必須要對付這些無知的老闆,他們來自建築領域,並嘗試在軟件行業使用相同的標準,我無法向您解釋這會導致重大災難,失敗的項目和優秀開發商的高營業額。向他們解釋。每一件作品都有其自己的工作方式,並且特定於業務需求。例如,您有一個“磚”可以執行一些加號運算,另一個可以進行除法和除法運算,有一天,有人要求微分或矩陣函數演算,您可以將這種“磚”與上一個進行比較嗎?對新矩陣演算進行編程的人有時間分享其知識,並且同時保持計劃時間?我不這麼認為。



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