1. 程式人生 > >程序在編譯時候,你會做什麽

程序在編譯時候,你會做什麽

代碼 執行 編譯時間 想要 tro 想去 學習 上下 可能

程序在編譯時候,你會做什麽

計算機在編譯C程序的過程中都做了哪些工作呢?

先看下國外經典圖書computer system的解釋吧:

技術分享圖片

過程如下:

技術分享圖片

程序在編譯時的細節過程(各個過程,及其生成的中間文件)如下:

技術分享圖片


下面的內容與計算機程序具體的編譯過程無關啦, 但是也絕對值得一看:

當編譯占用你時間時你會怎麽做。不只是編譯,即使是在等待任何短暫的計算機操作結束,這段時間你會幹些什麽?

和你的工作日休息比起來這點時間是微不足道的,但是總的來說它還是能對你的生產率和幸福感感帶來巨大幫助的。

順便說一下,這篇文章內容不是只針對開發者和程序的。它對任何使用電腦的聰明人都有效。後面還會附上圖片。現在讓我們開始吧!

為什麽要寫這篇文章

我最近開始在我的工作習慣裏使用某種時間管理技巧來提升我的生產率,減小壓力,並幫助我的身體和大腦得到休息。我基本上想要在不被打擾的100%註意力集中的一兩個小時裏工作,然後就是20到30分鐘的休息。

然而,我幾乎立刻就進入了一個巨大的問題裏:當我正在編譯或部署什麽東西時,我會自動地打開郵件客戶端,facebook,新聞閱讀器,新聞站點中的某一個或幾個。這是一個壞習慣。它很難改掉。它擾亂了我本來專註的註意力。

所以我決定搜索相關資料。在 StackExchange 有一個關於“編譯時應該做什麽”的論壇。投票最多的答案是“減少編譯時間”一類的。然而,這些答案並不能解決更多的普遍問題:在電腦上工作時總是有些事項是需要時間來等待的。

與之不同的,論壇上的人多半建議那些時間可以做些什麽(類似收發郵件或是看新聞),這是一個差勁的想法。一個好的建議是這個——“同一時間幹多件事是不好的”。我贊同這個觀點。但其他人呢?不認為?好的。這個答案令人失望。所以在這篇文章裏,我將深入探索這個問題並且向你展示最理想的方法。

兩種類型的程序員

有兩種極端類型的程序員——“禪宗的程序員”,我們稱為心如止水的程序員,還有“不能克制分心的程序員”,我們稱為心緒不定的程序員。通常認為兩者都人數不多,並處於鐘形分布曲線的兩端。果真如此?

錯。實際上,心緒不定的程序員是難以置信地普遍存在著。

圖片的效果要比文字有用,所以我現在用圖片來說明兩種程序員的精神世界的狀態。

心如止水的程序員

心如止水的程序員會怎麽做?

他寫代碼。這是他做的唯一的事情,這也說明了一切。也許更重要的問題是什麽事情他沒有做:他心無旁騖,專註於代碼的修改和編寫。一到兩個小時的純代碼時間,然後才是20-30分鐘的休息,通常是離開電腦。之後他會繼續開始寫代碼。(以上所說的時間只是一個例子。他可以用其它方式安排時間-不過他總是能平衡並搞定長時間的生產率。)

他的思維像平靜的水緩慢地流動。當然它不像那種恒久不變的凝固的冰。

這就是心如止水的程序員精神世界看起來的樣子: 技術分享圖片

心緒不定的程序員

即使你的精神世界現在看起來像一個心如止水的程序員,只要你在編譯的時候打開了Facebook或者檢查了你的郵件還是做了其它什麽事情。幾分鐘之後它就會像這樣: 技術分享圖片

女士們先生們,這就是你檢查你的郵件和打開Facebook後的狀況。如果你還擁有一堆實時通知,即時通訊,還要去檢查你的RSS源和推特,結果就是大腦像上面圖中變成碎片的災難一樣。

你可能還沒有完全從這張圖恢復過來。不在特定的某天,任何時候都有可能發生。即使你把精神世界所有無用的東西最小化到任務欄,它仍會留在那裏,不停地引誘你,消耗你的精神資源。朋友,時間就這樣走了,你會困惑它是怎麽不見的。

順便說一下,如果你是一個心緒不定的人,你還是可以看看我們網站的網頁漫畫!不必立刻回來把這篇文章讀完。別忘了訂閱那個漫畫源!看完所有的漫畫後可以分享給你的朋友並聊聊!做這些事不會過於分心的,真的!

心如止水的程序員與心緒不定的程序員之間的區別

心如止水的程序員更傾向於長期的幸福感和生產率。他有能力高度集中註意力,關註目標。

心緒不定的程序員更傾向於短暫的滿足感,長期這樣不能到達全部的潛力並且會對他自己的身體和精神帶來雙方面的傷害。他不能定下心來集中註意力。

為了徹底領悟這點,我們首先需要理解我們的大腦是怎樣工作的。

我們的大腦是怎麽工作的

事實上我們不能完全知道,不過,基於我們現在已有的理解,心理學家已經提出了一些有用的類比方法,可以幫助我們領悟復雜的東西。

電腦的類比

你的大腦像一臺電腦。當然,它要比一臺個人電腦復雜多了,不過電腦的比喻說法可以讓我們形容許多在大腦裏運行的進程。有些東西像硬盤,有些東西像內存和中央處理器,還有進程和線程,它們的確需要一些時間來訪問信息並計算數據。

很明顯我們的大腦擁有一定的容量在任一時刻集中註意力。你可以很好地集中在某一東西上,或是不太好地集中到幾樣東西上,但你不能兩者都做到。把註意力從一個任務轉到另一個任務甚至會影響認知能力,特別是兩種毫不相幹的任務。

只要你把意識關註在某樣東西上,就會花些時間處理它和它所分配的資源並會從內存和後臺進程裏初始化它。它可以存在幾個小時甚至幾天。最近的關註到的東西在任何時刻都會不斷出現的。即使你沒有註意到它們在你的大腦裏流動,它們一直都在那兒——而且它們占用資源,使你不能集中註意力。

抽屜的類比

另一種有用的比喻說法是櫃子裏的抽屜。你的大腦像存放東西的抽屜。每個抽屜都是擁有數據且互相連接的,基於某種上下文關系和概念。在特定的時間裏,一些抽屜是打開的,一些是關閉的。打開的抽屜代表著你當前的精神空間,它們很容易訪問到。

主要的問題是關閉抽屜是需要很長時間的,而打開它們是非常快的。

所以,當你在工作時,註意力轉到新的地方,它會立即打開一堆抽屜。當你回到工作狀態時,那些抽屜仍然是開著的。這樣唯一的好處是可以提高你的創造力和頭腦風暴——但是不需要的抽屜開著會有影響的。它們抑制左腦的思維並降低註意力。

編譯時應該做什麽

在等待電腦執行操作的時間裏,你的行為可以判斷出你是一個心如止水的程序員還是心緒不定的程序員。

主要的意見是:

1.不要分心
2.短暫的休息

保持註意力並不是那麽難——你必須要切斷你大腦的電源,或者保持註意力集中在你的代碼上。不過,關閉大腦效果更好。這樣會進入一個微冥想狀態,在短暫休息之後它仍會有效。

為什麽要進入冥想?好的,你的大腦每天都在咀嚼代碼,為什麽不給它一個休息呢?此外冥想科學上被證實能不斷增加幸福等級。想象一下每天進行兩次30-60秒表面上看起來不重要的冥想所帶來的長期優勢吧。

現在,短暫的休息時應該做些什麽?從以下內容中選擇任何事,按你的想法組合在一起。你可以把它們按照這個順序全部做一遍,這取決於(也可以不在意)這些行為所需要的時間。

1.站起來
2.眺望遠處
3.把雙手放在腦後,斜靠在椅子上
4.伸長雙腿,把雙手盡量舉高
5.閉上雙眼
6.輕揉眼睛
7.慢慢地把頭向各個方向轉,舒展頸椎
8.閉上雙眼然後深呼吸
9.倒一杯水(要小心路上別被同事分心了)

  

你也可以做任何主要身體參與而不影響思維的事——靜力鍛煉,變戲法,決鬥,哈哈

順便說一下,如果你的老板不給你足夠的時間做以上的任何事,那麽推薦他來看這篇文章。讓自己更快地恢復精神並保持註意力,比看起來在工作其實已經分散註意力並很快就感到累的情況要好很多。

(為了做心如止水的程序員,編譯等待時間必須不做分散的事)

伸展放松是很有益處的。我上一次見我的理療師時她發現我的肩膀很多地方很緊繃。她告訴我這可能是因為我坐在電腦前雙手總是彎曲造成的,所以肌肉縮短而且不能用力。那我應該怎麽做最好呢?舉高我的雙手,試著舉到最高。這是我在編譯或是等待電腦執行操作時常做的一件事。

你可能已經聽說過當你在用電腦時進行有規律伸展放松和短暫休息是一個不錯的想法。問題是怎麽做到——即使你設置了一個計時器,但假如到時你正處在一個復雜的事情,正做到一半的時候怎麽辦?這樣看來就無法實現了。然而,如果你在編譯時短暫休息一下,就能很好地做到了,你甚至可以把它養成一種習慣,讓它變得更 “自然”!現在編譯就開始能提醒你做伸展放松了。這太令人不可思議了。

編譯時你不應該做的事情

我其實想用力點擊我的主頁,這樣做能讓事情變得簡單,這裏有一張你在編譯時不應該做的事情的列表。以這種方式思考:這些事情不僅會使你不能集中註意力,還會讓你的思維和身體不能很好地短暫休息。

1.閱讀你的RSS源
2.閱讀新聞(任何新聞)
3.收發郵件
4.瀏覽各類社交媒體(Facebook,twitter,google+,linkedin,reddit)
5.觀看視頻


 

做以下兩件事要比上面的好一點,但依然不推薦:

1.和同事聊天
2.讀一本物理書

專註的註意力和專註地修改

我馬上就要結束這篇我所想的每日工作流程的理想方法——禪宗程序員的文章了。

保證生產率和效率的關鍵是註意力100%集中在你現在正在做的事情上,做完後再把註意力完全轉移到其他地方。註意力從一件事情到下一件事情的過渡不能有任何的拖泥帶水。

把你的工作時間分成1-2個小時一段。註意力100%集中在這些時間段裏。然後是20-30分鐘的休息,完全可以做任何事情。在休息時間你可以瀏覽你的郵件和社交媒體,當然,散個步打個盹吃些健康的點心會更好。休息結束後,檢查任務管理軟件(比如,我用的是我的Swift To-Do List)裏下一個工作是什麽,再開始另一段需要百分百註意力集中的工作。在較大程度上,這與番茄工作法有點相似。

休息不是可以選擇要不要的。別想去跳過它。你的身體需要休息。即使你在做你喜歡的工作,你也需要休息一下——在這種情況,你會在接下來的時間段裏有動力做更多事。

你的工作流程看起來應該像這樣:

(任務1 - 任務2)- 休息 - (任務2 - 任務3 - 任務4) - 休息 -(另一個1-2小時的時間段) - 休息 ……

不要讓它完成起來是像這樣混亂隨機,讓人看不下去的的:

任務1 - 郵件 - 任務1 - Facebook - 任務1 - 任務2 - 短暫休息 - Facebook - 任務2 - 郵件 - reddit - 任務3 - 郵件 - 休息 - 任務2 - 郵件 - 任務3 - 推特 - 黑客新聞 - 推特 - 任務1 - 任務3 - 休息 - 任務4

如果你的工作流程是像上面這樣,那你既不能完全放松也不能做完你能完成的事情。這是最低級的方法。這不僅浪費了你的潛力和時間,也讓你長期身體會不適。

我不想撒謊。集中註意力真的不容易。它很困難,因為當你沒有集中註意力時,你基本上會朝著相反的方向過去。習慣和根深蒂固的慣例像潛意識一樣難改變。

好消息就是,你還可以練習。你可以學習怎樣去集中精神。這是每個人都可以學的技能,而且它非常有用,值得為之努力。

另附:你有沒有身邊的人會每天要檢查50次郵箱?把這篇文章發給他。他之後會感謝你的。

參考自:Are You a Zen Coder or Distraction-Junkie?

程序在編譯時候,你會做什麽