对于非技术出身的软件行业从业者来说,理解技术是一道坎,但却是向上发展所必须跨越的一道坎。在一个软件公司,无论是商务、售前还是项目经理亦或者是产品经理,对技术的理解程度,往往意味着他的专业程度。而如何理解技术,很多人无从下手。
接下来我们从以下几个方面,全面了解下软件开发的过程、所用到的技术以及专业名词,将软件开发知识串联起来,形成体系。
网络
说到网络就得从通讯提起,在信息传递过程中,肯定会有一个产生信息的源头、也会有个接收信息的宿主,以及信息传递的通道。产生信息的源头我们称之为“信源”,接收信息的宿主我们称之为“信宿”,而信息传递的通道,我们称之为“信道”。
信道或者说信息传递的介质有很多种,电话线路、光纤、无线等。信息从源头产生,被宿主接收,形成通讯网络;
而计算机网络则是指,由客户机发出请求,服务器接收请求,通过有线或者无线介质进行传递,形成计算机网络;那这里存在一个疑问,假设有一台电脑和一台服务器,我从电脑中发送消息,服务器接收消息,那么服务器能精准的接收到对应的某一台客户机发送的消息的呢?就算这台服务器收到了客户机发送的请求,那么服务器如何知道客户机请求的意思呢?这中间肯定需要什么标准语法能让双方知道传达的消息内容。
这类似于我们人与人之间的沟通交流,我们把自己头脑里的想法,表达给其他人,就需要遵循一定的语言以及语义规则,让别人可以理解。计算机之间的通讯也是如此,有了信源和信宿之后,需要有语法规则让俩台物理机之间进行信息交互。于是我们的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的接口,这俩种都是一种协议,我们通过这俩种协议完成接口与接口之间的数据传输。
软件开发是一门很深的学问,但是理解了开发的原理,基本就能理解开发各个环节遇到的大问题是什么,我是李铁拐,欢迎关注我的微信公众号:“李铁拐”,我们一起学习!
网友评论