软件开发是当前一个很热门的话题,可是你知道软件开发岗位都有哪些吗?其中又有什么联系呢?本文以软件开发的互联网方向,来聊聊这个问题。
互联网系统运行的主体流程如图所示,常见用户端有PC用户端、Android用户端和IOS用户端。每种用户端又分为客户端版和网页版。每种互联网产品都会有一个或多个后台管理系统,用来管理前台用户。这些元素共同构成了精彩的互联网世界,网页、新闻、电商、游戏等等都不出这个范畴。这个系统是怎样实现的呢,每一步都需要什么样的开发人员呢?
B/S架构:即Browser-Server,浏览器-服务器模式。即用户端使用浏览器与服务器建立网络连接,通过浏览器端完成与服务器的数据交互。包括从服务器获取数据展示在页面上,在网页上编辑数据向服务器提交。常见的B/S模式有搜索引擎、新闻、广告等。
C/S架构:即Client-Server,客户端-服务器模式。即用户使用的是专门的需安装的客户端,而不是使用浏览器完成和服务器交互。如windows端的.exe文件、android端的.apk文件、ios端的.ipa文件,都属于客户端文件,需要安装后使用。如果这些客户端具有网络功能,则和服务器一起构成C/S架构。常见的C/S模式有音乐客户端、视频客户端、网络游戏等。
前台服务器:为用户端提供网络服务接口的服务器,与后台服务器和数据库服务器通过内网连接。部署到服务器上的配置和程序,称之为服务,下面的服务器也相同。
后台服务器:为后台管理系统端提供网络服务接口的服务器,与前台服务器和数据库服务器通过内网连接。这里说明下,后台管理系统通常以网页形式展示,极少有做成客户端或移动端作为后台管理系统端的。
数据库服务器:互联网系统的数据就都存放在这里了,通常包括用户数据和业务数据。用户端看到的展示数据,其数据源就在这里;用户提交的需保存数据,最终也会存放到这里。通过内网与前台服务器和后台服务器连接。安全级别极高,一般不直接连外网。
Android原生应用开发:安装到安卓手机上的apk文件就是安卓原生应用,通常使用Java或Kotlin编程语言进行开发,通过NDK也可使用C/C++库。早年使用Eclipse开发环境,后来谷歌官方推广使用Android Studio进行开发。之所以说原生,是因为现在混合开发之风盛行,即小程序、Flutter、RN等框架的问世,使得安卓应用开发不再是完全的纯原生应用。另外即使不使用这些框架,多数安卓应用也会用到webview控件嵌套html页面进行交互。另外因为Android是开源系统,还有一种开发方向是Android系统开发,与应用开发差别很大,以后会有介绍。其岗位对应Android应用开发工程师,开发产出对应上图中Android用户端。
IOS原生应用开发:安装到iPhone或iPad上的ipa文件就是IOS原生应用,使用Object-C(C语言本身是面向过程语言,Object-C对C做了扩展,被称为“面向对象的C语言”)。开发环境使用Xcode。由于苹果较为封闭,IOS开发只能在Mac电脑及其操作系统下进行。也正因为其封闭的原因,安全性较高、破解难度较大,很多手机单机游戏开发者喜欢选择IOS平台。其岗位对应IOS应用开发工程师,开发产出对应上图中IOS用户端。
前端开发:简而言之就是开发网页,但现在的网页元素已经越来越复杂,能做的事情也越来越多。前端开发属于涉及知识面较广、技术更新很快的领域。常用的开发语言有HTML/CSS/JavaScript等,同时前端有大量的框架(框架可以理解为封装好的基础库),如React、Angular、Vue、jQuery、Ajax等,使用这些框架可以大大提高开发效率和代码质量。其岗位对应前端开发工程师,开发产出对应上图中浏览器(含PC/Android/IOS等多种终端的浏览器)用户端。
大前端开发:网页、桌面软件、移动APP、小程序等用户端元素合称大前端。大多数中小型公司要做的用户端产品相对简单,而且随着各种开发框架的成熟及开发难度的降低,越来越多的公司不愿意专门分别供养一个Android团队+一个IOS团队+一个前端团队。因为他们做的产品并不需要特别高的技术含量,还有就是养这么多人成本太高。于是大前端方向就诞生了,他们整体上是一个团队,负责用户端应用的全方位开发。随着Flutter、RN等框架的成熟,跨端开发(一套代码,Android、IOS都能使用,框架负责去适配系统,代码适配框架就行)也逐渐成为主流。其岗位对应大前端开发工程师,开发产出对应上图中所有用户端产品。
服务器端开发:服务开发常用的编程语言为Java和C++,另外也有互联网系统使用Python/Go/Ruby等语言做服务器开发。Java常用于业务性开发,因其本身具有强大的性能,另有跨平台特性、丰富的三方库、以及仓库式的lib文件管理而风靡编程圈。C++则常用于游戏后台开发和音视频后台开发,C++兼容C且具有面向对象特性,对内存的操纵更加灵活,能更好的发挥服务器的硬件性能。其岗位对应为JAVA开发工程师和C++开发工程师,开发产出对应上图中的前台服务和后台服务。
数据库开发:使用数据库管理系统(DBMS)来设计、创建和维护数据库的过程就是数据库开发。该类人员需要深入了解关系型数据库和非关系型数据库的原理、结构和使用方法,掌握SQL语言以及各种数据库管理工具和技术。确定数据库的结构、表格和关系,以及数据的存储方式和访问方式。编写SQL语句、存储过程、触发器和其他程序来操作数据库,包括查询、插入、更新和删除数据。通过索引、视图、分区等技术来提高数据库的性能和效率。制定备份和恢复策略,确保数据的安全性和完整性。实施安全控制措施,保护数据免受未经授权的访问和修改。其岗位对应数据库工程师(又称DB),开发产出对应上图中数据库服务。
需求:在各种开发工作启动之前,需要明确接下来要完成什么事情,完成到哪种程度,要多长时间完成。这些通常由需求端提供。其岗位对应产品经理,负责对开发人员给出明确的实现目标。
测试:软件质量的把关者,将软件成果物对照需求进行逐项验证,看能否满足。另外也会按照性能要求,对软件进行压力测试和极限测试,确保其投放市场后能否扛住用户一定程度的非常规操作。大型公司一般将需求人员归为产品部,测试人员归为测试部;而中小型公司则常常把需求人员和测试人员放在一起,归为质量管理部,以便于从需求启动到产品验收的闭环管理。其岗位对应测试工程师,负责验证开发人员成果物。
运维:大型互联网系统往往是非常复杂的,上面我们提到了“部署到服务器上的配置和程序,称之为服务”。其部署工作就属于运维的范畴。另外,协调服务器资源,限制性打通内网外网,等保信息安全处理等等都属于运维。其岗位对应运维工程师,负责互联网系统的部署和维护。
服务器常见架构:如果只是实现一个简单地数据访问,那么单体服务架构就足够了。即所有应用程序都运行在同一个服务器上。然而随着系统越来越复杂,访问人数越来越多怎么支撑呢?上千种业务呢?上亿人访问呢?(如12306系统,被称为最复杂的互联网系统)。于是就诞生了各种架构来适应不同场景。常见的有如下几种。
1、负载均衡架构:将流量分发到多个服务器上,以提高应用程序的可用性和性能。可以通过硬件负载均衡器或软件负载均衡器来实现。
2、分布式架构:将应用程序分解成多个模块,并在多个服务器上部署,各模块通过网络通信协同工作,可以提高可扩展性和容错性。现在最常见的微服务架构就属于这种类型,而且更是与虚拟机、Docker配合,玩出新高度。
3、云架构:将应用程序部署到云平台上,例如Amazon Web Services、Microsoft Azure等。云平台提供了高可用性、弹性扩展和灾备恢复等功能,同时也降低了维护成本。
4、边缘计算架构:将应用程序部署到边缘节点上,例如物联网设备、智能手机等。边缘计算可以提高应用程序的响应速度和数据隐私保护。
互联网架构师:负责设计和规划互联网应用程序的技术专家。互联网架构师需要具备深厚的技术知识和丰富的经验,能够设计出高效、可扩展、安全和可靠的系统架构,以满足互联网应用程序的高并发、大数据量和高可用性等需求。通常需要具备以下技能和知识:
1、计算机科学和软件工程知识,包括数据结构、算法、操作系统、数据库等方面的知识。
2、熟练掌握多种编程语言和开发框架,例如Java、Python、Node.js、Spring、Hibernate等。
3、深入了解互联网技术架构,包括Web服务、SOA、微服务、容器化、虚拟化等。
4、具备云计算和大数据处理技术的经验,熟悉AWS、Azure、GCP等云平台和Hadoop、Spark等大数据处理框架。
5、了解网络安全和数据隐私保护的技术,包括身份认证、授权、加密等。
6、具备良好的沟通和团队协作能力,能够有效地调配开发人员,并且和需求、运维、测试人员合作,共同完成项目。
通常大型服务器开发人员更容易成长为互联网架构师。