從零開始系列,用C#做軟件產(chǎn)品:私人日記(二)開發(fā)方法(“從零開始”)
昨天寫的開篇,今天早晨起來一看,沒想到獲得了這么多網(wǎng)友的支持:
說實(shí)話,沒想到,有點(diǎn)小興奮。不過興奮之后,又有點(diǎn)惶恐,突然開始擔(dān)心自己能力有限,寫不出讓大家感興趣的內(nèi)容,導(dǎo)致江湖中又多了一個(gè)騙子。不過箭已在弦上,臨陣退縮不是我的風(fēng)格,那就盡我所能吧,盡量讓大家有所收獲。
廢話不多說,我們正式開啟軟件產(chǎn)品設(shè)計(jì)的大門。
首先大概介紹下軟件開發(fā)方法。
有人可能會(huì)問,什么是軟件開發(fā)方法?你一個(gè)碼農(nóng)直接上代碼不就完了嗎,搞那么復(fù)雜?
如果是只解決某一個(gè)問題,那肯定直接上代碼最有效。但我們是一邊做產(chǎn)品設(shè)計(jì),一邊寫教程,并不是簡單地教大家只做一個(gè)最底層的Coder,而是要讓大家了解更多的知識(shí),提高視野,這樣才能設(shè)計(jì)出更好的產(chǎn)品。
比如同樣是做私人日記這個(gè)項(xiàng)目,不同人的開發(fā)方法可能會(huì)有很大不同:
- A會(huì)事先把每個(gè)界面、每個(gè)類、每個(gè)數(shù)據(jù)庫表,甚至每步操作應(yīng)該有哪些用戶提示都全部都設(shè)計(jì)好,剩下的任務(wù)就是編碼就好了;
- B則先做一個(gè)初步的界面,然后再在此基礎(chǔ)上不斷豐富元素,添加相應(yīng)的功能,隨著時(shí)間的推移,功能逐步完善;
看到這里,大家可以暫停下。設(shè)想一下:你是A還是B?
其實(shí)無論哪個(gè),都沒有好壞對錯(cuò)之分,只有是否適合:
A的方法更高效,更適合做需求非常明確的項(xiàng)目。如果不提前設(shè)計(jì)好,開發(fā)時(shí)就會(huì)造成理解偏差,如果做到最后發(fā)現(xiàn)跟之前需求不相符,就可能要重構(gòu),進(jìn)而影響開發(fā)進(jìn)度。所以如果你做的是客戶委托的定制項(xiàng)目,那么必須提前做好詳細(xì)設(shè)計(jì),然后再跟客戶確認(rèn),以免最終客戶不認(rèn)可而無法交付。
B的方法更精準(zhǔn),更適合做自有產(chǎn)品研發(fā)。產(chǎn)品設(shè)計(jì)與開發(fā)的過程其實(shí)更多的是創(chuàng)作,很多事情是沒有定式的。哪怕簡單到一個(gè)按鈕的名稱,也可以有很多種叫法:保存、應(yīng)用、確認(rèn)、執(zhí)行、OK,也基本都能達(dá)意。另外創(chuàng)作是需要靈感的,可能琢磨了一天的功能都不滿意,突然晚上臨睡前一個(gè)靈感閃現(xiàn)就有了更好的方案。
我在本教程中采用B的方法,因?yàn)槲也幌虢o自己那么多的條條框框,我喜歡有很多的可能。比如很有可能隨著教程的更新,就會(huì)有用戶提出各種好玩的功能,然后我也認(rèn)同就加進(jìn)去了。就好像有些網(wǎng)絡(luò)寫手寫小說一樣,不到最后誰都無法知道結(jié)局,這多有意思!
看到這里,有人可能會(huì)問,這樣會(huì)不會(huì)太隨便了?20幾年的項(xiàng)目經(jīng)驗(yàn)啊,就這?確實(shí),如果按我上面的說辭,逼格是低點(diǎn)。但是,如果用我打工的那些年曾接觸過的一些理論來說,境界或許會(huì)高一點(diǎn)點(diǎn),雖然道理都一樣。對我有深刻影響的理論有三個(gè)(因?yàn)橹荒苡涀∵@3個(gè)了)。理論的詳細(xì)內(nèi)容大家可以自行百度了解,我只講我認(rèn)為有用的:
一是微軟MSF(微軟解決方案框架)中的迭代開發(fā)和質(zhì)量投資
迭代開發(fā)就是先制訂一個(gè)小目標(biāo),然后實(shí)現(xiàn)它,然后繼續(xù)制訂下一個(gè)小目標(biāo),再實(shí)現(xiàn)它…如此往復(fù),一段時(shí)間后,你會(huì)發(fā)現(xiàn),已經(jīng)完成了若干個(gè)大目標(biāo)。
質(zhì)量投資則是把軟件質(zhì)量看成一種投資,既然是投資就要考慮投入產(chǎn)出比,而不是強(qiáng)調(diào)質(zhì)量第一。就好比學(xué)習(xí),80分提升到90分相對容易,而99分提升到100分可能就要多付出幾倍的努力,既然如此,我們不如把精力放在其他不足99分的學(xué)科上,相對更劃算。
二是金蝶實(shí)施方法論中的整體規(guī)劃、分步實(shí)施
整體規(guī)劃是確定方向和架構(gòu),樹立大局觀;分步實(shí)施的思想則跟迭代開發(fā)基本類似。
三是WBS(工作分解結(jié)構(gòu))的概念
就是把一個(gè)大目標(biāo)分解成若干小目標(biāo),等小目標(biāo)都完成了,大目標(biāo)也就完成了。迭代開發(fā)是自下而上,WBS則是自上而下。
綜合以上,結(jié)合我們的產(chǎn)品設(shè)計(jì)思路,就基本確定了我們的開發(fā)方法:
1、整體規(guī)劃,制定各階段目標(biāo);
2、功能遞進(jìn)式增加,隨時(shí)可以加入新的;
3、每個(gè)功能作為一個(gè)迭代版本,把每個(gè)功能作為一個(gè)目標(biāo)分解成若干小目標(biāo);
4、注意質(zhì)量投資,條條大路通羅馬,能解決問題就好,別在一棵樹上吊死;
開發(fā)方法就是理論,有了理論指導(dǎo),就不會(huì)被后面可能出現(xiàn)的各種問題所困擾,它會(huì)指引你做出明智的選擇。
在上一篇文章中,我們制定了三個(gè)階段目標(biāo)。接下來,我們就開始進(jìn)入實(shí)操。
為了保證教程與GitHub(以后簡稱Git)代碼的一致性,需要大家預(yù)先安裝好Visual Studio 2019(以后簡稱VS),以方便今后的學(xué)習(xí)。
關(guān)于VS和Git,需要補(bǔ)充一下:
VS是微軟推出的代碼開發(fā)環(huán)境,可以方便的編寫和開發(fā)C#程序。有人說VS是收費(fèi)的,說的沒錯(cuò),但是社區(qū)版對個(gè)人用戶是免費(fèi)的,企業(yè)用戶收費(fèi)。但對企業(yè)用戶的認(rèn)定標(biāo)準(zhǔn)是年收入100萬美元或電腦臺(tái)數(shù)在250臺(tái)以上,所以其實(shí)對絕大部分人來說,連企業(yè)用戶的資格都?jí)虿簧稀?/p>
Git則是微軟提供的源代碼管理倉庫,可以方便的共享代碼。
如果大家在VS安裝或Git網(wǎng)站使用方面有疑問,可以在評論區(qū)留言,我會(huì)再發(fā)文專門介紹。
好了,接下來來完成今天的兩個(gè)小目標(biāo):一是創(chuàng)建一個(gè).net項(xiàng)目,二是讓它能夠運(yùn)行起來。
一、創(chuàng)建.net項(xiàng)目
打開VS,菜單依次:文件->新建->項(xiàng)目
彈出的對話框中,上部的3個(gè)下拉框,我們依次選擇C#->所有平臺(tái)->桌面,下方會(huì)切換支持的項(xiàng)目類型??梢钥吹街С趾芏啵覀冞@個(gè)教程主要還是面向初學(xué)者,就從windows程序入手,其他的先不去關(guān)心。
在下方選擇 windows 窗體應(yīng)用,注意不是windows 窗體應(yīng)用(.net framework)的那個(gè)(.net framework在微軟新的開發(fā)架構(gòu)中已經(jīng)被拋棄了,換成了大一統(tǒng)的.net),然后點(diǎn)右下角的下一步。
接下來:
項(xiàng)目名稱就是我們這個(gè)階段的目標(biāo),因?yàn)槟繕?biāo)是Windows平臺(tái)下運(yùn)行,我起名為Diary.Win,如果這個(gè)項(xiàng)目是新建項(xiàng)目,我們還需要為這個(gè)項(xiàng)目建立一個(gè)解決方案的名稱,因?yàn)橐院筮€會(huì)加入第二、三階段的項(xiàng)目,以及其他類庫的項(xiàng)目,所以解決方案我起名為Diary。位置大家根據(jù)情況可以任意指定。
設(shè)置好以后點(diǎn)下一步。
接下來是創(chuàng)建項(xiàng)目的最后一步,選擇目標(biāo)框架。
- 如果是考慮到產(chǎn)品是最大適配,應(yīng)該盡可能地選最低的,有些系統(tǒng)默認(rèn)不支持高版本的框架;
- 如果需要用到最新的框架或最新的語言特性,則應(yīng)該選最高的。
這里我們就選.net 5,方便后續(xù)開發(fā)過渡。
全部沒問題以后點(diǎn)創(chuàng)建。
稍等片刻,一個(gè).net項(xiàng)目就創(chuàng)建好了。
二、讓它能夠運(yùn)行起來
初始界面大致分成4個(gè)區(qū)域
- 窗體設(shè)計(jì)界面用來設(shè)計(jì)用戶界面;
- 文件管理器用來管理代碼文件;
- 屬性窗口則可對窗口中的界面元素進(jìn)行精確的設(shè)置;
- 輸出信息則為程序編譯或調(diào)試提供必要的信息,發(fā)現(xiàn)問題時(shí)可以快速定位;
現(xiàn)在我們想要程序跑起來,只需在工具條的運(yùn)行圖標(biāo)點(diǎn)一下,VS就會(huì)幫我們自動(dòng)編譯,并且運(yùn)行起來。
當(dāng)然,這只是一個(gè)空白的界面,除了左上角的一個(gè)Form1字樣,其他什么內(nèi)容都沒有。
但不管怎樣,我們已經(jīng)邁出了第一步。
說實(shí)話上面兩個(gè)小目標(biāo)我自己都覺得辣眼睛,太水了。但是考慮教程既然是從零開始,看評論也真有一些之前沒用過VS的,索性就從最基本的寫起,不差這一天的更新。我也在這里保證一下,重復(fù)的內(nèi)容不會(huì)再出現(xiàn)第二次。
如果感興趣,別忘了關(guān)注我,以便及時(shí)獲取更新。
————————————————————————————–
對網(wǎng)友私信或評論做統(tǒng)一回復(fù)
以我對用戶的理解:如果有一個(gè)用戶向你提出問題,那么可能會(huì)有十個(gè)用戶有同樣的問題,但是他們沒有提出,所以針對用戶的提問統(tǒng)一回復(fù)下,以加深彼此的了解。
>>做一個(gè)私人日記是一個(gè)好的想法。請問一個(gè)45歲的人還能重頭學(xué)開發(fā)嗎?
我覺得只要有興趣就沒問題。
>>vs單機(jī)能裝嗎?必須要聯(lián)網(wǎng)裝嗎?我感覺好笨重,有沒有別的可以替代的能寫c#的?
我還是建議聯(lián)網(wǎng)裝,只裝C#5個(gè)G足夠了,VS與C#是絕配。不建議在這上面浪費(fèi)時(shí)間。
>>期待教程,第三階段用什么技術(shù)呢?
我估計(jì)要排到明年了,那時(shí)MAUI .net6應(yīng)該成熟些了吧:)
>>感謝,會(huì)一直追隨,我這個(gè)C#愛好者最近發(fā)現(xiàn)裝不上前幾年下載的vs 2015 社區(qū)版,總說安裝包損壞,請問怎么解決,現(xiàn)在自學(xué)應(yīng)該下載哪個(gè)版本?
建議VS2019社區(qū)版。
做c#創(chuàng)業(yè)還行,用這門語言打工估計(jì)工資不高吧?
C#國內(nèi)生態(tài)目前確實(shí)要差些,不過工資不好說,物以稀為貴,現(xiàn)在的Java也快爛大街了吧?C#全棧開發(fā)還是需要很多時(shí)間才能修煉成的,游戲、醫(yī)療、金融行業(yè)用C#相對多些。
想學(xué)習(xí),怎么獲取教程?
教程剛開始做,每周更新1-3篇。代碼獲取方式文章下方有說明。
都是剛做,我會(huì)像寫網(wǎng)絡(luò)小說一樣寫教程:)
我最早只學(xué)過C語言和fortane語言,學(xué)這個(gè)C sharp行不行得通?
沒問題。不過對初學(xué)者我都是建議先看下windows核心編程、數(shù)據(jù)結(jié)構(gòu)、設(shè)計(jì)模式,理解了這3本書的內(nèi)容,所有語言基本上都只是語法上的區(qū)別。
我在為自己的小孩開發(fā)游戲,有興趣組個(gè)隊(duì)?
我也有過這個(gè)想法,但是感覺自己寫不動(dòng)了:(
收徒不?
1對1的模式不符合互聯(lián)網(wǎng)思維,效率太低,看教程就可以:)
小團(tuán)隊(duì),c#是不是比java效率高?
開發(fā)效率要看團(tuán)隊(duì)積累,java做項(xiàng)目有很多現(xiàn)成的代碼可以用,c#相對少些 運(yùn)行效率肯定c#更高。
啥叫獨(dú)立開發(fā)者,能干啥?
這個(gè)目前還是一個(gè)比較模糊的概念。我覺得可以類比獨(dú)立音樂人:沒有任何簽約的唱片公司,自己創(chuàng)作,自己錄歌,自己宣傳,代表人物就是趙雷。對軟件開發(fā)來說,自己決定軟件產(chǎn)品的一切,包括但不限于功能、技術(shù)、盈利模式、市場推廣等等。
能干啥?我覺得是實(shí)現(xiàn)理想吧:)或者換種低調(diào)的說法,解決碼農(nóng)的35歲危機(jī)。
私人日記是做什么的,像one note一樣的軟件嗎?
類似吧。我覺得可能有誤會(huì),我是借用做私人日記這個(gè)項(xiàng)目來做C#的教程,教學(xué)是主要目的,產(chǎn)品功能要服務(wù)于教學(xué)內(nèi)容,而不是要跟one note對標(biāo)去搶占市場。
————————————————————————————–
本教程已作為開源項(xiàng)目加入到Git,代碼內(nèi)容會(huì)隨教程實(shí)時(shí)更新,大家有興趣的話可以關(guān)注我,以獲得最及時(shí)的更新。私信:私人日記 可以來獲取Git的鏈接。
大家閱讀過程中有哪些看不懂或未盡興的地方,可以在評論區(qū)留言,我會(huì)先記下來在后續(xù)的教程中找機(jī)會(huì)再說。