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

還有 ikun 測試器,一個(gè)網(wǎng)頁答題小項(xiàng)目~
項(xiàng)目地址:https://github.com/liyupi/ikun-test

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

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

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

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