當你學會一套程式語言的邏輯思路之後,應該都會迫不急待的想要趕快將你腦海中的想法實作出來,你是不是有過這樣的經驗呢?哈哈,當時的我跟你一樣。有幾年的經驗之後,我發現不能再這樣做下去。
在詳細說明之前,讓我打個小廣告。在我的方格子內主要會討論工程師的話題,偶爾會有一些心態或是網路行銷這類的話題。感興趣歡迎追蹤一下喔!
為什麼我不建議急著將腦海中的想法付諸實現呢?因為這會忽略「思考」的重要性,這也是大多數的程式設計師常犯的錯誤之一。
進一步說明之前,為了讓你更理解以下的內容,我就舉個簡單的例子跟你說明。假設回到社群網路還不興盛的年代,你想要做個線上留言板,它能夠提供你和朋友之間互留訊息。你會怎麼做呢?
普遍的設計思路
為了將我和朋友輸入的內容儲存起來,我就會善用前陣子學會的 MySQL 作為資料庫,並且開了一張資料表存放。我預計資料表要有以下的欄位:
既然是一個留言板,最重要的當然就是文字輸入框了。接著我一定會先寫出一個功能將文字框內容寫入剛才建立的資料表中。
為了區辨這則留言是誰輸入的,我還額外設計了一個輸入框寫一下自己的姓名。雖然功能陽春,而且也不美觀,但至少能達到同樣的效果。
完成這個基礎的功能之後,我馬上就遇到了下一個問題,我要怎麼給朋友使用?
關於這個問題是寫網頁的朋友一定會遇到的問題,最簡單的解決辦法就是去申請一個共享主機,免費或付費都可以,但效能差很多喔!或者也可以用 ngrok 暫時讓網站公開,我之前有寫過一篇詳細的使用方式,感興趣的話就去看一下吧!
相關技術文章:
◆ Bluehost 教學與評價!新手站長必看,自架網站圖文攻略
◆ 善用 ngrok 服務讓佈署本機服務更 Easy!
突然改變的需求
當你將網站放到公開的網路之後,你就將網址複製給幾個朋友展示一下自己 100% 製作的網站。朋友也讚賞你的網頁設計能力,當然你也會在暗中竊笑,並為自己解決別人的煩惱而高興一整個下午。
當你和朋友之間使用得越來越頻繁,漸漸的朋友已經習慣並依賴這個留言板,他們開始反映一些問題並提出更加進階的功能:
- 可否不要每次都要輸入自己的名字?
- 留言板打錯字要怎麼修改?
- 我昨天打了 800 個字的長篇文章,怎麼都被截掉了?
- 要怎麼放置圖片啊?
- 有些內容有點私密,應該要登入驗證吧?!
- 我想討論不同的主題,可否建立新的討論版呢?
- ...
當朋友反應的問題越多,你就會發現當時想到的留言板功能都是最基礎的新增文字而已。事實上,一個完整且功能健全的留言板非常複雜,需要涉及到基礎編修、介面是否容易使用、安全性、隱密性、角色權限、字數防呆以及社群分享...等功能。
尤其是資訊安全的部分,這更是近幾年來非常重要的議題。你我都想在網路上與朋友互動,使用者都認為這些平台應該要做好帳戶安全以及隱密性的控管。
仔細探討下來,你應該不難發現,這不就是你我常常使用的「臉書」或是「Instagram」嗎?它們承載的內容都很類似留言板,非常適合適合朋友之間互動。
當然你可能會認為「我沒有打算要做出一個臉書,只是朋友之間要使用而已!」
我認為若是留言板功能是要開放給朋友使用的話,基礎的功能還是要花時間思考一下。若是做為程式設計練習,而非多數人使用的話,那也應該要自我提出需求,看看怎麼做才能做到盡善盡美。
事前思考的重要性
看到這裡,我想你應該已經知道開發系統之前應該要事先規劃。
這就有點像是前置任務一樣,沒有解完這些任務,後面的任務就會變得困難或是無法進行。那在開發之前有哪些必須要完成的任務呢?同樣以留言板作為例子。
需求訪談
簡單來說就是問一下你的客戶或是使用者想要怎樣的功能,盡可能越明確越好,並且一點一點記錄下來。
你就跟周邊的朋友表明最近想寫一個留言板功能,看看他們有什麼想法,當然這想法務必越清晰、明確越好,這樣你在腦袋中才會有一個畫面。
不過,你記錄下來的功能不是那種很模糊的喔!像是以下的功能就超模糊的,應該要避免喔!
- 你做的功能都很好用!我沒有什麼問題了! (這種最後會很難搞)
- 我覺得畫面應該要有點科技感,剩下都可以! (科技感是...?)
- 我想要有個等級制度,回文或新留言都可以累積積分 (積分目的是...?)
- ...
當你的朋友提出需求時,盡可能越明確越好,最好要知道他們想要這些功能的目的背後有什麼原因,可能求方便、簡單、人性化...等等都好,就是不能是出於「直覺」,甚至是「主管交代」一句話帶過。即便是主管講的,一定都會有個深處的原因。
你要知道越含糊不清的功能,越難將系統實作出來。當你問過越多的朋友,自然就會越來越懂他們想要的功能有哪些。
繪製系統初版畫面
在這個階段就是將你蒐集到的資料用一個視覺化的方式呈現出來,可以是手繪風、小畫家,甚至是高階的繪圖軟體都可以。
最重要的就是要讓一個抽象的概念具體化,節省你和朋友之間溝通的時間。看過具體的圖形之後,你的朋友一定會更加有概念,甚至還會表明某個位置希望增加上傳圖片的功能。
這時就可以立刻討論,而不會等到系統真正上線之後才發覺某個功能沒做好。
有時候初版畫面也不是討論一次就會結束的,可能要來來回回很多次,但總比程式改很多次輕鬆許多。
開始寫程式啦!
到了這個階段才是寫程式!這時就依照之前討論的結果實作出之前討論的架構。
若是你有一個團隊,那就需要在這個階段之前增加一個分工的環節,各自依照所長去製作不同的功能。起初沒有什麼經費的情況下,以上我提到的這些內容都是自己要完成的,再不然就是找幾個志同道合的朋友一同完成這個專案。
這裡面也有很多細節可以更深入的探討,像是怎麼分工才會有效率、程式碼怎麼寫才能提升品質或是資料庫怎麼設計比較好,但這不是本篇探討的重點,未來再跟你分享。
重複確認
雖然前面有做過初版討論,透過圖形化具體的展示出哪個功能應該長怎樣,但實際操作的感覺還是跟想像的會有一些落差。
為了縮小落差,我覺得系統尚未完成之前就將半成品給你的朋友事先看過是很重要的,他們可能會發現一些之前沒有想過的問題。
有一些問題可能不重要,例如文字的語意,只要問題不大也不會造成系統錯誤,這時就可以適時說服朋友。或者先以上線為目標,日後再進行修正也可以。
而會造成系統錯誤或是不太人性化的功能,既然早一點發現了,有辦法調整就先調整吧!雖然已經造成一點開發上的困擾了,但相比之下還是比正式上線造成的影響小很多。
這個步驟會一直持續到上線為止,盡量降低思想落差!
結論
我之前有分享過每種程式語言都有適合的時機,沒有好壞的區別。既然都已經找到的適合的時機,甚至還訂定出目標了,但請先別急著將你內心的想法實現出來。
因為經過幾年的經驗,我發現急著完成程式都不會有好下場,要嘛就是我做的功能跟使用者想得不一樣,或是我做的功能不是普羅大眾想要的。儘管前者發生的比例超高,但頭都洗下去了,除了重改還能怎麼辦呢?
因此,應該盡量讓使用者與開發者之間的想法差異最小化,你能讀懂他們內心的想法是最好的,當然這不是看過一兩本書,或是看我的文章就能夠立刻明白的事情,經驗還是最重要的。
這次討論的議題比較像是心態面的事情,不知道有沒有讓你學到點什麼。如果太簡單或是還是太抽象,麻煩寫在留言區囉!這樣我才有辦法調整,甘溫唷!
不知道這篇的內容有沒有幫助到大家,有什麼想法都可以留言告訴我!若是有其他感興趣的話題,也歡迎跟我說,這樣我才有辦法調整撰文方向,甘溫唷!
除了平時寫寫技術文章,我自己也有經營一個攝影部落格,分享攝影技術、開箱以及旅遊,這些內容都不會放在這裡。感興趣的也歡迎去那邊訂閱喔!
◆ 攝影部落格:https://aidaidme.com/
◆ 歡迎來信:support@aidaidme.com
註:文中圖片源自 Pexel 或 Pixabay