對程式碼的憤怒:程式設計師與負面情緒

對程式碼的憤怒:程式設計師與負面情緒

我正在看一段程式碼。 這可能是我見過的最糟糕的程式碼。 要只更新資料庫中的一筆記錄,它會檢索集合中的所有記錄,然後向資料庫中的每個記錄(甚至是那些不需要更新的記錄)發送更新請求。 有一個映射函數,它只傳回傳遞給它的值。 對於具有明顯相同值的變數進行條件測試,只是以不同的樣式命名(firstName и first_name)。 對於每個 UPDATE,程式碼都會向不同的佇列發送一條訊息,該佇列由不同的無伺服器函數處理,但它會為同一資料庫中的不同集合完成所有工作。 我有沒有提到這個無伺服器功能來自於基於雲端的“面向服務的架構”,包含環境中的 100 多個功能?

怎麼可能做到這一點? 我摀住臉,笑聲中明顯啜泣著。 同事問發生了什麼事,我用顏色複述了一遍 BulkDataImporter.js 2018 年最熱門點擊。 每個人都同情地點點頭並同意:他們怎麼能這樣對我們?

負面情緒:程式設計師文化中的情感工具

消極情緒在程式設計中扮演重要角色。 它根植於我們的文化中,用來分享我們所學到的東西(「你不 你會相信的,那個代碼是什麼樣的!」),透過挫折表達同情(「上帝,為什麼這樣做?」),炫耀自己(「我永遠不會 所以 沒有這樣做」),將責任歸咎於其他人(「我們失敗是因為他的代碼,這是不可能維護的」),或者,按照最「有毒」組織的慣例,透過羞恥感(「你到底在想什麼?」?正確」)。

對程式碼的憤怒:程式設計師與負面情緒

消極情緒對程式設計師來說非常重要,因為它是傳達價值的一種非常有效的方式。 我曾經參加過一個程式設計訓練營,向學生灌輸工業文化的標準做法是慷慨地提供表情包、故事和視頻,其中最受歡迎的是 程式設計師面對人們的誤解時的挫敗感。 能夠使用情緒工具來辨識好、壞、醜、不要那樣做、絕對不做,這很好。 新員工有必要做好心理準備,因為他們可能會被遠離 IT 的同事誤解。 他們的朋友將開始向他們出售價值數百萬美元的應用程式創意。 他們將不得不在無盡的過時代碼迷宮中徘徊,而一群牛頭怪就在拐角處。

當我們第一次學習程式設計時,我們對「程式設計體驗」深度的理解是基於觀察他人的情緒反應。 這一點從帖子中可以清楚看出 sabe程式設計師幽默,很多新手程式設計師常去的地方。 許多幽默的幽默都或多或少帶有不同程度的負面色彩:失望、悲觀、憤慨、居高臨下等等。 如果這對您來說還不夠,請閱讀評論。

對程式碼的憤怒:程式設計師與負面情緒

我注意到,隨著程式設計師獲得經驗,他們變得越來越消極。 初學者沒有意識到等待著他們的困難,一開始就充滿熱情並願意相信這些困難的原因只是缺乏經驗和知識; 最終他們將面對事物的現實。

隨著時間的推移,他們獲得了經驗並能夠區分好程式碼和壞程式碼。 當那一刻到來時,年輕的程式設計師會因為使用明顯糟糕的程式碼而感到沮喪。 如果他們在團隊中工作(遠端或親自),他們通常會採用更有經驗的同事的情緒習慣。 這通常會導致消極情緒的增加,因為年輕人現在可以深思熟慮地談論代碼並將其分為好壞,從而表明他們「了解情況」。 這進一步強化了負面的一面:出於失望,你很容易與同事相處融洽並成為團隊的一員;批評Bad Code會增加你在別人眼中的地位和專業度: 表達負面意見的人通常被認為更聰明、更有能力.

消極情緒的增加並不一定是壞事。 除此之外,對程式設計的討論非常關注所編寫程式碼的品質。 程式碼的含義完全定義了它要實現的功能(硬體、網路等除外),因此能夠表達您對該程式碼的看法非常重要。 幾乎所有的討論都歸結為代碼是否足夠好,以及譴責不良代碼的表現,其情緒內涵表徵了代碼的品質:

  • “這個模組存在著許多邏輯不一致的地方,它是進行重大性能優化的一個很好的候選者。”
  • “這個模組很糟糕,我們需要重構它。”
  • “這個模組沒有意義,需要重寫。”
  • “這個模組很糟糕,需要修補。”
  • “這是一塊內存,不是模組,根本不需要寫,作者到底在想什麼。”

順便說一句,正是這種“情感釋放”讓開發人員稱代碼“性感”,這很少是公平的 - 除非你在 PornHub 工作。

問題在於,人是奇怪的、焦躁的、情緒化的生物,任何情緒的感知和表達都會改變我們:一開始是微妙的,但隨著時間的推移,會發生巨大的改變。

消極情緒的困境

幾年前,我是一名非正式團隊負責人,並採訪了一位開發人員。 我們真的很喜歡他:他很聰明,提出了很好的問題,精通技術,並且非常適合我們的文化。 他的積極性和進取心給我留下了特別深刻的印象。 我僱用了他。

當時我在公司工作了幾年,感覺我們的文化不太有效。 在我到達之前,我們嘗試推出該產品兩次、三次甚至多次,這導致了大量的返工費用,在此期間,除了漫長的夜晚、緊迫的期限和有效的產品之外,我們沒有什麼可展示的。 儘管我仍在努力工作,但我對管理層分配給我們的最後期限表示懷疑。 而且他在和同事討論程式碼的某些方面時,隨口罵了一句。

因此,幾週後,同一位新開發人員說了與我相同的負面言論(包括咒罵),這並不奇怪(儘管我很驚訝)。 我意識到他在不同的公司、不同的文化中會有不同的行為。 他只是適應了我創造的文化。 我心裡充滿了愧疚感。 由於我的主觀經歷,我向一個我認為完全不同的新人灌輸了悲觀主義。 即使他真的不是那樣的人,只是裝出一副可以融入的樣子,我還是把自己卑鄙的態度強加給了他。 所說的一切,即使是開玩笑或順便說的話,都有一種不好的方式變成人們所相信的東西。

對程式碼的憤怒:程式設計師與負面情緒

消極的方式

讓我們回到我們以前的新手程式設計師身上,他們獲得了一點智慧和經驗:他們對程式設計行業更加熟悉,並且明白糟糕的程式碼無處不在,無​​法避免。 即使在最注重品質的最先進的公司中,這種情況也會發生(讓我指出:顯然,現代性並不能防止不良程式碼)。

好劇本。 隨著時間的推移,開發人員開始接受糟糕的程式碼是軟體的現實,他們的工作就是改進它。 如果糟糕的程式碼無法避免,那麼就沒有必要大驚小怪。 他們走禪宗之路,專注於解決他們面臨的問題或任務。 他們學習如何準確地衡量軟體質量並向企業主傳達軟體質量,根據多年的經驗編寫有根據的估計,並最終因其對企業的令人難以置信的持續價值而獲得豐厚的回報。 他們的工作做得非常出色,因此獲得了 10 萬美元的獎金,並退休後可以在餘生中做自己想做的事情(請不要認為這是理所當然的)。

對程式碼的憤怒:程式設計師與負面情緒

另一種情況是黑暗之路。 開發人員並沒有將糟糕的程式碼視為不可避免的事情,而是主動指出程式設計世界中的所有不好的事情,以便他們能夠克服它。 他們拒絕改進現有的糟糕程式碼有很多充分的理由:「人們應該了解更多,而不是那麼愚蠢」; 「這令人不愉快」; 「這對生意不利」; “這證明了我有多聰明”; 「如果我不告訴你這是多麼糟糕的程式碼,整個公司都會掉進大海」等等。

這些人肯定無法實施他們想要的更改,因為不幸的是業務必須繼續發展,而不能花時間擔心程式碼的質量,這些人獲得了抱怨者的名聲。 他們因其高能力而被保留,但被推到了公司的邊緣,他們不會惹惱很多人,但仍會支持關鍵系統的運作。 如果無法獲得新的發展機會,他們就會失去技能並無法滿足產業需求。 他們的消極情緒變成了苦澀,結果他們通過與二十歲的學生爭論他們最喜歡的舊技術的歷程以及為什麼它仍然如此熱門來滿足他們的自負。 他們最後退休了,靠罵鳥來度過晚年。

現實可能介於這兩個極端之間。

有些公司在創造極度消極、孤立、意志堅強的文化方面取得了巨大成功(例如之前的微軟) 失去的十年) - 通常這些公司的產品完全適合市場並且需要盡快成長; 或者是具有命令和控制等級制度的公司(賈伯斯最好時期的蘋果公司),每個人都按照命令行事。 然而,現代商業研究(和常識)表明,最大限度的創造力需要較低的壓力來支持持續的創造性和有條理的思維,這會導致公司的創新和個人的高生產力。 如果您不斷擔心同事對您的每一行程式碼的看法,那麼就很難進行創造性的、基於討論的工作。

消極情緒正在影響流行文化

如今,工程師的態度比以往任何時候都受到更多關注。 在工程組織中,規則“沒有喇叭」。 推特上出現了越來越多的軼事和故事,講述那些因為無法(不會)繼續忍受對外來者的敵意和惡意而離開這個行業的人。 甚至萊納斯·托瓦爾茲 最近道歉了 多年來對其他 Linux 開發人員的敵意和批評——這引發了關於這種方法有效性的爭論。

有些人仍然捍衛萊納斯的批評權利——那些人應該了解「有毒消極性」的優點和缺點。 是的,文明極其重要(甚至是根本),但如果我們總結一下我們中的許多人允許負面意見的表達變成“毒性”的原因,這些原因似乎是家長式的或青春期的:“他們應得的,因為他們是白痴”,“他必須確保他們不會再這樣做,”“如果他們沒有這樣做,他就不必對他們大喊大叫,”等等。 領導者的情緒反應對程式設計社群影響的一個例子是 Ruby 社群的縮寫 MINASWAN - “Matz 很好,所以我們也很好”。

我注意到許多「殺死傻瓜」方法的熱情支持者通常非常關心程式碼的品質和正確性,以他們的工作來證明自己。 不幸的是,他們常常將硬度與剛性混為一談。 這個職位的缺點源自於人類簡單但無成效的渴望感覺自己比別人優越。 陷入這種慾望的人就會陷入黑暗的道路。

對程式碼的憤怒:程式設計師與負面情緒

程式設計世界正在迅速發展,並且正在突破其容器——非程式設計世界的界限(或者說程式設計世界是非程式設計世界的容器?好問題)。

隨著我們的行業不斷發展,程式設計變得越來越容易,「技術人員」和「普通人」之間的距離正在迅速縮小。 程式設計世界越來越多地暴露在早期科技繁榮時期孤立的書呆子文化中長大的人們的人際互動中,而正是他們將塑造新的程式設計世界。 無論社會或代際爭論如何,資本主義名義下的效率都會體現在公司文化和招聘實踐中:最好的公司根本不會僱用任何不能與他人中立互動的人,更不用說擁有良好的關係了。

我學到的關於負面情緒的知識

如果你讓太多的負面情緒控制你的思想和與人的互動,變成毒性,那麼這對產品團隊來說是危險的,對業務來說也是昂貴的。 我見過(也聽說過)無數的專案分崩離析,並以巨大的代價完全重建,因為一個值得信賴的開發人員對技術、另一個開發人員,甚至是選擇代表整個程式碼庫品質的單一文件懷有怨恨。

消極情緒也會使士氣低落並破壞人際關係。 我永遠不會忘記一位同事因為我把 CSS 放在錯誤的文件中而責罵我,這讓我心煩意亂,讓我好幾天都無法整理思緒。 將來,我不太可能允許這樣的人靠近我的團隊之一(但誰知道呢,人都會改變的)。

最後是負面的 確實會損害你的健康.

對程式碼的憤怒:程式設計師與負面情緒
我認為這就是微笑大師班該有的樣子。

當然,這並不是支持笑容滿面,在每個拉取請求中插入一百億個表情符號,或者去參加微笑大師班(不,好吧,如果這就是你想要的,那就沒問題)。 消極性是程式設計(和人類生活)中極其重要的一部分,它標誌著質量,允許人們表達情感並與人類同胞表示同情。 消極表示洞察力和謹慎,以及問題的深度。 我經常注意到,當開發人員開始對他之前膽怯和不確定的事情表示懷疑時,他就達到了一個新的水平。 人們用自己的觀點表現出合理性和信心。 你不能忽視消極的表達,那是奧威爾式的。

然而,消極情緒需要與其他重要的人類特質相平衡:同理心、耐心、理解和幽默。 你總是可以告訴一個人他搞砸了,而不必大喊大叫或咒罵。 不要低估這種方法:如果有人毫無感情地告訴你你已經嚴重搞砸了,那真的很可怕。

幾年前的那一次,執行長與我交談。 我們討論了專案的現狀,然後他問我感覺如何。 我回答說一切都很好,專案正在推進,我們工作進展緩慢,也許我錯過了一些事情,需要重新考慮。 他說他聽到我與辦公室的同事分享了更多悲觀的想法,其他人也注意到了這一點。 他解釋說,如果我有疑問,我可以向管理層充分錶達,但不能「把它們記下來」。 身為首席工程師,我必須注意我的言論如何影響他人,因為即使我沒有意識到,我也有很大的影響力。 他非常友善地告訴我這一切,最後說,如果我真的有這樣的感覺,那麼我可能需要考慮我自己和我的職業生涯想要什麼。 這是一次令人難以置信的溫和、要么不做,要么離開座位的談話。 我感謝他提供了關於我在六個月內改變的態度如何影響其他人但我沒有註意到的資訊。

這是卓越、有效管理和軟方法力量的一個例子。 我意識到,我似乎只是對公司及其實現目標的能力充滿信心,但實際上我以完全不同的方式與他人交談和溝通。 我還意識到,即使我對我正在從事的專案感到懷疑,我也不應該向同事表達我的感受,並像傳染病一樣傳播悲觀情緒,從而減少我們成功的機會。 相反,我可以積極地將真實情況傳達給我的管理層。 如果我覺得他們沒有聽我的話,我可以透過離開公司來表達我的不同意見。

當我擔任人事考核主管時,我得到了一個新的機會。 作為一名前首席工程師,我在表達對我們(不斷改進的)遺留程式碼的意見時非常謹慎。 要批准一項改變,你需要想像當前的情況,但如果你沉迷於抱怨、攻擊等,你將一事無成。 最終,我來這裡是為了完成一項任務,不應該為了理解它、評估它或修復它而抱怨程式碼。

事實上,我越能控制自己對程式碼的情緒反應,我就越能理解它可能會變成什麼樣子,我感到的困惑就越少。 當我克制地表達自己時(「這裡一定還有進一步改進的空間」),我是在讓自己和他人開心,而不是把情況看得太嚴重。 我意識到我可以透過完全(令人煩惱的?)合理來激發和減少其他人的負面情緒(「你是對的,這段程式碼非常糟糕,但我們會改進它」)。 我很高興看到自己能在禪宗道路上走多遠。

從本質上講,我不斷地學習和重新學習一個重要的教訓:生命太短,不能不斷地生氣和痛苦。

對程式碼的憤怒:程式設計師與負面情緒

來源: www.habr.com

添加評論