从零开始系列用C#做软件产品私人日记一(目前市面上绝大部分操作系统的底层都是C/C++写的甚至绝大多数编程语言的编译器也是C/C++编写的)

为什么要做教程?

(目前市面上绝大部分操作系统的底层都是C/C++写的甚至绝大多数编程语言的编译器也是C/C++编写的)第二的Python占比近12%。诞生于1991年,它是一门脚本语言,用C写的。很不习惯用空格数量来决定语句层级关系,有人开玩笑说得用游标卡尺去量每行的空格数量,没那么夸张,但确实废眼睛。

我是一名做全栈开发的独立开发者。2001年毕业做软件开发,从程序员到项目组长再到项目经理、部门经理、甲方CIO、公司副总,在这10几年的打工生涯中经历了大大小小20多个项目,几乎干遍了软件行业的所有工种。2013年,在我35岁的时候突然厌倦了打工的生活,职位越高收入越多压力就越大,职位低的自己又看不上,以这种心态去走打工的路注定是越走越黑。能够令我重新绽放激情的心头就是一直有个梦想从未实现:有很多用户在用我写的软件。于是就自己创业写软件,到目前为止已有5-6款软件产品上线,用户累计数量已超过10万,日活用户应在千人级别以上,算是基本实现了自己的梦想。虽然比不上大厂的百万年薪,但养家糊口还是没问题的。最让我满意的是工作时间自由,不用朝九晚五,自己想做什么就做什么。

可能是个人性格原因,我特别不能接受每天做重复的事情,几个产品的维护经常会让人感觉枯燥;当然也可能是年龄的原因,毕竟今年已经42了。现在突然感觉已经丧失了继续研发新软件产品的激情,之前也想做一款游戏,但是游戏更重要的可能是美工,自己也没有太多的新意,开发周期也会特别长,属于费力不讨好。不过人总得找点自己感兴趣的事情来做吧,不然活着干嘛呢?炒股是自己的兴趣之一,之前是想通过程序量化来实现自动炒股,但是经过自己反复试验表明,在海量数据样本面前,单靠技术指标胜率基本在50%左右,跟抛硬币差不多,这条路走不通。

其他物色了很长时间,感觉还是自媒体这块比较适合自己。也有兴趣想尝试下,一是自己愿意写一些文字,二是写出的内容会有人看,能够与人互动,三是如果别人认可你的内容,还会成为你的粉丝,然后就能获得更多的推荐。这个机制挺吸引人,唯一不足的是,自己除了编程其他方面都不大擅长,而编程方面的内容可能又比较小众,未必能获得预想的效果。

做软件开发教程的想法,起因还是前几天发了几篇关于C#的文章,结果引来了不少的评论,其中有几个用户在评论中提到想学c#编程。我回想起了我学习编程的道路,刚开始根本没有百度,全凭自己去啃MSDN,然后自己在电脑上一点点码字调试,但是手册毕竟只能学到基础,真正的困难是在项目上,把具体的事物抽象化,遇到问题如何解决问题,这才是编程的核心。我的技术可能很拉胯,但我的项目经验和做产品的经验比较丰富,这是很多学校、培训机构都不具备的,我如果能把这些经验融入到软件开发的教程中,会不会让教程变得更加生动呢?哪怕最后只有一个人因此爱上了编程、学会了编程,那我觉得我的努力也没有白费,即便一个人也没有,我也算是把我人生的一部分工作做了总结,留在了互联网上,也算是对这个社会做一点浅薄的贡献。想到这里,我顿时又燃起了久违的兴趣,那就干吧:)

当前主流的编程语言

在教程开始之前,先给大家看下2021年8月TIOBE上的编程语言排行榜。

大致介绍下排名前五的语言:

第一的C和第四的C++通常会把它俩归为一类,合计占比近20%。C诞生于1972年,后来在C的基础上衍生出了带类的C,到了1983年,正式命名为C++。目前市面上绝大部分操作系统的底层都是C/C++写的,甚至绝大多数编程语言的编译器也是C/C++编写的。跨平台、效率高是最大的优点,缺点则是需要对底层有很深的了解,导致学习周期、开发成本都比较长;主要应用场景是做底层。

第二的Python占比近12%。诞生于1991年,它是一门脚本语言,用C写的。它的最大优点是能够很方便的调用各种其他语言写的东西:比如C/C++写的dll、Java和c#写的类、甚至js脚本,它都能调用。它的定位更像个包工头,我自己虽然干不好,但是我能找到各种工人,要啥有啥;当然缺点也很明显,执行效率不高。所以一般用于研究、运维等对界面和效率要求不高的领域,比如人工智能、机器学习、大数据挖掘、爬虫、黑客等等,做软件产品就别指望它了。另外就我个人喜好而言,很不习惯用空格数量来决定语句层级关系,有人开玩笑说得用游标卡尺去量每行的空格数量,没那么夸张,但确实废眼睛。

第三的Java占比近11%。诞生于1995年,可以说是目前在国内互联网大厂们用得最多的语言。最大优点是跨平台、开源有很多现成的代码、会的人多、政府指定等等,用行内人说就是生态好,缺点是运行效率稍低,内存开销较大。Java目前应用较多的场景是做大型网站、企业应用、手机应用等,Windows平台下的个人应用体验较差。

第五就是今天我要介绍的主角C#,占比5%多点。诞生于2002年,就语言本身来说,在我看来目前的C#已近乎完美。一定要说缺点,那也是外在因素导致的:一是开源太晚,导致现成的代码太少、相关人才也少,所谓生态太差;二是跨平台还没有形成闭环,虽说跨平台大一统方案的.net 5已上线,但界面MAUI要2022年才上线。在之前微软固执维系windows的那10年,Java已经占据了企业应用的大部分市场,余下的小企业基于成本考虑很多选择了php,直到近几年微软终于醒悟了,亡羊补牢,未为晚矣。C#目前主要的应用场景是金融、医疗行业这些重视安全又不差钱的行业,再就是游戏行业主要用Unity。

为什么要选择C#作为教学语言?

1)功能丰富且语法优美。在伟大的Anders Hejlsberg带领下,这门语言被雕琢得更像是一件艺术 ,配合宇宙最强的代码编辑器Visual Studio,简直是无敌一般的存在。使用它的心情也是愉悦的,不像某些其他语言,看着就乱糟糟,影响心情。

2)代码性价比高。相比其他语言占用内存少,运行效率高。花费更少的时间学习,更快的开发效率,可以获得接近C/C++的性能。

3)跨平台可期。这几年微软对跨平台及开源不再矜持,投入力度空前。随着.net 6、MAUI大一统的跨平台产品相继推出,未来c#跨平台的趋势将彻底扭转。一份c#代码可以运行在不同平台的时代即将到来。

4)游戏界的扛把子。Unity已经成为游戏行业当之无愧的老大了,C#与之完美的融合,如果想走这个方向,C#必须要学习。

5)独立开发者首选。用C#可以编:windows工具软件、windows服务、ERP系统、工控系统、爬虫工具、GDI绘图、各类网站、微服务、游戏、苹果安卓下的手机应用等等我都列举不过来,基本上你能见到的程序,都可以用它编出来,而且高效。如果你学习编程的目标是去企业找份工作打个工,那么在目前国内就业形势下选择学习Java是明智的选择;但如果你的目标是像我一样成为一名独立开发者,做一款自己的软件产品或应用,那C#是最佳的选择,因为它性能优越,且无所不能。

此系列教程的特点?

在网上也看过一些C#教程,很多都像用户手册一样,挨个语法说一遍,讲得倒是挺详细的,但是你废了很大功夫看过之后还是不知道能用来干嘛,没有产品和项目相结合的经验,做参考书还不如百度精准,没什么实用性。

所以我的想法就是以做一个软件产品为目标,由产品产生功能,由功能驱动设计,由设计指导开发,然后才是编码,边做边学,学以致用才能加深理解,一通百通。

另外,在很多大厂中,每个员工都是螺丝钉,工种单一,码农也不例外。比如做前端的就一直做前端,可能连做后端的机会都没有。我的教程虽然功能可能相对简单,但麻雀虽小,五脏俱全,囊括了产品开发中的各类工作,一可以增加了解,让团队配合更加融洽;二可以帮助自己选择更适合的工种,提升晋升空间。

此系列教程的教学内容?

这个软件产品是要做一个私人日记,或者也可以看成是一个私人的博客。最终的目标识可以同时在电脑端、网页端、移动端使用,这三端都可以对日记内容进行增删改查,并实现数据同步。

软件的开发周期大概分三个阶段:

第一阶段、windows单机版

目标是实现软件单机版的基本功能,做好数据定义、类库等,为后续学习与开发打基础。

在此阶段,可以掌握最基本的编程概念、抽象设计、操作系统原理等,知识点包括但不限于:界面布局、控件事件、文件读写、类库设计、数据库设计、程序调试、源代码管理等编程相关基础。无论以后往哪个方向走,抽象设计、操作系统的相关知识还是要掌握的,只有了解了操作系统的运作原理,才能更好的运用编程技术。

第二阶段、B/S架构网络版

目标是实现在不同设备的浏览器上随时随地登录软件进行操作,用户数据保存在服务器。

web端发展的太快了,像我这种老人已经有点跟不上变化的速度了,我到现在一些项目还仍然使用asp.net+jquey来做web项目,也没觉得有什么不好,当然用做教学就落伍了。微软的web架构由最初的asp发展到asp.net,然后前端随着javascript的大发展,尤其是jquery和ajax出现之后,前端再不是以前简单的html+css了。于是各种框架相继出现了,mvc、Vue等等还有很多我叫不上名的。这块可以发展的方向有很多,也很乱。现在微软主推的是blazor,以webassembly的方式运行在网页端,这个又是一项走在前沿的技术,可以跨平台部署,我比较看好它,所以选它来作为web项目的开发框架。

这里会学习到web基本概念、html、js、css、web接口、json、blazor等web相关知识。

第三阶段、多端跨平台

目标是实现同一份代码以原生程序分别运行在不同平台(Windows、Mac、Android、IOS、Linux)。

前面两个阶段实现的是单机版和Web端,但它们各有缺陷,单机版只能在windows系统下运行,用户群受限;Web端只能在浏览器上运行,用户体验稍差。而此阶段是要在单机版的基础上,增加对所有客户端的支持,win、mac、linux系统下的主流设备,如电脑、手机、平板等主流设备下均可运行。

初步计划是等MAUI发布后使用.net 6,在单机版的基础上进行重构。这块领域对我来说也是全新的,我也需要不断的摸索,跟大家一起分享经验。

此系列教程的更新计划

我预估下来教程长度可能会超过百节,我之前没做过如此完整的系列教程,每一步都是不断摸索中前行,所以更新进度估计会慢一些。

初步计划是每周更新1-3篇,当然具体还得看实际情况,毕竟生活有各种各样的琐事。

此系列教程的代码

最后,本项目为开源项目,代码内容会随教程实时更新,大家有兴趣的话可以关注我,以获得最及时的更新。私信:私人日记 可以来获取此项目在Github的链接。

(0)

相关推荐