❶ 什么是软件开发
有人问我:“什么是软件开发?”。回答这个问题前,我们需要先理解什么是软件。
一、软件定义
关于软件,一些优秀的人已经给出了简单易懂的定义,举个例子:
软件是计算机系统的一部分,它适配各种不同用途的机器。例如,通过同一台计算机但不同的软件,我们可以玩游戏、计算缴税、写信或者写书,以及获得约会邀请的答复。
—— 杰拉尔德·温伯格
这句话是作者解释给他的朋友的,他的朋友是一名电脑小白。
有了上述定义,什么是软件开发也就显而易见。
软件开发研究如何让运行在计算机里的不同系统解决人们在现实中遇到的问题。
我们经常见到这样的句式,试图一句话就把事情讲得面面俱到。
不妨简化一下。
软件开发研究如何让计算机解决问题。
目前看起来不错。
倘若你听过“一切问题都是人的问题”这句话,并且愿意相信它,那我们就可以接着简化。
软件开发解决人的问题。
这个定义充满了敷衍的味道。如果你敢向你的女友这么解释,她大抵会提到“你是不不爱我了”。
回到正题,它好在足够笼统,把所有的细节归纳为“人的问题”,一言以蔽之,至少不会有多大偏差。
关于什么是“人的问题”,我们无法一一列举。但通过下面的例子,也许可以窥探到一些奥秘:早在 1995 年,有人便觉得软件开发要解决的问题陷入了困境。
我们遇到了前所未有的困难,不知道在做出电子表格(Excel)后,计算机还可以用来做什么。
—— 查尔斯·西蒙尼
从今天来看,这个观点颇失谦逊,软件行业从来没有止步于表格处理程序。当然,我们不是要批判什么,它是用来引出以下软件开发的三点特性。
“人的问题”不可预料。
世界在改变,人的需求也是一直变化的,我们不知道下一步会发生什么。值得一提的是,有时我们甚至不知道过去发生了什么。
“人的问题”具有延续性。
在 1977 年,人们开始用电子表格处理数据。在今天的办公自动化领域,电子表格仍具有着不可替代的作用。这是值得庆幸的,总有些问题和解决方案会持续很长一段时间。
“人的问题”具有复杂性。
尽管软件技术在当今的 IT 领域开花结果,人们探索出了各种各样的成型解决方案,但开发者和开发团队依旧面对着复杂的开发环境。
复杂性足够我们花费一整节的内容来阐述它,欢迎阅读下一节。
二、软件复杂性
随手翻开一本介绍软件工程的书,你都会看到它会提及复杂性。软件复杂性的本质是,现实世界是无比复杂的。至于现实为什么是复杂的,不在本文讨论的范畴。本文更关心的问题是:
是什么让软件变复杂的?
我们在上文提到“软件是运行在计算机里的系统”,这里直接给出系统的一般定义:
系统是对世界的一种观点。
你可能一时无法接受这个它。
换种说法,系统是对世界的一种抽象。
抽象意味着要从繁复的具象世界里剥丝抽茧,不同的抽象就会产生不同的系统。
观点或者说抽象可以简单也可以复杂。
一个软件从无到有,越来越复杂,根本原因就在于特性不断增加和改变,不同角度会产生不同的观点。
举个食品行业的例子。
一家公司以独家配方生产一种食品,每个季度的销售额上涨 10%。
管理层希望业绩进一步提高,具体到研究部门,目标是调制出更好吃的配方。
研究团队计划每个月只改动一点点,一年过去了,不断地有顾客投诉食品不再是原来的味道了。
公司董事决定开会。
“我们生产的食品更好吃了吗?”
“当然,我们的销售额增长达到了 30%。”
“但是我们的顾客不这样说。”
“他们只是不愿意改变!”
再举个例子,打开你的手机,各类软件源源不断地弹出新闻资讯类消息。大部分软件工具成熟以后,不再愿意仅做好它的本职工作,当你使用一个小众 APP 时,你可以亲眼见证它从小而美到臃肿不堪的历程。
这是复杂性的一面,面对它,我们唯一能够做的就是“不要多余的特性”,它有个经典表述:
不要过早的考虑优化。
回到上面的故事,也许那家公司什么也不做,销售额同样会上涨。
你可能会质疑“说的轻巧,我们总不能什么都不做?”
回答它,涉及到我们做出决定时绕不开的一个问题。
你愿意付出什么样的代价?
付出什么,就要准备好得到什么。你愿意付出多少薪资雇佣员工,你愿意增加多少特性,你愿意采用什么样的解决方案,你愿意为这个 Bug 留出多少工作量。
拿出什么样的筹码,是真实摆在我们眼前的问题。
四、什么是软件开发
现在,我们可以正式回答这个问题了。
首先,“预料”对方真正的目的是什么?
1. 对方只是随口一问。
2. 对方想打探你的薪资,然后向你介绍相亲对象。
3. 对方对软件行业这个话题感兴趣,并想深入了解更多。
4. 其他可能性。
对于醉翁之意不在酒,你翻开朋友圈,阅读一番《不得不看,职场新老手都有用的一百条话术!》,基本可以见招拆招了。
至于第三种情况,先给他来个含辞模糊的定义,比如
软件开发通过设计、编码、测试以及持续地维护解决人的需求。
一般地,对方发现自己听得云里雾里后,就会识趣的停止这个话题。但也有可能,尤其是碰到其他领域的工程师时,会引出更为具体的问题。
不幸的是,有时候问题根本就不存在,正如下面的寥寥数语,它会让你所有准备好的说辞付之流水。
“工作忙吗?”
“还行。”
“每天都干啥?”
“主要是写代码。”
“不懂,听说挺累的。”
“有时候是累,工作不都这样么。”
“嘿,说的也是。”
希望对您有所帮助!~
❷ 电脑上的软件是怎么做出来的
软件开发流程
先上一个软件开发的整体流程图,这就是大名鼎鼎的“瀑布模型(Waterfall Model)”。据说由温斯顿·罗伊斯(Winston Royce)在1970年提出。
1、环境部署
准备服务器,部署操作系统、软件环境、安全软件、FTP服务器等。数据库和应用可分开布置在多个服务器,也可布置在同一服务器。
准备网络,分为内网和外网。外网需要购买公网IP和域名。
负责人:网络管理员
2、软件开发
包括开发语言选择、架构设计、数据库设计等工作,并进行编码、编译、测试、打包。
负责人:程序员
3、软件部署
将程序文件上传到服务器,进行部署、配置,成功后即可通过客户端访问项目。
负责人:软件实施
软件开发阶段
下面以java语言开发为例,简单讲讲程序员是如何进行软件开发的。
(本部分参考了“软帝在线”公众号、博客园“架构与我”的文章)。
1、新建java文件(或工程)
java源代码本质上就是普通的文本文件,可以用txt等工具编辑java代码(程序员一般采用源代码编辑工具,如:Notepad++;或集成开发工具IDE,如:Eclipse)。txt编写后需将文件扩展名改成java。
2、编写代码
以“Hello World”举例编写代码:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
该程序表示的意思是输出Hello World这样一段话。
3、编译程序
Java程序之所以能做到跨平台运行,是因为Java程序运行在JVM中的,然而JVM只能够识别字节码文件,而不能直接识别Java文件。所以需要先将Java文件编译成字节码文件,即class文件,然后字节码文件才能够在JVM中运行。
编译文件,可以通过手动执行Dos命令javac,或直接用编译器如Eclipse完成。
4、运行程序
可在Dos命令窗口中输入java命令,按回车,输出Hello World;
或在编译器的控制台中看到输出结果。
5、单元测试
单元测试(模块测试)是开发者对编写的一小段代码,检验一个很小的、很明确的功能是否正确。
通常采用JUnit框架(多数java开发环境已集成)进行测试,即所谓白盒测试,叫“白盒”是因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
测试通过后,就完成了软件开发阶段,可以打包部署了。(IT售前圈)
❸ 软件开发对电脑配置要求高吗
Win、Mac、Linux是常用的三大操作系统,因为不同的岗位需求对不同的电脑性能要求也不一样。比如像前端开发、后端开发、运维、算法、嵌入式等这些岗位的要求都还不太一样。
1.前端开发
不管是用“三件套”的原生技术栈时代,也就是所谓的html、css、javascript。还是后来的“封装库”时代,也就是有了jQury和ajax的时代。亦或是现在如今比较火的“组件式”开发时代,有angular、react、Vue这些组件化框架开发时代。我们以最新的为例来说:首先,你一般会需要一个命令行终端,然后前端开发也需要一个比较大的IDE环境,现在我看好像用webstorm比较多,前端开发再厉害点的就还需要一个vscode或者是atom也就是文本编译器,最后就还需要一个浏览器。所以前端开发常见也就使用这个四五个开发软件,所以说前端开发对于电脑性能没什么要求,因为它不怎么吃电脑性能没有什么特殊要求,正常配置就可以了。当然唯一的要求可能就是屏幕分辨率和屏幕色准,不管怎么说都是跟图形化的东西打交道。所以从这些角度上来讲,我是推荐还是用一台Mac来做前端开发比较好,因为它屏幕还是挺不错的。关于显卡的话,显卡不是必须的,但是具备最好,因为前段也有可能会接触到一些UI设计方面的应用软件。综上所说,前段其实不耗电脑性能:8G内存,一个固态SSD基本上就够了。
2.后端开发
以java后端开发为例,需要一个大的IDE,一般是eclipse或者是intellij IDEA(后者现在更多)、浏览器(Google)、而数据库可视化可能需要类似于Navicat这种软件、前后端调试接口需要Postman、编辑器vscode或者是atom、后端开发也需要命令行终端、远程连接服务器就需要一个SSH终端。当时我在自己2016款中配MacBook pro上做过实验,把java开发的所需要的软件全部打开会耗费多少性能。实验证明我自己的这台16款中配8G内存的MacBook pro是非常能胜任的,运行非常流畅。后端开发的话我建议内存尽量8G及以上、系统盘是SSD(256G)基本够了、显卡就看自己的喜好就行,如果你要搞大数据、虚拟化、编程环境复杂一些的技术,需要虚拟机支持的话就需要你的电脑CPU、内存、硬盘都得要再上一个台阶了。
1.AI(人工智能)
如果你是做AI、机器学习、图形图像处理算法,除了在CPU、硬盘、内存(16G+)要求比较高之外还需要GPU的加持。因为我们以前在实验室做图形图像处理和一些模式处理的算法的时候就会用到并行计算,这个时候就需要GPU的加速了。
4.运维
其实我觉得运维岗对客户端机要求是最低的,因为运维绝大部分时间都是在一个远程终端连接到一个远程服务器上去进行操作。所以你本地客户机基本上一个SSH终端就能搞定一切,厉害些的可能就还需要一些文件对比工具和编译器等,很小的一些小工具就可以了。
5.嵌入式开发
如果你是做嵌入式开发或者跟硬件打交道的话,那尽量还是在Windows或则是Linux下做比较好,Mac不是一个好的选择,因为Mac上很多嵌入式开发的软件确实是没有。
所以说在大部分情况下我还是觉得一台中配的MacBook pro就可以搞定一切,最好是15寸的(效率相对而言高一些),具体哪一款的话,我自己用过:14、15、16、17、18款都用过,在我感觉16款的体验稍微的好一点点,但是差别也没那么大,因人而议。如果说你MacBook pro不想买新的话,买一个二手的也是不错的选择,像14款的中配MacBook pro就是13寸的8G内存156G基本上也就是4000多块钱。而15款二手的MF840差不多也就卖5000块钱。我自己的现在是16款的带Touch Bar的这个MacBook pro 8G内存、256SSD、i5处理器的话顶天也就只能卖一个7000块钱。所以说二手的性价比是最高的。除了MacBook pro之外的话还有ThinkPad T系列也还不错。
❹ 做PC的客户端软件开发框架选择,sciter vs QT,用哪个好点
Qt是一个类库,VS是一个集成开发环境,两者没有可比性QT:跨平台,语法结构简单清晰。面向对象的特性体现的比MFC明显。代码写起来比较优雅,也就是说上手会快一点。
❺ 软件开发需要会什么
软件开发需要会什么,这个问题比较广泛,首先是要会2-3门左右的编程语言,起码要精通1-2门。
然后需要精通数据库,精通sql语言,熟悉存储,了解缓存机制。
然后需要熟悉网络通信,socket、tcp/ip、http等等。以及在这之上的web服务等等。
需要熟悉常见的文件操作,特别是xml的的语法与操作。
还需要了解服务器的知识,单元测试,前端的知识,项目管理的知识,业务域的知识等等。
这里还有框架类库的知识,这个也是非常重要的。总之软件开发要学的东西非常之多。而且这个职业知识更新非常快,需要终身持续学习。
❻ 什么是计算机软软件 软件开发编程
就是通过一些开发环境,编写一套计算机能看得懂的指令,然后让计算机自己去运算。
计算机软件:安装部署在计算机,或者通过计算机可以访问使用的一些工具,比如QQ、浏览器、杀毒软件、购票系统、酒店管理系统、银行系统等等,现在生活都离不开了。。。
软件开发:就是用编程的方式去实现以上这些软件,一般从环境分为服务端和客户端,从架构上分为C/S、B/S,从运营模式上分为B2C、C2C、B2B,从部署模式上分为客户端部署、SaaS等等等等。我说的也片面,不是一句两句就能解释清楚的,你大体有个印象就行了吧。
❼ 学软件开发对电脑有要求没
Win、Mac、Linux是常用的三大操作系统,因为不同的岗位需求对不同的电脑性能要求也不一样。比如像前端开发、后端开发、运维、算法、嵌入式等这些岗位的要求都还不太一样。
1.前端开发
不管是用“三件套”的原生技术栈时代,也就是所谓的html、css、javascript。还是后来的“封装库”时代,也就是有了jQury和ajax的时代。亦或是现在如今比较火的“组件式”开发时代,有angular、react、Vue这些组件化框架开发时代。我们以最新的为例来说:首先,你一般会需要一个命令行终端,然后前端开发也需要一个比较大的IDE环境,现在我看好像用webstorm比较多,前端开发再厉害点的就还需要一个vscode或者是atom也就是文本编译器,最后就还需要一个浏览器。所以前端开发常见也就使用这个四五个开发软件,所以说前端开发对于电脑性能没什么要求,因为它不怎么吃电脑性能没有什么特殊要求,正常配置就可以了。当然唯一的要求可能就是屏幕分辨率和屏幕色准,不管怎么说都是跟图形化的东西打交道。所以从这些角度上来讲,我是推荐还是用一台Mac来做前端开发比较好,因为它屏幕还是挺不错的。关于显卡的话,显卡不是必须的,但是具备最好,因为前段也有可能会接触到一些UI设计方面的应用软件。综上所说,前段其实不耗电脑性能:8G内存,一个固态SSD基本上就够了。
2.后端开发
以java后端开发为例,需要一个大的IDE,一般是eclipse或者是intellij IDEA(后者现在更多)、浏览器(Google)、而数据库可视化可能需要类似于Navicat这种软件、前后端调试接口需要Postman、编辑器vscode或者是atom、后端开发也需要命令行终端、远程连接服务器就需要一个SSH终端。当时我在自己2016款中配MacBook pro上做过实验,把java开发的所需要的软件全部打开会耗费多少性能。实验证明我自己的这台16款中配8G内存的MacBook pro是非常能胜任的,运行非常流畅。后端开发的话我建议内存尽量8G及以上、系统盘是SSD(256G)基本够了、显卡就看自己的喜好就行,如果你要搞大数据、虚拟化、编程环境复杂一些的技术,需要虚拟机支持的话就需要你的电脑CPU、内存、硬盘都得要再上一个台阶了。
1.AI(人工智能)
如果你是做AI、机器学习、图形图像处理算法,除了在CPU、硬盘、内存(16G+)要求比较高之外还需要GPU的加持。因为我们以前在实验室做图形图像处理和一些模式处理的算法的时候就会用到并行计算,这个时候就需要GPU的加速了。
4.运维
其实我觉得运维岗对客户端机要求是最低的,因为运维绝大部分时间都是在一个远程终端连接到一个远程服务器上去进行操作。所以你本地客户机基本上一个SSH终端就能搞定一切,厉害些的可能就还需要一些文件对比工具和编译器等,很小的一些小工具就可以了。
5.嵌入式开发
如果你是做嵌入式开发或者跟硬件打交道的话,那尽量还是在Windows或则是Linux下做比较好,Mac不是一个好的选择,因为Mac上很多嵌入式开发的软件确实是没有。
所以说在大部分情况下我还是觉得一台中配的MacBook pro就可以搞定一切,最好是15寸的(效率相对而言高一些),具体哪一款的话,我自己用过:14、15、16、17、18款都用过,在我感觉16款的体验稍微的好一点点,但是差别也没那么大,因人而议。如果说你MacBook pro不想买新的话,买一个二手的也是不错的选择,像14款的中配MacBook pro就是13寸的8G内存156G基本上也就是4000多块钱。而15款二手的MF840差不多也就卖5000块钱。我自己的现在是16款的带Touch Bar的这个MacBook pro 8G内存、256SSD、i5处理器的话顶天也就只能卖一个7000块钱。所以说二手的性价比是最高的。除了MacBook pro之外的话还有ThinkPad T系列也还不错。
❽ 电脑客户端的软件 是用什么开发的 无需安装.net jre
你可以试试sharpDevelop,轻量级的c#开发工具,比vs体积小太多了。功能暂时没发现有什么缺点,就是缩进和补全差了点。
❾ 软件开发有什么定义
软件开发就是根据用户要求建造出软件系统或者系统中的软件部分的过程。
一般是用某种程序设计语言来实现的软件开发的,像Java、Python、2C和C++等都是软件开发的需要的编程语言。
看到那么多编程语言,同学又就开始犯嘀咕,这么多,到底学什么?
今天听人说Java不错,想学;
明天听人说Python前景广,想学;
为什么会迷茫,还不是因为你不够了解他们。
所以,今天信盈达小编先来给大家普及一下Java、C/C++、PHP、Python到底分别是用来开发什么的?
用任何编程语言来开发程序,都是为了让计算机干活,比如编写一篇文章,下载一首MP3等,而计算机干活的CPU只认识机器的指令。
所以,尽管不同的编程语言差异极大,最后都得“翻译”成CPU可以执行的机器指令。理论上任何语言干任何事情几乎都可以, 但是主要干什么那就不一样了。
Java
java常常跟”企业”联系在一起,因为具备一些很好的语言特性, 以及丰富的框架,在企业应用中最被青睐,你总可以听到关于J2EE, JSP, Hibernate之类的东西的讨论。
同时, java在手机领域也有一席之地,在普遍智能化之前,很多手机就是以支持java应用作为卖点的,而智能手机爆发之后,java手机主场变成了android, 作为安卓的标准编程语言而存。
总结:Java主要应用在网页, 企业级开发,普通应用软,游戏后台。
C/C++
C/C++理论上说可以做任何开发,只要有合适的硬件驱动和API,特点是效率高,基本上是编译语言里面效率最高的。除非你的系统中连C/C++编译器都不具备。某些系统当中C++编译器是不具备的,但是C一般都具备。
目前而言,C语言主要用来开发底层模块(比如驱动,解码器,算法实现),服务应用(比如web服务器)和嵌入式应用(比如微波炉里的程序。C++也可以做这些,不过由于C++的复杂性和标准问题,人们还是更愿意使用C来做。C++更适合比较复杂但又特别需要高效率的设施,比如大型游戏,一些基础库, 大型桌面应用。
总结:C 主要应用在系统底层,驱动,嵌入式开发。C++主要应用在游戏开发,大规模,高性能,分布式要求的程序开发。
Python
Python由于具有丰富和强大的库,它又叫做作胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。
常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。
Python是做服务器开发与物联网开发。信息安全,大数据处理,数据可视化机器学习,物联网开发,各大软件的api,桌面应用,都需要python。
总结:Python主要应用在动态解释型,开发效率高,开源,灵活,入门门槛低。