2021年12月18日

PHP 執行效能測試,比較 PHP 8.1、8.0、7.4 實測結果,Laravel 8 速度提升了 15%

2021 年 11 月底, PHP 8.1 釋出了。每次釋出新版本時,官方總是不外乎地會宣稱新版本的執行速度提升了。可是到底是不是真的有提升?就算有提升,是提升多少呢?實際上有感嗎?可能要實測才知道。

於是我這次就想要來親身體驗看看,實際測試看一下效能提升了多少。

本次會利用 Laravel 8.x 範例應用來做測試,測試的工具為 ApacheBench。

2021年12月17日

PHP 8.1 來了,新功能與特性快速介紹

在 PHP 8.0 發佈一年後,PHP 8.1 在今年 2021 年 11 月 25 日也發佈了。

去年我曾寫了一篇文章,介紹 PHP 8.0,而過去這一整年,我在開發上也實際使用了不少 PHP 8.0 的新功能,例如 Nullsafe operatormatchConstructor property promotion 。

這些改進跟新功能,替開發帶來不少方便跟效率。我相信這次的 8.1 版本,PHP 團隊也會帶來不少令人驚豔的地方吧!

本篇一樣會介紹一些我感興趣的新功能,搭配一些簡單的試玩。大家可以參考看看。

2021年12月16日

Docker image 版本差在哪?alpine, buster, bullseye 怎麼選?

大家一開始在學習使用 Docker 時,會學著撰寫 Dockerfile,也會從 DockerHub 上挑選適合的 Image。

但不知道大家有沒有發現,有時候明明都是同一個東西,卻有很多種不同的選擇?比如說,我自己最近常用 PostgreSQL postgres,一樣都是 14 版,卻有 postgres:14postgres:14-bullseyepostgres:14-alpine 等,各種不一樣標籤的 Image 。

這些不一樣的 Image 對初學者來說蠻令人困惑的,會不曉得有什麼差別,也不知道該選哪一個。但理解後發現其實沒有那麼複雜,簡單來說,後面那些字,指的是背後的作業系統。

2021年12月11日

軟體專案開發時程與品質的拉扯:工程師觀點

跳槽到新創團隊一陣子後,隨著一開始的新鮮感跟熱情逐漸散去,疲乏感就漸漸回來了。

相較於原公司的官僚,這次的疲乏感來源在於,團隊在乎的是開發時間要短、速度要快,而不看重細節與品質。

雖然可以理解新創團隊有其壓力,需要趕快滿足客戶的需求,需要趕快找到適合的商業模型,需要趕快建立起自己的品牌等。但作為一個工程師,心裡總是希望可以做出更好的成果的。

不過說起來,不管在什麼規模的公司,好像或多或少會遇到類似的問題,畢竟「時間」跟「品質」對專案管理來說,本來就是一件非常對立跟糾結的事情,很難做到大家都滿意。

2021年12月5日

PHP 魔術方法|三分鐘看懂 __invoke 用法

本篇為 PHP 系列

__invoke() 是 PHP 眾多魔術方法中的一個,可以用來讓你將物件作為 function 使用,詳細說明可參考官方說明文件

問題是,把物件當作 function 使用是什麼意思呢?其實就是在物件後面直接加(),如果還是不清楚,我們接著看以下的範例就知道囉。

2021年12月1日

PHP 7.4 新功能! PHP 也有好用的箭頭函式 Arrow Function 了

本篇為PHP系列

在 JavaScript 中有個好用的箭頭函式,用起來很簡短,但對於不懂的人來說,會覺得有點魔幻,覺得很神奇卻又不是那麼好理解,因此常常被前端工程師拿來炫技,那什麼是箭頭函式呢?

我們來看下面的 JavaScript 範例,我們有一個 array,想要把其中的每個值都變成兩倍,那可以使用 map 搭配匿名函式來這樣做:

let numbers = [1, 2, 3, 4];
let doubleNumbers = numbers.map(function(number) {
  return number * 2;
});

這樣我們的 doubleNumbers 就會是 [2, 4, 6, 8]

而上面這個範例,若改成使用箭頭函式的話,就會像這樣,變得比較簡潔:

let numbers = [1, 2, 3, 4];
let doubleNumbers = numbers.map((number) => number * 2);

這樣簡潔的特性,是箭頭函式深受喜好的原因之一,而這樣的箭頭函式在 PHP 也可以使用了。

2021年11月30日

搞混了嗎?帶你一次弄懂 PHP in_array 和 array_key_exists 的差別

本篇為PHP系列

in_arrayarray_key_exists 都是經常使用的 PHP 函式,被用來尋找 array 中是否存在某個東西。

但一樣都是尋找,兩者找東西的方法有什麼不一樣呢?

這邊就直接開門見山講答案,

 

in_array:檢查的是「值 value」是否存在;

array_key_exists:檢查的是「鍵 key」或「索引 index」是否存在。

 

如果不懂「值」跟「鍵」的差別可以繼續往下看哦。

2021年11月27日

寫給 PHP 新手的物件導向教學(三):封裝,可見度與繼承

在上一回《寫給 PHP 新手的物件導向教學(二):建構子、方法及屬性》中,

我們說明了類別的建構子、方法跟屬性,這一回我們會來聊聊物件的封裝、可見度,以及一點點的繼承。

2021年11月22日

PHP Laravel 小知識:hasOne 跟 belongsTo 差別在哪裡?

hasOnebelongsTo 都是 Laravel Eloquent 所提供的方法,負責處理一對一的關係。

那一樣都是一對一,這兩個用法的差別在哪裡呢?簡單來說是這樣:

  • hasOne 指的是「擁有一個東西」,我擁有一個東西,我在它的身上貼上了我的名字。
  • belongsTo 指的是「屬於某個人」,我屬於別人,我被貼上了他的名字。

2021年11月20日

寫給 PHP 新手的物件導向教學(二):建構子、方法及屬性

 

在上一回《寫給 PHP 新手的物件導向教學(一):建立類別與物件》

我們講到了如何建立類別,

那這一回我們會接續著講解一個重要的概念:建構子,

不過在進入建構子之前,我想優先提一下「方法」及「屬性」。

2021年11月17日

寫給 PHP 新手的物件導向教學(一):建立類別與物件

前言

PHP 過去在物件導向的實現上有許多的缺陷以及令人詬病的地方,

然而自從 2015 年推出了 PHP 7 、以及 2020 年推出 PHP 8 以後,

PHP 已經擺脫了過去的陰霾,不但效能提升許多,也成為了一個相當完整可靠的物件導向程式語言。

 

經過多年的發展,目前許多流行的 PHP 框架遵循著物件導向的概念,

這些框架充分地利用 PHP 在 OOP 上的特性,設計出許多優良的機制,

讓工程師們可以更快速地開發出符合市場需求的系統。

 

本系列希望能夠一步一步講解物件導向的概念,

希望讀者最後能夠理解複雜的物件導向程式碼,

並可以自行設計出良好的程式。

 

2021年11月14日

面試心得:軟體工程師如何挑選適合自己的公司?

俗話說的好,面試的時候,不只是公司在挑選你,你也在挑選公司。

有些人比較沒自信,面試的時候會覺得有工作就好,而不敢對公司太挑剔,但其實一份工作短則半年,長則三至五年,甚至十年,而且每天都要在辦公室花上八個小時以上,對於一個要待這麼久的地方,挑錯了會相當痛苦,再說每次換工作的成本並不低,所以選工作的時候應該要挑剔一點才好。

只是說該怎麼挑比較好?又有哪些點應該要注意的呢?以下我想分享一些看法,讓大家在挑選工作的時候可以參考看看~

2021年11月6日

設計模式 | 單例模式 Singleton Pattern 介紹,以 PHP 程式重構為例

大家寫程式的時候,有沒有遇過這樣的情況呢?

有某一種資源,經常被使用,而且每次使用前都要做初始化,比如說資料庫,每次使用前都要設定連線;或是,有些資源如果被重複使用,會造成一些問題,例如同樣以資料庫為例,多次的連線,會影響效能。

如果大家也有這樣的困擾,那本篇將要介紹的單例模式 Singleton Pattern 就是被設計出來解決這個問題的,有興趣的讀者可以繼續往下閱讀哦。

2021年10月25日

變數命名好困難!6個程式碼命名建議,撰寫會說話的程式碼!

好的變數命名可以提升程式碼的可讀性,也能減少錯誤的發生,

最主要的宗旨是,讓看的人可以更容易理解程式碼內容

所以並沒有標準的做法,只要大家容易理解即可,最重要的是取得團隊共識。

 

以下歸納一些命名方式,第 6 點有一些命名靈感的來源,可以往下看。這些建議沒有對錯的問題,只是個人習慣,提供給大家參考一下。

2021年10月22日

PHP 節省 Array 記憶體用量的神秘機制:Copy on write

本篇為PHP系列

Copy-on-write 是一種用來的節省記憶體用量的機制,

在很多地方都有使用到,而 PHP 的 Array 也有用到這樣的機制,

不過在開始正式討論 Array Copy-on-write 之前,我們先來稍微看一下 PHP Array 的複製機制。

2021年8月29日

如何自學寫程式,從零開始的開發之路 - 初階篇

本篇是《程式開發之路》系列文

邁向職業之路

每個人開始寫程式的理由不太一樣,有些人是因為科系,有些人是因為工作,而有些人則是因為個人興趣。

當我們認真學習程式一段時間後,大概就可以知道自己適不適合寫程式了。也許會發現,自己其實對寫程式沒有擁有自己想像中的熱誠,或者是發現,自己其實並不擅長寫程式。

而這樣的認知,並不是一件壞事。人們如果可以更早的了解自己的能力跟興趣,對未來長期的發展是有很大助益的。

相反地,那些可以撐過程式開發入門階段的人,願意花很多時間跟程式相處,不排斥學習相關知識的人,或多或少代表未來這些人會想要朝著這個方向前進,更明確的說,作為一份職業。

2021年8月20日

如何自學寫程式,從零開始的開發之路 - 入門篇 | 建立寫程式的基礎

本篇是《程式開發之路》系列文

第一步

學習電腦程式語言的第一步是:挑一個常見的程式語言。

可以參考TIOBE的熱門程式語言指數

在學校,因為目標比較不明確,教授也不希望這麼快讓學生定型,所以通常會使用比較通用的語言來做教學,例如C、C++或Java。

但在職場中,不同的領域會有不同的慣用語言。例如網頁開發,前端就是JavaScript、後端會是PHP、Java、Go等等;資料分析相關,會選擇用R、Python等;APP是Java、Swift等;韌體硬體相關多半會是C、C++等。

學習一個程式語言,其實是學習跟電腦的「溝通方式」,我們利用程式語言來指揮、操作電腦,來完成我們的需求。現在的電腦架構大致上已經固定了,如果用學習的角度來看,學習哪一個語言並不是那麼重要,重要的是學習觀念。用比較漂亮的話來說,只要有任何一個語言的扎實基礎,跳到另一個語言都是相對容易的。

2021年8月7日

為什麼規格總是不清楚?為什麼談需求那麼難?有沒有可能改善?

需求方常常一句:「我想要做一個簡單購物車功能。」就把事情丟過來了。

開發者團隊只能默默地深呼吸,在心裡翻個小白眼,接著親切的詢問對方:「請問你他媽,呃,抱歉,請問你想像中的購物車是什麼樣子呢?」

2021年6月20日

PHP ArrayAccess Interface介紹,探索 Laravel Container 背後的機制

本篇為PHP系列

先貼個官方說明壓壓驚,The ArrayAccess interface

Interface to provide accessing objects as arrays.

簡單來說,這個介面讓你可以用讀取陣列Array的方式,去讀取物件Object

租屋離公司近一點吧,年輕人的時間不該浪費在通勤上!時間真的是金錢。

我的工作地點在台北市區,租房子的時候一直在想,到底要離公司近、還是遠比較好?

後來想了一下,既然都要租房子了,那當然就是離公司越近越好。有多近?最好是走路五至十分鐘就可以到公司的距離。

會這樣決定,其實最主要是因為我很在意時間。

2021年6月13日

閒聊 | 從iPhone 6S跳槽Pixel 3兩年多的心得 | 下一支手機要買iPhone 13還是Pixel 6呢

▲Pixel 3及完整配件

購入方式

我是在2019年1月春節時期購買的,當時Google有農曆年的特價活動,而Pixel 3折扣了5000元,我覺得還OK就下單了,折扣後的價錢是的22700。

2021年6月2日

Debug 不再鬼打牆 ,追根究底的除錯技巧

工程師:「我剛剛測試明明可以啊!」

用戶:「可是網頁打不開啊???」

⋯⋯

工程師:「我昨天測了一整天,還是找不到問題耶,不然你電腦借我看一下。」

工程師:「欸,你是不是開飛航模式= =」

用戶:「真的耶!」

2021年5月29日

軟體工程師的噩夢,傳統產業數位轉型過程中的荒謬故事

最近經常跟一些在做數位轉型的傳統產業合作,

他們都想借助線上工具,來嘗試新的商業模式。

聽起來很棒對吧,但做起來實在是痛苦啊。

像是有一家,工程師好不容易把所有資訊都放到網頁上,

上面的老闆卻問說:「可不可以把網頁上的東西都印出來呀?我不習慣用網頁」,其他人還附和著:「沒錯!印出來弄成冊,可以拿去賣」。

聽了真是差點沒昏倒,工程師這麼辛苦把資料整理到資料庫上,到底為了什麼?

所以說,如果只是嘴巴喊著數位轉型,但思維卻還是舊時代,根本轉型轉不過來呀~

2021年5月19日

程式放手給別人寫!技術主管不該是團隊開發的主力,小心團隊越管越亂!

做為一個管理技術團隊的基層主管,到底要不要寫程式呢?

基本假設

我們先假設,這篇文章提到的技術主管是:5-7 人 web 開發團隊的負責人,也就是初階、基層的技術主管。

2021年4月22日

職場 | 後端工程師的職涯發展與建議 ,試想十年後的自己在哪裡?

大家是否會好奇後端工程師的職涯發展?我自己在剛開始工作的時候,就常常在想做這一行,下一步要往裡走比較好?很當時希望有人可以討論跟指引方向。

不知不覺中,我自己在業界也待了一個說長不長,說短不短的日子了,就想說也許也可以依照自身經驗,還有自己所看到的,來寫一篇文章分享。

我自己曾經待過千人、甚至萬人的跨國企業,也待過只有十幾人的新創小公司,每間公司都有不同的特性。

而我今天主要想分享的是,我過去在一家中型的公司的經驗,一來是我認為這應該比較適用於大多數人、二來是因為這間是我目前為止待得最久的公司,可以敘述的比較詳細。

我大概簡單介紹一下背景,這間公司的工程團隊大概100人左右,是台灣本土的網路產業公司,有將近二十年的歷史,因此公司已經有一定的制度了。

我會從工程師一路介紹到技術副理的角色,再往上走的話,一來是差異性會比較大,二來是自身的經驗還沒有那麼多,所以我只會講到技術副理為止。

2021年3月7日

九種常見的離職原因,有這些狀況的話,代表該考慮離職了

前言

沒有完美的工作,只有最適合自己的工作。

為了生活,工作通常是一種不得不的選擇。

但工作畢竟還是佔掉人生一半的時間,即便不得已,也是要想辦法讓自己過的下去,可以維持工作的動力、維持健康的心情跟狀態。

而我相信,人生是一場馬拉松,比的是氣長,即便不求突出亮眼,也要避免自己在中途就被消耗殆盡。

因此如果目前的工作,不斷的消磨自己的能量,如果有點積蓄,生活還算過得去,那可能就要考慮離職了。

離職原因有哪些?

根據我自身的經驗,以及和朋友、同事討論的結果,比較常見的離職原因有這九個:

  • 薪資待遇
  • 工作環境
  • 團隊成員
  • 工作內容
  • 工作時數
  • 管理方式
  • 未來性
  • 職涯發展
  • 成就感

2021年1月24日

2024 程式書單推薦|軟體工程師的自我修練!書櫃裡不可以少了這些書

扎實的基本功是一切的基礎,

在這個資訊發達的時代,網路上到處都可以獲得學習資源,

如果想要系統化地學習一套完整的知識,閱讀仍舊是最好的選擇之一。

2021年1月21日

PHP 魔術方法|__get 及 __set 的說明與範例,搭配 Laravel 實例說明

Introduce to php magic method: __get & __set

本篇為PHP 系列

接續PHP魔術方法系列,

此次要講的是,可以讓操作資料更彈性的 __get__set

2021年1月10日

有效的 Code Review | Code Review 的項目及優先順序

Code Review 的重點是改善及控制 code quality,確保不會有糞 code 進到 master branch。

因為專案時程有時候非常緊急,review 的時候並沒辦法盡善盡美,因此需要將各個項目,依據重要程度還有急迫性來分級,藉此來達到有效的 code review。

以下是我自己在使用的優先順序分級:

  • 必須:最低限度
  • 基本:合格
  • 提升:可以的話很好 (Nice to have)