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