導航:首頁 > 程序命令 > 壓垮程序員的bug

壓垮程序員的bug

發布時間:2025-08-05 16:11:22

『壹』 程序員是不是到了一定的年齡就退休了

員的工作比較累,一般到了40歲就選擇離開了工作的崗位
1.自主創業
這種人大多數是在工作中到了一定的崗位,有了一定的資本,綜合能力提升到一定的水平,對自己有比較足的信心。如果單純是因為自己工作不開心,對老闆不滿而憤然離職創業的,這種基本成功概率為零。創業比起做管理崗要求更高,除了溝通能力,還有商務能力,團隊管理,人脈資源等等,都是創業者必備的技能。每個創業者都要有九頭六臂老處理日常大大小小的瑣碎事,還要有極強的承壓能力,下個月的員工工資都發不出來了,今晚依然能倒頭就睡,否則創業未成,自己就先被壓垮了。

創業難度很大,風險很高,但總會有「勇士」前赴後繼。

2.做管理

做管理,估計是大部分程序員的選擇。原因很簡單,「大齡」程序員有著多年的開發項目經驗,這些實戰經驗能一些崗位起到很重要的作用。比如:CTO,項目經理、產品經理。

有著豐富的開發經驗,能讓你在日常工作開展中更好地跟年輕程序員溝通。 技術出身往往有更好的邏輯思維,更懂得用程序員「能聽懂的」方式去跟他們溝通,這一點是非技術科班出身的管理者所缺少的技能。程序員大多不善於交際,做管理崗更多的是管人管事,跟人打交道,而不是跟機器打交道,對你的語言表達、溝通能力是一個很大的考驗。 管理也是需要許多知識的,不是光有技術資本就能管得了人理得了事的,所以從單純寫程序轉到管理,還是要繼續提升自己其他方面的能力,否則在工作上也是寸步難行。

3.繼續寫程序

選擇繼續單純地寫程序的,除了熱愛,估計就是尷尬地別無他選了。大齡程序員在國內企業基本沒要,有N多有拼勁能加班、要求又低、還沒有家庭負擔的小年輕在等著呢,誰願意要你來寫程序?如果想繼續抱著鍵盤安安靜靜地寫程序,估計要在某個技術方向深度學習。比如做游戲就一直做游戲,做網路就一直做網路,其它方向的工作基本不在考慮范圍內,這樣才能在一個方向上積累下來;否則各個領域都會一點皮毛,但又沒有精通的,企業幾乎不需要這種人。

程序員找出路還是要盡量提前進行職業規劃和准備,千萬不要說什麼:「走一步,算一步」的話。在這個一睜眼就是競爭的時代,你可以放鬆休息,但別人會繼續前進,不會等你。

我們相信人人都可以成為一個開發大神,現在開始,找個師兄,帶你入門,學習的路上不再迷茫。初學者轉行到互聯網行業的聚集地。」

『貳』 程序員該如何緩解壓力呢

當今,程序員這份工作看起來既能掙錢又有保障,但是這種職業一整天面對著電腦,精神耗費大。這對程序員的精神健康會產生很大的影響。程序員這份工作本身就有一定的壓力,那麼程序員該如何緩解壓力呢?

保持良好的心態

將不快以適當模式發泄出來,以減輕心理壓力。要敢於把自己不愉快的事向知心朋友或親人訴說。當極其憂傷時哭泣、讀詩詞、寫日記、看電影、聽音樂都是常見的宣洩模式。節奏歡快的音樂能振奮人的情緒。

增強自信心,做情緒的主人

人在正常狀態下是可以透過意志努力來消除不愉快情緒,並保持樂觀心情的。一是有意識地獲取成功的體驗;二是不在乎別人對自己如何評價;三是善於發現自己的長處。知識是自信的源泉。要學會容忍,培養堅忍的毅力。用積極進取精神取代消極思想意識。把事情看透,心胸開闊,情緒就能保持穩定。

快速的放鬆運動

閉上你的眼睛,記住你的感受,慢慢地吸一口氣。在吸氣的過程中,你會發現你的腹部在胸部擴張之前就會鼓起。盡可能呼吸得更長更慢——可能開始的時候會稍快一些,但是漸漸地慢下來。當你呼氣時,也是腹部先於胸部收縮。

緩解工作氛圍

每天面對電腦上的一堆代碼,單調枯燥,建議辦公桌上放置兩盆綠植,綠蘿,吸毒草,或者自己更喜歡的其他盆景。這樣可以緩解單一的工作氛圍,增添幾分生機。

培養興趣愛好

培育興趣愛好,可以給壓力尋找一個釋放口,營養生物學家肖恩—塔爾伯特表示,業余愛好和消遣活動能讓人以一種健康的方式釋放壓力,能夠讓人在忙碌而倍感壓力的的工作之餘留下念想。比如,男程序員可以嘗試下班後去健身房健身,女程序員可以去瑜伽屋練瑜伽。

善待自己

善待好自己的'身體,身體是一切的成本,不對它負責就對一切不負責,吃好喝好,保持良好的生活作息時間。不要對自己太苛刻,任何事情都沒有盡善盡美,包括你自己,放低標準的同時也能放鬆心情,減少壓力。

積極主動的管理壓力

將降低壓力當作人生目標是一個很有價值的目標。你受壓力的影響越小,那麼你的效率就越高。

注意飲食和運動

整天坐在辦公桌前非常不利於身體健康。應激反應產生的緊張感會積蓄在體內,隨著時間的推移從而會徹底壓垮你。飲食和運動絕對是編程和壓力這個方程式的正解。多做運動,盡量少喝咖啡,少吃含糖零食。

『叄』 Erlang游戲程序員換語言轉行,都有哪些建議

1、對於優秀的程序員來說,不存在轉語言一說。不管什麼語言,設計思想都是一樣的。不管是java、Go、Python,還是C、C++、PHP,它的一些基礎語法(for循環、條件判斷、數組操作)都是大同小異的。如果項目中需要用別的語言,不要怕!更不要提前花時間就研究,跟著項目需求走就行。當然如果你想好好掌握該語言,那工作之餘多看看相關技術文檔好好研究一下就行。語言只是一個工具,拿來即用才是我輩程序員的終極修為!

4、創業比起做管理崗要求更高,除了溝通能力,還有商務能力,團隊管理,人脈資源等等,都是創業者必備的技能。每個創業者都要有九頭六臂老處理日常大大小小的瑣碎事,還要有極強的承壓能力,下個月的員工工資都發不出來了,今晚依然能倒頭就睡,否則創業未成,自己就先被壓垮了。創業難度很大,風險很高,但總會有「勇士」前赴後繼。

『肆』 晚上9點到11點你在幹啥,難怪活不好

不得不熬的夜盡量科學地熬,不是自殺是自救。但明明可以不熬的夜瞎熬,不是修仙是作死。

生活中我們經常會遇到這樣的情況:九點鍾,洗漱完畢,敷好面膜躺在床上,拿起手機習慣性地逛會兒淘寶。結果逛完淘寶刷微博,刷完微博追idol新劇。

「今晚能睡八個小時…我去只有五個小時了…不鬧了再玩最後兩個小時…睡一個小時也比通宵強…睡個鬼啊,天亮了,再玩一下直接起床吧」。

「連睡意都戰勝不了,還能戰勝什麼」成為當代很多人晚睡的口號。



晚九點到十一點,入眠最佳

2015年《全球睡眠報告》稱,中國人平均上床睡覺時間為00:32。 然而根據現有部分時間生物學家和醫學家的研究,晚上九點到十一點,是人體入眠的最佳時期。

「早起富三代,熬夜毀一生」。調查研究顯示,盡管都能睡夠8小時,但是晚上十點鍾入睡和零點之後入睡,睡眠的效果是截然不同的。

很多人,每天睡得也不少,但是越睡越虛,這和人體生物節律和自然節律有關。

2017年諾貝爾生理學獲獎者傑弗理·霍爾等通過關於晝夜節律的研究,告訴我們一個價值740萬人民幣的簡單道理: 白天工作、晚上休息,跟上地球的節奏才能愉快地玩耍。

中國人講究「天人合一」,實際上,從單細胞生物到人類都具有生物節律。人白天工作學習,晚上睡覺休息,就是以晝夜為周期的生物節律。

晚上10點到11點,人體處於生物節律的低潮。9點到10點睡覺,與生物節律相吻合。

如果超過24點,生物節律會處於一個相對的高潮,給入睡造成一定困難。因此,最佳入睡時間是22點左右。

而當我們因貪玩錯過正常睡覺時間,入睡就會變得困難。這是由於我們打破了生活習慣,也打破了生物節律,使睡眠的節律也遭到破壞。

想睡睡不著,乾脆就通宵。很多人熬夜都是這樣產生的,過了睡覺的時間,結果越熬越興奮,一鼓作氣乾脆就high到底了。

第二天,微笑中透露著一絲疲憊,暗暗發誓今天十一點之前一定要准時睡覺,結果又是微博、游戲、狼人殺。

「晚上不睡,早上不起」,長期在不是生物節律低潮時入睡,會導致失眠情況的產生。

擁有正確睡眠時間的時候不懂珍惜,錯過了卻追悔莫及。當你輾轉反側,徹夜難眠時真的就應了華妃娘娘的那句經典台詞,「你試過從天黑等到天亮的滋味嗎」。



科普謠言:人體排毒表

熬夜的人很多,睡眠就成了困擾大家的普遍問題。於是,各種不靠譜的偽科普紛紛上線。

其中流傳最廣的是:「晚上九點鍾以後,是人體排毒的最佳時間」?

近年來,有關「人體排毒時間表」的新聞在網路上大行其道。大爺大媽、大哥大姐,誰沒轉發過一條關於排毒的朋友圈,都不好意思說自己混養生圈。

然而,這其實是謠言!是謠言!是謠言!重要的事情說三遍。

人體有生物鍾是真的,但排毒時間表確實不存在。之所以會有這種謠言,其實是因為睡眠的兩個重要作用。

首先睡眠影響著人體的免疫功能。 免疫學家貝里·達比教授在美國佛羅里達大學里對睡眠、催眠與人體免疫力作了一系列研究。

通過對28名試驗人員進行自我催眠試驗後,研究小組發現受試人員血液中的T淋巴細胞和B淋巴細胞均有明顯上升,而這兩種細胞是影響人體免疫力的主要因素。

正是因為睡眠對提高人體免疫力所產生的重要作用,才有了所謂的每晚九點到十一點是人體淋巴的排毒過程的說法。事實上,淋巴細胞一直在工作,九點到十一點並不特殊。

其次,睡眠有利於維持人體內環境的協調。 「晚上十點至凌晨兩點,是人體內細胞壞死與新生最活躍的時間,此時不睡足,細胞新陳代謝就會受到影響,人就會加速衰老」。

膚質變差,痘痘橫生是因為熬夜導致內分泌的失調,而不是幾點到幾點沒排毒。



養生道理都懂,就是睡不好

晚上九點過後,月掛西頭,這是屬於夜貓子們的showtime。

直播平台的知名游戲博主「孤王」,開始了一天中最忙碌的時刻。晚上九點正是粉絲活躍度進入高峰的關鍵時間點,國服最強輔助光環加持,即刻吸引粉絲無數。

自媒體行業工作者「小雯」,正在為即將推送的文章進行最後的校對和排版。打理自己的公眾號,24小時連軸轉都嫌時間不夠用,和粉絲互動至深夜兩三點更是司空見慣。

知名互聯網企業的程序員「阿哲」在公司茶水間給自己泡了一杯濃濃的咖啡,看著中關村燈火通明的辦公樓,他覺得自己像一顆星星,照亮夜空;也覺得自己是一根蠟燭,燃燒生命。

最終,「孤王」因過勞,二十齣頭生命就畫上了句號;「小雯」內分泌失調,帶著一臉痘痘到處求醫問葯;「阿哲」拿了數十萬年終獎之後,第一件事是問哪個地方植發技術好。

在這種背景下,一個適合當下青年人的特殊詞彙應運而生:「養生朋克」。 這個網路新詞其實是大家對於現在不健康生活方式的調侃。

啤酒泡枸杞,可樂放黨參,塗著眼霜熬著夜,來著姨媽吃紅棗雪糕。一邊作天作地,一邊保健養生,倔強且精緻地活著就是「養生朋克」。

別鬧了,各位老鐵,怕死就直說。

晚上九點到十一點,注意以下幾點,才是最好的養生。

第一,九點之後少吃點並不影響你做精緻的豬豬女孩。 吃太飽會使你的消化系統加班工作,腹部的飽漲會刺激神經,不舒服的感覺會使你難以入睡。

當然太餓也不行,睡前喝點牛奶吃點餅干可以助眠。

第二,濃茶,咖啡,酒什麼的睡前就別喝了。

茶葉中含的芳香油、咖啡因和茶鹼都具有興奮提神的作用,影響正常入睡,甚至可能導致失眠。茶鹼還有利尿作用,睡前飲茶容易使人被尿憋醒,從而影響睡眠的連續性。

咖啡的作用和茶大致相同。

很多失眠的人會借酒助眠,但其實酒精會讓我們夜裡睡不安穩,導致第二天起床頭痛。

第三,請不要總在睡覺前才想起來今天沒有鍛煉身體,即使想鍛煉,也應適度。

睡前適當的運動可以緩解人白天積累的緊張,並使身心放鬆而增進睡眠質量。但是臨睡前的過量運動,會令大腦興奮,不利於睡眠。

睡不好會導致肥胖的新聞大街小巷都是,所以如果睡前鍛煉是想瘦,那咱還是早點洗洗睡吧。

第四,放下手機,立地成佛。

每晚九點到十一點,很多人其實已經躺下了,只可惜卻是為了用手機繼續狂歡。

經常熬夜刷手機,導致眼角膜穿孔差點失明的新聞絕不是危言聳聽。

睡前躺在床上玩手機,是年輕人最愛的娛樂休閑方式之一 | 視覺中國

當然,想要根治過度依賴手機症,只有一個辦法:讓手機單獨一個屋睡,它都這么大了,也到和大人分開睡的年紀了。



得了晚睡的病,沒有晚起的命

有人熬夜為了浪,有人熬夜為了活。 「珍愛生命,遠離熬夜」的道理誰都懂,但是生活中總有那些不得不熬的夜,和不得不熬夜的人。

北上廣深的夜是被無數加班者熬白的,求職時面對接不接受加班這種問題很難給出否定的答案,你不做總有人做。同樣的,你不想熬的夜也總有人要替你熬。

白衣天使過勞猝死,快遞小哥因差評痛哭,鐵路工作人員夜色中檢查鐵道落得一身職業病。

有時候他們不僅僅是為了一口飯,還為了一口氣。負重前行,不過是為社會提供一些方便。

辭職兩個字太輕,承擔不起生活的重擔;熬夜兩個字又太重,壓垮了生命的質量。 對職場沉浮的同志們來說,這簡直是人生的一大bug。

客觀條件改不了,我們只能適當發揮主觀能動性了。

首先要穩住,心態不能炸。

理想的睡眠時間是會隨白天心情的變化而變化的。面對加班的壓力,有的人適應能力較強,可以保持相對樂觀的心態;有的人則感覺人生灰暗,看不到盡頭。

處於一種憂慮的心情中自然是需要更長的時間來恢復疲勞,所以有時候我們會發現有些人每天都很喪,每天都睡不醒。

其次,我們要科學地看待睡眠。

看到熬夜至死的新聞,不得不熬夜的同學自然覺得怕怕的。 但是事實上,偶爾的熬夜對人體的傷害是可控的。 睡覺是一種很自然的「加油」現象,是隨時可能變化的。

生活在不斷變化的現代社會,要讓自己的精神和生理狀態永遠保持固定的水準,幾乎是不可能的。

在這種情形之下,如果還是一味以睡眠時數衡量自己睡眠的話,會增加自己的焦慮,甚至導致失眠。

不得不熬的夜盡量科學地熬,不是自殺是自救。但是明明可以不熬的夜瞎熬,不是修仙是作死。

前一晚不管你是因拖延症被迫加班,還是迷戀網路放飛自我,最終導致的結果只有一個,第二天睡眠不足,虛弱的肉體將裝不下你報效祖國的雄心。

打著愛你的旗號陪你熬夜的人都是害你,他們讓你變胖變丑變遲鈍,讓你從一顆倔強的螺絲釘變成軟綿綿的社會蛀蟲。

正值青春的年紀,過著無聊的生活,像一條沒有夢想的咸魚一樣熬著夜,負責任的說,和那些不得不熬夜的人比,你LOW爆了。

參考文獻:

[1] 於蘭., 賈占玲., 於蘭, and 賈占玲. 睡眠與睡眠障礙 (2006). Web.

[2] 肖瑩., and 肖瑩. 睡眠障礙. 第1版 ed. 北京: 中國醫葯科技出版社, 2013. Print. 古今名醫臨證實錄叢書.

[3] 張曉舟. 學會睡眠 : 消除睡眠不適的煩惱 (1996). Web.

[4] 張魯原. 睡眠健康指南  (2005). Web.

[5] 錢詩金. 生命密碼 : 睡眠決定生機 (2006). Web.

[6] 葉輕舟. 你知道的都是錯的 : 睡眠是養生的第一大補 = Everything You Know Is Wrong. 第1版 ed. 哈爾濱: 哈爾濱出版社, 2009. Print.

[7] 三九養生堂.晚上九點後千萬別做這些事.三九養生堂

[8] 新華網.警惕!晚上九點後七件事千萬不要做.人民網

[9]  金羊網.12歲女孩網吧熬夜超兩晝夜猝死.網易新聞

[10]  一笑傾城已淡抹.「最強輔助」孤王猝死,你還敢熬夜嗎.東方網

『伍』 紼嬪簭鍛樿鍏鍙歌緸閫鍚庢劅鍙: 瀹朵腑涓婃湁鑰, 涓嬫湁灝, 閮戒笉鏁㈣窡鑰佸﹩璇

紼嬪簭鍛樻槸楂樿柂鐨勪唬鍚嶈瘝錛屾湀鍏ヨ繃涓囨槸甯告侊紝騫磋柂鍑犲嶮涓囩殑姣旀瘮鐨嗘槸錛岀敋鑷充笉涔忎竴浜涘ぇ鐗涙嬁鐫鐧句竾騫磋柂錛岄殢鐫浜掕仈緗戞椂浠g殑蹇閫熷彂灞曪紝紼嬪簭鍛樻垚浜嗕竴鍧楃倷鎵嬪彲鐑鐨勯欓ソ楗斤紝涓嶅皯浜烘姇鍏ヨ繖涓琛屼笟錛屼紒鍥句粠涓鍒嗗緱涓鏉緹癸紝鍑′簨鐨嗘湁渚嬪栵紝琛ㄩ潰鐪嬩技鍏夐矞錛岃儗鍚庡嵈鏈夎稿氱殑鏃犲堬紝榪戞棩鍦ㄧ▼搴忓憳璁哄潧錛屼竴鍚嶇▼搴忓憳琚鍏鍙歌佸憳浜嗭紝蹇冮吀涔嬩綑鍙戝笘鎰熸叏鐢熸椿錛屾潵鐪嬬湅浠栨庝箞璇寸殑銆

34宀佽浼樺寲浜嗭紝涓婃湁鑰侊紝涓嬫湁灝忕殑騫寸邯錛屼笉鏁㈣窡鑰佸﹩璇達紝鏃╀笂涓璧峰嚭闂錛岃繘鍦伴搧鍚庯紝鍑烘潵鍚冧釜鏃╅キ錛屽洖瀹跺埛綆鍘嗐傝偗瀹氭湁浜鴻煩鍑烘潵璇達紝榪欎釜騫寸邯榪樻姇綆鍘嗭紝娣風殑澶宸浜嗐傛病閿欙紝鎴戝氨鏄涓猯ooser錛屽彧鑳介潬鑷宸便傜濊嚜宸卞ソ榪愶紒

鐭鐭鍑犲嶮瀛楃殑璐存枃閫忛湶鐫鍚勭嶈壈杈涳紝鑷宸辨槸瀹墮噷鐨勯《姊佹熅錛屽け鍘諱簡宸ヤ綔鎰忓懗鐫娌℃湁緇忔祹鏀跺叆錛屼負浜嗗跺涵榪樺緱閫夋嫨鎸浣滆搗鏉ワ紝榪戜袱騫翠笉灝戠戞妧鍘傞夋嫨瑁佸憳錛屽競闈涓婃剤鏉ユ剤瓚嬩簬鐞嗘у寲錛屽湪璐存枃鐨勪笅鏂癸紝鑱氶泦浜嗕笉灝戝洿瑙傝咃紝瀵規わ紝涓嶅皯緗戝弸瀵規よ璁虹悍綰鳳紝閮ㄥ垎緗戝弸濡傛よ瘎浠烽亾錛氬攭錛屾垜涔熷緢澶辮觸錛屽ソ鐒﹁檻銆備笉榪囷紝鏈変釜闂棰橈紝浣犺佸﹩闅鵑亾涓嶇湅浣犻摱琛屽崱鍚楋紵鎴戝幓騫32搴旇ユ槸鏈変簡錛屼篃鎶曠畝鍘嗭紝榪樿繃浜嗕袱涓錛屼絾姣旇緝鍕夊己鏈轟細錛屾斁寮冧簡銆

榪樻湁濂崇綉鍙嬭村嚭鏆栧績鐨勪竴騫曪細濡傛灉鎴戣佸叕琚瑁佷簡錛屾垜甯屾湜鑳借窡浠栦竴璧鋒潬銆傛墍浠ュ憡璇夊ス錛屽か濡誨叡鍚岀粡鍘嗛庨洦錛屾劅鎯呬細鏇存繁銆備笉瑕佸け鍘誨笇鏈涘拰鍕囨皵錛屽姞娌癸紒鍔犳補錛佷笉綆″ソ鐨勫潖鐨勮繕鏄搴旇ヨ窡鑰佸﹩鍒嗕韓錛屾瘯絝熺粰鑷宸辮繃搴︾殑鍘嬪姏浼氭妸鑷宸卞帇鍨鐨勩備漢鐢熶笉濡傛剰鍗佹湁鍏涔濓紝鏈鏉ヤ細濂界殑錛屽姞娌瑰惂錛佹病鏈夎繃涓嶅幓鐨勫潕錛36宀侊紝鎴戝幓騫存崲浜3嬈″伐浣滐紝姣忔¢兘鏄璁ょ湡鎬葷粨錛屾媺閽╋紝鐚庤仒涓涓涓涓鑱屼綅灝濊瘯錛屽叏闈犺嚜宸憋紝娌℃湁浜哄埆浜哄彲浠ユ寚鏈涖

鏈夊悓涓虹▼搴忓憳涔熻茶堪浜嗗績閰哥殑緇忓巻錛氭垜浠婂勾46宀侊紝渚濈劧榪樺湪鎶曠畝鍘嗭紝涓瀹朵竴瀹剁殑闈㈣瘯銆備粖澶╂槸鎴戞壘宸ヤ綔鐨勭4涓鏈堬紝鏃犳埧鏃犺濺鏃犺捶嬈炬棤瀛樻俱傛瑺淇$敤鍗10涓囷紝浣嗘垜鐩鎬俊鎴戜細鎵懼埌涓嶉敊鐨勫伐浣溿傛墍浠ヤ俊蹇冨嶮瓚籌紝鏆傛椂鐨勫洶闅炬病浠涔堢殑銆

35宀佹妧鏈緇忕悊錛岃煩妲借繃4嬈★紝姣忔¢兘鏄鐔熶漢鍐呮帹錛屼粖騫翠竴鏈堜喚紕板閥鐪嬪埌涓涓婊℃剰鐨勮亴浣嶏紝鎯沖嚟綆鍘嗚瘯璇曠湅錛屼簬鏄鎷跨潃綆鍘嗗幓錛岄潰璇曢氳繃錛屽悓鏃惰柂姘存定浜嗕笁鎴愩傛暍鎯呰嚜宸變篃涓嶈兘鑰佹槸闈犵啛浜哄晩銆

璇勮哄尯鎰堝彂鐨勬縺鐑堬紝澶у氭暟緗戝弸鍕夊姳緇х畫鍚戝墠錛屼漢涓鐢熶腑瑕佺粡鍘嗚歌稿氬氱殑鍧庡澐錛岀粡鍘嗚繃鍚庣粓浼氳佸僵鉶癸紝褰撶劧涔熸湁璇稿氭満浼氾紝鍏抽敭鐪嬭嚜宸卞備綍鍘繪妸鎻★紒

『陸』 代碼重構的概述

重構(),通過調整程序代碼改善軟體的質量、性能,使其程序的設計模式和架構更趨合理,提高軟體的擴展性和維護性。也許有人會問,為什麼不在項目開始時多花些時間把設計做好,而要以後花時間來重構呢?要知道一個完美得可以預見未來任何變化的設計,或一個靈活得可以容納任何擴展的設計是不存在的。系統設計人員對即將著手的項目往往只能從大方向予以把控,而無法知道每個細枝末節,其次永遠不變的就是變化,提出需求的用戶往往要在軟體成型後,才開始品頭論足,系統設計人員畢竟不是先知先覺的神仙,功能的變化導致設計的調整再所難免。所以測試為先,持續重構作為良好開發習慣被越來越多的人所採納,測試和重構像黃河的護堤,成為保證軟體質量的法寶。 在不改變系統功能的情況下,改變系統的實現方式。為什麼要這么做?投入精力不用來滿足客戶關心的需求,而是僅僅改變了軟體的實現方式,這是否是在浪費客戶的投資呢?
重構的重要性要從軟體的生命周期說起。軟體不同與普通的產品,他是一種智力產品,沒有具體的物理形態。一個軟體不可能發生物理損耗,界面上的按鈕永遠不會因為按動次數太多而發生接觸不良。那麼為什麼一個軟體製造出來以後,卻不能永遠使用下去呢?
對軟體的生命造成威脅的因素只有一個:需求的變更。一個軟體總是為解決某種特定的需求而產生,時代在發展,客戶的業務也在發生變化。有的需求相對穩定一些,有的需求變化的比較劇烈,還有的需求已經消失了,或者轉化成了別的需求。在這種情況下,軟體必須相應的改變。
考慮到成本和時間等因素,當然不是所有的需求變化都要在軟體系統中實現。但是總的說來,軟體要適應需求的變化,以保持自己的生命力。
這就產生了一種糟糕的現象:軟體產品最初製造出來,是經過精心的設計,具有良好架構的。但是隨著時間的發展、需求的變化,必須不斷的修改原有的功能、追加新的功能,還免不了有一些缺陷需要修改。為了實現變更,不可避免的要違反最初的設計構架。經過一段時間以後,軟體的架構就千瘡百孔了。bug越來越多,越來越難維護,新的需求越來越難實現,軟體的構架對新的需求漸漸的失去支持能力,而是成為一種制約。最後新需求的開發成本會超過開發一個新的軟體的成本,這就是這個軟體系統的生命走到盡頭的時候。
重構就能夠最大限度的避免這樣一種現象。系統發展到一定階段後,使用重構的方式,不改變系統的外部功能,只對內部的結構進行重新的整理。通過重構,不斷的調整系統的結構,使系統對於需求的變更始終具有較強的適應能力。
通過重構可以達到以下的目標:
·持續糾偏和改進軟體設計
重構和設計是相輔相成的,它和設計彼此互補。有了重構,你仍然必須做預先的設計,但是不必是最優的設計,只需要一個合理的解決方案就夠了,如果沒有重構、程序設計會逐漸腐敗變質,愈來愈像斷線的風箏,脫韁的野馬無法控制。重構其實就是整理代碼,讓所有帶著發散傾向的代碼回歸本位。
·
Martin Flower在《重構》中有一句經典的話:任何一個傻瓜都能寫出計算機可以理解的程序,只有寫出人類容易理解的程序才是優秀的程序員。對此,筆者感觸很深,有些程序員總是能夠快速編寫出可運行的代碼,但代碼中晦澀的命名使人暈眩得需要緊握坐椅扶手,試想一個新兵到來接手這樣的代碼他會不會想當逃兵呢?
軟體的生命周期往往需要多批程序員來維護,我們往往忽略了這些後來人。為了使代碼容易被他人理解,需要在實現軟體功能時做許多額外的事件,如清晰的排版布局,簡明扼要的注釋,其中命名也是一個重要的方面。一個很好的辦法就是採用暗喻命名,即以對象實現的功能的依據,用形象化或擬人化的手法進行命名,一個很好的態度就是將每個代碼元素像新生兒一樣命名,也許筆者有點命名偏執狂的傾向,如能榮此雅號,將深以此為幸。
對於那些讓人充滿迷茫感甚至誤導性的命名,需要果決地、大刀闊斧地整容,永遠不要手下留情!
·幫助發現隱藏的代碼缺陷
孔子說過:溫故而知新。重構代碼時逼迫你加深理解原先所寫的代碼。筆者常有寫下程序後,卻發生對自己的程序邏輯不甚理解的情景,曾為此驚悚過,後來發現這種症狀居然是許多程序員常患的感冒。當你也發生這樣的情形時,通過重構代碼可以加深對原設計的理解,發現其中的問題和隱患,構建出更好的代碼。
·從長遠來看,有助於提高編程效率
當你發現解決一個問題變得異常復雜時,往往不是問題本身造成的,而是你用錯了方法,拙劣的設計往往導致臃腫的編碼。
改善設計、提高可讀性、減少缺陷都是為了穩住陣腳。良好的設計是成功的一半,停下來通過重構改進設計,或許會在當前減緩速度,但它帶來的後發優勢卻是不可低估的。 新官上任三把火,開始一個全新??、腳不停蹄、加班加點,一支聲勢浩大的千軍萬碼夾裹著程序員激情和扣擊鍵盤的鳴金奮力前行,勢如破竹,攻城掠地,直指黃龍府。
開發經理是這支浩浩湯湯代碼隊伍的統帥,他負責這支隊伍的命運,當齊桓公站在山頂上看到管仲訓練的隊伍整齊劃一地前進時,他感嘆說我有這樣一支軍隊哪裡還怕沒有勝利呢?。但很遺憾,你手中的這支隊伍原本只是散兵游勇,在前進中招兵買馬,不斷壯大,所以隊伍變形在所難免。當開發經理發覺隊伍變形時,也許就是克制住攻克前方山頭的誘惑,停下腳步整頓隊伍的時候了。
Kent Beck提出了代碼壞味道的說法,和我們所提出的隊伍變形是同樣的意思,隊伍變形的信號是什麼呢?以下列述的代碼症狀就是隊伍變形的強烈信號:
·代碼中存在重復的代碼
中國有118 家整車生產企業,數量幾乎等於美、日、歐所有汽車廠家數之和,但是全國的年產量卻不及一個外國大汽車公司的產量。重復建設只會導致效率的低效和資源的浪費。
程序代碼更是不能搞重復建設,如果同一個類中有相同的代碼塊,請把它提煉成類的一個獨立方法,如果不同類中具有相同的代碼,請把它提煉成一個新類,永遠不要重復代碼。
·過大的類和過長的方法
過大的類往往是類抽象不合理的結果,類抽象不合理將降低了代碼的復用率。方法是類王國中的諸侯國,諸侯國太大勢必動搖中央集權。過長的方法由於包含的邏輯過於復雜,錯誤機率將直線上升,而可讀性則直線下降,類的健壯性很容易被打破。當看到一個過長的方法時,需要想辦法將其劃分為多個小方法,以便於分而治之。
·牽一毛而需要動全身的修改
當你發現修改一個小功能,或增加一個小功能時,就引發一次代碼地震,也許是你的設計抽象度不夠理想,功能代碼太過分散所引起的。
·類之間需要過多的通訊
A類需要調用B類的過多方法訪問B的內部數據,在關繫上這兩個類顯得有點狎昵,可能這兩個類本應該在一起,而不應該分家。
·過度耦合的信息鏈
計算機是這樣一門科學,它相信可以通過添加一個中間層解決任何問題,所以往往中間層會被過多地追加到程序中。如果你在代碼中看到需要獲取一個信息,需要一個類的方法調用另一個類的方法,層層掛接,就象輸油管一樣節節相連。這往往是因為銜接層太多造成的,需要查看就否有可移除的中間層,或是否可以提供更直接的調用方法。
·各立山頭幹革命
如果你發現有兩個類或兩個方法雖然命名不同但卻擁有相似或相同的功能,你會發現往往是因為開發團隊協調不夠造成的。筆者曾經寫了一個頗好用的字元串處理類,但因為沒有及時通告團隊其他人員,後來發現項目中居然有三個字元串處理類。革命資源是珍貴的,我們不應各立山頭幹革命。
·不完美的設計
在筆者剛完成的一個比對報警項目中,曾安排阿朱開發報警模塊,即通過Socket向指定的簡訊平台、語音平台及客戶端報警器插件發送報警報文信息,阿朱出色地完成了這項任務。後來用戶又提出了實時比對的需求,即要求第三方系統以報文形式向比對報警系統發送請求,比對報警系統接收並響應這個請求。這又需要用到Socket報文通訊,由於原來的設計沒有將報文通訊模塊獨立出來,所以無法復用阿朱開發的代碼。後來我及時調整了這個設計,新增了一個報文收發模塊,使系統所有的對外通訊都復用這個模塊,系統的整體設計也顯得更加合理。
每個系統都或多或少存在不完美的設計,剛開始可能注意不到,到後來才會慢慢凸顯出來,此時唯有勇於更改才是最好的出路。
·缺少必要的注釋
雖然許多軟體工程的書籍常提醒程序員需要防止過多注釋,但這個擔心好象並沒有什麼必要。往往程序員更感興趣的是功能實現而非代碼注釋,因為前者更能帶來成就感,所以代碼注釋往往不是過多而是過少,過於簡單。人的記憶曲線下降的坡度是陡得嚇人的,當過了一段時間後再回頭補注釋時,很容易發生提筆忘字,愈言且止的情形。
曾在網上看到過微軟的代碼注釋,其詳盡程度讓人嘆為觀止,也從中體悟到了微軟成功的一個經驗。 學習一種可以大幅提高生產力的新技術時,你總是難以察覺其不適用的場合。通常你在一個特定場景中學習它,這個場景往往是個項目。這種情況下你很難看出什麼會造成這種新技術成效不彰或甚至形成危害。十年前,對象技術(object tech.)的情況也是如此。那時如果有人問我「何時不要使用對象」,我很難回答。並非我認為對象十全十美、沒有局限性 — 我最反對這種盲目態度,而是盡管我知道它的好處,但確實不知道其局限性在哪兒。
現在,重構的處境也是如此。我們知道重構的好處,我們知道重構可以給我們的工作帶來垂手可得的改變。但是我們還沒有獲得足夠的經驗,我們還看不到它的局限性。
這一小節比我希望的要短。暫且如此吧。隨著更多人學會重構技巧,我們也將對??你應該嘗試一下重構,獲得它所提供的利益,但在此同時,你也應該時時監控其過程,注意尋找重構可能引入的問題。請讓我們知道你所遭遇的問題。隨著對重構的了解日益增多,我們將找出更多解決辦法,並清楚知道哪些問題是真正難以解決的。
·資料庫(Databases)
「重構」經常出問題的一個領域就是資料庫。絕大多數商用程序都與它們背後的database schema(資料庫表格結構)緊密耦合(coupled)在一起,這也是database schema如此難以修改的原因之一。另一個原因是數據遷移(migration)。就算你非常小心地將系統分層(layered),將database schema和對象模型(object model)間的依賴降至最低,但database schema的改變還是讓你不得不遷移所有數據,這可能是件漫長而煩瑣的工作。
在「非對象資料庫」(nonobject databases)中,解決這個問題的辦法之一就是:在對象模型(object model)和資料庫模型(database model)之間插入一個分隔層(separate layer),這就可以隔離兩個模型各自的變化。升級某一模型時無需同時升級另一模型,只需升級上述的分隔層即可。這樣的分隔層會增加系統復雜度,但可以給你很大的靈活度。如果你同時擁有多個資料庫,或如果資料庫模型較為復雜使你難以控制,那麼即使不進行重構,這分隔層也是很重要的。
你無需一開始就插入分隔層,可以在發現對象模型變得不穩定時再產生它。這樣你就可以為你的改變找到最好的杠桿效應。
對開發者而言,對象資料庫既有幫助也有妨礙。某些面向對象資料庫提供不同版本的對象之間的自動遷移功能,這減少了數據遷移時的工作量,但還是會損失一定時間。如果各資料庫之間的數據遷移並非自動進行,你就必須自行完成遷移工作,這個工作量可是很大的。這種情況下你必須更加留神classes內的數據結構變化。你仍然可以放心將classes的行為轉移過去,但轉移值域(field)時就必須格外小心。數據尚未被轉移前你就得先運用訪問函數(accessors)造成「數據已經轉移」的假象。一旦你確定知道「數據應該在何處」時,就可以一次性地將數據遷移過去。這時惟一需要修改的只有訪問函數(accessors),這也降低了錯誤風險。
·修改介面(Changing Interfaces)
關於對象,另一件重要事情是:它們允許你分開修改軟體模塊的實現(implementation)和介面(interface)。你可以安全地修改某對象內部而不影響他人,但對於介面要特別謹慎 — 如果介面被修改了,任何事情都有可能發生。
一直對重構帶來困擾的一件事就是:許多重構手法的確會修改介面。像Rename Method(273)這么簡單的重構手法所做的一切就是修改介面。這對極為珍貴的封裝概念會帶來什麼影響呢?
如果某個函數的所有調用動作都在你的控制之下,那麼即使修改函數名稱也不會有任何問題。哪怕面對一個public函數,只要能取得並修改其所有調用者,你也可以安心地將這個函數易名。只有當需要修改的介面系被那些「找不到,即使找到也不能修改」的代碼使用時,介面的修改才會成為問題。如果情況真是如此,我就會說:這個介面是個「已發布介面」(published interface)— 比公開介面(public interface)更進一步。介面一旦發行,你就再也無法僅僅修改調用者而能夠安全地修改介面了。你需要一個略為復雜的程序。
這個想法改變了我們的問題。如今的問題是:該如何面對那些必須修改「已發布介面」的重構手法?
簡言之,如果重構手法改變了已發布介面(published interface),你必須同時維護新舊兩個介面,直到你的所有用戶都有時間對這個變化做出反應。幸運的是這不太困難。你通常都有辦法把事情組織好,讓舊介面繼續工作。請盡量這么做:讓舊介面調用新介面。當你要修改某個函數名稱時,請留下舊函數,讓它調用新函數。千萬不要拷貝函數實現碼,那會讓你陷入「重復代碼」(plicated code)的泥淖中難以自拔。你還應該使用Java提供的 deprecation(反對)設施,將舊介面標記為 deprecated。這么一來你的調用者就會注意到它了。
這個過程的一個好例子就是Java容器類(collection classes)。Java 2的新容器取代了原先一些容器。當Java 2容器發布時,JavaSoft花了很大力氣來為開發者提供一條順利遷徙之路。
「保留舊介面」的辦法通常可行,但很煩人。起碼在一段時間里你必須建造(build)並維護一些額外的函數。它們會使介面變得復雜,使介面難以使用。還好我們有另一個選擇:不要發布(publish)介面。當然我不是說要完全禁止,因為很明顯你必得發布一些介面。如果你正在建造供外部使用的APIs,像Sun所做的那樣,肯定你必得發布介面。我之所以說盡量不要發布,是因為我常常看到一些開發團隊公開了太多介面。我曾經看到一支三人團隊這么工作:每個人都向另外兩人公開發布介面。這使他們不得不經常來回維護介面,而其實他們原本可以直接進入程序庫,徑行修改自己管理的那一部分,那會輕松許多。過度強調「代碼擁有權」的團隊常常會犯這種錯誤。發布介面很有用,但也有代價。所以除非真有必要,別發布介面。這可能意味需要改變你的代碼擁有權觀念,讓每個人都可以修改別人的代碼,以運應介面的改動。以搭檔(成對)編程(Pair Programming)完成這一切通常是個好主意。
不要過早發布(published)介面。請修改你的代碼擁有權政策,使重構更順暢。
Java之中還有一個特別關於「修改介面」的問題:在throws子句中增加一個異常。這並不是對簽名式(signature)的修改,所以你無法以delegation(委託手法)隱藏它。但如果用戶代碼不作出相應修改,編譯器不會讓它通過。這個問題很難解決。你可以為這個函數選擇一個新名tion(可控式異常)轉換成一個unchecked exception(不可控異常)。你也可以拋出一個unchecked異常,不過這樣你就會失去檢驗能力。如果你那麼做,你可以警告調用者:這個unchecked異常日後會變成一個checked異常。這樣他們就有時間在自己的代碼中加上對此異常的處理。出於這個原因,我總是喜歡為整個package定義一個superclass異常(就像java.sql的SQLException),並確保所有public函數只在自己的throws子句中聲明這個異常。這樣我就可以隨心所欲地定義subclass異常,不會影響調用者,因為調用者永遠只知道那個更具一般性的superclass異常。
·難以通過重構手法完成的設計改動
通過重構,可以排除所有設計錯誤嗎?是否存在某些核心設計決策,無法以重構手法修改?在這個領域里,我們的統計數據尚不完整。當然某些情況下我們可以很有效地重構,這常常令我們倍感驚訝,但的確也有難以重構的地方。比如說在一個項目中,我們很難(但還是有可能)將「無安全需求(no security requirements)情況下構造起來的系統」重構為「安全性良好的(good security)系統」。
這種情況下我的辦法就是「先想像重構的情況」。考慮候選設計方案時,我會問自己:將某個設計重構為另一個設計的難度有多大?如果看上去很簡單,我就不必太擔心選擇是否得當,於是我就會選最簡單的設計,哪怕它不能覆蓋所有潛在需求也沒關系。但如果預先看不到簡單的重構辦法,我就會在設計上投入更多力氣。不過我發現,這種情況很少出現。
·何時不該重構?
有時候你根本不應該重構 — 例如當你應該重新編寫所有代碼的時候。有時候既有代碼實在太混亂,重構它還不如從新寫一個來得簡單。作出這種決定很困難,我承認我也沒有什麼好准則可以判斷何時應該放棄重構。
重寫(而非重構)的一個清楚訊號就是:現有代碼根本不能正常運作。你可能只是試著做點測試,然後就發現代碼中滿是錯誤,根本無法穩定運作。記住,重構之前,代碼必須起碼能夠在大部分情況下正常運作。
一個折衷辦法就是:將「大塊頭軟體」重構為「封裝良好的小型組件」。然後你就可以逐一對組件作出「重構或重建」的決定。這是一個頗具希望的辦法,但我還沒有足夠數據,所以也無法寫出優秀的指導原則。對於一個重要的古老系統,這肯定會是一個很好的方向。
另外,如果項目已近最後期限,你也應該避免重構。在此時機,從重構過程贏得的生產力只有在最後期限過後才能體現出來,而那個時候已經時不我予。Ward Cunningham對此有一個很好的看法。他把未完成的重構工作形容為「債務」。很多公司都需要借債來使自己更有效地運轉。但是借債就得付利息,過於復雜的代碼所造成的「維護和擴展的額外開銷」就是利息。你可以承受一定程度的利息,但如果利息太高你就會被壓垮。把債務管理好是很重要的,你應該隨時通過重構來償還一部分債務。
如果項目已經非常接近最後期限,你不應該再分心於重構,因為已經沒有時間了。不過多個項目經驗顯示:重構的確能夠提高生產力。如果最後你沒有足夠時間,通常就表示你其實早該進行重構。 「重構」肩負一項特別任務:它和設計彼此互補。初學編程的時候,我埋頭就寫程序,渾渾噩噩地進行開發。然而很快我便發現,「事先設計」(upfront design)可以助我節省回頭工的高昂成本。於是我很快加強這種「預先設計」風格。許多人都把設計看作軟體開發的關鍵環節,而把編程(programming)看作只是機械式的低級勞動。他們認為設計就像畫工程圖而編碼就像施工。但是你要知道,軟體和真實器械有著很大的差異。軟體的可塑性更強,而且完全是思想產品。正如Alistair Cockburn所說:『有了設計,我可以思考更快,但是其中充滿小漏洞。』
有一種觀點認為:重構可以成為「預先設計」的替代品。這意思是你根本不必做任何設計,只管按照最初想法開始編碼,讓代碼有效運作,然後再將它重構成型。事實上這種辦法真的可行。我的確看過有人這么做,最後獲得設計良好的軟體。極限編程(Extreme Programming)【Beck, XP】 的支持者極力提倡這種辦法。
盡管如上所言,只運用重構也能收到效果,但這並不是最有效的途徑。是的,即使極限編程(Extreme Programming)愛好者也會進行預先設計。他們會使用CRC卡或類似的東西來檢驗各種不同想法,然後才得到第一個可被接受的解決方案,然後才能開始編碼,然後才能重構。關鍵在於:重構改變了「預先設計」的角色。如果沒有重構,你就必須保證「預先設計」正確無誤,這個壓力太大了。這意味如果將來需要對原始設計做任何修改,代價都將非常高昂。因此你需要把更多時間和精力放在預先設計上,以避免日後修改。
如果你選擇重構,問題的重點就轉變了。你仍然做預先設計,但是不必一定找出正確的解決方案。此刻的你只需要得到一個足夠合理的解決方案就夠了。你很肯定地知道,在實現這個初始解決方案的時候,你對問題的理解也會逐漸加深,你可能會察覺最佳解決方案和你當初設想的有些不同。只要有重構這項武器在手,就不成問題,因為重構讓日後的修改成本不再高昂。
這種轉變導致一個重要結果:軟體設計朝向簡化前進了一大步。過去未曾運用重構時,我總是力求得到靈活的解決方案。任何一個需求都讓我提心吊膽地猜疑:在系統壽命期間,這個需求會導致怎樣的變化?由於變更設計的代價非常高昂,所以我希望建造一個足夠靈活、足夠強固的解決方案,希望它能承受我所能預見的所有需求變化。問題在於:要建造一個靈活的解決方案,所需的成本難以估算。靈活的解決方案比簡單的解決方案復雜許多,所以最終得到的軟體通常也會更難維護 — 雖然它在我預先設想的??方向上,你也必須理解如何修改設計。如果變化只出現在一兩個地方,那不算大問題。然而變化其實可能出現在系統各處。如果在所有可能的變化出現地點都建立起靈活性,整個系統的復雜度和維護難度都會大大提高。當然,如果最後發現所有這些靈活性都毫無必要,這才是最大的失敗。你知道,這其中肯定有些靈活性的確派不上用場,但你卻無法預測到底是哪些派不上用場。為了獲得自己想要的靈活性,你不得不加入比實際需要更多的靈活性。
有了重構,你就可以通過一條不同的途徑來應付變化帶來的風險。你仍舊需要思考潛在的變化,仍舊需要考慮靈活的解決方案。但是你不必再逐一實現這些解決方案,而是應該問問自己:『把一個簡單的解決方案重構成這個靈活的方案有多大難度?』如果答案是「相當容易」(大多數時候都如此),那麼你就只需實現目前的簡單方案就行了。
重構可以帶來更簡單的設計,同時又不損失靈活性,這也降低了設計過程的難度,減輕了設計壓力。一旦對重構帶來的簡單性有更多感受,你甚至可以不必再預先思考前述所謂的靈活方案 — 一旦需要它,你總有足夠的信心去重構。是的,當下只管建造可運行的最簡化系統,至於靈活而復雜的設計,唔,多數時候你都不會需要它。
勞而無獲— Ron Jeffries
Chrysler Comprehensive Compensation(克萊斯勒綜合薪資系統)的支付過程太慢了。雖然我們的開發還沒結束,這個問題卻已經開始困擾我們,因為它已經拖累了測試速度。
Kent Beck、Martin Fowler和我決定解決這個問題。等待大夥兒會合的時間里,憑著我對這個系統的全盤了解,我開始推測:到底是什麼讓系統變慢了?我想到數種可能,然後和夥伴們談了幾種可能的修改方案。最後,關於「如何讓這個系統運行更快」,我們提出了一些真正的好點子。
然後,我們拿Kent的量測工具度量了系統性能。我一開始所想的可能性竟然全都不是問題肇因。我們發現:系統把一半時間用來創建「日期」實體(instance)。更有趣的是,所有這些實體都有相同的值。
於是我們觀察日期的創建邏輯,發現有機會將它優化。日期原本是由字元串轉換而生,即使無外部輸入也是如此。之所以使用字元串轉換方式,完全是為了方便鍵盤輸入。好,也許我們可以將它優化。
於是我們觀察日期怎樣被這個程序運用。我們發現,很多日期對象都被用來產生「日期區間」實體(instance)。「日期區間」是個對象,由一個起始日期和一個結束日期組成。仔細追蹤下去,我們發現絕大多數日期區間是空的!
處理日期區間時我們遵循這樣一個規則:如果結束日期在起始日期之前,這個日期區間就該是空的。這是一條很好的規則,完全符合這個class的需要。採用此一規則後不久,我們意識到,創建一個「起始日期在結束日期之後」的日期區間,仍然不算是清晰的代碼,於是我們把這個行為提煉到一個factory method(譯註:一個著名的設計模式,見《Design Patterns》),由它專門創建「空的日期區間」。
我們做了上述修改,使代碼更加清晰,卻意外得到了一個驚喜。我們創建一個固定不變的「空日期區間」對象,並讓上述調整後的factory method每次都返回該對象,而不再每次都創建新對象。這一修改把系統速度提升了幾乎一倍,足以讓測試速度達到可接受程度。這只花了我們大約五分鍾。
我和團隊成員(Kent和Martin謝絕參加)認真推測過:我們瞭若指掌的這個程序中可能有什麼錯誤?我們甚至憑空做了些改進設計,卻沒有先對系統的真實情況進行量測。
我們完全錯了。除了一場很有趣的交談,我們什麼好事都沒做。
教訓:哪怕你完全了解系統,也請實際量測它的性能,不要臆測。臆測會讓你學到一些東西,但十有八九你是錯的。

『柒』 武漢一程序員壓力太大,在餐廳崩潰痛哭,現在年輕人壓力有多大

現在的年輕人雖然看起來表面風光,但其實背後都成長了非常大的壓力。他們每天要面臨公司老闆給自己的工作壓力,在回到家以後,他們要看著其他的同學比自己發展的更好,自己會給自己壓力。在面對自己父母的時候,他們同樣也有了家庭。

現在社會上的競爭壓力是非常大的,因為每一個年輕人都有自己的強項和弱項,每個崗位都有各種各樣的人才,想要成為最成功的那一個人是非常困難的,所以每個年輕人都在和自己較勁自己給自己壓力,再加上其他方面的壓力會讓這些年輕人喘不過氣。

閱讀全文

與壓垮程序員的bug相關的資料

熱點內容
順德資料加密報價 瀏覽:402
androidaac格式 瀏覽:114
怎麼使用代理伺服器地址 瀏覽:312
演算法精準化推送案例 瀏覽:235
哪來的那麼多35以上的程序員 瀏覽:682
結束後台進程的命令 瀏覽:516
大話維護後怎麼快速進去伺服器 瀏覽:726
python第三方包錯誤 瀏覽:218
單片機彩燈控制 瀏覽:503
app專屬流量怎麼開啟 瀏覽:639
單片機與電機驅動連接 瀏覽:277
女生適合當程序員嗎 瀏覽:493
louvain演算法 瀏覽:177
命令怎麼搭配 瀏覽:848
python全棧題 瀏覽:638
南郵匯編語言與編譯原理課本 瀏覽:915
網易java面試 瀏覽:176
單片機儲存數據怎樣刪除 瀏覽:875
部署javaweb到伺服器 瀏覽:368
16位單片機做fft 瀏覽:684