學技術我們其實在學什麼?
很多同學曾經問我,該學習什麼技術,怎麼樣去學習技術?其實每當我聽到這個問題,我是無比糾結。這是一個無法回答的大問題,這種話題可以吹上幾年,並且每個人都是獨特的,方法只能借鑑不可複製也。下面說說個人學技術的一些感悟,也許全都是錯的,但是我就是要寫出來。(不喜歡看長文章的同學請直接看結尾總結那段即可)
一、學習技術的目的
我們學習技術往往是帶有功利心的,哪怕你用技術來玩,也是一種目的嘛。所以,每當你問別人,該學習什麼技術的時候。先問一下自己想要做什麼。舉一個例子,一個上了大學java課程的同學跑過來問我,我應該如何學習,要學什麼東西?
我會反問他一個問題,你以後想去開發安卓亦或者是開發網站,還是說想搞遊戲。只要他回答出這個問題,我也知道如何回答了,假設這個同學選擇了網站開發。
我會說,你想辦法用java實現我用瀏覽器看到hellow world!這幾個單詞,在實現之前就別問我要學什麼。因為我告訴這同學,你要學servlet,filter,listener,接著學ssh框架,學習資料庫,學nosql,學模板引擎,我相信他會拋更多的問題並且被嚇呆了。
如果這同學抱著解決問題的心態學習,一切迎刃而解(不得不感謝當年沒有一個人帶我,讓我自學變得現在這麼擁有這麼野路子的技術)。
我們要明白一件事情,我們要學習的技術都是為了解決特定的問題。我們來看看一個java工程師為什麼會學習那些技術,下面用上面出現的同學A舉例(不喜歡看故事的請跳開下面的小故事,這個故事僅僅是說技術僅僅是為了解決問題)。
1、同學A聽了我說的話,寫出了hello world!然後我叫他,訪問各種url,輸出不同的內容。他學習如何用xml配置servlet。然後他為了現實接收html的表單資料,就去學習如何接收get和post引數。為了識別使用者登入資訊,又知道了要學習session。為了動態輸出html頁面,又學會了jsp。
2、同學A學會最簡單的jsp之後(頁面混雜java程式碼,迴圈輸出字串等),然後發現print字串太噁心,然後發現jstl標籤可以不用寫print字串,整個頁面優雅了。
3、同學A又遇上一個問題,他很多頁面在未登入的情況下,要跳轉到登入頁面,然後他只好每個函式寫一個if處理。寫多了,人都受不了,這個時候,發現filter可以一個函式處理,趕緊去學一下,完美。
4、同學A又拋問題了,他說要統計當前線上使用者數,咋辦呢?一查資料,原來listener可以監聽session建立和刪除。那麼全域性一個計數器,事件觸發修改計數完美。
5、同學A遇到一些需要儲存使用者資料的地方,然後屁顛屁顛的跑去學習如何使用如何運算元據庫。
6、同學A這個時候,又來騷擾我了。他問為什麼很多企業招聘要ssh框架,為什麼要用這些框架呢,又要怎麼學?首先,我們來看看struct2提供了什麼功能(搜尋引擎搜一下就知道了)?過濾器,國際化,更強悍的標籤。再看看hibernate,讓我們不用寫sql了,可以防止sql注入。最後看看spring,什麼IOC,AOP。我們該怎麼學呢?我們只需要出於安全性,方便性,可維護性的目的用這些技術實現我們要實現的需求即可,用不到的,不用急著學習。
故事到此為止。。。
二、我怎麼知道有什麼好技術啊?
看了上面這個又長又不好看的小故事,也許你會忍不住罵我,我怎麼知道有什麼好技術來更好的實現需求呀!別急給三個路子你瞧瞧:
1、請跟一個商業專案從開始做到一個階段完成(請參與團隊開發那種,要商業性質的或著面向使用者的)。
相信我,一次下來你就已經可以應付絕大部分工作了。為什麼我不叫你自己搭一個部落格,自己折騰幾個課程設計來學習呢?因為那些只是玩具,相信你也不會有多大動力寫,也不跟實際掛鉤。
面對使用者的專案,你可以真實接觸到錯綜複雜的情形,才能經歷真正的需求。之所以選擇團隊開發,因為可以給一個機會學習別人會的技能嘛(本人就是因為隊友使用docker,rabbitmq等,從而才知道有這種東西)。
2、請看別人總結的技術圖譜,站在巨人的肩膀上嘛,網路一大堆總結,如何尋找就看自己機緣巧合了。
3、問一些前輩,瞭解一些有用技巧(我雖然不是前輩,但是我做過架構,帶過技術團隊,並且樂於分享,前提你私信我或者是我微信好友)。
三、不要為了用技術而學使用技術
我的一個非技術師兄曾教導我:切勿為了炫技而使用技術。請記住:
技術是為了解決問題的
例如,我們搞活動,需要提供一個簡單不變的宣傳頁面給運營。本來我們簡單寫一個html靜態頁面即可。但是,我們為了炫技。上vue,上ssh框架做一個管理後臺給運營修改頁面。我的天,這樣子既拖工期,又浪費精力。
我們再看看一些高階一點點的技術,例如非同步處理,使用訊息中介軟體(rabbitmq,kafka等)。我們真的要用到這些技術嗎?同步真的就無法解決效能問題嗎?訊息中介軟體就不能簡單的redis代替嗎?
很多人吐槽企業的系統技術渣,用的是十年前的技術。但是請看看,他們的系統是不是執行得十分平穩。你用新的技術,往往出了問題,社群都還沒有給出解決方案呢。
總之一句話,用什麼技術,學什麼技術請按實際需求出發,我們需要的是最簡單最高效的實現方法。
四、學技術前請看看他的發展史
很多人在看技術書的時候,看到歷史就跳開了,也包括我。但是這種做法讓我們多走了彎路,別以為那些書寫寫歷史是為了湊字數,我們讀歷史可以知道它為何會出現,因為存在即合理(就像我寫文章,只要你有所收穫,這件事情就是合理的)。
例如,我們看看資料庫技術的發展歷史。我們就明白為什麼要用資料庫,為什麼要使用某種資料庫引擎,主從技術何時使用等等。
當我們知道技術是為了技術什麼問題而生的時候,我們就知道我們把它用於何處,所以我們經常問的一句話是,該技術適用場景是什麼?而缺點又是什麼?
五、理解技術的原理比學會使用重要
就像當你瞭解http協議之後,你就明白cookie是怎麼工作,你也知道單點登入是如何實現,也懂得瀏覽器快取的各種實現方式。
當你知道了原生js,你就明白jquery能做的東西,不會jquery也可以實現。自己也可以造一套像vue那樣子的前端框架。
我的一個建議是:請嘗試造輪子,只有造輪子才會真正理解技術的原理,別被那些不要重複造輪子的言論欺騙了,看看大公司們造了多少輪子。如果你淪為只會用輪子的人,某一天用得特不爽的輪子,你也只能含著淚來用。
六、技術要廣瞭解,而精一門即可
我們來看看浮躁的前端領域,反正我是怕了,前端為何要學這麼多東西?es5,es6是什麼玩意?vue,React ,Angular 又是什麼?webpack,grunt 等。然後還有less,scss。當然前端還在學nodejs,厲害呀,全棧工程師。
人精力是有限的,上面那堆東西肯定有人都玩得很熟,但是這種技術人有多少呢?作為一個普通人,可以瞭解每一種技術的入門用法,熟練掌握一種用於日常開發即可。
請記住,它們僅僅是你拿來解決問題,掙錢養家的工具而已(我會php,java,golang,會vue,也會linux,redis,mongodb,mysql,rabbitmq,docker,特別會python和伺服器部署,所以別人願意把我作為技術顧問,雖然我寫文章不太行,但是解決技術問題還是挺溜的)。
七、不要以為閱讀收藏了一堆網上的熱門文章就能提高技術
看100篇文章還不如實踐一次,別以為看了什麼高併發架構文章,看了什麼前端最佳實踐,你就可以寫出多麼優美的系統,反正一到實際就會發現文章僅供參考。再說收藏文章這一事情,收藏真的只是收藏,看看你收藏的文章多久沒回顧就知道了。
正確的做法是,閱讀文章後做總結,最好是有機會實踐。看了本文也一樣,你就吸收你認為有用的觀點就好,別的請忽略。
普通人跟大牛的差別是,大牛凌晨兩點還在技術攻關,普通人可能在愉快的玩著遊戲。
八、學技術我們其實在學什麼這個問題的答案
- 請為了解決問題而尋找一種技術,且為了解決問題而學習
- 技術永遠是一種工具,請讓業務驅動你學習技術
- 請學會造輪子,如果不造輪子請確保你有改輪子的能力
- 請學會技術的底層原理,這也是為什麼大牛對於什麼技術都手到拿來的原因
- 閱讀技術文章或者技術書籍之後請總結,然後嘗試實踐之。
- 所謂的高階技術就是低階技術組裝而成,所以請學會底層技術。
總結:
學技術就是學習解決問題的方法,入門跟大神的區別僅僅在快速想到解決方案的效率(本文完)
相關文章
- 當我們在聊 RN 時,我們在聊什麼 | 技術點評
- 我為什麼要學技術
- 當我們說要繼續做技術,我們在說什麼?
- 我們該學習什麼?
- 我們為什麼要技術寫作
- 你以為我在玩遊戲?其實我在學 Java遊戲Java
- 程式設計我們學到了什麼?程式設計
- 你以為我在玩遊戲?其實我在學程式設計!遊戲程式設計
- 為什麼springcloud值得我們學習?SpringGCCloud
- 當我們談深度學習時,我們用它落地了什麼?深度學習
- 轉:我們到底為了什麼鑽研技術?
- 想學Linux技術怎麼學?注意什麼Linux
- 年輕人學什麼技術有前途?
- 對於Linux,我們應該學什麼?Linux
- 我們為什麼要學Java?Java好在哪?Java
- 技術人員在大公司能學到什麼
- 學什麼技術比較好呢?IT技術很不錯
- 當我們在討論遊戲社群時,我們在討論什麼?遊戲
- 為什麼我們要學習Microsoft Graph for Office 365ROS
- 榮耀的成功之路值得我們學習什麼?
- 我們能從Pokémon GO中學到什麼Go
- 什麼方式學習PHP技術有效?PHP
- 現如今的技術浪潮中,我們到底該做些什麼?
- 想要學習UI怎麼入門?我們學完UI後實際工作中做什麼?UI
- 當我們在談論HTTP快取時我們在談論什麼HTTP快取
- ChatGPT會對我們日常生活帶來什麼影響?這些技術會改變我們學習閱讀工作方式嗎?ChatGPT
- 為什麼我們要學習DMAIC?—舉例說明AI
- [譯] 我們能從 Redux 原始碼中學到什麼?Redux原始碼
- 是我們控制著技術,還是技術控制著我們?
- 當我們談論格鬥遊戲時,我們在談論什麼遊戲
- 什麼是java?為什麼大家都學習java技術?Java
- 在ThoughtWorks工作這幾年我學到了什麼?
- 阿里巴巴資深技術專家無相:我們能從 InteliJ IDEA 中學到什麼?阿里IntelIdea
- 2019 我們除了Android還可以學什麼?Android
- 軟體測試需要學習什麼技術?
- web前端技術主要學些什麼內容?Web前端
- 我是java開發的想學習一下雲端計算,要學習什麼技術Java
- 作為技術面試官,我在面試時考慮什麼?面試