什麼是務實
務實程式設計師他們總是在面臨問題時,透過問題看到本質,從具體的場景出發,從大局著想,瞭解整個問題的來龍去脈,他們會對自己的行為負責,在專案面臨問題時,他們不會撒手不管或者任由風險一步步擴大直至無法維護。
大多數人都不是務實的程式設計師,因為成為務實的程式設計師並不滿足 短期的利益
,需要長期的打磨和持續不斷的學習、思考反思。大多數人不是務實的程式設計師的原因只有一個:惰性使然
。
程式設計師是有戾氣
的,許多人向我抱怨
- 工作很久了,年齡也比較大了,感覺工作這些年以來在技術方向上沒什麼提升
對這些人我有話說:沒有及時反思,可能也是由於工作一直很忙,沒有停下來靜心思考。因為我相信任何有時間思考的程式設計師,都不會有這種想法。善於反思自己你會及時調整最近的狀態,系統化的學習,提高自己的核心競爭力,讓自己成為公司不可輕易替代的人才。
- 整天 CRUD,專案技術棧用的比較老舊,想要接觸新專案,想要去網際網路
對這些人我有話說:整天 CRUD 不是你找理由的根本!CRUD 的業餘時間完全有時間提升自己!我也是 CRUD,但我不是一個 CRUD 程式設計師!千萬不要給自己扣各種 CRUD 的帽子。專案技術棧用的比較老舊,我想說,計算機世界發展了 60 多年到現在,仍然只能識別 0 和 1 ,要專注於不變的根本。如果你學完作業系統,你就知道軟體最終離不開作業系統,你就知道管程是怎麼回事,作業系統實現不同排程演算法的抉擇時什麼。我曾經說我喜歡技術,想要接觸新的技術棧,當我被問及你知道哪些 hibernate
思想到現在仍然流行,mybatis
哪些思想仍然很老舊的時候,你就會發現,技術的新潮只是一時的,沒有永遠不過時的技術!我聽很多前輩講起,在零幾年的時候誰說自己進了網際網路那完全是等著被人嘲笑的!為什麼網際網路現在流行?因為它符合我們大眾的訴求!無現金支付,工作之餘的放鬆,餓了就不想自己去買飯,實體購物又麻煩而且還要化解和各種店員的尷尬!!!但是網際網路是無法落地的,在發展到一定規模和平臺後,網際網路也是最重要被淘汰的!而硬體、晶片、通訊這些才是永遠新潮的技術,只不過無法獲取眼前的 feedback,很多高素質人才也不想從事罷了!
- 我應該學哪些技術
對這些人我有話說:這個問題本身就沒有意義!沒有人能夠指導你學哪些技術!問這句話的目的就是想走捷徑,但是學習是沒有捷徑的!學你想學的,學和你工作相關的,學能夠讓你提升核心競爭力的!如果非要讓我說出要學什麼話,我建議學基礎,學基礎,學基礎,基礎就是計算機組成原理、作業系統、網路、編譯原理
針對上面這些人,我認為他們只是難以接受改變,我認為這類人是
煮熟的青蛙
。這個故事你一定聽說過,它說的就是把青蛙放在慢慢加熱的鍋爐裡面,剛開始青蛙感覺溫度很舒適,隨著慢慢加熱,青蛙已經無力跳出鍋爐了!而另外一種人是
把青蛙仍在滾燙的鍋爐裡
的人,它肯定想盡辦法跳出來,這類人會想盡一切辦法克服困難。
不要給自己的人生設限
李小龍曾經說過:我活著不是為了滿足你的期望,正如你也不是因為我的期望。
說的喪一點就是 諸君看我多裝逼,我料諸君應如是
軟體開發行業絕對是最吃香的行業,因為我們收入頗豐,因為我們可以選擇我們想要的工作,我們可以選擇辦公地點,我們可以實現財務自由,但這些前提是你要有能力。
為什麼有人喜歡抱怨呢?因為他們不曾想著改變,Martin Fowler
說過 你可以去改變組織,或者讓自己換一個組織,總的來說,你是自由的,你可以做你想做的。
不知道你聽過 墨菲定律
沒有?最簡單的表達形式是越怕出事,越會出事,拿我們老祖宗的話就是 怕什麼,來什麼,但是在軟體開發中,出現問題是再正常不過的事情了,就算你有完善的需求、設計文件,完備的自動化測試流程,多輪測試迭代,還是會出現問題,推遲交付,未曾預料的問題的出現。
所以,不要懼怕問題,因為問題任何時刻都會出現,當問題出現時,我們應該依靠我們的專業性去解決問題,我們犯了錯誤要勇於承認,我們必須坦誠。
勇於承擔責任,不要把問題歸咎於別人或者其他事情上,也不要尋找藉口,不要把問題歸功於環境、程式語言、時間或者同事,這些因素可能影響你,但不是讓你找的藉口
設想一下,比如銀行職員、超市售貨員、汽車修理工搪塞或者敷衍你的時候,你是什麼反應?是不是恨不得想他了他們的門店?你會如何看待他們的公司?那如果是你呢?你的上司或者甲方會怎麼看你?
破窗效應
破窗效應
說的是,如何把一座富麗堂皇的別墅變成一片廢墟?也許你只需要一扇破窗,這就是破窗效應的威力。
那麼為什麼破窗效應的威力這麼強大呢?一扇破窗,如果一段時間不去修理和修復,別墅中的主人就會潛移默化產生一種這座別墅很老舊的想法,久而久之更多的窗戶也慢慢積滿灰塵,不去打理,直到整個別墅成為廢墟。
拿到軟體開發中就是,如果一扇破窗(糟糕的設計、錯誤的決定、沒有註釋的程式碼,混亂的邏輯)不去修理,慢慢的就會有更多人作出破窗決定,導致整個專案混亂不堪,無法維護。俗稱一塊臭肉壞了滿鍋的湯。
編制合理的謊言
有三個在戰場中的戰士已經很久沒有吃飯了,他們看完前面有個村莊,但是村莊裡面沒有人,但是士兵沒有氣餒,他們燒了一鍋水,小心翼翼地在鍋裡放了三塊石頭,詭異的村民們都出來圍觀,然後戰士就說:這叫石頭湯,你們就在湯裡放這個?嗯,是的,士兵回答道,但是有點胡蘿蔔味道會更好,一個村民就跑回家把自己家裡的胡蘿蔔拿來了,隨後士兵又說,如果有牛肉那就更好了,又一個村民跑回家把牛肉拿過來了,最後,他們煮了一大鍋湯,士兵把石頭扔掉,最後和村民們一起吃了一頓美餐。
這在軟體開發中同樣適用。你可以通過一個小改動入手,漸漸的擴充全域性,但是一定要注意方式和方法,一定要假裝你不在意
,這時候應該坐下來,等他們開始向你問你要不要加些你原本想要的功能。加入一個推進中的成功專案更容易一些。
讓使用者參與評審和設計
你是否經歷過這種,你做的東西拿給使用者看後發現這並不是他麼想要的,每次都需要打回重做。但是沒辦法,那是你的使用者,你們的共同職責就是做出一個雙方都滿意的軟體。為了達到這種目的,溝通就扮演了至關重要的作用。或者說,你還不夠了解你的使用者,要多和他聊聊,這或許是程式設計師的短板。多讓你的使用者參與評審,多問他們這樣怎麼怎麼樣。
如何學習知識
知識理財
本傑明富蘭克林說過:投資知識,收益最高 。知識和經驗確實是你最需要的資產。投資知識在某種程度上和 理財
是一樣的。什麼?這兩種毫不相關的概念怎麼會扯到一起去的?彆著急,且聽我慢慢給你分析。
- 首先,理性投資者具有周期性投資的習慣,週期性投資就是定投
- 理性投資者會衡量或者說平衡高風險高收益和穩定收益的組合
- 採取多樣化是打持久戰成功的關鍵因素
- 投資者最核心的準則就是低買高賣獲得最大的回報
- 定期審查、反思自己的理財組合
為什麼說學習知識和理財一樣呢?
定期投資
就像金融定投一樣,你必須定期為你的技術棧找到合適的學習組合,即使數量有限。
風險管理
不要把所有的雞蛋都放在一個籃子裡,你要學新潮的框架同時也要專注於永恆不變的基礎知識。這樣會讓你不止於思考框架,同時也會讓你跟進時代的進步適應這個社會。
多樣化
你知道的越多,你的作用、你的價值也就越大。如果你是一個只專注於某個業務的程式設計師,一定要從整體把握,不要侷限在自己的一畝三分地中。如果你不喜歡業務,那你就要從整體考慮用到什麼技術,計算機技術變化迅猛,今天的熱點技術可能明天就會被廢棄。你要多熟悉技術,成為 T 型人才。T 這個字的寫法一定是先橫著寫再豎著寫的,知道廣度後,才有可能選擇一個切入點深入進去。
低買高賣
你在 Java 流行之前絕對不會想著去學習 Java,但是當 Java 流行之後,那些早起的使用者已經積累了相當豐厚的回報。
重新評估
重新評估你的技術棧,推陳出新,查漏補缺。
知識組合
這裡有一些對你學習知識的幾種組合方式,也是一些建議:
- 每年學習一門新的程式語言:培養自己從不同的角度思考語言這回事,權衡語言的利弊,解決了什麼樣的問題
- 每月讀一本技術書:這個可能有些費勁,因為一本黑皮書你不可能一個月就讀完了,除非你什麼都不做,天天只看書,但是有的實戰類的書還是可以看完的。這裡只是告訴你一個大致的讀書週期
- 讀技術書:你的人生不僅僅只有計算機,還有生活,計算機也是通過人類製造出來的,你要站在人的角度思考問題。
- 上課:去本地大學上課是一件很不錯的事情
- 參加城市技術圈子交流:不要只當聽眾,要參與進去,瞭解其他人都在做什麼
- 與時俱進:還是那句話,關心一下你的技術棧,閱讀相關的新聞和技術帖子,這是一種很好的方式。
持續投資非常重要,計算機不是一件速成
的事兒。
碎片學習的機會
你要如飢似渴的學習,如果你無法找到問題的答案,去尋覓有能力找到答案的人,而不是要讓問題 沉寂下去
。和其他人交談有助於構建你的人際網路,而且你會很驚訝的發現,在你尋找答案的這個過程中,你會不斷擴大你的知識面。
所有的閱讀和研究都需要時間,而時間是永遠不夠的。所以你需要時刻準備好,確保在無聊的時候有東西可以讀。在醫院排隊也不要忘了放棄閱讀的好機會 --- 一定要帶上自己的 kindle
或者電子閱讀器
批判性思維
最後一個要點是要具有批判性思維,批判性地思考讀到和聽到的東西。
網路不是那麼幹淨的。永遠不要低估商業的力量。他會把黑的說成白的。
網路搜尋引擎會把熱門的東西放在前列,而不僅僅是正確的東西,也並不是對你有用的東西。書店會把一本書放在顯眼的位置,但並不能說明這是一本好書,有可能包裝好,有可能封面好,有可能只是標題吸引人,有可能這本書很流行或者很暢銷。
批判性思維有五個你需要思考的方向
- 重複性的問
為什麼
- 誰能從中受益,瞭解資金流的轉向
- 什麼背景下發生的這件事情
- 開始後會發生什麼,結束後會發生什麼
- 為什麼這是個問題