之前有小伙伴問,如何更簡(jiǎn)單的理解編程呢?我珍藏了一篇幫助你理解編程原理的文章。分享出來:
什么是編程?——就是通過算法邏輯串聯(lián)數(shù)據(jù)結(jié)構(gòu)來解決具體問題并實(shí)現(xiàn)業(yè)務(wù)訴求的過程。
也就是:編程 = 算法邏輯 + 數(shù)據(jù)結(jié)構(gòu)。
數(shù)據(jù)結(jié)構(gòu)就是數(shù)據(jù)的呈現(xiàn)/存儲(chǔ)方式。比如書放到書架,書架就是一個(gè)數(shù)據(jù)結(jié)構(gòu),把書放到箱子里,箱子就是一種數(shù)據(jù)結(jié)構(gòu),那書架和箱子都是數(shù)據(jù)的不同存儲(chǔ)方式。
你18:30下班到家,怎么讓家人在20:00之前吃上飯?你有兩種算法,可以先煮飯然后去買菜,也可以先買菜再煮飯,哪種方式更好呢?咱來分析下:
目標(biāo):18:30到家,讓家人在20:00之前吃上飯算法a:先煮飯然后去買菜算法b:先買菜回來再煮飯
這里做飯是一個(gè)程序?qū)嶓w(程序?qū)嶓w:程序中所包含的各種元素,如變量、函數(shù)、數(shù)據(jù)結(jié)構(gòu)、類等),這里包含煮飯、買菜、切菜、做菜,那表達(dá)方式是:
做飯 = { 煮飯() {}, 買菜() {}, 切菜() {}, 做菜() {},}
接著咱繼續(xù)看,在做飯的過程中,會(huì)有很多異常情況,以下是新手的編程處理:
做飯 = { 開始() { 煮飯(); 買菜(); 切菜(); 做菜(); }, 煮飯() {}, 買菜() {}, 切菜() {}, 做菜() { if (家里沒有油了) { 買油(); 炒菜(); } else { 炒菜(); } }}
做飯->開始();
程序?qū)嶓w是做飯,包含四個(gè)步驟:開始→煮飯→買菜→切菜→做菜,對(duì)吧。
做飯,可以稱之為對(duì)象,這五個(gè)步驟稱之為方法,然后一個(gè)個(gè)地去調(diào)用它。
首先調(diào)用【開始】方法,在【開始】方法里,又依次調(diào)用【煮飯】、【買菜】、【切菜】和【做菜】。
然后在【做菜】方法里,有一個(gè)判斷:“如果家里沒有油了”,新手處理方式是:先去買油,然后炒菜(這就需要再出門一趟,又浪費(fèi)了時(shí)間)。如果在做菜的過程中沒有調(diào)料呢?卒……
做飯 = { 開始() { 煮飯(); 檢查結(jié)果 = 檢查(); 買菜(檢查結(jié)果); 切菜(); 做菜(); }, 檢查() { if (家里沒有油了) { 買菜的時(shí)候要買油 } if (家里沒有辣椒了) { 買菜的時(shí)候要買辣椒 } }, 煮飯() {}, 買菜() {}, 切菜() {}, 做菜() {},}
做飯->開始();
你針對(duì)性的比較下,高手步驟中多了一個(gè)方法叫【檢查】,也就是在買菜之前先檢查下我要做菜缺少啥東西并記錄,在買菜的時(shí)候一并買上。
你看,這就是把問題想清楚,不留任何細(xì)節(jié)。解決如何消耗最小的資源解決最大的問題。這也就是技術(shù)為什么要深入的了解業(yè)務(wù),是為了更便捷的做技術(shù)策略。
簡(jiǎn)單吧~《編程從入門到放棄》,理解上面的,就表示你入門了。接下來就是放棄時(shí)刻了~
如果要做小炒肉、魚香肉絲、剁椒魚頭等等好幾個(gè)菜,咋辦?
做飯 = { 煮飯() {}, 買菜() {}, 洗菜() {}, 切菜() {}, 做菜() {},}
做飯->煮飯();做飯->買菜();
做飯->洗菜(小炒肉);做飯->切菜(小炒肉);做飯->炒菜(小炒肉);
做飯->洗菜(魚香肉絲);做飯->切菜(魚香肉絲);做飯->炒菜(魚香肉絲);
做飯->洗菜(剁椒魚頭);做飯->切菜(剁椒魚頭);做飯->炒菜(剁椒魚頭);
程序本身沒有問題,但是如果做要做10個(gè)菜,那程序就十分冗長(zhǎng),這對(duì)后續(xù)性能會(huì)有大影響。而高手會(huì)用“抽象思維”來解決問題。(把相似的步驟抽象成相同的行為,然后重復(fù)就好)
做飯 = { 開始(菜單) { 煮飯(); 買菜(菜單); 菜單->逐一(做菜); }, 買菜() {}, 煮飯() {}, 做菜(菜品) { 洗菜(菜品); 切菜(菜品); 炒菜(菜品); }}
菜單 = 小炒肉、魚香肉絲、剁椒魚頭;做飯->開始(菜單);
你看,會(huì)把做飯分為三個(gè)步驟:煮飯、買菜和做菜,首先想好了一個(gè)菜單,然后抽象一個(gè)做菜的方法,這個(gè)方法里面包括洗菜、切菜和炒菜三個(gè)步驟,每一道菜都執(zhí)行相同的步驟即可。
如果有10道菜,直接擴(kuò)展菜單就行了,因?yàn)樵诔绦蛑性O(shè)置了“逐一”的邏輯。
以上是前端的業(yè)務(wù)邏輯,可以通過業(yè)務(wù)流程+業(yè)務(wù)邏輯梳理出來,和后端的存儲(chǔ)呢?
1.整理“角色→場(chǎng)景(必做事項(xiàng))→業(yè)務(wù)流程(輸入-操作行動(dòng)-輸出)”來出發(fā),用Excel完整的整理出來;
-
-
具體操作哪些內(nèi)容(過程中是否有數(shù)據(jù)流向)?
-
3.再去梳理角色的功能權(quán)限和數(shù)據(jù)權(quán)限。
前端產(chǎn)生的業(yè)務(wù)數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù),后端調(diào)用通過主鍵逐一關(guān)聯(lián)數(shù)據(jù),形成有效的數(shù)據(jù)表。至此,操作層和數(shù)據(jù)層才形成有效閉環(huán)。
而其中,業(yè)務(wù)理解是非常非常核心的。所以技術(shù)大大其實(shí)比你還想知道業(yè)務(wù)。因?yàn)榕履愀鞣N改業(yè)務(wù)需求,你一調(diào)整,他就白做了。
就好比一桌飯菜做好了,卻發(fā)現(xiàn)家人已經(jīng)在外面吃了……咋辦?
希望能帶給正在做產(chǎn)品的你一些思考。覺得還不錯(cuò),幫忙在看和分享吧。感謝。
這兩個(gè)專輯幫助很多人提升了自己:
產(chǎn)品經(jīng)理工作流(點(diǎn)擊可以訪問)
產(chǎn)品方法論和思考(點(diǎn)擊可以訪問)