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