2021年8月16日 星期一

ALPHA Camp 學期三 「老爸的私房錢升級」 專案說明

想像你正在和面試官介紹你的作品,他問了你以下問題:

 

(一)你為何會選擇這個專案?

  記帳為理財之本。相信許多理財書籍多少都會強調這一點,因此以專案推廣的角度來說,是相當實用且易親近的作品,容易獲得使用者的接觸與青睞。

  再者,以撰寫程式而言,「記帳」需要運用多面向的知識與技術,如設計版面、資料庫串接、使用者驗證等等,可以多層次鍛鍊自己程式撰寫的能力。

 

(二)你使用了什麼技術?

  主要撰寫語言是JavaScriptCSSHTML。除了原生的程式撰寫外,也運用了多種主流框架與套件,增加撰寫的效率,如HTMLCSS,運用了Bootstrap;伺服器架設,與前後端串接,運用了node.jsexpress相關套件,如express-handlebarsexprss-session等;伺服器路由方面,則運用method-override,實現CURD的撰寫風格;資料庫,則使用mongoDB的服務;雲端空間,使用了heroku架設的便利性;使用者驗證方面,使用了passport;安全性上面,使用密碼雜湊的bcryptjs。最後,還有使用git記錄程式開發流程。

  

(三)哪部分你相對能掌握?哪裡花了最多時間?

  原生的程式語法大致皆能掌握,框架與套件運用上,操作比較熟練的是express伺服器的架設,並且能夠使用不同的路由引導。

  最花時間的,應當是排除JS語法非同步問題,callbackpromise仍有待加強。另外就是如何從資料庫讀取資料,並用哪些流程處理這些資料,以及mongodbmoogose語法熟練也是花了許多時間。

 

(四)過程中碰到什麼困難?又如何克服?

  在開發記帳專案的過程中,遇到最大的困難,以及花費最多的時間,當屬開發以月份及類別作為篩選條件的功能,以及建置種子。

  這兩者主要都涉及非同步的問題,而非同步的問題是我目前最不熟悉、最需要加強的部分。建置種子的問題比較單純,就是如何將使用者與帳目資料串接起來,解決的過程中,主要參考學習的教案,以及過去曾操作的餐廳專案與待辦清單專案,找出處理類似問題的共通邏輯,依其脈絡設法對應到目前遭遇的情境。

  以月份及類別作為篩選條件的功能。首先,遇到的第一個問題是,日期的資料型別,要用字串?還是日期格式?如果選擇字串,可以比較直觀地在腦中思索解決的途徑:讀取記帳資料中的日期→將日期用slice切出月份→依據切出來的月份篩選。

  但是想到日後總會遭遇處理日期格式的問題,以及如果以字串形式處理,要做關於日期的運算等,也許會有不便。更想到,如果要擴展類似的功能,可能還是得依循正規日期的格式,方能做為未來開發的基礎。因此決定改由日期格式操作。

  在操作的過程中,如何直接在資料庫擷取日期資料,在網路上看了不少案例跟操作手冊,但是一直找不到合適的方式。最後決定讀取資料庫的日期資料,並用年月日的既有公式作判別,分別建置「篩選日期函式」與「呈現日期格式函式」,以達到篩選日期的目的。

  在與類別格式合併處理的過程中,程式是做出來了,但過於繁冗,且有repeat yourself之嫌,因此與同學視訊,一起優化程式碼,最終完成現在的樣貌。

 

(五)過程中你有對哪個技術有特別深刻的學習?

  第一個是對於非同步的逐漸掌握。存取資料庫的過程中,要一直與非同步相處,因此能夠在開發各種功能的同時,慢慢熟悉非同步的特性,雖然痛苦,但是相對來說是愉快的過程,即使還沒能駕輕就熟,但已能大致知道如何處理非同步的問題。

  第二個是決定採用日期格式,雖然在學習教案的過程中,是以字串相對單純的形式處理,但透過日期格式的轉換,能夠進一步理解這種資料型別的特性,以及相應的語法,也能在網路上看到大家如何面對日期格式資料型別的常見問題,在大量的英語、簡體中文等文件中穿梭,以及看到大家如何解讀官方文件,轉換成自己操作的形式,這段經驗也學習到許多。

  特別是能知道自己如何從腦中思考的出發點,找到相應的網路資源,並透過反覆操作、判斷哪些適合自己,來開發手頭現有的功能。

  接下來目標是精進非同步與資料庫的認識,並能因應各種情境來調用、處理。

沒有留言:

張貼留言

Alpha Camp Twitter專案期末反思

一、背景說明   當初會選擇 AC 課程,是高中同學小新邀請我一起參加的。本來一直都有斷斷續續接觸過程式,但幾乎沒有經過系統性學習,很高興這次有機會與小新一起完成 AC 的課程。