題:
我可以批評周圍的高級開發人員沒有編寫乾淨的代碼嗎?
Marc
2019-04-24 11:51:07 UTC
view on stackexchange narkive permalink

我是初級開發人員。儘管過去五年來我已經使用不同的語言進行編程,但仍然很難調試更複雜的問題;另一方面,我喜歡簡潔的代碼,並儘可能嘗試編寫富有表現力的簡短函數(目前在React中)。但是,令我感到煩惱的是,在我周圍的其他比我更高級的開發人員並沒有編寫乾淨的代碼,產生了長而混亂的方法,這些方法雖然不是很糟糕,但是可能更易於閱讀。

我的問題:您是否願意在會議中提出這一點?例如與其他開發人員以1:1的方式進行交流?還是只是因為大三而就閉上嘴,等到批評才高大呢?

因為問題和要求解決起來很複雜,它們難於閱讀嗎?您可能會問他們為什麼以這種方式實現了給定的方法。
我很好奇是什麼讓您認為他們的代碼不好。他們編寫長函數是否簡單?不是DRY嗎?格式不好?每個人在職業生涯初期似乎都有一些痛苦點,這會助長他們認為是好是壞的事情,也許您的與他們的不一樣。對於我來說,只要代碼是DRY,我就不在乎它有多複雜,但是其他人有不同的經驗。我的其他觸發點之一是“簡短,富有表現力”的代碼,該代碼通常似乎表示“高度加密”。
您說您已經編程5年了,但是您也說自己是大三學生-您能澄清一下嗎?
嗨,@BenjaminGruenbaum ...好吧,我不知道標籤Junior,Professional和Senior是否有標準。我只認為我仍然可以提高自己,看到周圍的人比我快。我的主觀印像是,大四學生需要5年以上的時間,而且每個人的情況也不同。
@BillK好吧,我認為我非常贊同Robert C Martin和Michael Feathers的教導。編寫計算機可以理解的代碼很容易,但是人類很難理解。
@JuhaUntinen是的-代碼越複雜,我就越需要乾淨的代碼。我認為詢問確實是一個不錯的選擇。感謝您的輸入。
十八 答案:
user44108
2019-04-24 12:28:54 UTC
view on stackexchange narkive permalink

很明顯,批評您的長者不是一個好主意,應該避免。初中生也很不好。

要記住的一件事是,鬆散的編碼實踐並不一定會導致編譯後的代碼變差。因此,如果有效,那麼有效,並且伙計們知道如何維護自己的代碼。人們可以並且確實會為自己的代碼庫部分辯護。

您可以(並且應該)做的是在自己的代碼部分中保持最佳的編碼實踐。當其他團隊成員在代碼庫中看到此內容時,或者您正在通過示例進行交談時,請允許其表示自己。

如果您需要處理其他人已經在代碼庫中工作的部分繼續,您在遵循它時遇到了問題,那麼請務必讓開發人員仔細討論相關部分,以便您可以快速完成此編碼任務。

您不必指出糟糕的編碼其他人的做法-照顧好自己,希望其他人注意並接受您的工作。

評論不作進一步討論;此對話已[移至聊天](https://chat.stackexchange.com/rooms/92868/discussion-on-answer-by-snow-can-i-criticise-the-more-senior-developers-around-m)。
在第一行。我建議*可以**更改*顯然*。一些長者認為批評是很有價值的。或者也許通過* belittling *改變* criticizing *;那麼,這確實不是一個重大舉措。
@JoseAntonioDuraOlmos我同意。作為高級開發人員,我歡迎經驗不足的開發人員提供建設性的反饋意見。我不害怕捍衛自己的選擇,而且我也不會因為經驗不足的人可能會知道我不知道的事情而感到尷尬。如果我認為他們錯了,我很樂意與他們討論;我們中的一員會更加了解情況。
“所以,如果它起作用了,它就起作用了”-很可能它不起作用,但是沒人知道。“而且他們知道如何維護自己的代碼。”最終這些傢伙離開了,然後我的公司被合同承接了b / c,其他人都無法解決。並不是說我在抱怨,而是意味著我的公司永遠不會耗盡工作:-)
_寬鬆的編碼做法不一定會導致編譯後的代碼不正確_為什麼這很重要?在我的理解中,抱怨根本不是糟糕的源代碼導致不良的編譯代碼。我可以用100種不同的方式編寫同一段代碼,所有這些都以相同的方式“工作”,然後向您展示20個最差的版本,並挑戰您說可以保留它們,因為它們“工作”。在專業環境中,如果一段代碼“達到了預期的效果”,並且“保持”這不是夢and,也不要求作者這樣做,那麼它就“起作用”。
一段代碼難於閱讀取決於許多閱讀它的人。顯然,團隊中的任何開發人員都應該可以訪問該代碼。“有效”或“我可以閱讀自己的代碼”還不夠。但是我還看到,初級開發人員以良好實踐和簡短功能的名義提拔了代碼,這些代碼很費力,實際上卻很難理解(至少對我而言)。請注意,在任何情況下,如果OP以“您能構建您的代碼來幫助我閱讀它,對不起,我很慢”而不是“您的代碼很糟糕”來接近原始作者可能會更好。
建議每個人都應該“做自己的事並且擔心自己的代碼”是可怕的建議。試想一下,例如向運動隊提供類似建議。這不是團隊的工作方式。
我給人的印像是,大多數人都對這個答案持否定態度,他們對軟件開發幾乎一無所知,而不得不處理只有原始作者才能理解的“別人的廢話”代碼有多麻煩。“有效”是獲得良好代碼的必要但不充分的前提。具有諷刺意味的是,這個答案是由“為世界上最大的軟件公司之一工作的開發人員”(按個人資料)寫的。
* ..寬鬆的編碼做法不一定會導致編譯後的代碼不佳... *完全不同意這一點。大多數情況下,編譯的代碼可能不是沒有錯誤的代碼。* ...人們可以而且確實會對自己的代碼庫部分持防禦態度... * 100%同意這一點。這是可能發生摩擦的根源。
寬鬆的編碼習慣!=劣質/廢品/不良代碼。就我們所知,OP正在談論諸如括號或花括號的放置之類的事情。
Justin
2019-04-24 12:13:07 UTC
view on stackexchange narkive permalink

應該對所有代碼 進行同行評審(但是我在很多從未發生過的地方工作過)。乾淨多乾淨?應該有編碼標準和指南;要求他們。關於你應該多麼“挑剔”;這取決於正在審查的代碼。有些人喜歡讓他們指出空白行和間距。其他人更喜歡您發現潛在的問題。

不要因為小三而閉上嘴,但要特別注意突出的內容。這裡的目標不是責怪遊戲,而是作為一個團隊共同改善代碼庫。嘗試提出改進建議。該代碼可能不是“錯誤的”,但通常可以改進一些東西,除了個人編碼樣式。

是的,要做的第一件事是推動適當的代碼審查過程。這樣,每個人都被邀請提供反饋,而且感覺並不太像個人。一旦進行了代碼審查,請確保響應不是太關鍵,而是將其作為可能的增強(不要說“這是不可讀/難以理解的”),而應說“如果這樣做可能更容易閱讀”XYZ”)。
為避免指出空白問題,請確保每個人的編輯器上都有一個linter插件,如果有任何問題,只需添加一條註釋,指出已添加了lint錯誤。
在這里達成協議...我將談論最佳實踐,而不是關注對可能會帶來負面或人身攻擊的特定代碼的註釋。
這是一個比Snows更好的答案,因為這實際上表明,老年人和“老年人”應該找到並遵循良好的編碼習慣,而不是僅僅寫一堆垃圾並假定其他人都可以理解,這僅僅是因為“這個對我有用”。我已經看到高級開發人員寫了一個星期後無法理解的代碼,以及新手都編寫了非常容易理解的代碼,即使它有點“簡單”。
gidds
2019-04-24 14:37:26 UTC
view on stackexchange narkive permalink

除了其他答案外,還有幾點:

接受作為初級的您並不了解所有內容 :-)可能有風格的原因

  • ,避免對工作代碼進行不必要的更改(保持差異可管理,避免引入不必要的錯誤,&c)。

  • 保留相關代碼,以便可以一起查看。 (如果只是用簡短的功能掩蓋了複雜性,就沒有好處。)

  • 避免細微的語言或性能問題。

  • 匹配其他代碼的樣式。 (不要低估代碼庫中一致性的價值;它可以使代碼更易於閱讀,理解和維護,減少開發人員之間的衝突,並避免細微的錯誤。)

這就是說,您所做的更改也很可能值得做出!

  • 大多數開發人員都很平庸(即使我們都認為自己是很好。)。

  • 以前的開發人員可能很著急,沒有時間考慮重構。

  • 以前的開發人員可能對乾淨的代碼沒有足夠的關注,或者沒有看到如何改進它。

根據我的經驗,每個代碼庫都可以得到改進 >。即使在我已經編寫和工作了很多次的代碼上,我也經常發現以前錯過的改進!

關於如何處理它,我建議:

  • 不要批評您的其他開發人員,或者要表現得比他們更了解。即使您這樣做,也不會贏得您的朋友-良好的工作關係也很重要。無論如何,建議改進,但以建設性的方式,不要怪罪。並接受他們可能不同意的想法。

  • 首先對重要同事進行重大更改。如果存在上述任何原因,最好在 造成大量損壞之前先了解一下!

  • 不要僅僅為了代碼而重寫代碼。。原始作者可以親自處理;而您希望被視為與他們 合作,而不是反對他們。 (請記住,對您而言似乎明顯的改進可能對他們而言看起來很不相同。。)此外,每次更改都會帶來風險;一個不錯的測試套件&c可以減少這種情況,但是更改不是免費的,保守可以節省很多麻煩。

  • 相反,在進行過程中進行改進 strong>:修復錯誤或添加功能時,請改進已經在使用的代碼。這樣,就更容易計算所花費的時間,並且不需要任何額外的測試&c。最終,質量會提高。

  • 最後,請接受雖然很重要,但提高代碼質量只是幾個優先事項之一。是有限的,並且總會有妥協。不幸的是,但這是事實。

您很在乎代碼質量!太多的開發人員沒有。但是,請嘗試以對團隊和代碼庫都有益的高效方式使用您的關注點。在某種程度上,我仍然會這樣做!但是我也看到自己的代碼無意義地被更改,或者被那些我不同意優先級或者只是誤解了代碼的人弄糟了。而且我一直在為使用不一致的代碼庫而苦苦掙扎格式,命名,組織和样式。最終,如果代碼庫可以很好地協同工作,並且開發人員可以一起工作,那么生活會好很多。)

“不要低估代碼庫中一致性的價值;一旦熟悉它,它可使代碼更易於閱讀和理解。”謝謝,我已經與想要重構一個大型遺留項目的一小部分的人們進行了多次討論。他們通常有合理的顧慮,但在某一點上,保持一致更為重要。
我建議再添加一個“不要在沒有高級主管的情況下運行團隊代碼就重寫團隊代碼”。初級開發人員不想幾個月(如果高級開發人員不仔細檢查提交日誌)發現自己一次只重寫了少量的團隊代碼,只是生氣的高級開發人員向他們展示了為什麼他們由於某種原因,更改非常糟糕(中斷某些內容,使代碼無法維護等),現在有很多可避免的混亂需要清理。
是的,很好。(儘管您希望這可以在代碼審查中找到,或者由指導者或高級開發人員來查看提交內容)。謝謝,我將其添加進來。
為什麼這個答案在幾個地方都有隨機的“&c”字符?
@Aaron:“&c”是“ et cetera”的縮寫,就像“ etc”一樣;意思是“其餘”或“依此類推”。而且它們不是隨機的。我故意把它們放進去:-)
“接受,作為一個大三學生,您並不了解一切:-)”這也適用於老年人...請參見鄧寧-克魯格效應。
@gidds因為我很好奇,其他人可能也一樣,所以我調查了一下,然後用英語問了一下。SE:https://english.stackexchange.com/questions/496087/is-it-correct-to-abbreviate-etc-as-c
作為從事許多不同的大型舊遺留代碼庫工作的承包商,“不要低估代碼庫中一致性的價值;一旦熟悉它,它可使代碼更易於閱讀和理解。”IME遺留代碼庫對此已經缺乏一致性。
使用`&c`是一個很少使用的構造混淆其他人的很好的例子,而不僅僅是使用每個人的期望-“ etc”。甚至“等等”。同行評審可能已經標記為...
關於*相反,請在進行過程中進行改進:修復錯誤或添加功能時,改進已經在使用的代碼* –當在一個提交或拉取請求中將較大的重構與功能或錯誤修復混合在一起時,與將它們分開分開相比,審核起來更加困難。因此,我建議在行為更改之前或之後進行重構。
@industry7:如果代碼庫開始時不一致,則不能使其保持一致,但仍應使其保持一致!您可以選擇所有現有樣式中的最佳樣式。(除非有確鑿的理由,否則最好不要添加另一個)。關於長時間使用代碼庫的一件好事是看到它逐漸變得更加連貫和邏輯化。
dwizum
2019-04-24 16:00:22 UTC
view on stackexchange narkive permalink

別掛在大三/大三上。沒有人是一個完美的開發人員,每個人-無論頭銜如何-都有改進的機會。

也就是說,考慮環境非常重要。如果您要挑選出當前並不重要或不重要的舊工作,然後告訴他們為什麼質量不好,那就不好了。另一方面,如果您正在與該人員一起進行代碼審查,並查看當前正在使用的代碼,則您會有更好的機會。歸根結底,您需要了解,雇主並不是天生就追求完美,而是在尋找具有一定可持續性水平的功能。當然,某個功能可能是可重寫的一種無需花費過多秒鐘即可幫助您理解它的方式。但這對於特定項目可能不值得。

此外,請考慮批評具有負面含義。沒有人喜歡批評。代替

這是錯誤的

這可能更好

您可能想嘗試,

您能向我解釋此功能嗎?

還是

您能告訴我為什麼這樣做嗎?

這些開放式問題可以讓其他開發人員通過他們的代碼和思考過程進行交流,這可能會使您意識到有正當的理由去做他們所做的事情。或者,這可能會使他們意識到這樣做可能更乾淨/更好。或者,它可以為您提供建議改進的環境。歸根結底,您已經提出了自己的觀點,並且與只是因為批評而感到冷落相比,保持關係的機會更大。

我喜歡“您能告訴我您為什麼這樣做嗎?”特別是。這是最不令人反感的問題,因為它提出的問題是:“我認為代碼沒有任何問題,我只是在嘗試學習以提高自己的水平。”但是,您總是可以跟進“哦,我本來會做的方式就像...我不明白...”,您再也不會說最好按照自己的方式做,但只需打開通信並讓編碼人員進行詳細說明,以最終突出顯示任何問題(如果存在)。
這也是非常重要的一點:“他們正在尋找具有一定可持續性的功能”您正在為一家需要維持利潤的企業而工作,而在維護成本方面則有一條艱難的路要走。有多好就好?我們現在花多少時間來避免將來可能出現的問題?如果我們能獲得關於這些選擇如何影響底線的客觀數字,那將是很好的,但是它是如此復雜,以至於總會有一定的主觀性。
贊成,因為這是第一個提到將批評定為問題的答案。敲響正確的語氣是這裡最重要的方面。
最初總是假定有充分的理由。(您以後可以根據需要自行決定!)一個很好的初始假設是,這是由於一種或另一種時間限制所致。編寫乾淨的代碼本身不是絕對的好東西:它是基於某些組織需求而進行的假設。通常,最大的限制是時間,無論是編寫代碼,修復代碼,理解上下文等時間。高級人員可能都清楚這一點及其局限性。恐怕這對他們來說不是新聞。作為初級開發人員,有很大的機會可以提供幫助。
我不記得在哪裡,但我讀到開發人員花更多的時間在閱讀代碼上而不是在編寫代碼上。如果要花幾分鐘才能弄清代碼,並且可以花幾秒鐘才能重寫代碼,那麼這可能是值得的,尤其是在經常讀取的代碼中。就像其他人所說的那樣,這是維護成本上的難題,這取決於開發速度和編寫易於閱讀的良好代碼。有時,通過使其複雜化可以大大提高性能。但是,YMMV並不像某些開發人員所想的那樣頻繁。
T.E.D.
2019-04-25 18:45:10 UTC
view on stackexchange narkive permalink

30年的軟件開發專業人員在這裡。也許我收集到的一些見解可能會對您有所幫助。

  1. 不要在您睡覺的地方睡覺。每個人都認為其他人的代碼很爛。這對於閱讀任何難以理解的代碼是很自然的反應。為此,除非您有充分的理由(例如:告訴老闆為什麼功能更改要比預算更長的時間)只會打勾您必須與之合作的人 / em>,並讓其他所有人與您一起工作,不知道您在看代碼時是否要對他們的代碼說同樣討厭的話。
  2. 以適當的態度來考慮他人代碼的問題是您可能是錯誤的。您可能缺少了什麼,對吧?我努力做到這一點,並且仍然對事實如此頻繁而煩惱。人類是不完美的,容易混淆,您也是人類。
  3. 請高級人士參加。向其他人(例如:Cubemates)顯示您遇到問題的代碼。通常,這將導致經歷過戰爭的某人對它的所作所為做出解釋,並解釋其原因,或者達成協議並承認其劣勢。在極端的情況下,甚至是憤怒,來自比您自己更充分地投資於代碼庫的人,並且管理層會聽取他們的意見。無論哪種結果,對您來說都是一個巨大的勝利。
  4. 如果您必須抱怨,請抱怨行為,而不是人們。並不是說“弗雷德的代碼”天生就是cr腳的。令人討厭的是,此位在大約7個屏幕屏幕上相互嵌套了3個lambda聲明。這樣的事情需要被禁止。我們可以更改樣式指南以禁止這樣做嗎?確實,必須要比這更好。我們不能有15個相互作用的類,它們都用相同的五個詞(其中兩個是“模型”和“視圖”)進行排列命名。另外,任何長於約1000行的源文件都應分成較小的類。這條1500行長的例程應該永遠不會發生。 * sup>這花費了我們大量時間進行修改和跟踪錯誤。我應該和誰談談如何在樣式指南中獲得這些東西?
我看過代碼文件長16,000行...但是我也看過初級開發人員,他們認為他們了解所有內容,試圖將完全可讀且穩定的代碼庫轉換為“微服務”或“函數式編程”,或任何最新的流行方式。。這裡很難知道“誰是對的” ...
“這裡的問題在於,它在大約7個屏幕屏幕上相互嵌套了3個lambda聲明。”Pffft ...蚱hopper。:p
Reed Wade
2019-04-24 13:57:31 UTC
view on stackexchange narkive permalink

您可以批評代碼,而無需批評開發人員。我的猜測是,他們希望做得更好,並歡迎同事的謹慎評論,並表示歡迎。匆匆忙忙,有點草率是正常的-提醒可以解決這個問題。

如果您已經從事開發工作5年以上,那麼初級/高級劃分不會有太多幫助意識,除非您的工作場所真的採取了激進的分層措施,否則您最好不要考慮它是一個障礙。完成後,您可能會說“哦,好的,是的,我現在看到了。哦,嘿!您介意我重寫它,使它更易於維護嗎?這將有助於我更好地理解它,並在以後供其他人使用。 “

以這種方式表示,您正在獲得建議並尋求幫助-不是執行代碼批判-而是得到相同的結果。很多人會回答“哦,很酷,謝謝,太好了。下次我會盡量保持整潔。”

這可以為以後的類似交互創建上下文。

根據情況和與您一起工作的人進行調整。

如果您發現同事們沒有空缺,那很不幸,但是有時候就是這樣。根據定義,他們越專業(高級與否),他們就會越開放。

值得付出努力。

我認為我的主要建議是假設這些人確實想提高自己的代碼質量(這是代碼質量問題)。但是您對踩腳的擔憂始終是正確的,應該得到考慮。

此外,支持整個團隊的進步也是您工作的一部分。

好建議。在考慮執行此操作之前,請確保“高級”未遵循代碼的那部分*中的既定/現有模式。如果他們自己從頭開始編寫代碼,則可能不是他們編寫代碼的方式。另外,請做好準備,也許您希望自己保持意見(說著溫暖的笑容,而不是惡意)。最良好的祝愿!
PagMax
2019-04-24 12:06:32 UTC
view on stackexchange narkive permalink

您是否會在會議中穿上這套衣服-與其他開發人員以1:1的比例穿著?還是只是因為大三而閉嘴,等到你足夠高的時候再等待批評?

我會“閉嘴”,但不是因為你不是“高級”足夠”,但因為您不是他們的經理,評論他們的編碼風格也不是您的工作。

在這裡,我的意思是僅在您提到的情況下才“閉嘴”。您可以在非正式討論中隨意談論您的更乾淨的編碼風格及其好處,而並不意味著他人沒有按照您的意願做。

另一種方法,取決於您的團隊文化是什麼,您可以要求經理允許您進行“技術講座”或“午餐&學習”之類的會議,在此您可以學習一些新的編碼思想你有。通常,團隊會舉行這些會議,每個人都可以交談,而不論他們的資歷如何。可能是您的高級開發人員可以學到什麼,或者是誰知道可以教給他們一些他們為什麼要做的事情!

不過,您對待這個想法的方法是只提及您所做的事情,而不是一口氣教別人關於他們應該做什麼的-1次會議。

較為隨意的方法絕對是處理此類問題的好方法-安排會議聽起來太嚴肅了。團隊最好還是按照代碼審查原則,以結構化的方式提供反饋。
經理根本無法評論編碼風格。他們不知道如何編碼。這不是他們的專長。所以這不是他們的工作。
@Gherman這在很大程度上取決於工作環境。在我工作的最後兩個地方,我們的直接經理可能是我們最有能力的編碼員。有些地方將人們提升為管理階層,而不是尋找僅業務經理。我會說這個答案很適合那種工作場所。
Luke
2019-04-25 20:48:10 UTC
view on stackexchange narkive permalink

就像其他人在幾個好的答案中所說的那樣,有一些建設性的方法可以與其他人一起提出問題-問為什麼像他們一樣寫代碼,而不是批判性的。

我想提供另一個潛在的解決方案:如果您的團隊不對代碼進行單元測試,那麼您應該成為代碼的擁護者。開始將單元測試添加到您自己的代碼中,並說明它的價值。由於經理討厭錯誤,因此他們應該希望可以改進代碼庫的測試和可測試性。單元測試(正確完成時)自然會迫使每個人開始編寫更小,更整潔的函數。您最終將獲得既乾淨又經過測試的代碼。

+1,因為這可以解決“乾淨代碼”中的歧義。問“代碼是否乾淨”,應該確實是“代碼是否被林特,單元,完整性和e2e測試高度覆蓋?”“使用CI / CD管道在Git中進行代碼跟踪嗎?”“日常構建是否完成?”應該首先回答這些問題,然後清潔度幾乎是自動的。
Helena
2019-04-28 23:43:23 UTC
view on stackexchange narkive permalink

不要等到您擁有高級職稱才能評論其他人的代碼。我的經驗是,標題與反饋的方式無關緊要。

問,長輩是否可以分享有關代碼的反饋,或者是否願意將其表示為詢問有關代碼的問題。

嘗試盡可能具體,並儘可能解釋它對您的影響。 “我發現這種方法很難讀,因為它很長,並且做兩件事。”或“我對這個方法名稱感到困惑,因為它說X,但是該方法確實是Y”比“您編寫不良代碼”更容易被任何開發人員接受

您可能還會問是什麼原因對於特定的編碼選擇(通常我經常發現“錯誤代碼”實際上是有原因的。)

這種反饋應該足夠無禮,並且如果開發人員把它做好,可能會有一個進行後續討論的機會。 “羅伯特·馬丁建議用這個來命名,您怎麼看?”

但是,開發人員也有可能不同意您或您最喜歡的作者,並且不太在乎您的意見。只要確保您對開發人員的精力,就不會因為冗長而產生積極的影響。

* ...通常我發現“錯誤代碼”實際上是有原因的... *大多數情況下,這只是為了偷工減料。例如,重複相同的代碼只是為了跳過計劃和思考如何編寫函數以便可重用所需的時間。
我將重點介紹羅伯特·馬丁(Robert Martin)(或任何其他人)提出給定建議的原因,而不是簡單地訴諸特定權威。
“您可能還會問到選擇特定編碼的原因是什麼。”在不暴露您根本的分歧的情況下,很難“提出”這樣的問題。我認為更好的方法是說出您認為更好的結果,並且響應中將包含一個相反的參數而無需您提出任何要求,或者您將了解原始代碼的原因,或者您將繼續進行辯論直到得出了一些結論。
我明白你的意思了。我同意,將評論偽裝成一個不誠實的問題不是一個好習慣,但是根據我的經驗,它常常有助於假設有充分的理由以某種方式做某件事,並誠實地試圖弄清它是什麼。
如果您使用GitHub或類似的工具,那麼主動檢查其他PR可能是一個好主意。
ShinEmperor
2019-04-24 17:49:03 UTC
view on stackexchange narkive permalink

從廣義上講,“清理代碼”是很好的,但不是標準的。標準是公司的風格指南。無論您在某本書中或在某處學習什麼,您都將進入一個組織,並且情況會有所不同,他們會有自己的“經驗法則”。

如果沒有樣式指南,那麼通常,代碼庫基本上會適應代碼審查人員的偏愛或技術領先者所維護的東西。

我不會假裝了解您所處的情況中的每個變量,也不會主張這些事情是適當的。但是,它們確實會影響代碼質量:

有時,有很大的壓力要求更快地推送代碼。由於它具有競爭優勢,因此要盡快將其投放市場,實際上,這可能是更可取的。馬丁·福勒(Martin Fowler)在他的重構書中談到了這一點。

您並不總是擁有理想。理想可能為時已晚。但是,您可以做的就是每次您都在可以進行一些小的更改時,都應該做。

廣義上講,如果我對此有一個建議諸如此類的事情:總的來說,總是倡導最乾淨的方法來做某事。但是,切勿在代碼中留下自我。您的工作是解決問題,而您認為自己的代碼“不干淨”的想法是您將自我投入代碼中。學會保持中立,並了解事物並非總是像看起來那樣。

我認為您應該接近它們嗎?否。我認為,從廣義上講,您應該倡導“清潔代碼”嗎?我當然是了。但是變革很少是從底層開始的,要先擔任領導/高級職位,然後倡導“清潔代碼”政策。

簡單地告訴人們他們的代碼不干淨,不會做很多事情。而且它完全忽略了代碼的上下文。有時,軟件開發的社會學意義遠超出人們的想像。上下文就是一切。

StockB
2019-04-24 18:59:58 UTC
view on stackexchange narkive permalink

要有效地引起對代碼質量的擔憂,必須建立高質量代碼的定義。其次,代碼審查是一種以建設性方式提出這些問題的理想環境。

樣式指南

您的部門是否有代碼樣式指南?如果沒有,那麼同行的代碼不清晰或不一致也就不足為奇了。您可能想與主管一起提出缺乏代碼標準的問題。強調一致性樣式如何通過減少上下文切換開銷來提高可維護性。如果您的主管看到了這一價值,那麼開發這些標準可能對您有益,因為它對您而言似乎很重要。

代碼審查

理想情況下,利益相關者,同伴,主管將有機會在結構化的代碼審查過程中提供反饋。這比預訂一對一會議更為可取,因為它提供了一個更開放的論壇來提供反饋,並且不太可能得到防禦性的回應。您可能還想與您的主管一起提出這一點,強調這是您一個學習例如為什麼同行以某種方式編寫方法的機會。

無論您何時何地使用自己的方法,同事,您應該從更具好奇心的角度來。與其向他們解釋為什麼代碼是錯誤的,不如問他們為什麼以某種方式編寫方法。即使您是正確的,也可能會採取防禦性的應對措施來提出全面的指控。古老的格言是“用蜂蜜比醋可以捕獲更多的蒼蠅”。而且,如果您不正確,您將很高興自己的方法謙虛。

100%同意這個答案(並且實際上想確切地寫出這個答案),這不是關於大四或大三的,而是關於團隊中的開發方法的。不要批評同事遵循團隊的做法(並且如果沒有流程,因為團隊領導認為軟件質量並不重要,那麼這不是同事的錯誤)
Peter
2019-04-24 22:23:01 UTC
view on stackexchange narkive permalink
  1. 如果您想成為某個領域的專業技術人員,必須首先學習該領域的專業人士
  2. 質疑某人不是就像侮辱他們一樣,除非您做錯了。
  3. ol>

    這既關乎您問的時間,又關乎您如何問。

    “何時”的好時機是一對一的時間,例如在配對編程時或在代碼審查期間。如果兩者都不存在,作為一個初中生,您可以輕鬆地為兩者創造機會。只需問一個高級人員來檢查您的更改,您就可以自己進行代碼檢查。或要求高級配對計劃進行半小時,這樣您就可以了解有關您需要處理的不熟悉組件的更多信息。

    關於“如何做”:如果您不了解他們為什麼會以他們的方式做某事,只需告訴他們您不了解並詢問他們為什麼以這種方式編寫代碼。人們有以某種方式做事的理由。您的目標是找到這些原因。有時有完全正當的理由,它們的代碼比您編寫的要好。有時,原因是外在的(例如,鼓勵優化“代碼行”,“單元測試數量”等)。有時原因只是意見上的細微差別(對於功能而言15行太長了嗎?)。有時原因是程序員習慣了一些不良的編程習慣。

    如果您弄清楚如何正確地提出問題,許多人會自由地承認該代碼是垃圾,並為您提供了造成垃圾的原因及其原因的列表。到目前為止,我還沒有看到在某種程度上不是垃圾的代碼,而且我已經看到並編寫了很多代碼。

rpmerf
2019-04-24 17:05:19 UTC
view on stackexchange narkive permalink

我不知道這是答案,也不是我對這個問題的想法。我認為這種情況取決於代碼及其“不良”程度。我從事過少數應用程序的開發,這些應用程序已經使用了5年甚至15年以上。該代碼可能不是最乾淨的,但是它可以工作,並且已經可靠地工作了多年。

不同的程序員對如何編碼有不同的看法。這些年來,樣式已經改變。並非每個人都緊跟最新趨勢,有些人只是按照自己的方式而定。您必須能夠將樣式與不良的編碼做法分開。最後,重要的是代碼可以可靠地工作。

如果這是舊代碼,則可能需要查看正在編寫的新代碼,並查看它是否遵循更好的做法。在較舊的應用程序上,有時您會看到編碼樣式隨時間變化。較舊的代碼可能不是很好,但是較新的代碼遵循更現代的做法。

查看誰在提交內容。您可能有一些編碼員編寫簡潔的代碼,而有些編碼員編寫簡潔的代碼。

說出來。不知道我是否會在會議上提出來進行討論。與您的隊友1:1交談,並弄清他們對乾淨編碼實踐的感覺。看看是否有任何團隊標準的代碼編寫。將其帶給主要開發人員。如果他們認為這是應該在與團隊討論的會議上提出的,那就太好了。一些團隊比其他團隊更關心編碼實踐。許多團隊只在乎代碼是否有效並通過驗證。

我同意其他人的觀點。不要有判斷力。詢問代碼。詢問標準。盡可能多地學習。提出建議,但不要太用力。

總的來說,提出並進行討論並不是一件壞事。您正在嘗試改善編碼實踐。

The Gilbert Arenas Dagger
2019-04-24 20:18:17 UTC
view on stackexchange narkive permalink

您不應批評現有代碼,也絕對不應批評編碼人員。您永遠不會知道人們將如何對此做出反應,並且冒著破裂這種關係並被貼上“一無所知”的風險。模糊的批評或對現有代碼的批評也不起作用。他們幾乎沒有機會重構已經過測試並可能已部署的代碼。

您應該做的是朝著更好的實踐前進。乾淨的代碼是一件好事,在健康的開發環境中,應該有一個平台來建議改進代碼質量。通常,此平台是某種形式的代碼審查。開發人員可以互相學習很多,如果您的公司沒有針對這種對等協作的實踐,那麼促進這種協作就成為您的重點。您甚至可以採取這樣的方法,說您想建立代碼審查以向他們學習—您會的。

Muz
2019-04-26 09:06:49 UTC
view on stackexchange narkive permalink

大三時,一切看起來都很混亂。喬爾·斯波斯基(Joel Spolsky)在文章中對此進行了詳細介紹

“總是很混亂嗎?”我問。

“什麼?你在說什麼?”經理說。 “我們剛剛完成清潔工作。

好,到目前為止,我已經提到了作為程序員的三個成就水平:

  1. 您不會

  2. 您對清潔有一個膚淺的認識,主要是在符合編碼約定的水平上。

  3. 您開始聞到表面下不整潔的微妙提示,它們使您煩惱不已,無法夠到並修復代碼。

  4. ol>

    不過,還有一個更高的級別我真正想談論的是:

    1. 您故意以這樣的方式構造代碼,使您的鼻子變得不整潔,使您的代碼更有可能是正確的。
    2. ol>

高級人員通常處於4級。代碼對您來說很骯髒,但對他們而言卻不是。只要它不導致錯誤,它是否臟都沒有關係。熟悉其代碼的人知道哪些部分對於保持清潔很重要,哪些部分可能很混亂。

gnasher729
2019-04-26 17:14:03 UTC
view on stackexchange narkive permalink

請考慮編寫您所謂的“乾淨的代碼”可能不在您的高級同事優先級列表的頂部。而且“乾淨的代碼”也不是最重要的。

通常所謂的“乾淨代碼”實際上是被誤解了-盲從地堅持誤解的概念並不能改善任何事情。通常,它只是增加工作而沒有真正的好處,或者幾乎沒有好處。因此,一個風險就是告訴您為什麼您的觀點是錯誤的-顯然,這對您來說是一件好事。

我有一個案例,我寫了300行方法,有人抱怨說它太長了,於是我告訴他自己修復它。他的代碼幾乎全部都是簡單易懂的功能-其中一半的功能已損壞。只是沒有想到他的功能很長而且很複雜是有原因的。即使它的註釋非常好(例如,在這裡我們執行X來解決在執行Z時發生的錯誤Y,並丟棄相應的代碼)。當被問及為什麼他扔掉代碼時,他說“我聽不懂”(所以您為什麼不問我)或“我認為不需要”(所以您為什麼不閱讀註釋並嘗試一下) 。

因此請做好準備,讓高級開發人員實際上知道他們在做什麼,並且您所說的“還不錯”可能實際上是非常好的。

Andrew Lazarus
2019-04-27 03:06:05 UTC
view on stackexchange narkive permalink
  1. 您的公司是否認真對待代碼審查?就在昨天培訓一些新開發人員時,我強調要展示一個Bitbucket屏幕,其中一個相對初級的開發人員(4年)糾正了一個非常高級的開發人員(40年)。甚至有些來回。初級開發人員是完全正確的。如果代碼審查只是一種形式,那麼錯誤的代碼將被檢入,並且也將中斷。您認為您的團隊的產品是否穩定,或者代碼不僅編寫不當,還會導致在現場出現不良行為? (錯誤答案,崩潰等)。
  2. 公司是否設有代碼質量委員會?我對長期的書面標準並不感到興奮,因為我有時會理解例外的必要性(是的,在過去十年中我使用了 goto 。)但是它需要一支與您共享對此主題感興趣的團隊。加入它。
  3. ol>

    如果答案是該公司取消了代碼審查並且沒有贊助任何對質量問題感興趣的小組,則應與您的經理聯繫。那些是大紅旗。

image
2019-04-24 17:36:55 UTC
view on stackexchange narkive permalink

這裡幾乎所有答案都是遵從者。他們告訴您要保持外交態度,不要與您的同事一起過分強調這個話題。大多數人會同意這一點,並會採取相應的行動,從而導致他們可以相處的代碼質量的平均(最差)協議。但是,(代碼)標准在這裡並不是沒有道理的,而是因為它們代表了自己,以提高可維護性,可讀性等。所有這些都是大多數開發人員都不關心的長期目標,因為他們不會感到負面。或它在編寫代碼時的積極影響。

絕不應因某種懶惰或呼籲權威而壓制更高的標準。如果在向“長輩”提出這個話題時,他們感到受到攻擊並採取了防禦措施,那麼您可能應該尋找一個可以實現自己標準的地方。畢竟,您是最有價值的東西:時間。可以在任何地方賺錢。時間是寶貴的-錯誤的代碼正在浪費您的時間。

https://workplace.stackexchange.com/questions/135337/can-i-criticise-the-more-senior-developers-around-me-for-not-writing-clean-code#comment434605_135337在爭取事業之前,請確保這確實是值得為之奮鬥(甚至可能垂死)的原因。我已經看到太多熱血的初中生未能通過這張支票甚至對它感到生氣。
當戰鬥艱難時,您必須非常非常非常小心。策略是只在優勢位置上進攻的藝術,而他不在那種位置上。
關於代碼質量,我學到了兩個關鍵的知識:1)代碼不需要“完美”,它必須“足以應付當前的任務”。使其變得“比需要的更好”,您效率低下,浪費時間卻沒有增加價值,這與您要成為的目標相反。2)代碼質量本身並不是最終目的,而是最終目的-更快地實現功能,引入更少的錯誤。因此,只有在特定環境中,在特定時間,可以花費一定時間才能獲得回報的慣例,才值得遵循。
我堅決地說,指出某人的編碼風格不對很不利。我維護COBOL應用程序,其中一些比我還舊。我們的經驗法則是繼續我們之前的風格。這些系統中有些是龐大的。即使我們的代碼不是“乾淨的”,每個人都可以理解,因為它是統一的。這不是關於合規,而是關於理解,僅僅是因為大三學生髮現他們的代碼更整潔,並不意味著它滿足效率需求,甚至更乾淨。也許他們只是因為自己寫的更好才了解它。
從某種意義上說,這個答案是非常元的。這是一個新的貢獻者的不外交和苛刻的回答,侮辱了現場已有一段時間的人們,並且遭到了社區的負面好評。而且,由於答案基本上是在您謀生的地方暗示對高級同事不外交/侮辱/侮辱自己,所以...您不僅要擔心答案太簡單,還要擔心得多。
您如何確定自己的觀點“正確”?如果我不同意“乾淨”的代碼該怎麼辦?坦白說,那種像編碼風格那樣主觀地努力工作的人幾乎總是應該盡快被放任的那種人。
成為“外交”的原因不是因為編碼標準無關緊要,而是因為即使在最受標準驅動的環境中,也存在著大量的主觀性-而且,根據標準對代碼進行批判的整個場景都假定該人進行批判實際上了解標準,並且能夠從完全權威的角度出發,這對於*任何*開發人員來說都是罕見的,更不用說初級開發人員了。
除此之外,幾乎所有專業,甚至是軟件開發,都嚴重依賴團隊合作和溝通能力。交流取決於與人的某種關係。外交有助於建立和維持關係。


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