天天看點

用程式設計知識提高工作效率

一、背景

程式員學到一定程度,更傾向于把技術、工作、生活聯系起來,發現一些共性。

利用生活知識去類比來學習技術,并且利用技術知識反向促進生活效率的改進。

本文介紹幾個提高工作效率的技巧。

下面舉幾個栗子。

二、舉兩個例子

2.1 多線程 并發的思維

如果是單線程卡住了,後續任務就無法執行。Java多線程是一個很重要的概念,可以并發執行。

用程式設計知識提高工作效率

圖 2.1

這就像我們寫代碼的時候如果卡殼了,可能沒有及時切換到其他的任務,可能一直卡幾分鐘,幾十分鐘甚至幾個小時。

其實人腦就像單核CPU,我們通過并發的形式完成更多的任務。

如果在某個地方卡住,如果不是很緊急切換到其他任務上,然後再切換回來搞(搞不定尋求幫助,有時候自己怎麼都看不出來,别人一下就get到原因,節省很多時間),可以實作整體效率的最大化。

2.2 優先級隊列思維

那麼工作上也是這樣,很少隻有一項任務,可能幹着幹着新的任務就得插進來。

這有點像優先隊列,優先級高的在前面。

用程式設計知識提高工作效率

圖2.2-1

如果新任務優先級更高,那麼抓緊切換到新任務上去。

圖2.2-2

比如任務a剛要執行完,任務d進來,d的優先級高,插入到b前面。

這裡的優先級往往隻是一個次元,如重要性,如緊急程度。

但是我們不能隻根據緊急程度來決定優先級,有一個經典的四象限法則來指導我們的工作生活。

圖2.2-3

四象限法則是時間管理理論的一個重要觀念是應有重點地把主要的精力和時間集中地放在處理那些重要但不緊急的工作上,這樣可以做到未雨綢缪,防患于未然。在人們的日常工作中,很多時候往往有機會去很好地計劃和完成一件事。

但常常卻又沒有及時地去做,随着時間的推移,造成工作品質的下降。

是以,應把主要的精力有重點地放在重要但不緊急這個“象限”的事務上是必要的。

要把精力主要放在重要但不緊急的事務處理上,需要很好地安排時間。

一個好的方法是建立預約。建立了預約,自己的時間才不會被别人所占據,進而有效地開展工作。

                                                                                                                                                              《百度百科》

隻有平時多花點時間在重要且不緊急的事情上時,才會減少重要緊急的事項。

或者關注重要緊急的事項的同時,不要忽略重要不緊急的事項。

比如工作的時候,完成項目的人開發是重要緊急的任務,但是業餘時間鞏固專業基礎,閱讀專業經典圖書,學習核心技術棧的源碼等等則是 重要且不緊急的任務。

這些重要且不緊急的任務對發展幫助巨大,且反向促進未來的項目開發等。

這就像很多大學生報名了四六級,然後優哉遊哉,然後快考試了突擊一下,有些基礎差的就一次又一次不過。

期末考試帶有原題,期末考試難度低一些,期末考試可以突擊,導緻很多人養成了這種思維慣性,另外人總是懶惰的,很多事情總是到了眼前才着急,有些事情太晚了就回天無數了。

2.3 線程切換的消耗思維

另外我們知道線程頻繁常見和銷毀,線程的切換等都消耗時間,這個和工作的時候頻繁切換工作内容每一次切換都會浪費時間。,

過去我們隻需要高效地完成大量重複性任務,是以“切換和更換”并不重要。

如今,我們面對的任務總是不斷地,一點點地變化着形态。

為了适應這種變化,我們不能再一心二用,應是應該:把經曆用在縮短不同工作的切換時間上。

                                                                                                                《整理的藝術2》 時間整理術 05 切勿一心二用

當任務少的時候,用多線程來執行,反而耗時可能更長,就是這個原因。

如圖2.1所示,多個任務切換中間是有“間隙”的,而且人腦并不是機器,這個間隙可能會很長,中斷後切換到新的任務可能要幾分鐘甚至十幾分鐘的“适應期”。

是以很多程式員都願意帶着耳機,避免被打擾造成“上下文切換”。

另外我提一點減少上下文切換耗時的技巧

(1)用有道雲筆記記錄關鍵的資訊。比如在某個任務目錄,分别建立需求、開發、測試、上線等目錄,然後将每個階段用到的連結,注意事項等記錄下來。

比如你在開發另外一個項目,别人請教你之前某個項目的問題的時候,不需要再登入頁面各種點選找到頁面等。

比如你開發測試過程中就已經把上線注意事項想好了,切回來準備上線事項時,就會花費更少的時間進入狀态

測試時用到的SQL語句,用到的URL,頁面截圖等都記錄好了,後面如果有問題直接中找到之前的參考,可以快速排查問題。

(2)開發時養成好的程式設計習慣。提取子函數,降低了解代碼的複雜度。如圖所示,如果隻需要修改并發查詢10次的功能直接看子函數即可,降低了解上下文的難度。另外容易困惑的地方加上注釋,這樣做其他功能的時候,切換到這裡可以盡可能快的了解。

圖2.3-1

另外可以學習 番茄工作法,專注30分鐘,然後休息5分鐘,然後再專注30分鐘,...

圖2.3-2

可以安裝番茄工作法的軟體,我看到有同僚安裝使用,值得借鑒。

2.4 算法差異

正如極客時間中《10x程式員工作法》結束語中所提到的一樣。

算法的時間複雜度的差異,如插入排序的時間複雜度為O(n^2)而快速排序的平均情況下時間複雜度是O(nlognn),他們的本質差異在于,快速排序算法比較的次數更少。

插入排序每次循環隻關注目前的目标循環之間沒有聯系,而快速排序在做不同的劃分時,上一次的結果對下一次有幫助,是以它省下了不少比較的次數。

所謂的算法優化就是,盡可能利用已知的資訊,少做不必要的事情。

是以當我們遇到問題的時候,盡可能的了解怎麼去解決這一類問題,總結做事的規律,掌握排錯的方法(《代碼排錯和避免錯誤的正确姿勢》),而不是一次又一次的問一些類似的問題。

另外我想到一點,大家如果讀過《劍指Offer》就會發現其實不同的算法時間複雜度不同,很多時候是不一樣的思路。

是以方法是決定效果的重要因素。

每種學習方法,就像數學裡的不同的函數,如一次函數、二次函數、指數等,增長的速率不一樣。

每種學習方法,就像計算機中的算法,如快速排序,冒泡排序等等,時間複雜度很多是不一樣。

由此我強烈推薦大家多總結和學習程式設計的技巧,學習排錯和避免犯錯的一些方法,而不是隻着眼于解決眼前問題。

雖然天賦或許更重要,但是對于大多數人來說,天賦沒法改變,我們可以學習好的方法,提高效率。

其實很多人學的不好,一方面是太浮躁,一方面是不懂方法,還有就是由于舒适區的原因導緻不願意嘗試甚至排斥新的方法。

就像大多數用過IDEA的人都會認為IDEA比Eclipse顔值和插件都更高,可是新手從Eclipse換IDEA時都是有些抵觸的。

之前接觸過一個學生,她的字很爛,買了字帖練習了幾個月,最後離開字帖還是變回原樣。

問她知道什麼原因嗎?她的思想是大家都是這樣做的啊,寫的不好老師不都說買字帖練習嗎?

我之前總結了一份英語字型書寫建議,給了這個學生,她接近半年都沒當回事,後面決心試一下,一兩周字帖大變樣。

其實很多人之前英語字型不好,隻是随性書寫,沒有按照一定的章法去寫,沒有去總結怎樣更審美,花費了多時間卻沒效果。

經常看到很多人在群裡問問題,卻很少人重視總結和實踐排錯、避免錯誤的方法。

這或許也是馬太效應的一個重要原因,是以成功的人越來越成功,普通的人大多數也将普通下去。

恰恰是不想浪費時間去學更多的方法,導緻每次遇到問題卻浪費更多的時間在排錯。

這就像很多人高中的時候,做錯的題從來不看,做錯的題放到錯題集就躺在那裡,沒有抽取出共性,沒有總結出規律,沒有反複的去反思,沒有意識到本質是對知識點掌握的不紮實,沒有趁機掌握對應的知識點,導緻同一的問題,第一次錯過的第二次大機率還是錯。

三、感悟

當學的多了以後,如果能夠找到不同知識之間的共性,再學習相似的知識就會非常容易。

有些人擔心Java如果不行了被替代了該怎麼辦?

其實學習是一種能力,了解需求的能力,排錯的邏輯能力,專業的基礎能力,文檔能力等等,都可以遷移到其他的行業。

程式設計語言都是相通的,安卓代替了塞班,塞班那批人很多成為第一批轉到安卓的人,賺的盆滿缽滿。

我們利用生活去幫助我們了解技術,反之亦可以用技術反向幫助我們思考工作和生活。

我們有時間可以多思考怎樣利用程式設計知識來提高工作的效率,找到知識的共性,并能夠活學活用,或許這就是學習知識的真正價值,即“學以緻用”!

還是那句話,有時候恰恰是因為我們不想浪費時間,而浪費了更多的時間。

我們不願意系統的看Spring技術文檔,導緻個别用法不會,到處查資料,導緻出BUG。

我們不願意,不知道,不主動了解Redis經典的書,導緻面試的時候很多問題回答不對。

我們上下文切換太頻繁,卻不認為這是一個問題。

我們沒有記錄工作的内容,認為這是浪費時間,認為沒必要,出了問題還需要花費很多時間去做一些重複的勞動。

我們寫代碼不認為可讀性,很重要,後面修改起來非常痛苦。

我們一直在學習,以為花了時間了,感動了自己就很踏實,有時候找不對方法,這隻是在彎路上而已。

最後推薦幾本書《整理的藝術》共四本,裡面推薦了很多整理的技巧,提高效率的技巧,對工作和生活很有幫助。

創作不易,如果覺得本文對你有幫助,歡迎點贊,歡迎關注我,如果有補充歡迎評論交流,我将努力創作更多更好的文章。

另外歡迎加入我的知識星球,知識星球ID:15165241 一起交流學習。

https://t.zsxq.com/Z3bAiea

 申請時标注來自CSDN。

————————————————

版權聲明:本文為CSDN部落客「明明如月學長」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:

https://blog.csdn.net/w605283073/article/details/91127059