---
title: "前言 - Rails 開發實踐"
date: 2023-07-07T00:00:00+08:00
publishDate: 2023-07-07T00:00:00+08:00
lastmod: 2023-09-03T17:33:12+08:00
tags: ["經驗","心得","Rails","Rails 開發實踐"]
series: "rails-in-practice"
toc: true
permalink: "https://blog.aotoki.me/posts/2023/07/07/rails-in-practice-foreword/"
language: "zh-tw"
---


2021 年底，我開始思考什麼是「開心地寫程式」這件事情，如果單純是興趣也不跟其他人合作，那麼是很容易的。然而，如果想要將寫程式作為工作，就一定會面臨到跟其他人協力的問題，很多時候會是我們抱怨「寫這段程式的人在想什麼」的原因。

也就是說，如果能讓眾多的初階開發者（Junior Developer）寫出更好的程式，那麼對所有人來說都能夠更加專注在享受寫程式的過程。

<!--more-->

## 技術迷思{#myth}

我曾經有過認為擁有好的技術等於擁有寫好程式的能力。然而，技術這一個詞彙太過於含糊，我們很難明確的界定怎樣的技術是具備寫好程式的。

舉例來說，一個人實現想法的速度非常快，我們可能會覺得他的「技術很好」自然就覺得對方可能是一名優秀的工程師。不過，這也可能是他將寫測試、設計架構等等問題作為代價，換來極佳的開發速度。

正因如此，我們該重新思考一遍什麼是「寫好程式」的能力是怎樣的。我很喜歡在 Clean Architecture 書中對軟體的定義「容易改變的（soft）產品（ware）」的這個說法，因為我們要思考的是，該如何設計出一個讓人樂於維護的產品。

## 程式設計{#programming-design}

在軟體工程師的世界中，我們大多用「開發（Develop）」來形容我們工作的形式，然而我們所學的是程式設計這個「設計」到哪裡去了呢？

因為商業上的需求，我們不斷的被向前推進，為了能夠前進我們發展出強大的「開發」能力，卻逐漸遺忘了「設計」的重要性，正因如此我們才需要重新回顧設計所給予我們的東西。

一個「產品」在軟體的世界中是怎樣的？當我們跟著教科書、線上課程、程式營學習「物件導向」時，隨意地將一些事物分類（Class）然後對這些類別進行抽象化，但這真的能夠與現實世界的產品連結起來嗎？

我們該思考，當一個「產品」被抽象化成概念轉換為軟體後，該如何劃分出他們的「類型（Class）」並且根據我們所知的資訊，轉變成一個能夠反映商業目的的「模型（Model）」

## 給所有人{#to-everyone}

這一系列是寫給所有人的文章，我透過自身開發的經驗，將許多軟體開發中複雜的概念抽離，精心挑選一套「馬上能用」的技巧組合，讓所有人都能夠透過這些技巧更好的撰寫程式。

我們將會從一個「產品需求」開始進行探索，並且一步步的將這個未知的黑箱打開，再逐步的思考如何建構「模型」來重現這個需求。雖然無法詳細的講述所有細節，但他是一個經過設計的開發流程，可以幫助你有系統的實現一個功能。

那麼，期待有一天我能看到更多人可以享受軟體開發的樂趣。

