X0009|一篇文章理解软件开发原理

对于非技术出身的软件行业从业者来说,理解技术是一道坎,但却是向上发展所必须跨越的一道坎。在一个软件公司,无论是商务、售前还是项目经理亦或者是产品经理,对技术的理解程度,往往意味着他的专业程度。而如何理解技术,很多人无从下手。

    接下来我们从以下几个方面,全面了解下软件开发的过程、所用到的技术以及专业名词,将软件开发知识串联起来,形成体系。

                                                          网络

说到网络就得从通讯提起,在信息传递过程中,肯定会有一个产生信息的源头、也会有个接收信息的宿主,以及信息传递的通道。产生信息的源头我们称之为“信源”,接收信息的宿主我们称之为“信宿”,而信息传递的通道,我们称之为“信道”。

    信道或者说信息传递的介质有很多种,电话线路、光纤、无线等。信息从源头产生,被宿主接收,形成通讯网络;

    而计算机网络则是指,由客户机发出请求,服务器接收请求,通过有线或者无线介质进行传递,形成计算机网络;那这里存在一个疑问,假设有一台电脑和一台服务器,我从电脑中发送消息,服务器接收消息,那么服务器能精准的接收到对应的某一台客户机发送的消息的呢?就算这台服务器收到了客户机发送的请求,那么服务器如何知道客户机请求的意思呢?这中间肯定需要什么标准语法能让双方知道传达的消息内容。

    这类似于我们人与人之间的沟通交流,我们把自己头脑里的想法,表达给其他人,就需要遵循一定的语言以及语义规则,让别人可以理解。计算机之间的通讯也是如此,有了信源和信宿之后,需要有语法规则让俩台物理机之间进行信息交互。于是我们的TCP/IP协议、HTTP协议就出现了。

我们在从浏览器中访问web服务器时,需要通过这些协议进行请求;在软件开发中接口与接口之间通讯也需要通过这些协议进行交互。(在接口篇详解)

                                                            硬件

软件开发中涉及到的硬件,主要是服务器,服务器的种类有很多。我们关注服务器一般是关注服务器的作用是什么,服务器的硬件配置是什么?

服务器从本质上来说,其实就是一台电脑,只不过这台电脑,没有显示屏,可以24小时不关机的运行后台程序,配置高于一般的家用电脑。

    我们一般关注服务器的配置,一般关注的是内存、CPU以及硬盘等。我们关注内存是因为它决定着可同时运行多少程序,程序运行快慢;我们关注CPU是因为它决定着计算机的运算速度,计算机的性能;我们关注硬盘是因为它决定着计算机的存储空间大小。

    我们经常在部署应用时,运维或者开发会和项目经理确认服务器的配置是多大,项目经理会回复说4核8G,那这个4核是什么概念呢?

    这其实要提到编程里的多线程概念,多线程是指在一个时刻可以同时处理多件事情。但是程序中的多线程其实只是概念上的多线程,真正情况是程序的运行速度非常快,它将每个代码在不同的细小的时间片中执行,然后模拟出同一时刻执行多个程序的假象。

    但是多核CPU却真正的解决了这个问题,它可以真正做到,同一时间运行多个程序,4核的CPU,他就可以做到同一时间点,可以同时运行4个进程。这就满足了一台服务器运行多个应用。

依此原理,CPU的核数越多,配置越高,就可以承受更多的应用。

4核8G中的8G,也是我们经常说的关于内存的概念,内存是干什么的?为什么内存对程序的运行影响这么大?

    其实软件开发中所提到的内存是指运行内存,就是代码运行的地方。比如说:我的手机运行内存是4G,那么我启动一个微信,占用了我500M的运行内存,我启动了一个抖音,占用了我500M的内存,那可能我在同时启用10个app后,我的运行内存就满了,这是就会出现手机卡顿,影响使用等这些情况。

    同理而言,在服务器上,我们正常部署了一个软件时,可能会部署一些中间件,比如说openfire、redis等,这些东西和我的业务代码一样都会占用运行内存。如果我的运行内存大的话,我就可以在一台服务器上同时运行多个软件应用。

                                                           编程语言

很多非技术出身的软件从业人员,他想了解技术,一般都会直接从编程语言入手,其实了解详细的编程语言,并不能够让你快速了解软件开发的流程以及原理,但了解编程语言,有助于你判断哪些需求是工作量很大的,哪些需求是工作量小的。

现在市面上主流的编程语言有:Java、JS、PHP、Python等。其实编程语言主要是定义一些数据字段的格式,以及编写的规则,代码的语义等。然后再通过if  else、for循环等语句,编写完成业务逻辑。所以我们在需求调研阶段,能将业务流程梳理清楚,流程可以跑通后,代码便可以实现。

现在编程主要的架构还是三层架构,既:表示层、业务逻辑层、数据层,表示层是用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面,现在的软件开发越来越精细化,程序员的分工也越来越明确,一般开发分为前端开发和后端开发,表示层一般就是由前端开发人员开发完成的。前端开发人员需要和后端开发人员定义好,前后端对接的接口,用于数据传输。

业务逻辑层和数据层,则一般都是由后端开发人员完成,业务逻辑层主要是接收前端传过来的数据,然后完成客户的业务需求逻辑。业务逻辑层主要是进行逻辑处理和判断,如果涉及到需要向数据库获取数据的情况,则需要通过数据层,向数据库获取数据。

    数据层主要的向数据库获取数据,加工数据,然后再将数据传递给业务逻辑层。在代码中sql语句一般都是在数据层中编写的。当然现在有很多的框架,比如说:MyBatis、hibernate等,可以自己生成sql语句进行查询,这种方式有很多好处,比如说我们在切换数据库时,就可以通过框架自生成的sql自动匹配。而不需要调整自己写的原生sql了。当然这种方式也有弊端,就是无法进行复杂的sql查询,比如说在做报表需求时,一般还是自己写sql的较多。

    上面说的是我们自己内部写程序时的结构,一般在做软件时,尤其是做业务系统,一般都是要和多个系统做对接,多个系统之间通过接口对接;这个时候就需要在业务逻辑层调用时,调用到其他系统中的接口,通过参数的传递,保持俩个系统之间的联系;

总的来说:写程序可以分为三个部分来看,前端、后端以及数据库;涉及到的编程语言就是:前端语言,例如:html5、css3、js等,前端框架主要有Bootstrap、jQuery 、VUE等;后端语言,例如:Java、php、C#等,每个语言都会有自己特有的框架,以Java举例来说,它具有的框架主要就是SSM,即Spring、SpringMVC、MyBatis,现在最火的还有SpringBoot;

    在这里有人会疑惑这些框架有什么用?为什么研发会这么热衷于优秀的框架?

    其实框架就是一些大牛公司写好的方法,普通的程序员可以直接调用这些方法就可以完成自己的业务逻辑了,这就极大的节省了开发人员的开发时间;不仅如此,框架里封装了很多很复杂的业务逻辑,这个可以避免开发重复的造轮子。

    操作数据库的sql语句也是开发软件重要的一环,sql的入门很简单,就是增删改查,但是如果要写一段优秀的sql,就会复杂到怀疑人生,写一个报表,有时候会写出几百行的sql语句,复杂到让人看都不想看。

以上是编程语言,但是在写代码时,我们还需要一些辅助的软件工具,比如说编译工具、开发的中间件、数据库、代理服务器等等;

                                                            软件

我们在编写程序时,一般都会用一个编译软件,进行编写;编译软件的好处有,我们可以在这个上面编写程序,编译软件一般都会有代码提示,极大的节省了开发时间;编译软件可以将开发写完的程序编译成可执行的class文件,然后用内置的tomcat运行程序,方便开发人员调试程序;

说到这里又提到了一个开发经常提到的名词:tomcat;很多不是技术出身的人,很不能理解tomcat这个东西,其实tomcat这个东西是一个容器,编译后的代码需要在这个容器中运行,然后代码才可以做出各种我们想要的页面和业务逻辑;

    在开发中不可避免的都会涉及到一个软件,就是数据库。其实一些在软件行业沉浸多年的人,他们对软件有了一个返璞归真的理解,就是所有的软件都是对数据的加工,客户输入数据,系统加工数据,数据库存储数据,系统再返回数据;所有的业务逻辑都逃不过这点。可见数据库在软件开发中的地位之高,远非其他软件可比。

    常见的数据库有mysql、oracle、sqlserver等。

    除了这些东西,我们开发口中也会经常说一些名词,比如说redis、openfire等;其实这些在我们了解了软件运行的原理后,都能理解了。举个例子:redis,它其实就是用来做缓存的,所谓缓存就是存储,都是存数据的;但是它的读取速度要大于直接读数据库,所以一些代码运行的中间数据,一般都是存在这种缓存软件中。

    我们运维或者项目人员,一般也会用一些数据库图形化工具或者服务器图形化工具,来连接服务器和数据库。这会降低学习指令的时间。

                                                         接口

最后就来说下接口了,我们现在一般都是面向接口编程,在软件开发之初,由资深的程序员设计好软件的架构,然后分配给各个下属程序员,基于这些各个模块的架构,做详细设计;这种设计中就会包括接口设计;

    很多非技术的朋友一开始会关注,什么是接口,这个概念太过于抽象。其实类比到生活中就很好理解了,比如说:我们的电脑,我们在使用电脑时,不关心这个电脑内部的构造,我们关心的是提供给我们的操作方式,这也是一种接口,我们通过键盘就可以输入很多文字,做很多操作,而不用管它是如何做到的。

    在软件开发中也是如此,开发经理分配开发任务,每个人做一个功能模块,然后封装起来,如果想要获取对方模块中的数据,就可以通过一个接口来获取。

    接口是要有入参和出参的,我们想要获取对方数据时,就需要对方提供个接口给我们,我们传入规定好格式的参数,然后接口返回给我们对应的结果或者数据。

    接口的种类一般有基于Http的接口以及Websocket的接口,这俩种都是一种协议,我们通过这俩种协议完成接口与接口之间的数据传输。

软件开发是一门很深的学问,但是理解了开发的原理,基本就能理解开发各个环节遇到的大问题是什么,我是李铁拐,欢迎关注我的微信公众号:“李铁拐”,我们一起学习!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335