首次公開!我快速做項目的技巧
大家好,我是鲏。
認識我的朋友都知道,我是一個實踐派,相比研究枯燥的理論知識,我更喜歡做自己想做的項目,用技術來實現(xiàn)自己的想法的感覺真的很棒。
所以從大學期間一直到現(xiàn)在,除了工作中的項目外,我依然保持著自己做項目的習慣,有堅持幾個月薅光我頭發(fā)的大項目、也有幾小時搞定的娛樂練手項目。
比如前兩周羊了個羊小游戲很火的時候,我花了幾個小時就上線并開源了一個低配版的模仿游戲【魚了個魚】,純粹出于興趣。
項目地址:https://github.com/liyupi/yulegeyu

還有 ikun 測試器,一個網頁答題小項目~
項目地址:https://github.com/liyupi/ikun-test

就是這些小玩意兒,也給很多同學帶來了快樂(包括我),值了。
當時就有同學就在評論區(qū)問了:魚皮你為啥這么快?(指做項目)
我說:無他,唯手熟爾。
真就是這樣,我也從來不去背代碼、也是不寫就忘。但忘了就再寫,同一類項目做個十來遍,做起來能不快么?
當然,做項目過程中,我也積累了很多做項目的技巧,下面給大家分享一下,全是我自己的一直在用的。
快速做項目技巧
我們可以把做項目的過程分為幾個階段:需求分析、技術選型、系統(tǒng)設計、開發(fā)編碼、調試測試、部署上線、運營推廣等。
每個階段其實都有技巧,下面依次分享。
1、快速需求分析
相信大多數同學在自學時都是跟著網上的教程做項目,老師說要做哪些功能那就做哪些功能,多了咱也不去想。
其實這是一個 “壞習慣”,做項目這東西,本來就是要自己想要做哪些功能才有趣。
比如老師教你做商城系統(tǒng)時,說:我們要做一個根據商品名稱搜索商品的功能。在你完成這個功能后,哪怕視頻沒有教,你自己能不能想到去添加:給用戶搜索建議、提供商品熱搜列表、用圖片搜商品等功能呢?
尤其是你要做自己的項目(產品)時,自主需求分析更重要了,盡量打開自己的思路,才能做出亮眼的項目。
那問題來了:想不到要做什么東西,想不到要加哪些需求,怎么辦?
常見的做法是從自己的生活需要或者實際使用過的產品出發(fā),去分析他們的不足并改進,做到推陳出新。
比如你們天天吐槽某個軟件辣雞辣雞,那能不能自己做一個?萬一火了呢對不對?
我自己的做法就比較有趣了,在做過很多項目、翻過很多車后,我很少刻意去做需求分析,而是當我遇到某個問題、想到某個需求時,會 第一時間把它記錄下來 ,但不是立刻就去做這個項目了。
記錄的需求多了后,有時我會發(fā)現(xiàn)需求之間是可以有聯(lián)系的,這個時候,我才會考慮是不是能把這些需求匯聚成一個新項目。還要再評估下時間和競品:來不及、性價比不高、卷不過同行就不做。
舉個例子:我之前背面試題的時候發(fā)現(xiàn)很多題目的題解是有問題的, 但是沒有人去討論和維護,于是我就先把這點記錄下來;之后又發(fā)現(xiàn)大家有閱讀整套面試題的需求,可以有個組卷功能,才有了之后的面試鴨(https://www.mianshiya.com)。
養(yǎng)成隨時記錄的習慣,自然醞釀出項目靈感,而不是等要做項目的時候再去硬想、硬分析,你會發(fā)現(xiàn)整個過程不僅輕松、而且最后做出來的項目會更實用、性價比更高。(我們做視頻、寫文章也是一樣的)
2、快速技術選型
所謂技術選型,就是選用什么技術來開發(fā)上線項目、解決實際問題。
如果是企業(yè)中的大項目,技術選型階段要格外謹慎,不建議選擇冷門、無人維護、無人熟悉的技術。但對于我們個人來說,不用考慮那么多,一般做項目時選擇自己最熟悉的技術框架即可。
像我自己在技術選型時,主要是考慮以下 3 點:
- 前端用什么?一般就是在 Vue 和 React 間抉擇,然后統(tǒng)一使用 Ant Design 這種 多框架兼容 的組件庫,而不是一個項目用一個新的組件庫。
- 后端用什么?一般是在 Java 和 Node 間抉擇,小項目、側重前端的項目用 Node(比如 yuindex:https://github.com/liyupi/yuindex),追求穩(wěn)定性的大項目用 Java SpringBoot。
- 怎么上線?一般前端用 Nginx、后端用 Docker,后面會講。
也建議大家無論是學習階段還是正式工作了,盡量有一套自己用的最熟的技術棧,大多數項目都不用糾結技術選型。也別非得追求什么都用過,結果用的都不熟。
3、快速系統(tǒng)設計
所謂系統(tǒng)設計,就是尋找一個 相對 最合適的方法來實現(xiàn)需求。
聽起來簡單,但實際上,90% 的同學估計都做不到自主設計,總結一下就是離開視頻教程就不知道怎么做項目了。
怎么根據需求做系統(tǒng)設計也是 我的編程知識星球 里被問的最多的問題,比如下面這些,我都給出了自己的解決方案:

解決方案:https://t.zsxq.com/06b2bUj2B

解決方案:https://t.zsxq.com/06VRj2rrF

解決方案:https://t.zsxq.com/06meEQby7
大家可以想想上面這些問題你都能答出來么?
關于系統(tǒng)設計,我覺得最重要的還是積累經驗,很多需求和業(yè)務場景其實都是通用的(比如用戶鑒權),只要你設計過一次,之后做類似的系統(tǒng)應該都是無壓力。
那如果我啥都不會,怎么快速完成系統(tǒng)設計呢?
答案也很簡單,去網上搜解決方案唄!像我們在工作中做一些大的系統(tǒng),都是要參考業(yè)界主流的設計方案來定制或改進的,而不是純靠自己想。
不過現(xiàn)在網上的解決方案類文章沒有那么多,一方面是因為大家的需求都不太一樣,另一方面是好的解決方案才不會隨隨便便公開給你。所以如果沒有分析方案的文章,那我們甚至會直接找到開源項目,手撕源碼!
像我在星球里已經回答過近百個系統(tǒng)設計方面的問題了,星球的朋友可以看 #系統(tǒng)設計#標簽下的內容學習,說不定能解決你的問題。
地址:https://wx.zsxq.com/dweb2/index/tags/%E7%B3%BB%E7%BB%9F%E8%AE%BE%E8%AE%A1/48844552128248
在做系統(tǒng)設計的過程中,建議大家繪制一些圖來輔助理解,比如流程圖、時序圖、功能模塊圖等等,用在線繪圖工具 draw.io 即可。
4、快速開發(fā)
想真正做到快速開發(fā),就要時刻遵循以下原則:
-
能不自己寫的代碼,就不要自己寫
-
自己寫過的代碼,絕對不重復寫第二遍
對于第一點,如果是新項目,我會選擇一個最符合我需求的腳手架來創(chuàng)建初始化項目模板,比如前端的 Ant Design Pro,什么布局、導航、路由、菜單、主題、整合組件、請求、測試、權限管理、國際化全都給你整合好了;如果是后端的話,我有自己開發(fā)的一個 Spring Boot 腳手架,整合了業(yè)務開發(fā)常用的組件,幾分鐘就能開發(fā)一個新項目初始模板了,已經公開在了我的 星球 里,打算下個月再重點完善一下。
當然,你也可以直接到 GitHub 上找一個開源項目去二改,比如知名的后臺管理系統(tǒng) Vue Admin Template。站在巨人的肩膀上,能幫助你大幅節(jié)省代碼量和開發(fā)時間,屢試不爽。
對于第二點,那就需要我們平時寫代碼的過程中,多抽象復用同功能的類 / 方法 / 函數。此外,一定要保留好自己寫過的所有代碼,做過一次的項目,就不要再重復做第二次,直接復制粘貼豈不美哉?
除了以上兩點之外,還有一個我自己的血淚教訓,那就是做項目一定要有計劃!
比如今天做什么、明天做什么、每個功能花多少時間等,分清主次,先完成核心功能、再去完善細節(jié)。而不是功能還沒開發(fā)完,就擱那糾結前端界面、什么字體大一號小一號的,到時候如果都上不了線,你覺得糾結這些事情還有意義么?
再舉個例子:給你 3 天去開發(fā)新功能,結果你花了 2 天去糾結一個很小的 bug,導致了項目延期,這也是得不償失的。
做計劃這點在工作中尤為重要,共勉。
5、快速測試
這一點沒什么好說的,一般做項目時要編寫好單元測試,每次改完代碼后執(zhí)行一次單元測試,就能提前自動發(fā)現(xiàn)一些小 bug,節(jié)省一些人工時間。
如果是正式對外上線的項目,建議提前招募一些有志之士(內測用戶)而不是自己一個人在那點。畢竟人多力量大,不僅節(jié)省自測的時間,也更能發(fā)現(xiàn)一些問題。
想當年,大家一起幫我給面試鴨網站做測試,我真的感動到哭了。
6、快速部署
對于新手來說,可能會覺得上線是很麻煩的事情,但如果你操作的次數多了,你會發(fā)現(xiàn)上線其實是所有環(huán)節(jié)中最簡單的 —— 其實上傳文件、點一下就好了。
像我自己一般是使用 Vercel 免費的國外服務器來一鍵上線前端項目(還有個好處是不用備案);用騰訊云托管之類的容器平臺來快速發(fā)布用 Docker 打包的后端代碼?;蛘呔褪怯脤毸姘鍋砜梢暬剡\行 Node、PHP、Java 等項目,可比自己登上服務器,手動啟動停止項目要方便多了。
至于微服務項目嘛,也可以用同樣的方式來部署,或者用 Docker Compose 來編排群起微服務。不過真正要上線一個產品,在沒有用戶的時候,我是不會選擇用微服務的。
7、快速運維
上線項目后,怎么更方便地運營管理項目呢?
一般我不會選擇自己搭建運維監(jiān)控管理平臺,而是直接用現(xiàn)成的第三方服務。比如用百度統(tǒng)計、51.LA 來統(tǒng)計網站用戶,用現(xiàn)成的第三方云數據庫、云 Redis、容器托管平臺來監(jiān)控服務的運行、配置告警等等。
換句話說,想要真正做到快速,有現(xiàn)成的服務就用現(xiàn)成的吧,雖然會花一些額外的金錢投入,但是能省下來大量時間,性價比絕對是高的。對企業(yè)來說,時間就是金錢。