題:
招聘保持和改進的人,而不僅僅是追求新事物
StackExchange What The Heck
2018-12-24 18:01:01 UTC
view on stackexchange narkive permalink

我的工作將很快被徵募,我想做的一件事是篩選出比編寫舊代碼更熱衷於編寫新的,令人興奮的代碼的人,更普遍的是,認識到好的代碼就是不僅僅是每天編寫的代碼行,而且設計,文檔和測試也是成為編碼人員的一部分。而不是編寫新代碼?”,我懷疑很多人會說他們認為應該說的話-即“修復錯誤很重要”,但這可能無法反映他們的實際工作習慣。

您會問哪些問題或禮貌(不太費時)測試,以找到感興趣並願意維護和改進代碼的人?

編輯添加:這個角色肯定會涉及一些新工作-我不想給人的印象僅僅是維護!這更多地是要篩選出希望每次都刪除和重寫而不是修復錯誤的人。

您確定有人更喜歡修復舊代碼嗎?我想說提供修復程序和其他不重寫解決方案更像是一個開發人員的工作。但是我認為在大多數情況下應該執行刪除和重寫操作。至少重構。參見[this]中的2.11(https://arxiv.org/ftp/arxiv/papers/1702/1702.01715.pdf)
用@Džuris的評論,最好的解決方案通常是“重寫並刪除”:抽象現有的劣質代碼,編寫並行的更好的替代實現,切換客戶端代碼,然後刪除舊的實現。
-1
另一個問題是為什麼我必須一直對自己的工作感興趣。畢竟是工作。人們這樣做是為了賺錢。
@Džuris:來自該網站的一位創始人... https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/
@mehrdad我只想將該文章的整個段落複製並粘貼到問題中,謝謝,太好了!
如果您將重點放在遺留代碼上,請務必理解,對於軟件開發人員的職業來說,在當前技術上落後太多實際上是不利的。為此,您需要一個好故事。
八 答案:
Joe Strazzere
2018-12-24 18:09:02 UTC
view on stackexchange narkive permalink

您會問哪些問題或禮貌(不太費時)測試,以找到感興趣並願意維護和改進代碼的人?

總的來說,我發現關鍵是要問更多開放性問題,而不是可以用簡單的是或否或很短的答案回答的問題。

按照“告訴我您喜歡做的工作”的方式,您會得到更好的線索。如果只與創造/發明有關,而與改善/測試/完善無關,那麼候選人可能會不樂於擔當您的角色。

一旦遇到這個問題,您可以使用類似的方法“告訴我一次您必須深入研究並維護一些困難的代碼的時間。”

在面試過程中的某個時刻,您希望清楚地說明角色的細節。您想弄清楚該角色將持續多長時間以及可能會導致什麼。為新員工設定錯誤的期望是愚蠢的。

正如其他人指出的那樣,一份好的工作描述將有助於吸引合適的候選人,並讓其他人自我選擇。一份工作描述中包含了這樣的思想:“認識到好的代碼不僅僅是每天編寫的代碼行,而且設計,文檔和測試也是成為編碼者的一部分的人”,這可能會有所幫助。

這是一個很好的答案,我開始寫自己的書,但最終意識到我只是在改寫這個。
諸如“告訴我您必須深入研究並維護一些困難代碼的時間”之類的問題,意味著考生以前已經這樣做了。在某些情況下,應聘者總是要遵守工作規範才能創建新代碼,而他們的真正使命是破解他人的代碼。我傾向於這樣的問題:“您是否有動力挖掘和維護一些困難的代碼?它們可能是哪個?”。我並不特別贊成這樣一種假設,即一個好員工本身就是一個人,在這里和那裡複製了他/她自己的“行之有效的記錄”
“哪些動機會驅動你?”例如對驗證和確認的熱情,對不同語言語法的興趣,對編寫好的代碼的欽佩(如果您不具備“正確”的想法,則無法糾正他人的工作),使用單位和回歸的喜悅測試之類的。感謝您提出這個不清楚的地方。
@davnicwil這是一個很好的方法,但是要當心。如果答案是“我將其全部撕掉並重寫”,則實際上您可能沒有人以安全的方式進行維護。您可能有一個人在現有項目上進行未開發的工作。有時候,應該只是從頭開始重寫模塊,但是很少見,並且通常為了滿足完整的單元測試套件而對其進行重寫。
@JoeStrazzere太棒了!我只是看到提示詢問問題的提示,但沒有註意到有關如何評估答案的任何提示。即使這個OP和您不在那組人中,很多人也需要後者:)
是的,這就是這樣做的方法。我喜歡問一些基本問題:“您最喜歡這份工作的&最不喜歡什麼,為什麼?”當候選人回答“我討厭/喜歡維護遺留應用程序,因為我必須使用非我的代碼”時,您會得到提示。
“如果只與創造/發明有關,而與改善/測試/完善無關,那麼候選人可能不願意擔當您的角色。”或者他們將測試,改良,重構等視為開發和開發的隱含部分。甚至都不要考慮提及它。
@Michael實際上是招聘中一個有趣的問題-假設招聘人員知道您將使用某種東西。一個很好的例子可能是版本控製或Linux命令行。很多人都知道如何使用它,但是查看您的簡歷/簡歷的人不能確定您確實知道它,並且由於缺少它可能無法將您列入候選名單。採訪也是如此-提及似乎很明顯的技能-理想的是短暫地-很重要。
“我們正在尋找維護我們舊版ASP.NET應用程序的人。”我已經快要死了,不用擔心面試問題!
BinaryTox1n
2018-12-24 21:28:54 UTC
view on stackexchange narkive permalink

根據我的經驗,工程師的態度通常不是遺留代碼沒有得到改善的原因。如果您能夠營造一種重視並鼓勵對現有代碼進行維護,重構和改進的環境,那麼您將獲得所需的結果。

通常,我會看到業務部門在交付功能方面面臨壓力,或者在管理方面提出批評(Roger這段時間都花在了代碼庫X上,沒有功能上的差異!為什麼我們要花所有這些時間/金錢?)。 / p>

與我合作的大多數工程師都討厭舊式基礎架構,如果有合適的環境,他們會很樂意重構或替換它。請嘗試以下步驟:

  • 鼓勵您隨時進行重構
  • 定期討論維護的價值
  • 向工程師確認維護項目的成功和管理
  • 戰鬥,即使您不得不將其納入新功能的估算範圍之內

創建了一個重視持續改進的環境,您可以在工作說明中將其作為津貼列出。 “我們公司重視測試,重構,CI / CD和持續改進。我們不讓代碼爛掉,我們也不讓你爛掉。”

國際海事組織的這個答案很重要,因為它會推翻假設。問題和當前的前兩個答案都假設沒有人維護代碼是編碼員的錯...但是我同意@BinaryTox1n的說法...這種假設並不總是正確的...大多數優秀的編碼員都會很樂意替換/重構舊的重要醜陋代碼...但是,如果沒有老闆和/或同事和/或最重要的管理層的支持/報酬,那麼做正確的事情和改進舊代碼可能會變得非常困難。
絕對是@syn1kk。我*最後*說服了管理層,由於我們擁有的舊基礎架構,他們想要的所有閃亮的新功能將花費10倍的時間來開發。現在,我很高興,因為我可以成為一種可以同時使公司和我的忍受代碼基礎能力受益的東西來代替那些陳舊的廢話。
海事組織這是對該問題的唯一真正答案。我認識的95%的開發人員希望有一些時間來改善與他們一起工作的代碼庫。在大多數情況下,管理層不贊成。要解決此問題,您無需更改招聘流程。您需要讓管理層了解技術債務和金錢債務一樣,除非您還清債務,否則將非常難對付您
@syn1kk“非常非常困難”嘗試積極勸阻。
這大大地遺漏了所提出問題的要點,即尋找願意與現有代碼一起工作的人們,而避免那些對所有問題的回答都是“撕毀並替換它”的人們。這與維護與功能分配的時間無關,而是與工程師進行*維護*與衝動地進行*構思錯誤*變更的意願有關。
可以看出,“技術債務”仍然是非常無形的。
只需查看系統中的任何一小部分,就可以很容易地指出現有系統出了什麼問題。花費時間來研究整個事物並了解它的正確之處,尤其是在如何與外部系統和用戶交互方面。在進行重新設計之前,您無需還清技術債務,而是增加了新債務……而且該系統無法按照需要的方式工作。
@ChrisStratton已經很好地回答了“按要求”問題。我選擇提供一個解決我認為可能是潛在問題的答案。在一個成功,健康的組織中顯示維護的價值足以使這些“僅新手”開發人員了解到有更好的方法-最終使招聘變得更容易,因為您知道您的組織做得正確並且可以吸收任何合理的開發人員。然後,您的任務就變成瞭如何過濾不合理的人,這應該已經是任何面試官的目標。
正如許多人所說,公司似乎並不了解技術債務的概念。對於許多人來說,只要能正常工作,應用程序/功能就足夠好了。在敏捷環境中,這導致關閉功能並將新功能添加到要做的事情中。他們不了解的是,這種債務正在減慢未來的功能。以我的經驗,這種誤解迫使開發人員跳過債務並添加新功能,因為管理層希望添加新功能。
Owen C. Jones
2018-12-24 18:37:43 UTC
view on stackexchange narkive permalink

所以,我想說一些事情可以幫助您解決這個問題:

  • 願意聘用更多經驗豐富(因此價格更高的 )開發人員,例如這些通常會超過他們職業生涯的“ OOH閃亮的新技術”階段。
  • 創建一整套針對該人群的福利(想想更多的養老金,薪酬,工作氛圍,以及更少的乒乓球,足球,以及X-boxes)
  • 鑑於您想讓人們在遺留代碼,改進,照常使用等方面做大量工作,請嘗試引入一些機會一小部分時間完成更多尖端工作。允許人們花時間在個人項目上是這樣做的好方法。請記住,如果您需要開發人員使用當前或更舊的技術,那麼他們將落後於可以在下一份工作中促進其職業發展的技術-因此也請他們跟上。

-無需冒犯-您需要開發人員進行的愚蠢項目是IT招聘中的最大挑戰之一,因為您無法突出需要的所有時髦詞彙,因此,獲得優秀員工的大部分方法是通過擁有其他才能吸引他們。

要補充的另一點是,開始獎勵那些維護和改進代碼的人。通常,這被視為第二層工作,而實際上很難編寫出比原始代碼更好的代碼,並且可以無縫地集成到混亂的東西中。如果您在公司內部展示您的新技術,並且不提重大返工,您將獲得回報。
我對所有這些都表示贊同,並另有兩條評論(對於已經有7個答案的問題,我認為不值得再給出另一個答案)。1)經驗豐富的顧問對這種事情有好處,因為他們可以拿到薪水($$$)然後繼續前進。2)在您的面試中,詢問應聘者如何處理正在生產的修復軟件,因為該軟件必須完全24/7運行,並且沒有由於回歸(並且沒有CI / CD!)而造成的停機時間-可能是由於$$-與此類停機有關的損失。(我最近受此限製完成了為期兩年的諮詢合同...)
我同意這一點,尤其是當我_我_其中一名顧問!
O.M.Y.
2018-12-26 05:49:50 UTC
view on stackexchange narkive permalink

我將為已經給出的答案添加一個新維度。簡而言之,我對這個問題的建議是:認真看待年長的工人擔任這一特殊角色。

IT行業長期以來一直受年齡主義問題,他們更喜歡年輕人的快節奏思維,而不喜歡年長工人的慢節奏思維。就是說,那些思想較慢的人有很多年輕工人經常缺乏的經驗和紀律,而維護編碼也需要這樣的紀律。

僱用新的編碼員很少需要太多經驗,因為您將教他們公司代碼庫和工作方法的所有特質。剛從大學畢業的“孩子”可能知道最新和最好的方法(如您所說)選擇新穎而有光澤的,但是您不能教導尋找錯誤的本能,也無法教您克服錯誤的思維方式英里的陌生代碼。經驗是提供這些屬性的要素,而經驗則需要時間,因此年齡也是如此。

花2分鐘,然後單擊以下兩個Google查詢。然後,對於這兩個查詢中的每個 ,略過任何3個匹配項(共6篇文章)的內容:

我們也都知道程序員已經掌握了一種特定的語言,而他們很少有學習新語言的麻煩。看看他們的工作歷史是否表明他們很好地適應了新環境。看看這些年長的工人有多少種語言,而不是他們是否知道最先進的語言,甚至可能確切地知道您需要的一種語言。如果他們的經驗接近,他們將學習並在此學習中蓬勃發展。您正在僱用他們從事傳統工作,這恰恰是最先進的方法。

您的盡職調查也是如此。切勿以單獨年齡作為聘用或不聘用的理由,但在這種情況下,請考慮年齡和經驗是真正的資產,而您可能對僱用可能年齡在50歲以上的人有任何先入之見經過仔細檢查,因為您可能只是錯過了在OP中要求的確切技能和態度。

哦,還有最後一件事。如果您從人事部門中得到一些迴避的建議,請不要感到驚訝。由於上述神話中的複雜(但錯誤)原因,HR部門通常傾向於嘗試過濾掉IT部門中的較老申請人。因此請注意,您可能需要教育自己的經理和人事部門,以拒絕這些神話,向他們提供一些您可以從上面的鏈接輕鬆在線找到的研究,並堅持認為它們不是不是拒絕所謂的“超合格”求職者,而是將他們送去面試。

我真的很喜歡這個答案!經驗和成熟可以發揮如此重要的作用,奇怪的是人們如此樂意忽略它。也就是說,如果新手*非常*沒有經驗,他們也有可能會受到很好的教育。
@yochannah-由於我提到並(間接)與之相關的“老年工人”神話的存在,他們“忽視”了經驗。現在,超過50%的“可用員工”年齡在40歲以上,但是招聘人口卻沒有反映這一點。一個完全不合邏輯卻一直使用的單詞“資格過高”,似乎知道比工作需要更多的知識是一件壞事。
“經驗和紀律”-以我的經驗,這已成為傲慢,僵化和對變化的抵制。
“超額合格”比您想像的要有意義的多。是的,比工作需要更多的知識可能是一件壞事。資格超標的工作幾乎可以肯定不會付給您您所經歷的價值,這意味著當出現許多更好的報價之一時,您很可能會離開。
@cHao-對於容易找到新工作的年輕(年齡小於40歲)工人來說可能是正確的,但工人越老,他們越看重穩定和長期就業,部分原因是他們承擔著抵押和家庭之類的責任,但主要是因為*下一個*工作不是肯定的事情。在過去的40多年中,美國司法機構已正式認識到,在許多年齡歧視案件中,公司經常使用“超額合格”這一短語作為“年齡過大”的代號,而人力資源部門仍在使用“完全相同”的論點為您辯護。製作。
@cHao-還有一件事。有一次,我是一家大型國際公司的關鍵嚴重事件經理。這是一項高薪工作,具有很高的知名度,並且在24/7呼叫時壓力非常大。今天,如果您願意給我一百萬美元,我就不會擔任這份工作。雖然我可以輕鬆地完成工作-我非常擅長-我只是不想再承受那種壓力了,但我的工作重點已經改變:我的抵押貸款已經完成,我幾乎沒有債務,我的家人分散到風和生活在該國其他地區,我只需要很少的收入。
Dustybin80
2018-12-24 18:52:18 UTC
view on stackexchange narkive permalink

我認為其他答案也不錯,但我還要特別強調的是,良好的職位描述/廣告將使人們能夠自我篩選。然後,您應該能夠使用面試問題來判斷誰真正正確地閱讀並清楚地理解了。

確實,如果誠實地表明他們有舊的代碼庫並且他們不希望扔掉並重寫它,那麼我將自己篩選報價。
鑑於我實際上喜歡分析代碼並對其進行調整以進行改進,因此我可能會從事這樣的工作。小時候,在家用PC時代之前,我通過成為我喜歡的遊戲程序的人工仿真器/人工代碼解釋器,學習瞭如何在紙上進行編程,並獲得了[源列表]的打印輸出。web.archive.org/web/20150215080553/http://www.dunnington.u-net.com/public/startrek/STTR1)。自從我對這樣的工作產生了興趣以來。
SafeFastExpressive
2018-12-25 08:41:57 UTC
view on stackexchange narkive permalink

我認為您是從錯誤的角度來解決這個問題。這不是招聘問題,而是領導能力問題。實際上,每個編程工作都是寫新代碼和維護舊代碼的結合。

如何領導和激勵他們,這將是使絕大多數開發人員表現良好的關鍵。

他們的經理是否向他們清楚地傳達了公司的優先事項?大多數開發人員都有動力,並且樂於做對公司成功最重要的事情。

您是否確保他們的貢獻得到回報,並讓公司感到公司在乎他們和他們的努力?

公司優先事項有意義嗎?將開發人員從一個項目轉移到另一個項目,或者將它們埋沒在針對瑣碎問題的無休止的錯誤修復工作中,是使開發人員失去動力的好方法。您的組織是否定期“緊急”制定計劃和問題,並要求開發人員不斷加班以解決問題?

他們的經理和公司是否營造了以團隊為導向的氛圍?在緊要關頭,他們的經理和高層管理人員會在那裡幫助他們,還是只希望排名較低的開發人員進行“死亡大遊行”來解決他們今天的“緊急”問題?

作為招聘人員,您的工作是傳達對工作環境的合理期望。如果主要是維護工作,那麼您的申請人如果不想這樣做,將會很好地過濾掉自己。

趕在1月1日截止日期前向辦公室+1,以獲取額外的薪水。
AnoE
2018-12-25 00:40:35 UTC
view on stackexchange narkive permalink

當然,在面試中,我會問一些技術問題,特別是要弄清簡歷中不清楚的部分,或者深入研究他們說自己是專家的話題。

除此之外,我花盡可能多的時間與他們簡單談論我們的領域。我對當前討論的目標是開放的和誠實的(例如,在一個早期的電話中,我會說“此電話只是為了讓我們可以學習彼此,這不是測試”等) ;或者在現場採訪中,我可能會說“這次採訪的一部分是找出我公司中可以開始工作的確切團隊,並儘可能地滿足您的興趣”,我是說真的。 p>

這並不是為了讓他們放低警惕或欺騙他們,而只是為了進行誠實的討論。坦白地說,這為我提供了有關此人的最有用的信息。作為其一部分,如果我知道我需要一個人來開發較舊的軟件(事實上,有時我需要這樣做),那麼我將簡單明了地描述我的需求。我通常可以從他們的反應中看出他們是否喜歡這種工作,即使他們不喜歡但仍然說“是”。

您會問哪些問題或禮貌(不太費時)測試,以找到對自己感興趣並願意維護和改進代碼的人?

我的問題將是:“您是否有興趣並願意維護和改進代碼?”乾淨利落。誠實直接。其他一切都會浪費他們和我的時間。如果他們的反應告訴我答案是否定的,那麼我從那裡繼續。如果是“是”,我將照常執行(深入了解,讓他們解釋自己對此的理解等)。

之後,他們的反應進入了我的整體評估。也就是說,如果他們不希望維護工作,而是擁有我們需要的許多其他技能,並且如果我確定當前的團隊結構可以處理這樣的人,那麼一切都很好。或者,如果他們確實想要這樣做,但是以某種方式無法說服我他們真的是(或理解)了這個意思,並且沒有帶來太多其他好處,那麼我們將分道揚。

恭喜@AnoE!您已經認識到很少有人這樣做。面試的目的並不是要仔細檢查他們的簡歷(儘管只佔很小的一部分),因為可以通過面試前的測試來完成。相反,面試是確定此人是否適合公司和團隊的最佳機會。人格類型錯誤的高技能會摧毀現有的團隊。
Quasimodo's clone
2018-12-25 23:16:57 UTC
view on stackexchange narkive permalink

在我看來,人們對重構與重新創建代碼的感覺不是重點。問題是為什麼何時,是在特定情況下做出決定的原因的問題。我想解釋一下原因:

編寫新代碼(包括設置新概念)通常是一項令人費力的工作,因為經濟通常會給開發人員施加壓力,要求他們高效開展工作以提高銷售量。最短的時間。

我經常會得到一個有趣的項目進行擴展。經過數小時的代碼審查,我對誤解的代碼庫感到恐懼。它並不是真正以可擴展的方式來構思的,它具有多個安全漏洞。依賴於此基礎來構建其他代碼導致了難以預測的行為。

我遇到了很多情況,當我不得不建議在包含舊項目的現有算法的同時,基於新概念進行完整的返工。

我堅信,大多數開發人員喜歡在結構良好的框架上輕鬆完成工作-到目前為止,它仍然存在。我做。為什麼在有更舒適的方法時會絞盡腦汁?

因此,在尋找新的團隊成員時,我們應該詢問應聘者,他們希望在此之前重寫現有代碼庫重構/擴展,並出於其原因進行詳細說明。我們想知道候選人是否能夠根據我們的公司政策做出可靠的決定。

`“大多數開發人員喜歡做基於一個結構良好的框架一件容易的事'” - 我最真的感到非常難過,聽到這樣的評論。以我的經驗,*最好的*開發人員喜歡挑戰,並願意為解決問題而努力(如果得到了適當的補償和讚賞)。如果您的經驗-尤其是招聘人員-有所不同,那麼我對代碼開發的未來會感到恐懼。
@O.M.Y。我的經驗僅限於較小的啟動項目,尤其是在德國。個人知名開發商的數量可能沒有代表性,而德國是一個非常特殊的情況。這裡的大多數開發人員都經歷過,行業真正不希望有偉大的想法。他們被迫以骯髒的方式完成工作,以遵守非常短的期限。但是,基於“結構良好的框架”有效地完成工作並不是一件壞事。
問題在於,“構建”這樣的框架,“通用且可重用的代碼”會浪費時間,而這通常不符合公司的預算。因此,通過多次寫入相似的代碼來一次又一次地發明輪子。在德國,我們體驗到人們在單個項目中似乎效率低下時會失業。我的意思是,在必要時使用現有代碼與重寫之間必須保持平衡。


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