今天在Q羣裏嘮一個新技術(關於phper如何學習swoole)的時候,忽然一羣友發一句「脫離業務的技術都是耍流氓」,頓時讓我等老鳥無言以對。而後,就是一堆的不明羣衆複製、刷屏。。。php
幸虧本人反應夠快,快速輸入下面這段話:html
分享一些工做的經驗:不存在脫離業務的技術。全部新技術都是爲了解決一些業務痛點,讓特定業務更爽。前端
當咱們掌握足夠多的技術,在遇到問題時就能夠選擇適合的技術進行解決。反之,若是沒有技術儲備,就會手足無措,又或者說選擇一些不太恰當的技術進行解決,最終都會走一些彎路、踩一些坑。走彎路、踩坑當然是全部項目都會遇到的一個問題,一我的走彎路、踩坑也許不是什麼大問題,但整個項目走彎路,這個最終苦的仍是咱們這些技術人員。java
技術儲備相當重要,不管是團隊仍是我的。有了足夠的技術儲備,才能夠遊刃有餘,作到成竹在胸,遇到問題能夠快速找到N種解決辦法,並評估各個方案的優缺點進行合理選擇。
總之一句話:根據業務場景選技術,但前提是對各類技術都有深刻的理解,能熟知其利弊。nginx
下面會圍繞這個觀點,作一些延伸思考:web
關於這個問題,個人同事 "江邊望海" 曾經提到一種關於"技術人員的成長之路"的思路能夠拿來借鑑:redis
第一個階段: 作技術人員的前3年,不斷的作業務,作各類各樣的業務。
第二個階段: 3-5年,解決一些異常問題,遇到足夠多的問題。總結其規律,找出業務痛點
第三個階段: 根據痛點、規律制定流程(開發規範、協做方式、設計模式),開發新的解決方案(新技術的誕生)算法
不謀而合,新技術的目標就是爲了解決一些痛點,優化工做效率。不管新技術是一種實際的技術,如redis、hadoop等解決現有存儲的問題。仍是如MVC、設計模式、OAuth通常只是提供一種思路,不一樣語言有不一樣的實現。新的技術(思想)只是針對特定痛點的一劑良藥,用的得當即可事半功倍,用的不得當便會事倍功半。apache
先說一段題外話:好久之前的一次聊天中,我給客服小妹講一黑科技:如今有一種技術,能夠模擬任何人的手機號給任何人打電話、發短信。編程
而後客服小妹就問,這技術有什麼用呀? 能夠把本身假裝成任意一我的,而後給你打電話,你怕不怕。 而後呢? 這麼說吧,假如給你家人發短信,上面顯示你的手機號,讓匯錢,怕不怕 我家人才沒這麼笨。。。 那。。。 而後我就各類解釋,想讓她明白這技術多麼牛逼,多麼有用。 「好啦,我明白了,我逗你玩的,別太認真,哈哈哈哈」 而後就這樣了。。。
技術是很牛逼的技術,只是要想讓別人承認這項技術,尋找這項技術所解決的痛點尤其重要。幸虧只是跟同事瞎聊,若是就拿相似這樣的方案跟領導講技術解決方案,說不明白各模塊所存在的必要價值,估計就慘了。
好吧,說正事, 如何才能尋找開發中的痛點?
引入新技術可能存在一些問題,這是你們的共識。具體問題包括但不限於如下幾點:
曾經聽過滴滴架構師李令輝的一次分享《用靈活的架構去適應變化的業務》,明確指出了咱們不引入新的開源技術。這看似有些難以理解,但卻有其意義。引入新技術有其優點,也有其弊端。再引用李令輝的一句:
咱們還有野心從新梳理總體業務架構,中國架構師比較不自信,當設計一個新架構的時候,你的領導和同事就會問是否有大公司這麼作過,大公司包括了BAT3M。
技術方案當然重要,但有一點更爲重要,就是團隊的「內研」能力。團隊的內部研發能力若是較弱,就算拿最牛逼的技術依然會走彎路。別人的技術方案只是一種工具,內研能力纔是決定咱們是否能把這個工具用在正確地方的主要因素。
到達盈利模式後,解決掉技術債務(把欠的東西都還上),這樣才能一身輕鬆的快速前進。積累經驗,分析各技術方案在業務中的利弊,發揮其長處、避開其弊端,充分提高業務能力。制定開發規範、優化協做模式,新技術的引入、使用、深刻分析、適用場景分析。當作好這些準備後,我的認爲開發效率至少能提高5倍以上。
從新說明一下:新技術不僅是指實際的軟件,也能夠是一些思路、一些模式。
最後仍是說一說開始的話題:phper有沒有必要學習swoole。原本就是想說這個話題的,結果被打斷了,好吧,我仍是很執着的。
swoole作爲一個新的技術(其實成熟版本已經存在3年以上),與php充分融合,借用php的語法,使用php的cli運行模式就能夠測試其所有功能。看似swoole是php的一個擴展方法,實則否則。swoole是一套網絡框架,看過其源碼就會明白,其中有大量的C代碼,實現了併發、網絡編程、共享內存操做方面的東西,最終只是以php的擴展方式作爲最終呈現。
那麼,還有必要學嗎?
固然有,php作爲一種腳本語言,常規的職責就是藏在nginx/apache的後面接收請求,處理請求並返回給nginx。存在的問題是每接到一個請求就須要初始化一些資源,返回結果後就把資源釋放掉。這就決定了php只能作web應用,作服務就略牽強。舉個例子來講,用php提供一個分詞服務,分詞的服務端須要先加載詞典,而後接收用戶傳入的文本,將其分詞並返回。整個過程最耗時的就是加載詞典,而php常規的php-fpm模式須要每次加載詞典,這無疑是個很大的問題。若是把php前端的nginx去掉,php直接對外提供服務,那麼就可讓php啓動一個進程並一直存在,詞典也只須要加載一次。
這看似簡單的調整,實則已經改變了php在整個架構中的職責。如swoole官網所寫:從新定義PHP。
要如何學?
官網的demo看起來很簡單,但剛纔已經說了,swoole再也不是單純的php,是從新定義PHP。常規phper所不瞭解的網絡編程、併發、進程間通訊在這裏已是常識問題,不會有單獨的文檔介紹這些內容,須要本身去補充。若是有java、C/C++的併發編程經驗,上手這個會更方便。若是單獨去了解一下相關的知識,再來看這個東西,會有一種遇到神器的感受:swoole簡化了網絡編程的許多方面,可讓phper以最快的方式實現一個網絡服務器。然而也有一步一個坑的走過來的phper,真是邊走邊在內心咒罵,怎麼這個坑在文檔中沒有說明,爲何這個變量不起做用。具體的坑在另外一篇文檔中有說明(入口),這裏就再也不調戲swoole了,哈哈。至於swoole能作什麼,有人問能作數據採集嗎,這裏也不作解釋,swoole提供了更多的可能。掌握此技能頗有必要(業餘時間),無論如今你是否有適用場景。
不是有個段子嗎:若是你有一把錘子,看哪都是釘子。但若是你有100種熟練使用的工具呢?
所擁有的見聞(技能),決定了所看到的世界。