全端產品專案介紹筆記

以記帳軟體為例呈現如何扼要介紹產品專案

--

拎北欸記帳本
拎北欸記帳本

本筆記將以 WHY、HOW、WAHT 的黃金圈為主要框架,來摘錄打造記帳軟體 Web App 的目的、累積、收穫與學習。相關連結:

記帳軟體專案實作摘要

  • WHY:以商業、用戶、技術面來剖析專案的價值。
  • HOW:以熟練的部分、面臨的挑戰、印象深刻的體驗來彙整實作重點。
  • WHAT:彙整使用的技術清單及相關的技術筆記。

為何會選擇這個專案?

from craftsman from Unsplash
from craftsman from Unsplash

商業面:與市場與職涯發展接軌

在這科技秒新分異、資訊爆炸的時代,許多人為了追求有效的自我管理,紛紛使用各種工具或應用程式來輔助,甚至自動化管理自己的次序時間安排、財務及金流控管、健康和體況追蹤等。

更重要的是,隨著個人公司、自由工作者、工作自由化等趨勢,這些自我管理工具的需求目前逐漸上升。

對於成為具跨域思維的軟體工程師、全/後端工程師,或自行打造 Side Project 的獨立開發者而言,都很合適用以磨練技術與升級思維。

用戶面:打造友善使用者體驗

由於這是個操作頻率很高的產品,各功能都需要有較友善的使用者體驗,在換位思考、版片配置、互動操作等方面都會需要花心思打磨,也比較有機會練習打造具商業價值、消費者願意使用的工具。

技術面:以後端技術為核心來刻意練習

此專案為以 Node.js 的 Express 後端框架為基礎來打造的全端產品,對於伺服器初始設定、MVC 原則設計、CRUD 資料操作等都能有多次的刻意練習,幫助非本科初學者的我能快速上手並熟練各種重要的技術。

哪部分相對熟練且能掌握?

系統化及流程化「伺服器與資料庫架設」

from How to create an http server with Express in Node.js
from How to create an http server with Express in Node.js

在此專案前,已有各種實作演練,並且逐步彙整成 專案初始化筆記,所以對於基礎架設以相對熟練。

簡練呈現攸關商業邏輯的功能(CRUD 與進階篩選等資料操作)

from 資料操作 CRUD 功能〔思維流程篇〕
from 資料操作 CRUD 功能〔思維流程篇〕

最重要的商業邏輯與功能,通常牽涉各種資料操作。由於過去的跨領域與業務背景,讓我容易深刻理解商業情境;加上強大的組織能力與運算思維的輔助,使我能將複雜功能與方法化繁為簡;更因熱愛閱讀,而練成的語文掌握力,讓我能以簡練易讀的程式碼來打造功能。

哪裡最花時間?碰到什麼困難?又如何克服?

以 MongoDB 及 Mongoose 設計與操作關聯式資料

from MongoDB — Relational vs non-relational databases
from MongoDB — Relational vs non-relational databases

雖然 NoSQL 的 MongoDB 具有一定彈性,但對於具關聯性的資料也提供相對的功能來設計與操作。然而 Mongoose 的官方文件風格較為學術與簡練,許多深度操作的細節需要大量提問與查詢。過程中數度卡關。在轉換搜尋策略後,才找到初步的使用方法與解決方案。為此我還寫了一篇 筆記 摘錄此問題的解決過程。

友善體驗的日期格式資料操作:JavaScript Date object 前後端資料處理

新增紀錄表單
新增紀錄表單

在設計日期相關功能時,是初次練習操作 JavaScript Date objects ,對於此資料格式與方法都非常生疏,查找了 MDN 官方文件、Stack Overflow QA 等資料依舊不甚理解,也無法達成預期效果。

(例如:如何將資料回傳為前端 HTML Date Input 的讀取格式、轉換為 YYYY-MM-DD 的格式呈現在紀錄頁面等。)

因為已超過預設的停損點(大約兩天),在第一次打造時,退而求其次,使用 String 為格式來操作。

但在後來與專業工程師助教及同學的討論中,發現在業界的日期操作,甚至會牽涉跨時區產生的時差問題,因而重新研究如何解決。也才搞懂原來 Date 是個可以運用原生方法的 Object,已順利用簡練的方式來完成任務。

對哪個技術有特別深刻的學習?

結合各種程式設計與抽象概念以建構「產品實作程序」的理解

from  Unsplash- developer
from Unsplash — developer

這裡指的設計原則與概念包含:Object-oriented programming 物件導向、Asynchronous programming 非同步、Separation of Concerns (MVC principle) 關注點分離、基礎網路觀念、Middleware 與 Event Loop 等。

深思與彙整這些原則和概念後,協助我對於打造全端產品的技術面有系統性地認識,更整理出 產品實作程序 這個有效的實作框架。

打造業界常用的認證系統(passport & expess-session)與第三方登入(Facebook & Google)

在採用第三方套件前,曾以土法煉鋼手刻過登入功能 Login_Handcraft,並初步了解認證機制。而在進階練習時,透過社群資源強大的 passport 打造完整的註冊、登入、登出、使用者認證等功能。在教材引導下完成 Facebook 登入後,躍躍欲試體驗 Google Sign-in ,並且成功完成。使得我在:採用第三方工具與資源、閱讀原文技術文件、查找資料等能力都大幅升級。

下一步學習方向?

目前對於已後端框架打造全端產品已具備一定熟練度,然而對於想往後端發展的轉職者來說,接下來將專注打磨以下技能:

  • 關連式資料庫
  • 前後端分離
  • 前後台網站

使用了什麼技術?(若提供連結,為作者之技術筆記)

JavaScript 核心觀念

  1. Basic & Core concept 語言基礎
  • Variable & Value 變數與值
  • Data Type and method 資料型別與操作方法
  • Operator 運算子
  • Array & Object 陣列與物件應用
  • if/else 流程控制與條件判斷
  • Loop and Iterator 迴圈與迭代器
  • Function 封裝函式

2. Programming 程式設計

產品思維 Product Mindset

協作技術

後端技術 Back-End

  1. Web Sever 伺服器

2. npm packages 應用程式套件

  • 密碼雜湊:bcryptjs
  • 取用 HTML 表單資料:body-parser
  • 提示訊息:connect-flash
  • 管理環境變數與敏感資訊:dotenv
  • View Engine 模板引擎應用:express-handlebars
  • 運用 cookies 和 session 儲存認證結果:express-session
  • 輔助模板引擎:handlebars-helpers
  • 打造 Restful 路由:method-override
  • 根據 session 資訊認證使用者:passport
  • 自有與第三方登入策略:passport-facebook、passport-google-oauth20、passport-local

3. NoSQL Database & ODM 資料庫:MongoDB & Mongoose

4. Deployment 部署PaaS — Heroku 雲端部署

前端技術 Front-End

抽象概念應用

撰寫工具

--

--

郭耿綸 Kaleb
無限賽局玩家 Infinite Gamer | Publication

時而乘上浪峰、時而摔出浪板,靠著上帝才能一再拿起浪板、學著與這無限賽局共存的玩家。