搜尋
首頁頭條PHP程式設計師如何突破成長瓶頸(php開發三到四年)

PHP工程師面臨成長瓶頸

先明確這裡所指的PHP工程師,是指主要以PHP進行Web系統的開發,沒有使用其的語言工作過。工作經驗大概在3~4年,普通的Web系統(百萬級訪問,千成級數據以內或業務邏輯不是特別複雜)開發起基本得心應手,沒有什麼問題。但他們會這樣的物點:

◆除了PHP不使用其它的語言,可能會點shell 腳本。

◆對PHP的掌握不精(很多PHP手冊都沒有看完,庫除外)。

◆知識面比較窄(面對需求,除開使用PHP和MySQL ,不知道其它的解決方法)。

◆PHP程式碼以流程為主,認為物件導向的實作太繞,看不懂。

這些PHPer在遇到需要高效能,處理高並發,大量資料的專案或業務邏輯比較複雜(系統需要解決多領域業務的問題)時,缺乏思路。不能分析問題的本質,技術判斷力比較差,對於問題較快能找出臨時的解決辦法,但常常在不斷臨時性的解決辦法中,系統和自己一步步走向崩潰。那怎麼提升自己呢?怎麼可以挑戰難度更高的系統?

更高的挑戰在那​​裡?

結合自己的經驗,我列出一些具體挑戰,讓大家先有個感性的認識。

高效能係統的挑戰在那​​裡?

◆如何選擇Web伺服器?若要不要使用fast-cgi 模式;

◆要不要使用反向代理服務?選擇全記憶體快取還是硬碟快取?

◆是否需要負載平衡?是基於應用層,還是網路層?如何保證高可靠性?

◆你的PHP程式碼效能如何,使用最佳化工具後呢?效能瓶頸在那裡?是否需要寫成C的擴充?

◆用戶存取有什麼特色,是讀多還是寫多?是否需要讀寫分離?

◆資料如何儲存?寫入速度和讀出速度如何?資料增漲存取速讀如何變化?

◆如何使用快取?怎麼樣考慮失效?數據的一致性怎麼保證?

高複雜性系統的挑戰在那​​裡?

◆能否辨識業務所對應的領域?是一個還是多個?

◆能否合理地對業務進行抽象,在業務規則變化能以很小的代價實現?

◆資料的一致性、安全性可否保證?

◆是否撐握了物件導向的分析與設計的方法

這裡所列出的問題,你都能肯定的回答,說明在技術上你基本上已經可能成為架構師了。如何你還不能回答,你需要在以下幾個方向加強。

怎麼樣提高,突破瓶頸

##如何你還不能回答,你需要在以下幾個方向加強:

◆分析你所使用的技術其原理和背後運作的機制,這樣可以提高你的技術判斷力,提高你技術方案選擇的正確性;

◆學習大學期間重要的知識, 操作系統原理,資料結構和演算法。知道你以前學習都是為了考試,但現在你需要為自己學習,讓自己知其所以然;

◆重新開始學習C語言,雖然你在大學已經學過。這不僅是因為你可能需要寫PHP擴展,而且還因為,在做C的應用中,有一個時刻關心效能、記憶體控制、變數生命週期、資料結構和演算法的環境;

◆學習物件導向的分析與設計,它是解決複雜問題的有效的方法。學習抽象,它是解決複雜問題的唯一之道。

如何有效的學習是一個大問題。 “以架構為中心,使用用例驅動,迭代開發”,借用這個思想,關於有效的學習的方法,可以這樣來表述:以原理、模型或機制為中心,任務驅動,迭代學習。有點抽象, 舉例來說明如何學習。

目的:學習如何提升處理效能。

可迭代驅動的任務: 透過IP找到所在地域。這是Web應用程式常見的任務,IP資料庫是10左右萬行的記錄。

第一次迭代: 不考慮效能的情況下實作功能(透過PHP來實現)

因為無法直接透過KEY(IP)進行尋找地域,所以直接放到資料或透過關聯數組這種簡單的方法都是不行的。想法還是先把資料排序,然後再進行查找:

◆如何透過IP查找?已序的數據,二分查找是最快的。

◆如何排序?用函式庫函數sort當然是可以,但是即然是學習,那還是自己實作快速排序吧。

學習目標: 排序演算法,找出演算法

PHPer資料結構與演算法基礎比較差,平常也沒有這方面的任務,自己也不學習,因此這方面的知識很缺乏。但是,程式設計解決的問題,最終都會歸結到資料結構和對這種資料結構操作的演算法。如果資料結構演算法常在心中,那麼遇到問題就能清楚認知到它內在的結構,解決方法就會自然產生。

第二次迭代:最佳化資料的載入與排序#

如果做到第一步,基本上還是不可用,因為資料每次都需要的載入和排序,這樣太耗時間。解決的想法是,資料一次載入排序後,放到每個PHP進程能存取到的地方。放到Memcache這是大家容易想到問題。其實放到共享記憶體(EA等加速器都支援)中是更快的方式,因為memcache還多了網路操作。資料是整體放入到共享內存,還是分塊放入,如何測試性能? 如何分析瓶頸所在(xdebug)? 在這些問題的驅動下你會學習到。

學習目標: 偵測、定位、最佳化PHP效能的方法; PHP實現結構對效能的影響。

第三次迭代: 寫PHP的擴充

效能還是上不去,必須進入C/C 的世界了,不過從此你將不只是PHPer而服務端的全能型工程師,當然這對沒有做過C/C 的同學挑戰是巨大的。

學習目標:C/C 的學習,PHP擴充的寫作

怎麼決定需要學習的機制和原則呢?怎麼找到驅動學習任務?我對需要學習的東西,都沒有概念,怎麼回答以上的兩個問題?從這個技術的定位來找出需要學習的重點,即它怎麼做到(機制)的和它為什麼能這樣做到。列出這個技術最常見的應用,做為學習的任務,從簡到難實踐。

假如我需要學習JavaScript,我對於HTML,CSS有點感性認識。首要要了解的是,JavaScript是Web領域的動態語言,主要解決網頁的動態互動的。那要學習的要點如下:

◆JavaScript如何與HTML互動 (機制)

◆JavaScript的動態特性在那裡,與其它動態語言有何不同? (語言模型)

如果完全自學,找到需要學習的重點(機制、模型​​、原理) 設定學習任務的確不是那麼容易掌握。如果找到一個有經驗的人來指導你或增加一個學習型的團隊,那麼學習的速度的確會大大提升。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具