前言
之前有一些在校的同学咨询:入行程序员需要哪些基础?应该学哪些语言?哪些岗位更吃香等等诸如此类的的问题。
本篇我们不回答这些问题,仅仅阐述现代开发涉及到的一些术语以及运用场景,通过本篇文章,你将了解到:
- 什么是软件?
- 什么是跨端?
- 桌面端没落了吗?
- 移动端主要开发啥?
- 前端无处不在?
- 嵌入式用在哪些场景?
- 为什么需要后端?
- 总结
1. 什么是软件?
软件示例
如上俩图,一个是iphone的桌面,另一个是windows的桌面,他们上面有很多图标(常见的QQ、微信等),我们点击去就是打开了一个软件。
通俗的叫法是软件,潮流点的称呼是应用,专业点的名称是可执行程序
软件的产生
那么我们平时使用的各类软件是怎么开发出来的呢?其实他们都有一个标准的生产过程:
- 软件里的各种功能是通过代码实现的,而代码是用语言来描述的。
- IDE(Integrated Development Environment),中文是集成开发环境,要写代码得有一个地方写吧?以前是在编辑器里写好代码,然后再编译构建出可执行程序,现在IDE强大了里边就囊括了编辑和编译构建的功能。通常都是在桌面端安装 IDE软件,然后进行逻辑编程,最后将生成的软件安装到不同的端上。
在IDE里编写好代码并构建完成之后就可以在系统上运行了,比如上图的iPhone手机和Windows电脑。
2. 什么是跨端?
主流操作系统
在说跨端之前先说说当今最常使用的操作系统有哪些。
桌面端就是我们平时使用的PC(台式机、笔记本电脑):
Windows:由微软公司开发,是全球使用最广泛的操作系统之一,适用于个人电脑和企业环境,拥有大量的软件支持。
macOS:苹果公司为其Mac系列计算机设计的操作系统,基于Unix,以用户友好的界面和与苹果硬件的紧密集成而著称。
Linux:一个开源且免费的操作系统,具有高度的灵活性和安全性,广泛用于服务器和个人电脑。它有多个发行版(distros),如Ubuntu、Fedora等,适用于不同的用户需求。
移动端通常指的是我们平时使用的手机:
Android(安卓)
由谷歌公司开发,是基于Linux内核的开放源代码操作系统,主要用于移动设备如智能手机和平板电脑。它支持大量的应用程序和服务,并且拥有全球最大的应用商店——Google Play Store。由于其开放性和灵活性,Android被众多手机制造商采用,成为全球使用最广泛的移动操作系统。
iOS
苹果公司的iOS是一个专为苹果硬件设计的操作系统,适用于iPhone、iPad和iPod touch等设备。iOS以其简洁易用的界面和高度优化的安全性能而闻名。App Store为iOS用户提供了一个获取高质量应用程序的平台。iOS与苹果生态系统中的其他产品和服务紧密集成,如Mac、Apple Watch、AirPods等。
鸿蒙OS(HarmonyOS)
华为自主研发的鸿蒙操作系统是一款面向未来、面向全场景的分布式操作系统,旨在提供跨多种设备类型的无缝连接体验。它不仅支持传统的手机和平板电脑,还支持智能穿戴设备、智能家居、车辆等物联网设备。随着华为在全球市场的推广,鸿蒙OS正逐渐获得更多的关注和支持,成为中国乃至全球第三大移动操作系统。
服务端指的是后端服务器所在的端:
Linux
Ubuntu Server:基于Debian的Linux发行版,因其易用性和丰富的软件包管理工具而受到欢迎。适用于多种服务器环境,从Web服务器到数据库服务器。
CentOS:现已演进为CentOS Stream,是一个与Red Hat Enterprise Linux (RHEL) 开发过程紧密关联的滚动发布版本。它提供了稳定性和安全性,是企业级应用的首选之一。
Debian:以其稳定性、安全性和强大的软件包管理系统著称,适合各种服务器场景。
Red Hat Enterprise Linux (RHEL):由Red Hat公司提供的商业支持的Linux发行版,专注于为企业提供高级支持和服务,在企业级应用和云计算领域广泛应用。
SUSE Linux Enterprise Server (SLES):以稳定性和安全性著称,适用于高性能计算、虚拟化和云计算环境。
Windows Server
由微软开发的企业级操作系统,最新版本包括Windows Server 2022。它提供了广泛的内置服务和应用程序支持,特别是对于需要运行.NET框架的应用程序或使用Active Directory进行用户管理和认证的情况。Windows Server也集成了Azure云服务,便于混合云部署。
FreeBSD
虽然不是Linux发行版,但FreeBSD是另一个广泛使用的类Unix操作系统,特别在对性能和稳定性有较高要求的环境中。它具有稳定的内核和良好的网络功能,被一些互联网公司用于其服务器基础设施中。
跨端指的是什么
比如说我们经常使用的微信,我们可以桌面端的Windows上下载安装它,同样的操作也适用于MacOS,当然也可以在移动端的Android、iPhone上下载安装它。
同样的软件,需要在不同的环境下使用不同的语言开发(甚至不同的IDE),这增加了开发的难度与人力投入。因此,如果能有一种技术能够满足只写一遍代码,在不同的系统上都能运行,这就是跨端技术。
常见的跨端技术,有些能跨移动端,有些能跨桌面端,有些同时能跨移动端和桌面端。
桌面端常见的跨端框架:
Electron
基于Web技术(HTML, CSS, JavaScript)
Qt
支持C++、Python等语言
提供丰富的UI组件和API
Tauri
类似Electron但更轻量级
使用Rust构建原生后台进程
前端依然可以使用Web技术
更注重安全性和性能
跨端框架在移动端使用得更广泛。
移动端常见的跨端框架:
Flutter
Google推出的UI工具包
使用Dart语言编写
支持iOS、Android、Web、桌面端
性能接近原生应用,拥有丰富的组件库
React Native
Facebook推出,基于JavaScript和React
支持iOS、Android
可以复用大量现有的React代码和组件
UniApp
基于Vue.js的跨平台开发框架
支持iOS、Android、小程序、H5
组件化开发,易于维护
Kotlin Multiplatform 是 Kotlin 编程语言的一个特性,允许你使用同一套代码库在多个平台上进行开发,包括 JVM、JavaScript、Android、iOS 以及其他平台
React Native 之前比较火,也是后续不少跨端框架借鉴的对象。当前比较火的框架是Flutter,还在迭代繁荣中。UniApp是国内用的比较多的框架。KMP是JetBrains公司主推的产品,同时也得到了Google的支持,只是目前受众还比较少。
3. 桌面端没落了吗?
虽然桌面端的流量分了部分到移动端,但是在某些方面桌面端还是有着独特的优势。
性能需求:
桌面应用通常可以利用更强大的硬件资源(如GPU加速),提供更好的性能和用户体验。
对于需要大量计算资源的应用(如图形设计、视频编辑、游戏开发等),桌面应用仍然是首选。
用户体验:
桌面应用可以提供更复杂的用户界面和交互,适合需要深度交互的应用。
桌面环境通常提供更多的窗口管理和多任务处理能力,适合需要同时运行多个应用的用户。
企业级应用:
许多企业级应用(如ERP、CRM、数据分析工具等)仍然依赖桌面应用,因为它们需要与本地系统和硬件设备紧密集成。
企业用户通常对安全性和稳定性有更高的要求,桌面应用在这方面往往更有优势。
专业软件:
许多专业软件(如Adobe Photoshop、AutoCAD、MATLAB等)仍然以桌面应用为主,因为它们需要高度定制化的功能和性能优化。
桌面端主要开发语言有 C++、C#、Qt等。
常用的IDE:Visual Studio(Windows开发)、Xcode(Mac开发)、Qt Creator(Qt平台)
4. 移动端主要开发啥?
目前移动端主要有两大主流系统:Android和iOS,加上今年的HarmonyOS Next(市场占有率还比较低),总共就有三个系统。
iPhone手机上搭载的是iOS系统(闭源系统),其主流开发语言是:Objective-C、Swift,后者逐渐替代了前者。
Android手机上搭载的是Android系统(开源系统),因为开源,所以不少硬件厂商都定制了自己的Android系统(ROM),如华为、小米、OPPO、ViVo、荣耀等。
Android 主流开发语言是:Java、Kotlin,后者逐渐替代了前者。
HarmonyOS Next 主要运用在华为手机上,闭源系统。主流开发语言是:ArkTS,类TS语言。
你手机上的应用都属于移动开发的产品范畴,移动端的工作就是开发这些手机上的App。
常用的IDE:Android Studio(开发Android、Flutter、KMP应用)、Xcode(开发iOS应用,Mac上才有这软件),DevEco Studio(开发鸿蒙应用)
5. 前端无处不在?
如果你平时有关注过互联网的招聘,你就会发现前端的岗位特别多(相对其它岗位)。
平时看到的网页就是前端开发的范畴,除了网页,现在各种小程序(微信、支付宝、头条等)也是属于前端开发领域。
最开始的前端核心技术无外乎三个基本点:HTM+CSS+JS。
HTML (HyperText Markup Language) 超文本标记语言,用于描述网页的内容和结构。
CSS (Cascading Style Sheets) 层叠样式表,用于控制网页的外观和布局。
JavaScript,用于实现网页的动态功能和用户交互。
掌握了这三个技术,基本上就会编写简单的前端页面了,随着技术的发展,逐渐出现了框架,通过框架我们更加清晰的组织语言编写复杂的前端页面。
React (2013):由 Facebook 开发,用于构建用户界面,特别是单页应用。
Vue.js (2014):渐进式框架,易于上手,适合中小型项目。
Angular (2010):由 Google 开发,功能全面,适合大型企业级应用。
Svelte (2016):新兴框架,编译时将组件转换为高效的原生 JavaScript,性能优异。
其中国内用Vue.js比较多。
使用框架写好代码之后,还要将代码构建打包,常见的构建工具:
Webpack (2012):模块打包工具,支持多种模块格式和加载器。
Vite (2020):新兴的构建工具,提供快速的开发服务器和高效的构建过程。
Parcel (2017):零配置的模块打包工具,易于使用。
前端也是相对其它端轮子(各种工具库)比较多的端。
常用的语言:TypeScript、JS、HTML
常用的IDE:Visual Studio Code(VS Code,微软出品)、WebStorm(JetBrains出品)
6. 嵌入式用在哪些场景?
嵌入式系统是一种专门为特定功能设计和优化的计算机系统,通常嵌入到其他设备中,以执行特定的任务。
常见的场景:
汽车:引擎控制单元 (ECU)、防抱死制动系统 (ABS)、导航系统。
医疗设备:心电图机、呼吸机、血糖仪。
工业控制:PLC (可编程逻辑控制器)、SCADA (数据采集与监控系统)、机器人。
消费电子:智能电视、智能家居设备(智能音箱、智能灯泡)。
军事和航空航天:导弹制导系统、飞行控制系统、导航系统。
常用的语言:C、C++、汇编
常用的IDE:SourceInsight
7. 为什么需要后端?
如上图,有4名同学,他们都是微信好友,可是他们在不同的设备、系统上装的微信。
同学1给同学3发送消息,看似直接从苹果手机给Android手机发,实际的步骤是:
- 同学1将消息发送到服务器
- 服务器将该消息存储下来
- 服务器给同学3发消息
同样的,不管你在什么设备、什么系统上安装微信,你都能给任意的好友发消息,这是因为服务端扮演了枢纽的作用。
某个时刻手机断网了就没法发微信了,这是因为此时手机连不上服务器了。
随着跨端技术的发展,前端和移动端的边界逐渐变得模糊,两者一起通常称为大前端。
服务端有时候也称为后端、云端、后台等,有时候也叫做Web服务器开发。
服务端常用的开发语言:PHP、Java、JavaScript、Python、Go、C#
PHP:Web开发的曾经的王者,一度号称是世界上最好的语言
JAVA:现在Web开发的中流砥柱
JavaScript/TypeScript(Node.js):前端同学统一后端的利器
Go:由Google开发,以其简洁、高效并发处理能力受到欢迎,适用于微服务架构。
C#:微软推出的语言,配合.NET框架,在Windows服务器环境中很常见。
Python:以简洁的语法和强大的社区支持著称,广泛应用于Web开发、数据处理等领域
服务端常用的开发框架:Spring Boot、Flask、Express
Spring Boot:Java开发 全家桶之一
Flask:Python轻量级Web应用框架,易于上手,适合小型项目或需要高度定制化的应用
Express:快速、最小化且灵活的Node.js Web应用框架,提供了强大的路由功能
常用的IDE:IntelliJ IDEA、Eclipse、VSCode、PhpStorm、PyCharm
IntelliJ IDEA:Java开发 生产力工具
Eclipse:曾经Java开发的利器
VSCode(Visual Studio Code):轻量级但功能强大,支持多种编程语言,通过插件可以增强对不同语言的支持,如Python、JavaScript、Go等。
PhpStorm:针对PHP开发的IDE,提供语法高亮、代码重构、调试等功能,适合PHP后端开发
PyCharm:专门为Python开发设计,提供智能代码补全、代码检查、调试等功能,非常适合Python后端开发
8. 总结
上述简单说了在软件开发领域的一些术语,还有很多不曾提及的领域,如游戏、大数据、算法分析、银行大型机包括现在火爆的AI模型等。
软件这行业很广,涉及的知识很多,甚至开发过程中需要学习很多门语言,搭建各式各样的环境,学习蓬勃发展的框架,熟悉各种约定俗成,卷不完的新技术...
给初学者的一些建议。
先了解两个前提:
- 作为普通的开发,技术不是全部
- 作为普通的打工人,技术是一种谋生的手段
再看技术本身:
- 看看自己感兴趣的领域有哪些
- 尝试学习该领域的语言并写出Demo,给与自己成就感
- 查看该领域的的技术人员市场需求度如何决定是否需要进一步深入
- 技术上有了一定深度的积累后同时扩展到其它领域,扩展技术知识的广度
最后说说知识本身:
- 知识体系的构建很重要,当形成了体系,学习其它的领域的知识就比较容易触类旁通,因为知识的本身也是千丝万缕的联系
- 即使最后没走上技术之路,学习技术的过程也能锻炼逻辑能力
那么还有哪些你使用到的技术或者建议,欢迎在评论区补充,让大家开开眼界~