2020年5月31日

白話解析 SOLID 的單一職責原則。SRP 其實是一種整理程式的思維

試著從另一個角度來看「單一職責原則(Single Responsibility Principle, SRP)」,我覺得它想討論的其實是一種如何整理程式的思維。

想像一下,一個亂七八糟的書櫃,隨意擺放不同類型的書,數量少的時候,也許我們可以記得每本書的位置,但是當數量變多,可能幾百本,想要快速地從書堆中找到想要的書,幾乎變得不可能。

但如果我們有事先將書籍依照類型整理,比如,小說、科普、散文、漫畫等類型,我會知道我現在要找的書,是哪一種類型,這樣立刻就縮小了搜尋範圍,讓我們可以快速地的找到想要的書籍。

2020年4月18日

為什麼寫程式要有規範?

前言

在討論程式之前,先想像一下,如果一塊沒有良好都市計畫的土地,最後會發展成什麼樣子?

由於沒有良善的規劃,隨著人口增加,越來越壅擠的住宅空間,越來越雜亂的市容,原有道路交通設施的供給不足,天天都在塞車。即便要進行都市更新或是新建重大交通設施,要面臨的將是巨大的成本與溝通。

2020年3月28日

職場 | 聽說新創軟體公司的工程師都過很爽

大家對於新創軟體公司的想像是什麼?

組織扁平化?彈性上下班?吃不完的餅乾零食?超大辦公室跟遊戲間?

我原本也以為是這樣。

2020年3月21日

開發 | 將自動化測試引入無經驗團隊的第一步

最近在某些機緣下,有機會可以將自動化單元測試導入我們團隊,

由於我們團隊對於單元測試較無經驗,

在引入的過程中,應該會遭遇一些問題,

所以我想將這段引入的過程跟我的想法記錄下來,以供日後檢討與反思。

2020年3月14日

閒聊 | 當80-20法則套用在程式開發 | 很多事情本來就是徒勞無功的呀

80-20法則是什麼?

不曉得大家有沒有聽過這個法則?應該或多或少有聽過,那我自己對80-20法則有這樣的解釋方式:

80%的產出,來自於20%的時間/心力。

更進一步說80、20對我來說只是虛數,其實可以翻譯成:

大部分的產出,來自於少部分的時間/心力。

或是反過來說:

大部分的時間,花在無產出的事情上。

2020年2月22日

為什麼我大學畢業後沒有接著念研究所

每個人大學快畢業的時候,都會面臨選擇,是繼續念研究所,還是離開學校就業、或是趁年輕還有精力時圓夢?大四時,我跟隨同學的腳步,送出了推甄的申請,後來也幸運錄取了,那是還不錯的系所,所以我當時相當開心。

只是這樣的開心並沒有持續太久,在愉悅的心情沉澱下來後,我開始進行仔細地的自我評估,考慮了各種面向,包含自己的個性和能力、念研究所的目的與收穫、以及未來職涯等等,終於在經歷一段掙扎後,決心放棄錄取資格。

文章開始前稍微補充一下個人背景,給大家一個參考依據,簡單來說,我大學就讀的是資訊相關科系,算是前段的大學,並且成績維持在中上。

為什麼要唸研究所?

在反思的過程中,我透過不斷詢問自己的方式,來評估自己是否要唸研究所,像是:是因為比較好找工作嗎?是因為起薪比較高?或是我對研究有熱誠?還是只是大家都在唸我也去唸一下好了?

2019年12月21日

閒聊 | 把 Git 當 FTP 用!四人小新創當實習網頁工程師的有趣經驗

還在念大學的時候,我曾經去一家剛成立一年的小新創公司實習,職位是實習網頁工程師。

那這家公司有多小呢?我剛進去的時候,包含老闆,員工總數只有4人,2個共同創辦人及2個(實習)工程師,除了員工人數少以外,公司的資本額更是只有一百萬。

2019年12月10日

淺談程式碼的可維護性

坊間或教科書上有一些量化的方法可以用來衡量可維護性。不過我想要用比較含糊點的方式來表示這個「可維護性」這個概念。

就一個運行良好且成熟的系統來說,日常的維護並不會有大幅度的變更或修改程式碼的需求,通常只是一些小調整,或是bug的修正。

但是對於還在成長中的系統來說,除了要修復bug以外,還要配合公司、業務發展,大幅度調整現有功能,修改範圍會橫跨多個模組或程式、甚至跨越不同系統,而基於系統現有架構上擴充功能也很常見(調整架構也有機會發生)。

2019年12月8日

比較 PHP 問號問號 ?? 及問號冒號 ?: 的差別 - Null Coalescing Operator vs Ternary Operator

本篇為PHP系列

兩個問號 ?? 及問號冒號 ?: 的差別其實不大,兩者在使用方式上的差異,主要在於什麼時候回傳第二個變數。

三元運算子

要聊 ?? ?: 不得不先提一下三元運算子 (ternary),三元運算子的用法是像這樣:

$a ? $a : $b;

2019年12月3日

開發 | Don't Repeat Yourself DRY 原則不是萬靈丹 | 不要為了重複而重複

這個東西可以共用,我們抽出來吧!

當我們發現程式中,有很多長得很像的部分,我們通常會開始思考,如何把這些東西整理出來。

畢竟著名的DRY原則,告訴我們:不要重複你自己。

2019年11月30日

MySQL/MariaDB如何儲存毫秒、微秒?

DATATIME及TIMESTAMP

MySQL跟MariaDB常用的時間類型有DATATIMETIMESTAMP,在比較新版本的MySQL中,是支援在這些類型中儲存毫秒(10^-3秒)、微秒(10^-6秒)的。

透過phpMyAdmin介面,可以設定DATATIME及TIMESTAMP的長度(精準度),長度的值域為0~6,長度的意思是儲存到小數點下第n位,也就是10^-n

或是透過SQL的方式建立或修改時間類型的欄位時,也可以加上長度的設定。

CREATE TABLE `test` ( 
  `created_at` DATETIME(3) NULL , 
  `updated_at` TIMESTAMP(6) NULL 
) 

舉例來說,TIMESTAMP設定為長度設定為6的話,會得到TIMESTAMP(6)的類型,代表在資料庫中,此欄位最多可以儲存到微秒,像是:

  • 2019-11-29 09:07:26.819359
  • 2019-11-29 09:07:26.000000
  • 2019-11-29 09:07:26.999999