开源软件通识基础:第二周课程回顾与总结

dotNET跨平台 dotNET跨平台     2022-12-24     773

关键词:

接第一篇《开源软件通识基础:第一周课程回顾与总结》,本文为第二周课程内容的回顾与总结。

本导学班在调研全球开源教育与课程的基础上,通过收集、整理、理解、拓展国际最新的前沿开源课程,采取众创的模式,由 X-lab 核心开源研究的成员共同进行协作学习,以最大效率的吸收国际前沿开源知识,共创、共享、共进。本导学班,以开源 FOSS 和开源 COSS 课程内容为基础,结合自己的理解,并进行适当拓展。第二周的课程内容包括了:

  • 软件行业与开源

  • 开发者主导的开源基金会

  • 用户主导的开源基金会

  • 单一开源软件供应商模式

  • 劳动者经济学

一、软件行业与开源

为了了解开源中的各类商业模式,我们先来看看整个软件行业是如何工作的,什么是软件,以及软件如何为生态系统提供基础。

现在谁都知道软件是什么,它无处不在,在过去的二十年里,软件蓬勃发展,几乎进入了每一个行业,上面这些图片展示了各类软件。今天的软件行业已经成为主流行业。在 2016 年,就达到了 1.3 万亿的总市值。这些数字到底是否精确,其实并不重要。但至少能看出,它是一个非常非常大的行业,影响力非常大。如果你从事这方面的事业是一件好事,因为它正在不断的增长,而且是一个找工作的好地方。

画面中的人物是硅谷精英 Marc Andreson。他在接受《华尔街日报》的采访时说到——软件现在正在吞噬这个世界。实际上,我认为他的观点主要是:软件无处不在意味着,没有高科技产品能脱离软件的服务;但我更倾向于:没有软件就不会有创新,也没有如此高速的创新。

和其他行业比较,比如,农业和其他的行业也在进行创新,都是硬件主导的。但是因为软件的独特特性——它是可塑的,可以快速、容易地更改。软件领导的创新速度比任何硬件都高出一个数量级。

正在吞噬这个世界的不仅仅是软件,更具体来说,开源软件正在吞噬世界。

软件行业的重要参与者有软件供应商、咨询公司以及监管机构等。软件供应商公司,他们生产软件产品;咨询公司,他们需要与客户进行交互来执行项目。不同之处是,软件供应商的产品被卖给一个市场,而不是单一的客户,而咨询公司的项目总是针对特定的客户群体,为它们开发特定的解决方案。另外还有监管机构和其他的参与者。

那我们先来看软件产品,上图总结了软件产品的要点,整个产品包含核心产品以及培训、咨询、运营等部分。

其中核心产品包含了软件最基本的功能部分,具体图中写的比较清楚了。那对于产品的使用权如何定价:首先要看的使用范围,可以按用户的数量或机器的数量来收费;也可以出售不同的持续时间,这些给到用户的权限可能只有一年或一个月,也可能是永久的。例如,如果您提供的软件作为他人产品的基础,他们肯定会想拥有永久性地使用它的权利,而如果客户就是最终的用户,他们可能会选择一个有限时间的版本。客户会根据自己的需要进行选择。

在软件服务的订阅服务中,您可以进一步将这些支付细分为:初始许可费和定期维护费。

现在我们来看软件项目,要注意和软件产品的区别。项目是一个过程,有开始,也必须有一个结束,否则它不是一个项目。与产品相比,软件项目的价格与正在执行的劳动力密切相关。所以客户为定制的项目付费,通常还会支付劳动力。比如,学士和硕士论文可以作为项目。

为了更深入的理解:在这里我们看到这两种类型的企业之间的主要区别。左边是,向市场销售产品的软件供应商。右边是,与客户交互做项目的咨询公司。

我们可以看到产品收入是如何不断积累的。项目收入是逐年保持不变的,因为咨询公司只有有限的人数。如果他们每年做一个项目,那就是他们赚的钱。

所以你可以看到。最初你在项目设置中赚的钱可能会高于订阅费或维护费用,甚至是软件产品的初始许可费。但随着时间的推移,它不能真正成长。

所以在一段时间后。一个公司的软件产品收入将超过一些咨询的项目收入。当然,咨询公司可以通过雇佣更多的人来成长。但经济增长却受到了他们雇佣称职人才的速度的限制。这通常比软件公司增加客户去使用他们的产品的速度要慢得多。下图举出了几个很好的例子,来说明产品和项目的发展关系。

现在我们来看看,软件行业是如何基于这些的软件产品和项目来工作的。所以首先要理解,客户实际上不想购买软件产品,他们实际想要的是一个所谓的解决他们问题或挑战的办法。

因此理想情况下,他们去联系IBM这样的全面服务提供商。对客户来说,他们从一家公司购买最合适的硬件,软件和实施服务。如果出错了,他们可以向那家公司投诉。

这就是垂直集成模型。这种垂直购买的情况实际上是六七十年代、八十年代的原始情况。在一个软件几乎不作为一个独立的实体存在的时候,像 IBM 和 DEC 这样的公司相互竞争,向客户销售一个垂直集成的解决方案。

其中包括:属于特定供应商的专利和知识产权的硬件,一种在硬件上运行的操作系统。它也是特定供应商拥有的操作系统。然后首先是一个应用程序,一个出售给多个客户的标准应用程序。甚至可能是为特定客户开发的自定义应用程序。但所有这些都建立在专有的操作系统和硬件之上。优点是,垂直集成可以确保这些部件真的能够很好地协同工作。缺点是,一个供应商必须把所有的工作做得很好。

更好的方法是水平分层设计,并且让这些层的专业化。所以从 80 年代和 90 年代开始。我们看到了分隔这些层的非常明确的边界出现了。

有了明确定义的边界,会出现专门从事这些层的供应商。有时这些层主要被一个特定的供应商占据。就像 Windows 一样,有很长一段时间是主要的操作系统供应商。层内之间会有竞争,底层的实现会使上层的实现成为可能,这样就产生了平台,构成一个生态系统。垂直集成无论怎么重构,最终速度都太慢,而且不够创新。

商业模式:商业模式是一种企业的运作方式,是企业元素及其关系如何互动以帮助企业实现战略目标的概要描述(模型)。代表性的元素可以是产品,合作伙伴,人员,职位等。代表性的关系是管理其互动的流程。

你有时会听到人们谈论开源的商业模式。严格地说,“开源不是商业模式”,但开源可以是商业模式的关键推动者,以至于有时这是商业模式的主导地位和核心,以至于商业模式本身被称为“开源”(open core模式)。

二、开发者主导的开源基金会

一个开源的开发人员主导的基金会是一个非营利性的组织。其目的是管理无差异化的开源软件的开发,可供基金会成员和公众使用。

作为一个组织,它有一些成员,但通常是在开发人员的基础上,然后是软件供应商,产品供应商、产品服务提供商和咨询公司。

开发者基金会的动机:最初的历史意义是支持和保护开发人员和开源项目、保护开发人员免受法律诉讼的影响、确保良好的开源治理、在法律上代表项目利益。

此后不久,工业界就了解到了这一点。开源开发人员基金会是一种以结构化的方式结合起来的好方法。这也帮助他们创造了一个更具竞争力的生态系统。生态系统中的人可以从增强的竞争力中获益。具体来说,它让客户钱包份额的增加。这意味着在不伤害客户的情况下赚更多的钱、接触到价格更敏感的客户、发展可寻址市场。

课上我们针对这三个获益点,结合下面三张图进行了具体说明。

新的开源项目可以快速获得用户和贡献。也会面临一系列问题。我们在课上介绍了开源社区的优势,以及相较于传统财团有哪些优势。

开发者基金会也可以分为两类,一类是应用型开发者基金会,在一个应用程序开发人员的基础上,重点是共同开发、联合管理、开发一个特定的开源应用程序。然后是涉及其中的公司,通常提供附加组件、服务和咨询。例如,WordPress 基金会,Drupal基金会, blender基金会。

另一类是平台型开发者基金会,是平台开发人员的基础。专注于特定行业标量软件平台的开发。这不是一个直接卖给客户的应用程序。相反,该平台会被相关的公司嵌入到任何更大的项目或产品中。所以这种平台开发人员基础的例子包括 Linux 基金会、Eclipse 基金会、OpenStack 基金会等。

上图展示了一个开发者基金会的蓝图,课程中我们针对每一个关键部分进行了介绍,感兴趣的朋友可以去B站看我们的录播课程。

三、用户主导的开源基金会

这次我们将讨论开源软件基金会的另一个变体,我们称之为用户主导的开源基金会。不同于由软件开发公司和产品供应商发起和组织的开发者基金会,用户基金会是由软件用户组织和发起的。

当你再次审视开源项目时,你会发现一些项目都是基于用户并由其推动的,典型的有 GNU Health 项目。但是 GNU Health 项目具有一个前提条件,除了 FSF 之外没有正式的组织,但它并不是真正的开发者用户基金会。通常,一个特定的软件中的利益相关者的利益,是由一个非盈利实体组织负责的,该组织接管了所有需要商定和管理的事情,例如加入某个组织的联合权利和商标。Kuali 基金会将是我们将要研究的一个例子。

因此,这里对开源用户基金会的定义是,一个非盈利性组织,其目的是提供资金和管理, 但不一定是开发资金和管理非差异化的开源软件的开发。它通常是由软件用户公司(如银行或大学)发起,他们需要软件来进行运营,而不是销售基于开源软件的产品,他们只是想使用开源软件。这些用户公司的用户相互协作,首先为储备资金支付专款,然后再管理路线图,以及下一步他们都想要的软件开发的功能。

我们将在之后讨论这些公司是如何运作的。这里有几个用户基金会的例子,Kuali 基金,是大学系统中使用的用户基金会。这可能是运行时间最长的例子,也可能是最容易理解的一个,这就是为什么我们将在下面进行更深入的研究。

首先,我们需要了解导致用户基金会诞生的最初的原因。用户基金会想要达到的目的是,摆脱对单一供应商的依赖,让他们所使用的软件能够得到多个供应商的支持和进一步开发。只有当他们所使用的软件是开源软件。而不是公司的专有知识产权时,这才是可行的。因此, 为了在使用同一个软件时,使之从一个供应商转变为多个供应商来为用户提供服务。这就需要使该软件开源,否则这些额外的供应商将不被允许使用它,或者如果他们没有对源代码副本的访问权,那么它们的服务将遭遇巨大的阻碍。

大学的具体情况与石油和天然气、银行和保险等行业之间截然不同。他们决定开发他们自己需要的开源风格的软件。如果你阅读文献的话,你会发现最初的动机是来自封闭源码供应商的高成本许可证。大学花了这么多钱购买的软件,甚至不能很好地满足他们的需要,太过缺乏性能,不能满足他们的需要,他们不能真正有能力去改变其他软件的发展方向。他们非常想影响发展规划,但他们做不到,所以他们选择建立他们的 Kuali 基金会,这一个开源用户基金会来改变这一切。它创建的很低调,由一些巨头支持。随着越来越多的美国大学的加入,一直不断的成长着。

当你从组织的角度看像 Kuali 基金会之流时,你会发现一个蓝图,类似于你已经看过的开发者基金会。所以你需要明确组织结构,如下图所示。首先,你当然想有一个愿景和倾听的使命,那么你的目的是什么,你要如何管理你需要澄清的问题,如何管理知识产权,建立董事会、成员的治理机制,有哪些成员级别,最后但同样重要的是,如何治理、发展以及如何为所有这些提供资金。

图上这八点,我们在课程中进行了详细的介绍和讨论,欢迎感兴趣的朋友来B站看录播课程(B站账号:Xlab2020)。

接着我们继续介绍用户基金会的第二个例子,OPENK。

这里的动机与预期很接近,旧的封闭源代码模型没有很好地发挥作用。对一个特定的供应商有很强的依赖性,成本很高,反应迟钝,因为他们可能会把所有人或大多数人都绑死在里面,因此尽管有大量的用户群,但是用处很小,几乎不能影响软件未来的发展方向、现在正在发生的事情,也不能改变软件的内容,使其更好地为一个特定的能源供应商工作。同时还有着高风险,因为它都是封闭的,除此之外,新的软件挑战刚刚在德国发生,就是德国能源发展基础设施支持下的长期的智能电网,例如现在许多房屋从屋顶上的太阳能板反馈能量,将能量反馈到能量分配网络中,为此,需要编写软件,以便有一个交换条件,或者现在能源供应商可以适当补偿家庭投入系统的能量。

因此,OPENK 的最初动机实际上是,该如何处理可怜的旧软件,但很快动机就变成了面对全新的、即将到来的软件挑战该做些什么,并决定以用户基金会的形式来应对这些新的挑战。同样,我们也按照用户基金会的蓝图对OPENK进行了分析,欢迎来B站观看录播课程。

如果深入思考这个模式,依然会存在问题。如果市场规模太小,那么它可能很难实现,另一方面,如果说市场太小,那应该可以得到一个闭源供应商对这块感兴趣。如果由一个闭源代码的供应商提供其产品和服务,那么他们会提高价格,所以也许有一个死亡区间,它不足支持用户基金会的产生,但对于小软件供应商来说足够大。所以在这个区间内,用户基金会很难生存。

四、单一开源供软件应商模式

在之前讨论用户基金会的时候,我们就提到了用户基金会诞生的原因就是为了防止单一供应商的绑定。这一节我们将介绍单一开源供应商的定义、历史、益处、挑战、生命周期和产品。

首先,单一供应商开源项目是指被单一供应商控制的开源项目。在法律上,这个项目可能是开源的,但在实际上,它更符合是一个专有软件。单供应商开源软件是一种新型的专有软件。那么单一开源供应商就指的是在单一开源项目背后的公司,它以这些单一开源项目作为主要业务。这里我们列举了一些单一开源供应商。

对于原始的单一开源供应商,通常是企业家或者公司。企业家识别市场机会、创办公司、获得资金;公司从零开始开发软件、通过发布开放源代码的软件进入市场、保持知识产权的权利。

但最近的单一开源供应商往往是这样:企业家发现现存项目周围的商业机会,再去创办公司筹集资金;公司在开源社区版项目的基础上进行开发,再发布开源代码进入市场,保持对拓展部分的知识产权的权利。下图展示了单一开源供应商的几个时期。

接下来我们讨论了这样做的好处,包括更快的市场销售、更好的业务发展、更快的产品管理、更低的软件开发成本、更好的社区口碑、行业的信誉基础等。当然,也有对项目的挑战,会产生从来不付费的用户、商业版软件要求更高、需要更专业的支持等。

对于单一开源供应商来说,知识产权也是非常关键的,使用对等的许可证阻止竞争、使用贡献者协议来保持所有权等等。通常情况下,单一开源供应商会使用多重许可证,来起到不同程度的许可。下图展示了 2018 年的 MongoDB 许可证变化。

并且,社区是单一开源供应商非常重要的部分,优秀的开源社区可以帮助单一开源供应商提升声誉、提高产品的质量等等。单一供应商需要针对社区创建一套引导流程,包括提升社交引导力、明确的开发流程、策略性的方向等等。社区管理是非常重要的商业环节,需要有专门的角色来负责。

并且公司也应该认识到,社区版的开源项目,大多是消极的使用者,少数是积极的贡献者,最少的应该是公司专门负责该项目的员工。同时,对于收入来源的分布来说,绝大部分应该是企业级的交易。如下图所示。

接着我们讨论了单一开源供应商的生命周期。早期到中期,单一开源供应商都会是非常专注、非常公平的开源开发者,一直到后期,才会出现闭源的产品。

五、开源劳动者经济学

这一节我们来看开源的劳动者经济。如果说,谁是最大的开源受益者,我想 Linus Torvalds 可能是最符合的人。但是他在参与之初,绝对想不到能带给他如此之大的收益。不仅是他,许许多多参与开源的人都获得了巨大收益,这背后的劳动者经济值得我们深思。

我们先来看传统的开发者生涯。一个软件企业内部,通常有市场营销、产品管理、产品开发三个大部门。作为开发者,可能毕业后从开发工程师做起,一条路是一直技术做到底,那么架构师甚至 CTO 可能是最高的职位。但开发者也可能会转型去做产品,先从产品经理做起,最后成为 CPO 也有可能。不过很少有人会去市场部门,这个比较少见。

但是在开源中,开发者的职业生涯是不同的。这一块我们上一周的内容中也有提到。首先是用户,你作为用户,对某个项目出现了兴趣,慢慢熟悉,后来成为贡献者甚至领导这个项目的发展等等。

参与开源社区,对开发者来说有非常大的好处,比如可验证的技术能力、同行证实的能力、有权力和影响力的地位等等。与传统软件公司不同,开源世界中的技术是在阳光底下的。你的实力可以用代码来证明,也可以看到你在开源社区中的影响力。你的声誉你的地位,都证明了你的实力。课程中,我们花了很多时间具体介绍开源开发者的这三点好处。

刚刚是对开发者的好处,然后我们来聊一下开源开发对公司的好处。通常,这个开源项目的未来发展是更清晰的,开发的每一步都是透明的,而且在社区的视野之下,比起公司少得可怜的开发者来说好很多。另外,开源项目的问题更容易被发现、被解决,这也导致了产品的质量更高。同时,开源项目的开发成本更低,社区中有非常多热心的贡献者,愿意自己花时间来解决问题。一个优秀的产品,带给公司的除了经济收益,还有更大的影响力、提高公司在行业的声誉。下表总结了一些,对于不同类型的公司,开源的商业目的。

需要特别指出的是,贡献者的身份并不能提供可持续的优势,每个足够聪明的人都可以做出贡献并获得认可,没有进入的障碍,总是有一个更多的功能要实现,也没有障碍,因为开源是免费提供给所有人的。

但是 committer 的身份确实提供了可持续的位置优势。这个地位具有经济价值,因为它不容易实现,也不容易派发。成熟的项目基本上不对新的提交者开放,一旦获得,提交者的地位也不会轻易被剥夺。

从长远来看,普通开发人员可能会被雇佣来开发专有代码,他们知道并使用开源代码,可能会也可能不会做出贡献。较低的劳动力市场准入门槛拉低了工资。而开源项目的 committer可能会受雇于商业相关的开源的工作,committer 的经济价值与开源项目有关,committer 的行为更像自由人而不是雇员。并且committer 身份的稀缺性可能导致高薪,所以未来开发者的劳动力市场将成为一个两级社会吗?

如果想要成为 committer,又需要哪些能力呢?项目的技术能力是肯定的,通常是编程技能,但真正的项目需要更多的技能,配置,管理,文档,网站,...对系统构建过程的理解等等。

社会技能同样重要,需要沟通和协作技能来进行团队工作,需要良好的阅读和写作技能(电子邮件沟通)。领导技能永远是稀有的,也是需要的,需要了解同行的行为、亚文化。在同等条件下,往往社交技能更为重要。

获得 committer 资格是一个共同的过程,用户通过自己的努力,从用户到 committer 的地位不断提升。这样可以建立声誉,减少错误决定的风险。最终,贡献者被推举为committer。决定通常是由现有的committer投票决定的。

有好的时机,也有坏的时机,一个成长中的项目需要更多的人,会在早期给予更多的责任。一个发展缓慢的成熟项目,很少需要更多的committer。尽量在需要帮助的时候尽早加入。对于那些潜在的committer ,这就有了两难的境地:押注于哪个项目呢?

以上就是第二周直播课程的总结,下一次将是 COSS(商业开源软件)的部分,小伙伴们不要错过,欢迎加入我们~

本文为  X-lab开放实验室  原创文章,遵循CC-BY 4.0协议,转载请附上原文出处链接及本声明。

文中部分图片源自:https://nythesis.com

文末有彩蛋|第四周课程回顾与总结

...COSS的课程内容,第四周,我们开始进入OSPO(开源项目办公室)的部分。 本导学班在调研全球开源教育与课程的基础上,通过收集、整理、理解、拓展国际最新的前沿开源课程,采取众创的模式,由X-l 查看详情

2018-2019-120189215《文献管理与信息分析》第二周课程学习总结

第二周学习与搜索学习内容总结2.1学习与搜索学习首先是一个搜索的过程。要找到合适的对象和资源。2.2搜索引擎简介“搜商”:包括搜索意识和搜索能力。搜索引擎搜索的不是网络,而是数据库。2.3常用搜索引擎及使用方法常... 查看详情

20191214第二周《信息安全导论》学习总结

...sp;《计算机概论》第一章我了解到了计算机的基本结构与软件硬件的大致发展历史,我明白了现今的计算机仍未发展到极致,计算机是一种潜力无穷的机器,还等待着人们去发掘。 《计算机概论》第十八章第十八章则让我了... 查看详情

201723052018-2019-1《java软件结构与数据结构》第二周学习总结(代码片段)

201723052018-2019-1《Java软件结构与数据结构》第二周学习总结教材学习内容总结本周内容主要为书第三章和第四章的内容:第三章(以数组来替代栈的作用)集合(聚集,组织了其他对象的对象):线性集合(直线方式组织的集合)非线性... 查看详情

2018-2019-120175206《信息安全系统设计基础》第二周学习总结

2018-2019-120175206《信息安全系统设计基础》第二周学习总结信息的进制与转换字节:计算机中最小的可寻址的内存单元虚拟内存:机器级程序将内存视为一个非常大的字节数组进制表示十进制:D=dndn-1...d1d0.d-1...d-m(m,n为正整数)二... 查看详情

终章——软工提问回顾与个人总结

...回顾与个人总结项目内容这个作业属于哪个课程2021春季软件工程(罗杰任健)这个作业的要求在哪里作业要求我在这个课程的目标是积累软件开发经验,提高工程能力这个作业在哪个具体方面帮助我实现目标课程回顾,解决自... 查看详情

提问回顾与个人总结

...回顾与个人总结项目内容这个作业属于哪个课程2021春季软件工程(罗杰任健)这个作业的要求在哪里提问回顾与个人总结我在这个课程的目标是初步掌握软件开发技术这个作业在哪个具体方面帮到我对本学期软件工程的学习经... 查看详情

第二周ip通信基础回顾

数据的传输方式的分类  按照数据传输的顺序分 串行传输 并行传输  按照数据传输的同步方式分 同步传输 异步传输  按照数据传输的流向和时间顺序分 单工 半双工 全双工 &nb... 查看详情

java课程设计第二周总结概括

事件Java中,把所有时间都定义成一个标准的类。事件处理机制中的三个对象:事件本身,事件来源,事件处理器事件是事件类的一个对象,事件类的根类是java.util.EventObject,通常所用到的事件类在java.awt.event包中事件体系机构Event... 查看详情

201723242018-2019-1《程序设计与数据结构》第二周学习总结

...合是一种聚集、组织了其他对象的对象。集合的使用者(软件系统中的另一个类或对象)只能通过这些预定的方式和该集合进行交互集合可以分为两大类:线性集合和非线性集合抽象数据类型抽象数据类型是一种在程序设计语言... 查看详情

20165115第二周学习总结

201651152017-2018-2《Java程序设计》第二周学习总结教材学习内容总结第二章教材内容总结:1、标识符与关键字2、基本数据类型3、输入输出数据第三章教材内容总结:1、if语句、switch开关语句2、循环语句3、break与continue语句教材学... 查看详情

2018-2019-120165316《信息安全系统设计基础》第二周学习总结

2018-2019-120165316《信息安全系统设计基础》第二周学习总结教材学习内容总结小端,低地址对低位,高地址对高位;大端相反。可以通过cast或者union强行提取出一个字节的储存内容来判断机器的大小端类型。逻辑运算只有0或1两种... 查看详情

2018-2019-20165235《信息安全系统设计基础》第二周学习总结

2018-2019-20165235《信息安全系统设计基础》第二周学习总结教材学习内容总结1.右移分为逻辑右移(x>>>k)和算术右移(x>>k),其中算术右移是最左端补高位,舍去低位。2.信息=位+上下文4.无符号数计算:5.有符号数计算:6.... 查看详情

20165311第二周学习总结

第二章内容总结:标识符与关键字基本数据类型输入输出数据第三章内容总结:if语句、switch开关语句循环语句break与continue语句代码调试中的问题和解决过程:中文部分会出现乱码,参考李东骏同学的博客后进行了调试,但是还... 查看详情

2018-2019-120165327《信息安全系统设计基础》第二周学习总结

2018-2019-120165327《信息安全系统设计基础》第二周学习总结一、进制及其转换如何获取二进制数的某几位:可以利用数字的算数右移,然后利用0XFF这样的数字做掩码运算,可以获取到一个数字的符号位。计算机的移位运算有一种... 查看详情

2018-2019-120165330《信息安全系统设计基础》第二周学习总结(代码片段)

学习内容总结信息的表示与处理字节:计算机中最小的可寻址的内存单元虚拟内存:机器级程序将内存视为一个非常大的字节数组进制表示及转换十进制:D=dndn-1...d1d0.d-1...d-m(m,n为正整数)二进制:B=bnbn-1...b1b0.b-1...b-m(m,n为正整数)... 查看详情

java学习第二周总结(代码片段)

...了如何创建类的构造方法。还学到了如何使用Java里一些基础类的方法,比如String类、StringBuffer类。仅仅只是String类里就有30多种方法可供使用。除此之外 查看详情

软件工程实践总结

这个作业属于哪个课程2021春软件工程实践这个作业要求在哪里软件工程实践总结&个人技术博客这个作业的目标课程回顾与总结、个人技术总结其他参考文献软工实践寒假作业(2/2)、《构建之法》课程回顾与总结问题分析点... 查看详情