閱讀308 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Java特種兵》1.7 麵對技術,我們糾結的那些事兒

1.7 麵對技術我們糾結的那些事兒

人生需要麵對很多糾結我們都是在糾結中磨練自我意誌的。

糾結容易讓人浮躁容易讓人犯錯但是糾結同樣會讓人成長糾結是黎明前的黑暗。

學會將糾結化作成長的力量在逆境中能生存的強者才是真正的“老A級程序員”。

1.7.1 為什麼我這裏好用那裏不好用

“為什麼我這裏好用那裏不好用”

小鬼你是不是經常說這句話如果是那你“中標”了。

你怎麼知道我經常這麼說呀

這句話要麼是老鳥說要麼是小鳥說同一句話老鳥說的意思和小鳥的得意思完全不一樣哦

有啥不一樣呢

小鳥通常是碰到問題就說這句話而老鳥通常是解決問題後才說這句話小鳥說這句話是糾結繼續跟自己過不去老鳥說這句話是為了搞懂本質和原理整合事實與理論證明自己的結論總結自己的知識。

小鳥還是不懂這是為什麼好可憐。

小鳥啊小鳥你想想你還不會飛還沒有走出你的窩怎麼能看清楚這個世界這個世界上萬物生靈的成長你提出的為什麼隻是虛幻沒碰過的。老鳥已經在天空中翱翔數年它們擁有自己的生存與自然界經驗深知自然界的生命循環與弱肉強食的道理知道什麼是好與壞知道什麼是美與醜知道什麼是天敵與獵物。你若想要了解這個世界“努力鍛煉自己擁有一雙可以翱翔的翅膀去感悟這個世界吧”。

可能從一隻小鳥成長起來會經曆沉默然而不在沉默中爆發就會在沉默中滅亡。當你成長為老A的時候你應該知道的是在解決問題後才會提出相關性問題而不是在解決問題前所以真正的一個老A、一隻老鳥可以說這樣的話。

反過來講要提出問題也需要有點水平才能真正切入主題將問題說清楚有的小鳥喜歡占主動權問問題的時候想要牽著老鳥的鼻子走老鳥會問小鳥想知道的問題細節但小鳥繼續說自己想說的結果是老鳥不知道小鳥要什麼也搞不清楚問題是什麼。老鳥逼於無奈而且自己還有事情最後就裝著什麼也不知道小鳥就經常會說老鳥有什麼用啊什麼問題都搞不定當自己發現低級錯誤的時候還可能得意地想“不就是一個低級錯誤嗎老鳥竟然解決不了。”

無論如何我們離不開的是實際場景要根據實際的工作背景來解決問題這樣才能達到較好的效果同時在一些代碼bug的修複上可能還會分析實際場景中代碼修改的相關影響。在運維層麵可能是保留現場後直接重啟再通過copy的現場做模擬在一些長遠問題上可能我們需要慢慢來分析。

這就是胖哥講的老鳥與小鳥的故事如果你是小鳥你懂了嗎

1.7.2 你的程序不好用你會不會用環境有問題

“你的程序不好用你會不會用”

能說出這句話也許你是一隻老鳥了但是不一定是一個老A。

這是一個對自己充滿自信的程序員在麵對別人提出質疑時的第一反應可能作為老鳥你會說自己不是這樣的人那麼你真是一朵“奇葩”或者你真的升華到了“大師”級別修身養性的境界非同一般。在眾多老鳥之中我們都有一股“程序員的野性”這種野性通常來自於自己研究了許多東西以及在相關領域待的時間很長所賦予自己的強烈自信感。

學海浩瀚無邊任何人即使是大師也有犯錯的時候所謂“老虎也有打盹的時候”尤其是在工期要求很緊的時候“一流高手”和“二流高手”體現的水平不會有多大的區別因為他們都是“老鳥級”的人物代碼編寫速度和問題解決能力都是非常強的而更高境界上的區別在這種情況下是體現不出來的。

在麵對別人提出質疑的時候第一反應其實是看你的內心世界是否足夠強大。別人質疑你的第一句話有可能是頂住你心窩的話有可能是將你苦思冥想的方案瞬間徹底否決的話有可能是將你很長時間的辛苦付出瞬間說得毫無價值的話有可能是將你的成果瞬間打入無底深淵的話也許是對你和大家都認可的事情簡單敷衍的話。這些話相信比質疑你的代碼有Bug會更加重一點吧這個時候你會如何想呢

或許一顆強大的內心需要去磨練小胖哥也在不斷磨練中成長自我。也許你會覺得很累因為這是在挑戰自己的個性改變自我是最痛苦的事情。也許這個時候我們可以看看別人是如何修身養性的別人能做到我們同樣可以做到。

代碼有問題我們就看原因不論是不是自己的問題都要告訴真正的原因。有問題沒關係我們不怕犯錯誤而是怕錯了不改反反複複犯同樣的錯誤可能還是同樣低級的錯誤。

如果反反複複有人提出同樣的問題而絕大多數情況下都知道不是自己的問題那麼就將它以文檔的方式呈現出來因為代碼是我們寫的使用者通常不知道所有的細節。

如果沒有任何規約就意味著可以隨便“亂搞”事實上邏輯的東西暫時是不可能做到這一點的就算是寫代碼也得遵循基本的語法規則用數據庫也得遵循它的基本規約而不能亂刪除東西用接口需要遵循接口規約“亂搞”的結果就是東西越多、問題就越多做一件事情來解決問題但是帶來了更多的問題。

這個“亂搞”的底線是什麼完全是看係統的設計思路也就是軟件的伸縮性你需要讓用戶知道不能去做或不建議去做的事情我們可能會提供但是不完全保證它的正確性或安全性為什麼不保證也許某些用戶也想要知道。

回過頭來對於自己來講最重要是冷靜麵對事情的真相客觀麵對我們所麵臨的事情加上對業務本身的熟悉程度、技術功底的配合、冷靜思考、量化的判斷、全局性影響的分析逐步突破層層技術和業務難關相信我們可以很“酷”地解決絕大部分的問題。解決問題的手法也會多種多樣而並非等閑之輩。

1.7.3 經驗是否能當飯吃

通過對前麵幾節內容的介紹胖哥就是想讓你知道也許某些經過試驗論證或曾經解決問題得到的結論不是很靠譜或者說並不是“永遠靠譜”的。

前麵也提到了其實在技術的發展過程中我們都是站在前人的肩膀上做進一步的事情它們雖然以“平台、插件、思想”的方式提供給我們作為基礎但是通常也都是代碼可以先不說“隻要是代碼肯定就會存在Bug”但是軟件程序在不斷更新換代的過程中肯定會存在各種邏輯的複雜性來滿足更多的需求就像一個係統做複雜了的道理一樣。

隨著實際代碼的複雜性增強就會產生各種各樣的運行邏輯此時如果API寫得過分簡單那麼許多程序員可能就不知道這個API下麵的許多細節也沒有那麼多精力來關注每個細節因此就可能會導致很多不可預見的問題。在某種場景下我們可能將問題解決了但是也許並不是因為看到了問題的本質而有可能是因為某種巧合走到了一條正確的執行路徑上。

除了上麵的例子曾經有不少人在“亂碼”上經常出現怪異的問題小胖哥也曾經為此糾結過很久很多人在遇到亂碼後都會像小鳥一樣說“為什麼我這裏好用另外一個地方卻不好用呢”這類問題在網上通常有很多方法大多要求你將數據庫、應用服務器、接口、環境變量、頁麵等輸入/輸出的字符串全部統一。其實這種方法隻能解決某些局部問題並未看到問題的根本。

為什麼說隻能解決某些局部問題呢

因為在某些場景下係統會連接不同的數據庫、緩存、分布式存儲、應用方、中間件等它們都有可能會提供不同的字符集輸入輸出我們也無法控製別人提供的服務必須用什麼字符集。換句話說你或許在某種程度上可以保證自己的應用係統使用什麼字符集來避開許多問題但是當麵對複雜的分布式環境時你不得不去知道字符集的根本所在。隻有搞清楚這類問題的本質才能在遇到類似的問題時去定位分析。

關於亂碼更多的介紹

亂碼問題不是本節討論重點關於亂碼方麵的問題在本書後文中第2.6節中有更多的介紹在第4章的通信裏麵提到一些相關的基礎知識在下冊的專門介紹“坑”的章節會有另一個側麵的說明。

再換位思考一下軟件在不斷革命的過程中內在的邏輯在不斷變化也變得更加複雜它們提供的一些參數可能發生改變即使是同樣參數的API的內在實現也有可能與以前大不相同。此時隨著技術的發展一些經驗開始變得“不太靠譜”包括我們曾經記錄下來的經驗值、默認值甚至是官方標準它們都可能在一個小的版本變化中變得不靠譜。

因此我們需要新的學習是否會覺得很累呢我們在不斷學習別人提供的東西在不斷記憶別人的東西前一樣東西還沒掌握清楚新的又來了肯定很累。但這需要方法也需要功底當你懂得它的根本與發展的方向和模式基本就知道它要做什麼了也基本知道會怎麼做了自己也可以實現隻是沒必要而已。一些開源軟件中常見的參數不會太多而更多的參數當你知道它的根本後通過某些命令和文檔查閱是非常快速的我們學習的代價不應該太大。

回過頭來總結一下我們應當“站在前人的肩膀上看問題不僅僅是要沿用前人寫好的東西更需要看到他們所遇到的那些坑”。在理論指導的基礎上比前人看得更高、更遠社會和技術才可能向前發展和進步新一代程序員不必都經曆上一代程序員所經曆的同樣的坑那樣隻是延續而沒有任何發展。新一代程序員即使要經曆坑也是經曆一些更新的坑去挖掘更新的東西而不是走老路。

小胖哥說了這麼多話有什麼用呢就是想要告訴讀者朋友經驗可以用以借鑒和參考但經驗不能用來當飯吃同時別人告訴你的是他的經驗也同樣是一種參考和借鑒我們需要學會去看問題本質的方法與習慣。也許你不太認同小胖哥的觀點可能你和小胖哥看待問題的角度不一樣胖哥也很希望你有不同的自我見解但也相信我們會有一些共同的認識。

接下來我們用輕鬆的方式來論道談論老A的那些事老A在麵對逆境時是如何麵對的。

最後更新:2017-05-23 14:02:22

  上一篇:go  雲翼計劃校園大使召集令
  下一篇:go  用自然語言教育人工智能:百度新算法發展出zero-shot學習能力