从零开始系列,用C#做软件产品:私人日记(二)开发方法(“从零开始”)
昨天写的开篇,今天早晨起来一看,没想到获得了这么多网友的支持:
说实话,没想到,有点小兴奋。不过兴奋之后,又有点惶恐,突然开始担心自己能力有限,写不出让大家感兴趣的内容,导致江湖中又多了一个骗子。不过箭已在弦上,临阵退缩不是我的风格,那就尽我所能吧,尽量让大家有所收获。
废话不多说,我们正式开启软件产品设计的大门。
首先大概介绍下软件开发方法。
有人可能会问,什么是软件开发方法?你一个码农直接上代码不就完了吗,搞那么复杂?
如果是只解决某一个问题,那肯定直接上代码最有效。但我们是一边做产品设计,一边写教程,并不是简单地教大家只做一个最底层的Coder,而是要让大家了解更多的知识,提高视野,这样才能设计出更好的产品。
比如同样是做私人日记这个项目,不同人的开发方法可能会有很大不同:
- A会事先把每个界面、每个类、每个数据库表,甚至每步操作应该有哪些用户提示都全部都设计好,剩下的任务就是编码就好了;
- B则先做一个初步的界面,然后再在此基础上不断丰富元素,添加相应的功能,随着时间的推移,功能逐步完善;
看到这里,大家可以暂停下。设想一下:你是A还是B?
其实无论哪个,都没有好坏对错之分,只有是否适合:
A的方法更高效,更适合做需求非常明确的项目。如果不提前设计好,开发时就会造成理解偏差,如果做到最后发现跟之前需求不相符,就可能要重构,进而影响开发进度。所以如果你做的是客户委托的定制项目,那么必须提前做好详细设计,然后再跟客户确认,以免最终客户不认可而无法交付。
B的方法更精准,更适合做自有产品研发。产品设计与开发的过程其实更多的是创作,很多事情是没有定式的。哪怕简单到一个按钮的名称,也可以有很多种叫法:保存、应用、确认、执行、OK,也基本都能达意。另外创作是需要灵感的,可能琢磨了一天的功能都不满意,突然晚上临睡前一个灵感闪现就有了更好的方案。
我在本教程中采用B的方法,因为我不想给自己那么多的条条框框,我喜欢有很多的可能。比如很有可能随着教程的更新,就会有用户提出各种好玩的功能,然后我也认同就加进去了。就好像有些网络写手写小说一样,不到最后谁都无法知道结局,这多有意思!
看到这里,有人可能会问,这样会不会太随便了?20几年的项目经验啊,就这?确实,如果按我上面的说辞,逼格是低点。但是,如果用我打工的那些年曾接触过的一些理论来说,境界或许会高一点点,虽然道理都一样。对我有深刻影响的理论有三个(因为只能记住这3个了)。理论的详细内容大家可以自行百度了解,我只讲我认为有用的:
一是微软MSF(微软解决方案框架)中的迭代开发和质量投资
迭代开发就是先制订一个小目标,然后实现它,然后继续制订下一个小目标,再实现它…如此往复,一段时间后,你会发现,已经完成了若干个大目标。
质量投资则是把软件质量看成一种投资,既然是投资就要考虑投入产出比,而不是强调质量第一。就好比学习,80分提升到90分相对容易,而99分提升到100分可能就要多付出几倍的努力,既然如此,我们不如把精力放在其他不足99分的学科上,相对更划算。
二是金蝶实施方法论中的整体规划、分步实施
整体规划是确定方向和架构,树立大局观;分步实施的思想则跟迭代开发基本类似。
三是WBS(工作分解结构)的概念
就是把一个大目标分解成若干小目标,等小目标都完成了,大目标也就完成了。迭代开发是自下而上,WBS则是自上而下。
综合以上,结合我们的产品设计思路,就基本确定了我们的开发方法:
1、整体规划,制定各阶段目标;
2、功能递进式增加,随时可以加入新的;
3、每个功能作为一个迭代版本,把每个功能作为一个目标分解成若干小目标;
4、注意质量投资,条条大路通罗马,能解决问题就好,别在一棵树上吊死;
开发方法就是理论,有了理论指导,就不会被后面可能出现的各种问题所困扰,它会指引你做出明智的选择。
在上一篇文章中,我们制定了三个阶段目标。接下来,我们就开始进入实操。
为了保证教程与GitHub(以后简称Git)代码的一致性,需要大家预先安装好Visual Studio 2019(以后简称VS),以方便今后的学习。
关于VS和Git,需要补充一下:
VS是微软推出的代码开发环境,可以方便的编写和开发C#程序。有人说VS是收费的,说的没错,但是社区版对个人用户是免费的,企业用户收费。但对企业用户的认定标准是年收入100万美元或电脑台数在250台以上,所以其实对绝大部分人来说,连企业用户的资格都够不上。
Git则是微软提供的源代码管理仓库,可以方便的共享代码。
如果大家在VS安装或Git网站使用方面有疑问,可以在评论区留言,我会再发文专门介绍。
好了,接下来来完成今天的两个小目标:一是创建一个.net项目,二是让它能够运行起来。
一、创建.net项目
打开VS,菜单依次:文件->新建->项目
弹出的对话框中,上部的3个下拉框,我们依次选择C#->所有平台->桌面,下方会切换支持的项目类型。可以看到支持很多,我们这个教程主要还是面向初学者,就从windows程序入手,其他的先不去关心。
在下方选择 windows 窗体应用,注意不是windows 窗体应用(.net framework)的那个(.net framework在微软新的开发架构中已经被抛弃了,换成了大一统的.net),然后点右下角的下一步。
接下来:
项目名称就是我们这个阶段的目标,因为目标是Windows平台下运行,我起名为Diary.Win,如果这个项目是新建项目,我们还需要为这个项目建立一个解决方案的名称,因为以后还会加入第二、三阶段的项目,以及其他类库的项目,所以解决方案我起名为Diary。位置大家根据情况可以任意指定。
设置好以后点下一步。
接下来是创建项目的最后一步,选择目标框架。
- 如果是考虑到产品是最大适配,应该尽可能地选最低的,有些系统默认不支持高版本的框架;
- 如果需要用到最新的框架或最新的语言特性,则应该选最高的。
这里我们就选.net 5,方便后续开发过渡。
全部没问题以后点创建。
稍等片刻,一个.net项目就创建好了。
二、让它能够运行起来
初始界面大致分成4个区域
- 窗体设计界面用来设计用户界面;
- 文件管理器用来管理代码文件;
- 属性窗口则可对窗口中的界面元素进行精确的设置;
- 输出信息则为程序编译或调试提供必要的信息,发现问题时可以快速定位;
现在我们想要程序跑起来,只需在工具条的运行图标点一下,VS就会帮我们自动编译,并且运行起来。
当然,这只是一个空白的界面,除了左上角的一个Form1字样,其他什么内容都没有。
但不管怎样,我们已经迈出了第一步。
说实话上面两个小目标我自己都觉得辣眼睛,太水了。但是考虑教程既然是从零开始,看评论也真有一些之前没用过VS的,索性就从最基本的写起,不差这一天的更新。我也在这里保证一下,重复的内容不会再出现第二次。
如果感兴趣,别忘了关注我,以便及时获取更新。
————————————————————————————–
对网友私信或评论做统一回复
以我对用户的理解:如果有一个用户向你提出问题,那么可能会有十个用户有同样的问题,但是他们没有提出,所以针对用户的提问统一回复下,以加深彼此的了解。
>>做一个私人日记是一个好的想法。请问一个45岁的人还能重头学开发吗?
我觉得只要有兴趣就没问题。
>>vs单机能装吗?必须要联网装吗?我感觉好笨重,有没有别的可以替代的能写c#的?
我还是建议联网装,只装C#5个G足够了,VS与C#是绝配。不建议在这上面浪费时间。
>>期待教程,第三阶段用什么技术呢?
我估计要排到明年了,那时MAUI .net6应该成熟些了吧:)
>>感谢,会一直追随,我这个C#爱好者最近发现装不上前几年下载的vs 2015 社区版,总说安装包损坏,请问怎么解决,现在自学应该下载哪个版本?
建议VS2019社区版。
做c#创业还行,用这门语言打工估计工资不高吧?
C#国内生态目前确实要差些,不过工资不好说,物以稀为贵,现在的Java也快烂大街了吧?C#全栈开发还是需要很多时间才能修炼成的,游戏、医疗、金融行业用C#相对多些。
想学习,怎么获取教程?
教程刚开始做,每周更新1-3篇。代码获取方式文章下方有说明。
都是刚做,我会像写网络小说一样写教程:)
我最早只学过C语言和fortane语言,学这个C sharp行不行得通?
没问题。不过对初学者我都是建议先看下windows核心编程、数据结构、设计模式,理解了这3本书的内容,所有语言基本上都只是语法上的区别。
我在为自己的小孩开发游戏,有兴趣组个队?
我也有过这个想法,但是感觉自己写不动了:(
收徒不?
1对1的模式不符合互联网思维,效率太低,看教程就可以:)
小团队,c#是不是比java效率高?
开发效率要看团队积累,java做项目有很多现成的代码可以用,c#相对少些 运行效率肯定c#更高。
啥叫独立开发者,能干啥?
这个目前还是一个比较模糊的概念。我觉得可以类比独立音乐人:没有任何签约的唱片公司,自己创作,自己录歌,自己宣传,代表人物就是赵雷。对软件开发来说,自己决定软件产品的一切,包括但不限于功能、技术、盈利模式、市场推广等等。
能干啥?我觉得是实现理想吧:)或者换种低调的说法,解决码农的35岁危机。
私人日记是做什么的,像one note一样的软件吗?
类似吧。我觉得可能有误会,我是借用做私人日记这个项目来做C#的教程,教学是主要目的,产品功能要服务于教学内容,而不是要跟one note对标去抢占市场。
————————————————————————————–
本教程已作为开源项目加入到Git,代码内容会随教程实时更新,大家有兴趣的话可以关注我,以获得最及时的更新。私信:私人日记 可以来获取Git的链接。
大家阅读过程中有哪些看不懂或未尽兴的地方,可以在评论区留言,我会先记下来在后续的教程中找机会再说。