[轉]突破程序員思維
本文轉自:https://kb.cnblogs.com/page/597877/
過去我曾一直認為程序員是依靠他們的技術在編程,也是因為技術使得程序員的水平有高低之分,但隨著我寫代碼的時間越來越長,也接觸到更多的程序員, 我漸漸發現程序員們其實是依靠他們所特有的程序員思維在進行編程的,而他們中的佼佼者正是那些有著更高思維成熟度的優秀程序員們。
什麽是程序員思維
那麽,什麽是程序員思維呢?我曾讀到過一些文章,試圖給它下一個明確的定義,比如,具備抽象和邏輯思維的能力,擁有面向對象編程和設計的能力等等。我對這些所謂定義有些不以為然,因為,我所體會的程序員思維更像是一種感覺,它是由常人的思維+編程思維,長期相互作用下產生的一種思維模式,它能夠幫助程序員快速找到以程序方式解決現實問題的最優解。
那麽,程序員們又是如何獲得這種思維的呢?我想說,從你學習編程並寫下你的第一個HelloWorld程序的時候,程序員思維就已經不知不覺地建立起來了,而隨著你不斷深入地學習與實踐,它也變得越來越完整和成熟。下面就是我認為對於提升程序員思維有所幫助的幾點建議,雖然不做展開,但相信每個程序員都會認同吧。
- 長期不間斷的編程實踐
- 持續地學習與借鑒(參考)
- 學會反思,並像專家一樣思考
為什麽要突破程序員思維
既然程序員思維對程序員來說如此重要,我們又為什麽要突破它呢?在我看來,主要有以下一些原因:
- 隨著技術的進步和專業領域的融合,程序員的職能正在不斷擴展,你一定也聽到過DevOps,全棧工程師,增長黑客這些詞吧,新一代的程序員不僅需要具備很強的編程能力,同時還需要具備從設計、運營、測試等各種不同角度去進行分析和判斷的能力。
- 從程序員的發展角度來說,當你從一名程序員轉變為高級程序員、架構師、系統分析師、項目經理、產品經理的時候,需要你突破程序員思維,而從更人性化的角度去識別和解決問題。
- 突破程序員思維對你的生活也會有所幫助,有很多太過於技術的程序員,隨著編程時間的增加,他們會越來越不善與人溝通,甚至排斥與人交流。他們也往往無法扮演好自己在生活中的角色。
程序員思維對程序員來說是一把雙刃劍,它既能幫助程序員寫出優秀的代碼,去解決一個又一個復雜的問題,但有時候它也會阻礙程序員們的發展,成為進階路上過不去的一道坎。
如何突破程序員思維
在成為架構師以及開始做IT管理之前,我也是一個完全用程序員思維去進行思考的人。但我通過一些方法逐漸突破了程序員思維,相信這些方法也能給你以啟發。
透過技術發現問題的本質
我時常會組織開發團隊做一些技術問題的討論,但當一個問題被拋出時,比如:用戶時常會在哪段時間內重復地點擊某一個功能,導致系統壓力的上升。團隊的大部分程序員都會很快給出他們的解決方案,比如增加流量閥的控制或在用戶會話中加入某些Token來防止用戶的頻繁重復提交等等。但幾乎很少有程序員會問,用戶為什麽會在短時間內頻繁點擊這個功能呢?是啊,解決問題的關鍵,往往不是如何通過技術手段禁止用戶這樣做,而是理解用戶這樣操作的原因,從而得出解決的辦法。
多年的開發工作,使程序員們不自覺地首先想到如何用技術手段去解決問題,然而,真正優秀的程序員一定善於透過技術發 現問題的本質。我想這就是我們突破程序員思維的第一步,也是最容易實現的一步吧。而說到方法,我最常使用的便是,反復地追問一件事的原因,比如剛才這個例 子,最終我們找到原因可能是系統沒有給用戶一個友好的提示,導致用戶錯誤地認為系統並沒有處理他的請求,而嘗試反復點擊。而我們的解決方案也與之前團隊程 序員們所提出的完全不同,只需花上幾分鐘,給系統加上一句友好的提示就行了。
像專家一樣給出意見
我發現在很多場合下,比如與用戶溝通需求、與產品經理溝通方案時,程序員總是處於比較弱勢的一方。他們只是被動地去接受這些需求和方案,然後回去將它們轉換為代碼的實現。
而那些真正優秀的程序員在與用戶進行溝通時,總是試圖去理解用戶所提出需求背後的真正原因,因為,他們知道用戶往往 會按照自己對問題的理解去給出他們認為正確的方案,而很多情況下,這並不是正確或最優的解決方案。優秀的程序員會站在用戶的角度,認清問題,並像專家一樣 給出他們認為最優秀的方案。
如果你對一個問題有充分的理解,並具有足夠的信心,你就應該站出來像專家一樣給出自己的意見,這會讓你顯得與眾不同。而如果你每次提出的意見都被證明是正確的,那麽不需要多久,你也會被大家認同為是一名真正的專家了。
雜學並從中獲得不同的視角
要做到看清問題的本質和像專家一樣給出意見,其實並不簡單,這不僅需要你具備極強的技術功底,更需要你對問題所涉及的相關領域有足夠的認識。你必須通過大量地學習編程之外的各種知識來完善自己的知識體系,並從中獲得不同的視角。
我經常聽到程序員會抱怨用戶提的需求質量有多差,設計師做的設計根本無法實現等等。這其中一定有一些客觀的原因,但程序員無法跳出程序員思維,站在用戶或設計師的角度看待問題,也是一個重要的原因。
我在自學設計之 後,獲得的不僅僅是一項技能,對我幫助更大的是自己能夠從一名設計師的角度來待看問題,這反過來也促進了我的編程能力的提升。同樣的,你也可以學習某個行 業的知識,即使你無法成為這個領域的業務專家,但這些知識能夠幫助你更好地理解用戶的需求,從而得到更優秀的技術解決方案。這也是為什麽我總是鼓勵身邊的 程序員們去嘗試學習除編程之外不同東西的原因。
找回創造力
雖然編程是一項腦力活動,但程序員們可能都知道,在大多數情況下這並不需要我們發揮創造力。也就是說,我們在按部就班地完成那些開發工作的同時,我們正在失去我們的創造力。
創造性地解決問題是優秀程序員所需要具備的能力,但我恰恰發現很多具有多年編程經驗的程序員,他們的思維卻好像受到了限制似的,只能憑著那些已經有些過時的經驗去給出他們的方案,而很難創造性地去解決問題。
其實,有很多方法都能讓我們找回創造力,關鍵是你是否願意堅持那樣去做。而我的方法也很簡單,每天進行閱讀,每周寫 一篇博客記錄自己想到的東西。另外,我也有一本小本子用來記錄那些轉瞬即逝的想法,有些看起來是那麽不切實際,但我都把他們記錄下來,沒事的時候就去翻 翻,這個過程中我可能會得到一些新的不錯的可行的點子,然後,我再嘗試著花些時間把它做出來。雖然,他們中的大部分都不會產生什麽價值,但我知道下一個優 秀的創意或想法,可能就來自於它們。
突破程序員思維並不是要摒棄它,恰恰相反,突破正是建立在成熟的程序員思維之上的,這將幫助程序員以更全面的視角去思考和解決問題,同時也能為我們程序員這個職業創造出更多可能。
--------------------------------
程序的實現,實現的是某個功能,某個功能是一部分的解決方案,解決方案是為了響應現實生活中的問題,現實生活中的問題可以通過程序得到更好的處理。
[轉]突破程序員思維