当前位置: 首页 > news >正文

c++开发工程师是属于前端还是后端_编程第一课 了解软件开发过程和程序员的工作...

作为一个刚入行的小白,你可能想知道:

  • 软件是如何开发出来的?
  • 程序员是如何工作的?
  • 需要用到哪些技术?
  • 你如何才能入门?
  • 怎样快速在这个行业里找到工作?
ec9e8d75fcfa8b701ccb3c22e17e8860.png

我们就先来看看在软件公司里不同的程序员是如何协同工作的,需要哪些技术以及这些技术之间相互的联系。

知道了这些,更有利于你明确未来学习的方向和目标。

1.什么是软件开发?

我们都知道计算机系统是由「硬件」和「软件」两个部分组成的。所谓硬件就是计算机的物理部分,就是那些你可以看得见摸得着的外壳、屏幕、电路板这些。但是只有这些计算机是不可以工作的,就像人如果只有完整的躯体是不够的一样。

所以,当计算机从生产线上装配完毕以后或者到我们手中后,要做的第一件事就是给它装上各种软件(例如Windows, QQ, Steam)。

软件(Software)就是使计算机可以运作起来完成我们指定任务的程序和数据。

这和人类也很像——我们在出生以后,成年人就给我们的大脑装入各种数据和程序,我们识别人和物体并记住他们,学会喝水、吃饭、说话等等。

除了现有的、已经被开发出来的软件,各行各业的用户还有自己特定的需求,软件开发就是根据用户的需要,帮助他们编写一系列的程序,满足他们正常或变态需求的过程。

软件开发是一项包括需求获取、开发规划、需求分析和设计、编程实现、软件测试、版本控制的系统工程

1.2 谁在开发软件?

从事软件开发的公司有两种:

  • 一种是根据已有客户的需求,先签订合同,再定制软件系统的「项目型公司」
  • 另一种是创造一个软件系统,然后让很多客户购买或使用它的公司,这种公司我们称为「产品型公司」

还有一种叫「互联网公司」,这种定义不太好下,因为现在谁都在宣称自己是互联网公司了,但是互联网公司也是做产品的,所以我们还是把他们当作产品型公司好了。

在这些公司里,各种角色合作进行软件开发,其中的主力就是我们程序员。

1.3 程序员在干什么?

作为小白,我们经常疑惑于「程序员」到底是干什么的?在软件行业,程序员的分工已经非常细致了——不同程序员岗位的工作领域和技能要求是不同的。

举一个例子,你在「饿了吗」浏览不同的店家,选择你要订的外卖并下单、支付,直到送到你手上并完成评价的一系列过程,都是不同程序员、甚至不同公司的程序员协同工作才完成的。

但是,无论是简单还是复杂的软件系统,程序员们其实只做三件事:

  • 向用户展示用户界面、获取用户输入的信息或操作
  • 处理业务逻辑或执行操作
  • 实现数据存储和交换

参与软件开发的角色很多,在这里我们先介绍程序员、与程序员工作相关性很强的岗位,他们包括:

  • 设计用户界面的——UI/交互设计师
  • 实现用户界面和交互逻辑的——前端工程师(前端程序员)
  • 实现用户逻辑和数据存储/交换的——后端工程师(后端程序员)
  • 设计系统的——系统架构师

1.3.1 用户界面的设计——UI/交互设计师

当你打开手机APP或者用电脑打开一个网页,首先你看到的就是这个系统的用户界面,简而言之,你在手机和网页上「」到的,都是用户界面。用户界面是由「UI/交互设计师」来设计的,他们一般不会写程序。

用户界面的设计有两个核心:

  • 视觉设计
  • 交互设计

视觉设计是指如何让用户界面「好看」,交互设计是让用户界面「好用」。

视觉设计的产出物可以是效果图,比如用Photoshop产出的PSD文件。但是效果图是「死」的,不能真实模拟软件在操作时的步骤,所以很多交互设计师还会用诸如Axure RP之类的软件做一些以假乱真的「原型系统」。高保真的原型系统看起来和真实的软件界面一样,你甚至可以操作它(就像它已经开发完了一样),但它只是个模型而不是真正的软件系统。原型系统的开发速度比较快,成本也比较低,它只是用来验证用户需求和用户界面交互性的工具。

视觉和交互设计的过程程序员一般不参与,UI/交互设计师做好线框图、UI设计图、原型以后程序员才开始工作的。你要记住一点,千万不要叫他们或她们「美工」,会得罪人的。

这是我司一个UI设计师提交的设计图:

6034f5a1d0f5bb8d6bcdff052d107cf3.png

1.3.2 用户界面的实现——前端工程师

「UI/交互设计师」把线框图、UI设计图、原型设计好并通过评审以后,程序员们就可以开工了[1]。现在的主流软件开发方法是将软件开发分为「前端」和「后端」两部分,前端程序员主要负责:

  • 呈现用户界面
  • 实现用户交互
  • 实现后端交互

1.3.2.1 呈现用户界面

UI/交互设计师提交的是UI设计图或者系统原型,它可能是一个Photoshop的设计稿(或者是其他格式的设计稿),设计稿是一副静态的图片,因此需要前端工程师把设计稿「转换」成正式的用户界面代码。

如果你要做的是一个网站,你首先要用图像处理软件切图(有的公司里UI设计师已经切好了,也有一些UI设计软件自动帮你切好),然后用HTML+CSS来表达这个用户界面,直到浏览器上可以显示出和设计稿一样的界面来,而且你的页面应该在不同浏览器上显示出完全相同的效果。这其实很麻烦,因为不同的浏览器都有自己的小性子,前端开发人员经常被困扰。

APP的用户界面开发与之类似,只不过描述用户界面的不是HTML和CSS。Android和iOS的APP使用不同的界面描述语言来表示用户界面,进行交互的语言也不同(不是JavaScript),但要做的事基本一样。

1.3.2.2 与用户交互

只是显示界面是不够的,还有一些基本的「用户交互」功能也要前端工程师实现,比如点击一个链接跳转到另一个页面,或者输入完手机号码后需要验证手机号码格式是否正确......这些都是基本的交互,在网站中一般使用JavaScript来完成。

用户交互的程序一般都运行在终端(例如你的手机)上。

1.3.2.3 与后端交互

终端并不能处理所有的事,因此前端程序还需要与后端进行交互。例如在一个用户注册的页面中,我们先用JavaScript验证了这个手机号码格式是正确的,但是我们并不知道这个手机号码是否被注册过,这时就需要与后端交互——把这个号码发送给后端的一个接口,后端程序检查完毕以后返回给我们一个结果,我们再告诉用户这个号码已经被注册过或者进行下一步的操作。

综上,前端工程师的工作是:

  • 根据UI效果图构建前端界面代码
  • 实现与用户的交互
  • 实现与后端的交互

1.3.3 后端工程师

在前面我们知道,前端工程师要验证一个手机号码是否被注册过,是把手机号码发送给后端的一个接口,再由后端程序进行检查并返回结果给前端。

这些接口是用户看不到的,但是可以被程序调用。设计、并实现这些接口工程师叫做后端工程师或后端程序员。在程序员们开工之前,系统架构师已经规定好了前端和后端是如何交互的,包括:

  • 前端程序员通过何种方式调用后台接口
  • 前端程序员需要用到的每一个接口的名称和调用地址
  • 每一个接口的参数是什么(前端要传递给后端的数据有哪些)
  • 每一个接口被调用后后端要返回给前端哪些结果
  • ...

后端程序员的工作内容就是一个个实现这些接口,提供前端程序员想要的数据、执行前端程序员想要进行的操作。

后端程序的主要功能是:

  • 接收前端的调用
  • 向前端返回操作的结果或所需的数据
  • 从数据库中读取数据或写入数据到数据库
  • 与其他系统交互(例如接受支付宝支付成功通知)

相对于前端程序员,后端程序员可以选择的语言和技术有很多,目前比较主流的是:

  • Java
  • PHP
  • Python
  • JavaScript(Node.JS)
  • C#
  • ...

1.3.4 系统架构师

在前面,我们提到了「前端工程师」和「后端工程师」,他们使用不同的语言和框架来开展工作。

他们是在「系统架构师」的领导或指导下开展工作的。「系统架构师」一般是具有多年经验的老鸟,他们甚至是「全栈工程师」——简单来说就是前端后端都会的人。

系统架构师根据系统的功能需求,把系统划分成功能模块,规划好系统的技术架构、分配好前后端的开发任务,同时也规定和协调好各个接口的接口方式。然后程序员们就各自开展工作了。

成为系统架构师不是小白们目前的职业目标,因为这需要相当的经验和技术覆盖面。

1.4 为什么学习C语言?

在所有的语言中,C语言的学习是最让初学者痛苦的。不少人自学学到「i++与++i的区别」的时候就脑子发晕(比如我)。更别提什么指针、指针的指针、数组的指针、函数的指针了。

但是,我仍然坚定的要求大家从C语言开始,这并不是因为我认为大家学完这门课程以后可以去从事C语言开发的工作,而是因为:

  • 学习C语言的沉没成本是最低的
  • 学习C语言会被迫学习计算机原理知识,有利于长远发展

1.4.1 学习C语言的沉没成本是最低的

到目前为止,C语言的基础语法广泛应用于主流的编程语言中,包括我们之前提到的C++、Java、C#、PHP、JavaScript以及用于iOS开发的Objective C。

所以,熟练掌握C语言的语法,并在实践项目中了解面向过程、面向对象是怎么一回事丝毫不会浪费时间,因为这些技能和知识未来在别的语言里全部用的到。

在C/C++的程序员看来,所有的编程语言都是一样的。

1.4.2 学习C语言会被迫学习计算机原理的知识

如果在一开始的时候就使用一些很「高级」的语言,你可以快速得到结果,并获得一些成就感。

然而在整个过程中,你并不知道你的代码到底做了什么,是怎样做的,为什么是这样做的。当程序遇到问题时,你很难找到症结,你可能只能和你的经理说「我是按照demo敲的代码,我不知道为什么会出问题」,在未来的工作中,换一种工作语言对你来说将是一件很困难的事。

而C语言的学习是较为麻烦的,它没有现成的强大和丰富的库(什么是库现在可以不用了解),很多功能都需要自己动手编码实现。有些功能即使在C的标准库中有,我也会要求你自己动手实现,在动手实现的过程中,你将被迫学习计算机运作的底层知识,同时训练你的编程思维,这对你未来的学习和工作无疑是有益的。

一些「培训班学员」只是在培训学校里学了一些「高级」的语言和流行的框架,不了解计算和程序的本质,也没有经历过编程思维的训练,所以导致他们只能在特定的语言和框架下开展工作,受到很大限制。

所以我们计划了两个月来学习C语言,去研究程序和计算机的细节,不要怕麻烦,越怕麻烦的人麻烦越大

1.5 小结

我们把程序员简单地分为「前端工程师」和「后端工程师」,在实际的项目开发中还会有更细致或者更粗犷的分类方法,视不同项目、不同公司的开发模式不同而不同。而且一个软件的开发完成还需要产品经理、系统分析师、系统设计师、运维技术人员、测试人员等参与。

相关文章:

  • 专业手机游戏开发基础(1)
  • tcp只发送不接收会怎样_面试TCP协议灵魂拷问十二个(建议收藏)
  • 专业手机游戏开发基础(2)
  • c++ string类的常用方法_String类型及其常用方法(2)
  • anaconda rstudio安装后打不开_spyder打不开 安装anaconda 的tips
  • 任正非:实事求是的科研方向与二十年的艰苦努力(新年推荐)
  • 为什么使用依赖注入_一起来踩踩 Spring 中这个循环依赖的坑
  • 一个由CVS不区分大小导致的404问题
  • springboot profile_SpringBoot-基础
  • 设置列表框最小宽度且可随着内容变宽的方法
  • ajax怎么讲json对象传到后台_【JavaWeb】102:后台数据校验
  • 零基础学sql要多久_从零基础到独当一面的化妆师需要学多久?
  • hibernate的一个异常错误分析
  • hibernate不支持这样的继承映射
  • 鱼c论坛 python课后题_鱼的做法大全_鱼怎么做好吃_鱼的家常做法 - 菜谱 - 香哈网...
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 2017-08-04 前端日报
  • Apache Spark Streaming 使用实例
  • ECS应用管理最佳实践
  • Go 语言编译器的 //go: 详解
  • Hibernate【inverse和cascade属性】知识要点
  • IndexedDB
  • Java IO学习笔记一
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • PermissionScope Swift4 兼容问题
  • Terraform入门 - 3. 变更基础设施
  • vuex 笔记整理
  • 番外篇1:在Windows环境下安装JDK
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前端代码风格自动化系列(二)之Commitlint
  • 区块链技术特点之去中心化特性
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​如何防止网络攻击?
  • ###C语言程序设计-----C语言学习(3)#
  • (2020)Java后端开发----(面试题和笔试题)
  • (23)Linux的软硬连接
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (python)数据结构---字典
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Ruby)Ubuntu12.04安装Rails环境
  • (二)hibernate配置管理
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (算法)N皇后问题
  • (图)IntelliTrace Tools 跟踪云端程序
  • (一)Thymeleaf用法——Thymeleaf简介
  • *1 计算机基础和操作系统基础及几大协议
  • ..回顾17,展望18
  • .Net 4.0并行库实用性演练
  • .net连接oracle数据库
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?