【软技能】代码先放一放,学习一下工程的概念
前言
本篇文章適合于以下同學(xué)閱讀
- 接觸編程時(shí)間不長(zhǎng)的初學(xué)者;
- 經(jīng)常需要編程,但是對(duì)工程的概念相對(duì)模糊的同學(xué)。
初步認(rèn)識(shí)工程
工程的概念大家或多或少都有接觸過(guò)。比如在開(kāi)發(fā)環(huán)境(如Qt Creator)里編寫(xiě)一個(gè)軟件,我們首先需要新建一個(gè)“Project”,中文翻譯通常叫做項(xiàng)目或者工程。一個(gè)項(xiàng)目中包含了以下內(nèi)容:
- 項(xiàng)目配置:用于告訴開(kāi)發(fā)環(huán)境如何為你工作;
- 項(xiàng)目代碼:項(xiàng)目代碼是開(kāi)發(fā)者編寫(xiě)的,用于實(shí)現(xiàn)你的編程目標(biāo),比如實(shí)現(xiàn)一個(gè)播放器、實(shí)現(xiàn)一個(gè)游戲等;
- 項(xiàng)目其他資源:如圖片、文本等數(shù)據(jù)資源。
可以看到,**項(xiàng)目是實(shí)現(xiàn)一個(gè)目標(biāo),所需要的信息、資源、工具、步驟的集合。**換言之,把實(shí)現(xiàn)一個(gè)目標(biāo)所需要的資源,有機(jī)的結(jié)合起來(lái),就變成了項(xiàng)目。
在腦海中樹(shù)立項(xiàng)目的概念是很有用的。項(xiàng)目能夠讓你更加有條理地、高效地管理你正在做的事情,讓你能夠更加專(zhuān)注于和目標(biāo)相關(guān)的事物,而不是把精力放在無(wú)關(guān)緊要的東西上。
但是,上述的項(xiàng)目/工程僅僅是軟件開(kāi)發(fā)過(guò)程中的一個(gè)狹義的概念。在實(shí)際的軟件開(kāi)發(fā)行業(yè)中,也就是在公司、團(tuán)隊(duì)在做產(chǎn)品開(kāi)發(fā)的實(shí)際生產(chǎn)實(shí)踐中,需要將上述的“Project”(即項(xiàng)目/工程)的概念作推廣。
概念推廣
每個(gè)人都是初學(xué)者過(guò)來(lái)的,記得在筆者本人初學(xué)編程的幾年內(nèi),總以為軟件開(kāi)發(fā)就只是寫(xiě)代碼而已。隨著參與了一個(gè)又一個(gè)實(shí)際的軟件項(xiàng)目,筆者才明白,軟件開(kāi)發(fā)絕不僅僅是悶頭寫(xiě)代碼而已。
也許你覺(jué)得,編程做軟件不就是寫(xiě)代碼嗎?我一直都是這樣做的啊,代碼也能寫(xiě)出來(lái),也能運(yùn)行很好。之所以產(chǎn)生這樣的認(rèn)知,是因?yàn)槟銢](méi)有接觸到相關(guān)的實(shí)際問(wèn)題。
例如,一個(gè)總價(jià)50萬(wàn)的軟件,總代碼行數(shù)5萬(wàn)行,如果交給你做,項(xiàng)目交付時(shí)間為三個(gè)月,軟件的需求由客戶(hù)來(lái)提,需求有一定的變動(dòng),你有多少把握去接?判斷有多少把握,當(dāng)然不是直接把代碼寫(xiě)出來(lái)再評(píng)估,評(píng)估和分析的工作要在編碼之前做好。例如,至少需要評(píng)估以下方面:
- 需求變化范圍:需求絕大多數(shù)情況下是會(huì)變的,就像是每個(gè)App每年都在更新。要和客戶(hù)確認(rèn)需求的變化范圍,保證需求可控,考慮不可控因素。在后續(xù)的開(kāi)發(fā)編碼中,要對(duì)不確定因素做好軟件架構(gòu)上的冗余設(shè)計(jì)。
- 技術(shù)難度:項(xiàng)目涉及到哪些技術(shù),有哪些解決不了的問(wèn)題,哪些難點(diǎn)大概需要花多長(zhǎng)時(shí)間;
- 技術(shù)選型:同一個(gè)業(yè)務(wù)可能有多個(gè)技術(shù)方案,選一個(gè)綜合考慮最優(yōu)的方案;
- 軟件的結(jié)構(gòu)設(shè)計(jì):代碼在5萬(wàn)行的項(xiàng)目,對(duì)于一個(gè)人來(lái)說(shuō),是一個(gè)不小的項(xiàng)目了。可能你平時(shí)寫(xiě)萬(wàn)行以?xún)?nèi)的小工具、小demo不是很費(fèi)力,完全用不上精心考量設(shè)計(jì)模式和架構(gòu)。但是,隨著代碼行數(shù)的增多,代碼的維護(hù)越來(lái)越難。如果軟件沒(méi)有一個(gè)章法、結(jié)構(gòu)可尋,你的代碼將逐漸失控。最典型的例子是,在你寫(xiě)一個(gè)新的功能時(shí),需要在已有的代碼中添加、修改或刪除代碼。但是因?yàn)榇a量多,代碼耦合性強(qiáng),導(dǎo)致你每改一個(gè)地方,都有可能破壞已有功能,引入bug,導(dǎo)致軟件bug橫行,最終項(xiàng)目失敗!
- 軟件測(cè)試如何做,以及需要多少工作量
- 軟件部署、維護(hù)如何做,以及需要多少工作量
如上所述,軟件從開(kāi)始到結(jié)束,除了編寫(xiě)代碼,還有很多步驟需要完成,而且每個(gè)步驟都需要產(chǎn)出相關(guān)的文檔、資料,作為后續(xù)編碼人員進(jìn)行編碼的依據(jù)。現(xiàn)實(shí)中,軟件公司的軟件生產(chǎn)流程和上述過(guò)程類(lèi)似。之所以說(shuō)類(lèi)似,是因?yàn)閷?shí)際上并不是所有公司、團(tuán)隊(duì)都會(huì)嚴(yán)格遵循以上步驟。其中重要的原因是成本問(wèn)題,步驟增多,成本自然會(huì)上升。對(duì)于規(guī)模較小的公司、團(tuán)隊(duì),可能流程更加精簡(jiǎn);規(guī)模較大的公司,因?yàn)槌鲥e(cuò)成本高,會(huì)更加注重軟件工程的實(shí)施,提高軟件質(zhì)量。
我們一定要摒棄“做軟件只是寫(xiě)代碼”的陳舊觀念,寫(xiě)代碼是軟件過(guò)程中的重要部分,但并非全部。讀者可能會(huì)覺(jué)得上述內(nèi)容可能用不到,這是因?yàn)闀簳r(shí)你還沒(méi)有遇到實(shí)際的問(wèn)題。在日后的工作中,你將會(huì)逐漸地遇到這些問(wèn)題。在遇到這些問(wèn)題之前,最好先建立起相關(guān)概念,做好心理準(zhǔn)備,并隨著時(shí)間的推移,慢慢消化。
軟件行業(yè)發(fā)展已有將近一個(gè)世紀(jì),軟件開(kāi)發(fā)過(guò)程中,什么情況下會(huì)遇到什么問(wèn)題,以及這些問(wèn)題如何解決,相關(guān)的研究已經(jīng)比較成熟。這一套成熟的理論,叫做“軟件工程”。這個(gè)“工程”不再是“Project”,而是“Engineering”。
如果你想要進(jìn)一步了解的話(huà),可以查閱“軟件工程”相關(guān)的書(shū)籍。這里推薦一本:《軟件設(shè)計(jì)師教程(第五版)》。此書(shū)電子版百度云地址:鏈接: https://pan.baidu.com/s/1s9rQjIIAxFmccCf7fZUvOA,提取碼: htcq。也可以關(guān)注公眾號(hào)“Qt未來(lái)工程師”,后臺(tái)回復(fù)1,獲取下載地址。此書(shū)中有軟件工程的相關(guān)章節(jié)。大家下載下來(lái)以后,可以在閑暇之余閱讀。
Project和Enginnering的異同點(diǎn)
相同點(diǎn):
- 都是為了實(shí)現(xiàn)某個(gè)目標(biāo),而創(chuàng)建的信息、資源、步驟的集合。
不同點(diǎn):
- Project更傾向于代碼管理,而Engineering傾向于整個(gè)軟件從確定軟件需要實(shí)現(xiàn)什么功能開(kāi)始,到軟件投入使用結(jié)束,整個(gè)過(guò)程中所有需要做的事情。
了解工程的概念對(duì)個(gè)人的作用
本文讀者中可能有一些尚未參與到工作中的同學(xué),對(duì)軟件開(kāi)發(fā)的整體過(guò)程可能沒(méi)有完整的接觸。了解軟件工程,可以幫助你了解最真實(shí)的軟件開(kāi)發(fā)流程,為將來(lái)的工作作準(zhǔn)備。
同時(shí),軟件工程中包含的一系列設(shè)計(jì)步驟和方法,是提高軟件質(zhì)量的重要保證。對(duì)個(gè)人來(lái)說(shuō),學(xué)會(huì)參與到軟件工程為主導(dǎo)的開(kāi)發(fā)過(guò)程中,是提高自身軟實(shí)力的重要機(jī)會(huì),能讓自己的編程生涯更加順利,減少不必要的麻煩,避免因質(zhì)量、進(jìn)度問(wèn)題產(chǎn)生嚴(yán)重后果。
結(jié)語(yǔ)
筆者根據(jù)自己多年的編程和工作經(jīng)驗(yàn),簡(jiǎn)述了工程相關(guān)的概念,并沒(méi)有作深入介紹。希望能夠引起讀者對(duì)工程的注意,幫助讀者避開(kāi)自己曾經(jīng)走過(guò)的彎路,擴(kuò)充知識(shí)面,提高自身實(shí)力。
總結(jié)
以上是生活随笔為你收集整理的【软技能】代码先放一放,学习一下工程的概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 京东白条怎么绑定信用卡
- 下一篇: Qt创建浮动子窗口