---
title: "PHPConf 2014 會後心得"
date: 2014-10-19T00:00:00+08:00
publishDate: 2014-10-19T08:18:00+08:00
lastmod: 2025-11-16T21:21:24+08:00
tags: ["PHP","心得"]
permalink: "https://blog.aotoki.me/posts/2014/10/19/after-phpconf-2014-experience/"
language: "zh-tw"
---

這次參加 PHPConf 不是以會眾的身份，而是以講師的身份參加。回想起來，三年前左右因為朋友的推薦參加了 COSCUP 接著得知了 PHPConf 然後就開始陸陸續續的參加各種社群的活動。

三年前左右，剛好是我升上大學的時候。那時其實已經經歷過好幾次的瓶頸，光靠自學其實是很難學好一項技能的。除了老師之外，我想就是社群這種平行交流的地方可以獲取「書本」跟「文字資料」以外的知識，很多東西真的要靠交談、人與人之間的友情，才能夠得到一些「特別的經驗」或者「特別的方法」

當了三年多的聽眾，我在這短短的時間內透過每一個 Conference 獲得了各種不同的技能與技巧，在今年的 PHPConf 我了解到我已經從一個「接收者」變成一個「分享者」的角色，正好也是在我即將從大學畢業的這個階段。

正因為我是受到「社群的恩惠」而成長，所以我想在之後我還是會繼續投入社群的活動。以一個工作人員，或者是講師的角色來做這件事情，即使不是每一個人都能透過這種方式成長，但是在未來，讓 Conference 繼續經營下去、舉辦的更好，都有可能多幫助到一個像我這樣受到社群滋潤而成長的人，這也是我從 SITCON 擔任工作人員的經驗，還有從 COSCUP、PHPConf、RubyConf、JSDC、WebConf 這些活動所體會到的。

總而言之，我會盡可能以工作人員的身份來參與未來幾年的社群活動，是時候該回饋給社群了 XD

那麼，來談談今年 PHPConf 的議程吧！

<!--more-->

### 創意與專案管理的冰與火之爭

我想這是許多 Conference 都很少見的情況，以「不討論技術」的方式來跟技術人員聊「專案」這一件事情。

這場其實讓我覺得非常的有感覺，因為我自己在 SITCON 擔任組長，某種層面上也就是做類似 PM 的角色。在學校，畢業的專題也是我來擔任組長，因此也是非常類似 PM 這種角色。也因為這樣，我對於「專案管理」還算是小有心得，在聽完這場演講之後，我開始比較清楚「專案管理」真正該怎麼做。

其實我自己的一些做法跟講師介紹的就有點類似，不過也還指示一種不確定跟以「合理程度」來判斷去做的。這場結束後我的感覺就是「我好像知道專案該怎麼管理了！」這種感覺。

> 不過碰到停水，會場呈現一種悶熱的狀態（還好天氣算是涼爽）我有一點昏睡的情況。
> 總感覺今年許多 Conference 都碰到一些突發狀況呢⋯⋯

### 微博LAMP優化之路

講師沒有辦法來台灣真的很可惜，不過這也算是一種新的嘗試，利用遠端視訊的方式讓講師講解簡報。

當我聽到講師介紹自己的一些專案的時候，我馬上就感覺到「講師很強」這個事實，這場演講也沒有討論太多技術上的細節。
主要就是介紹怎麼優化一個 LAMP (後來改為 LNMP) 架構的網站，從速度上的優化、架構上的優化以及語言本身的優化，一點一點的介紹整體優化的過程。

即使現在還沒有辦法體會，不過作為「未來優化的參考」卻是很有價值的資訊。

> 網站上的議程表還沒有對調，主要是網路不穩所以在排除問題前，先交換了議程。

### Framework or Framework Less

午餐過後，就輪到我的議程。議程組的負責責任 Frich 超負責的跟我聯絡，還有確保我是在會場中並且可以隨時準備完成。

> 不過這次有一些誤會發生，另外就是我感覺我似乎漏掉了不少通知（不過沒有太大的影響就是了 XD）

昨晚回到家之後其實非常晚了，寫這篇文章的時候才開始上傳簡報。

{{< speakerdeck fd77e93039890132e0fe3e50d861d083 >}}

今年的共筆大家都用 Hackpad 來紀錄，我稍微看了一下，也許是我講得有點快所以大家紀錄的東西看起來不多。
（雖然也有可能是我的內容被判定成重點的部分太少了 XDD）

因為我沒有事先背講稿的習慣，所以大部分都是在演講的時候依照簡報的設計來講解。所以下面紀錄的「簡報摘要」可能會跟演講當時不同，不過之後有影片可以回味就是了！

#### 對 Framework 的看法

其實這邊主要是希望能重新去思考「Framework」是什麼東西，三年前我第一次知道 Framework 這種東西，卻沒有思考過其意義所在。

我現在給 Framework 的定義是「一種作為開發參考規則的東西，則為 Framework」
同時，我也希望思考 Library、Framework、Application 的關係與意義，我是認為這三者有著類似「時間軸」的關係。

由 Library 組成 Framework 再由 Framework 完成 Application 這樣的進展。
（不過有時候，會是在 Framework 設計的差不多時，為了將可重用的部分分離，而發展出 Library 獨立存在。）

最後是 Application 到底是什麼，我認為在 Application 被停止使用之前，都是一種「有機的」生命，會不斷地成長、變化。也因此，如果架構不良或者程式碼有問題，就會長成「異形」這也會是 Framework 出現的裡有，讓 Application 的成長變得「有規則一點」或者「能受到控制」

另外也討論了一下像是 WordPress / Drupal 該分類為 Application 還是 Drupal 的問題，要說的話其實還是可以當 Framework 使用，只是在性質上已經是 Application 了！

> 至於演講中沒能提到的是 [Themosis](https://github.com/themosis/themosis) 某種意義上來說，他又把 WordPress 變回一種 Framework 了吧 XD

#### Framework 的運作

這些東西用久了，總是會想要了解本質跟架構上的問題。

目前主流還是 MVC Framework 這樣的架構，所以就簡單的說明 MVC Framework 的結構。
（其實很多部分都是從 Rails 的經驗學來的，不過 Laravel 雖然有點不同，但是大致上還是類似的！）

* Model - 包裝業務邏輯：通常是存取資料用的，業務邏輯類似先把資料預先處理的感覺）
* View - 顯示、呈現：通常會希望盡可能的不要有邏輯在裡面（雖然實務上不太能）
* Controller - 主要的邏輯判斷：像是判斷要傳回 HTML 還是 JSON 有時候也會做驗證（在 Model 實作可能會比較好）
* Router - 可以幫忙判斷目前網址該呼叫哪個 Controller 實作 RESTful 就很好用。（如果沒有用，通常 Controller 就是開啟的檔案）
* Helper - 有時候 View 無法解決減少邏輯的問題，就會包裝起來放到 Helper 裡面（通常也是可以重複使用的）
* Service - 有時候 Controller 會做太多超出判斷以外的事情，就會包成 Service 處理（通常會處理比較複雜的 Model 操作）
* SQL Builder - 可以減少「簡單 SQL 的撰寫」並且讓程式變得更語意化（複雜的 Query 還是要手動寫）
* Migrate - 減少在 Deploy 網站的複雜度，不過數量多了之後並不是件好事，像是 Rails 會用 Schema.rb 來儲存結構，當不需要 Rollback 結構時，可以刪掉老舊的 Migrate。
* Task - 一般是 Command Line Tool 會把一些常用的操作包成 Task 然後用一行指令解決。

總而言之，整個 Framework 可能會有很多功能，是否要使用就是看需求。

#### Framework 的實作

照 GitHub 和簡報應該就可以了解實作的過程。
基本上是參照 Laravel 的架構去設計的，不過比較重要的是「專案評估」要去看專案的需求來決定。也許客戶可能只是想要一個 Blog 而已，還要看專案是否是接手的、前人的專案如何、客戶給的酬勞能做多少事情等等。

假設確定要自製 Framework 的話，那就要看是否要繼續開發下去，或者是這是用來「中繼」的 Framework （協助轉移、過渡時期整理架構所使用）如果是，那就要考慮是否把 Framework 的 API 盡可能設計成和目標 Framework 一樣，來加快後續的轉移。

另外就是選工具、選 Framework 還要盡量以「熟悉的」為基準點（加權）除非你是要練習，不然再弄專案來說，用熟悉的工具絕對會比較有利。

#### Q&A

我簡報上面好像打 FAQ 阿 XDDD

雖然很多問題似乎跟演講無關，不過關於「如何在新的框架中來使用原有程式」這個問題，我覺得很值得分享出來。

我被問到「案例中的原有程式，你是怎麼把它用在新專案」的時候，其實我第一個反應是「我已經砍掉重練了 XDDDD」不過這樣應該會被打吧（汗

主要是因為原有程式使用很舊的 PHP 版本和寫法，複製過去幾乎沒有意義。再加上我已經使用 Framework 了，很多重複的事情已經不需要使用，而且原有程式還有不少漏洞問題。簡單來說，只要知道原有程式的「運作」剩下的轉移到 Framework 其實是很簡單的。

註：大概就是原有程式寫了 30 ~ 50 行左右的程式碼，但是我在自己製作的簡易 Framework 之中，用 10 行左右就做完了！

#### 演講上的心得

因為場地據說是原本準備的場地臨時無法使用所改的，所以活動會場來不及設置好網路等等（資訊人的生命）之類的設施，所以我直到演講後一段時間才看到 Facebook 上面的貼文。

其實很榮幸的就是目前正在實習的公司「五倍紅寶石」的前輩「龍哥」有來聽我的演講，從照片上來看據說是「爆滿」的狀況。
不過我在台上的時候，我以為只是「會議廳比較小」所以沒有注意到實際的人數。

過去幾次有機會站在台上其實我都是全身發抖的，但都要忍著然後盡可能大聲的把東西清楚講出來。這次沒有，原因就如上述一樣就是「我沒有很多人」所以我就很安心地講了！（準備充分而不緊張的問題，我想這次還不算到非常充分，所以絕對不是這個關係。）

目前對自己演講不滿意的地方，還是沒辦法讓大家「很開心」的去聽演講這件事情。畢竟，演講這種東西就是要告訴大家「你跟我做一樣的事情，會很快樂！」才有意義⋯⋯畢竟沒有人想聽「我做這好痛苦⋯⋯」這種充滿抱怨的主題吧！

### Mircosoft Azure 攤位

原本是想去聽演講的，不過這次 Mircosoft 拿出的獎品實在太誘人，只好去努力的達成任務了！

首先，我覺得這次微軟根本是來「賣萌」的，整個攤位都是滿滿的 Azure Girl (原 Sliverlight 小光) 貼紙、紙膠帶，連展示都是 Azure Girl 養成遊戲⋯⋯

~~雖然很多工程師也是喜歡動漫拉，但是你們這樣真的不會嚇跑大家嗎⋯⋯~~

不過，會讓我去攤位最重要的是「旅用插座」這個神裝，可以支援歐洲、美國、英國三個國家不同形狀的插座，上面除了一般插座孔之外，還有兩個 USB 孔可以使用，這東西不趕緊去換一個過來對得起自己嗎！

不過沒想到，換到的條件竟然是要開一個 Azure Girl 來玩（崩潰）我一直覺得 Azure 的申請程序超麻煩才不想申請試用來玩，不過為了插座⋯⋯

剛好這個時段都是我的朋友在申請，不過為什麼都站著麼久？原來是申請到最後一階段卡住拉⋯⋯

~~微軟，我最近才對你們支援 Docker 和 OpenSource 有信心耶，但是你們的雲端這樣不穩沒問題嗎~~

感覺這次微軟只是來增加 Azure 報表上的使用者，跟研究看看大家到底懂不懂 Azure 可以來幹嘛而已⋯⋯

~~不過獎品清一色 Azure Girl 真的沒問題嗎⋯⋯~~

### Phalcon 進行式

我一直對 Phalcon 很有興趣，因為他真的是我目前用過「神快」的 PHP 解決方案之一。

講者 SDpower 我總覺得經常看到，不過想不起來在哪裡經常看到（趴
雖然講者表示他很少上台演講，演講過程中其實我也是沒辦法聽得很清楚，但是內容卻是實實在在的把 Phalcon 的特質介紹出來，算是蠻有收穫的。

結束後我提了一個一年前的問題，就是 Resultset 為什麼無視 Model 設定的 protected 屬性一樣將其顯示出來，不過看起來似乎也不清楚這個問題（昨晚特地去查文件，似乎還是沒有變化⋯⋯）

### 與龍哥聊天

下午茶結束後看到龍哥在外面，就和 Karl Li （中文好難打⋯⋯）一起跟龍哥聊天這樣。

因為現在 Karl Li 在 FlyingV 工作，所以就聊了一下台灣募資網站的現況，還有目前在使用的 Laravel 等等。
因為剛好講到 Laravel 跟 Rails 的差異（其實 Laravel 很有潛力成為 PHP 界的 Rails 啊 XD）

龍哥就順便展示 Rails 4.2 的 Debugger 功能（類似 breakpoint）和 Console ( 網頁中直接跑 Console 的神奇功能 ) 給我們看，看起來 Rails 4.2 會變得更好用。

另外就是，其實 PHP 開發者常用的 XDebug 也是有類似 breakpoint 的功能提供給開發者喔！
請參照 [XDebug Remote Debug](https://xdebug.org/docs/remote) 的功能，就我最後一次使用的印象，跟 breakpoint 用法差不多（雖然我一直沒懂 breakpoint 怎麼用⋯⋯）

### MySQL 的效能救贖：Percona XtraDB Cluster

原本其實是想去聽 HHVM 的，不過龍哥說這場是大神演講。再加上多方考量後，認為 HHVM 能使用的情況不多，就跟 Karl Li 上來聽這場。

雖然看似是在介紹 Percona 的 XtraDB Cluster 不過其實裡面提到很多在「大規模」的網站中，會遭遇到跟 MySQL 相關的問題，像是備份造成的 Lock Table 而無法使用、查詢變慢的問題、資料庫跑很久才是實際拖慢 PHP 的兇手等等⋯⋯

在這場演講中，獲得不少實務上的經驗。不過目前還沒有到需要使用 Cluster 的時候，等到必要的時候再來嘗試看看吧 XD

### 小結

PHPConf 大概會是今年最後一場參加的 Conference 了吧，接下來就是要跟同學努力把畢製作完，還有把 SITCON 2015 準備完成，之後就是畢業，然後我就正式進入業界了⋯⋯

所以，現在該感嘆一下時間過的真快嗎 XD

> 雖然現在主要不是在使用 PHP 不過 PHP 這個語言真的是充滿了我在資訊這條路上的回憶 XD

