如何选择自己的软件方向

对外行来说,电脑这块你都会,尤其是家里亲戚,更是把你当成一个电脑维修工人,反正每次回家修修电脑,修修手机是很正常的事。

如何选择自己的软件方向

对内行来说软件专业可是五花八门,说一些都是可能经常听过的,比如大数据、物联网、区块链(web3.0),很高大上,但跟我们关系确实不大,你老老实实学好基础再去考虑这些吧。那软件专业方向大概都有哪些呢?我这里写的是大概,因为我担心我也写不全

正常软件制作主要岗位有以下几个,而大部分人未来就业也是以下几个岗位

1.项目经理(管理人员,还有架构师、技术负责人等等,凤毛麟角的岗位我就不写了)

2.产品经理(产品设计及对接客户)

3.UI设计师(根据产品经理设计做出效果图,要求软件工程师1比1还原)

4.软件工程师(我们主要是这个方向)

5.测试工程师

我们今天要讲的主要是软件工程师,因为一个团队里面占比最大就是这块,当然其它专业你也可以选择,我也不一一列举了。

如何选择自己的软件方向

1.应用系统开发工程师:其实这个岗位听起来难,但是工作起来就是一名普通的程序员,就是给IOS或者是安卓编写应用程序的开发人员。

2.嵌入式系统开发工程师:随着消费家电的智能化,嵌入式更显重要。郑州北大青鸟培养的嵌入式工程师可在各类电子信息技术企业、嵌入式软件及相关外包公司、参与和组织嵌入式软件开发、测试工作。

3.游戏开发工程师:21世纪,游戏作为说是最炙手可热的产业之一。游戏开发工程师顾名思义,就是开发一些手机端和PC端的游戏,供大家消遣娱乐。

4.WEB开发工程师:它的主要职责就是主要职责是利用各种Web技术进行产品的界面开发,进行丰富互联网的Web开发,致力于通过技术改善用户体验。

5.系统集成工程师:简单地说系统集成就是把各种设备、软件系统集成到一个系统完成一个应用。系统集成工程师也就是让系统体积更小,效率更高的人。

6.软件测试工程师:软件测试是用来确认一个程序的品质或性能是否符合开发之前所提出的一些要求,主要是确认软件的质量如何,以改进软件产品。

7.数据库开发工程师:它是指设计、开发、维护管理大型数据库的专业人才,因为现在信息化时代,数据越来越庞大,需要专业的人才进行管理。

8.数据库分析师: 数据分析师指的是不同行业中,专门从事行业数据搜集、整理、分析,并依据数据做出行业研究、评估和预测的专业人员。他们利用分析数据来研判市场动向。

好吧,上面都是网上抄的,我接下来深入解释下大部分公司都有哪些岗位,每个岗位适合什么样的人?

一、软件制作过程中的分工(编码阶段)

你认为什么是一个软件?一个手机APP?一个网站?一个应用程序?一个小程序?一款游戏?我觉得说得都没错,上面都算是软件。但上面呈现出来的只是软件的表现形式,具体表现什么,整个软件的业务逻辑处理,数据存储,还有一个服务端在做这块内容。 所以简单来讲,我们软件制作分工可以分为前端开发 和 后端开发。而APP、网站、应用程序、小程序、游戏,你都可以理解它是一个View(视图),而这个View(视图)一般是由前端工程师开发出来的。而对应服务端的内容一般是由后端工程师开发出来的。

如何选择自己的软件方向

二、后端

相当一部分的后端开发工作就是开发数据访问服务,使前端可以通过调用后端服务对数据进行增、删、查、改,也就是经常听到的crud,从而实现前端对用户的请求响应。

比如你在一个大型网站注册时,该网站的前端就会调用其后端,把你的用户信息写入数据库,一个后端服务其实不局限于只被前端调用,还可以被mobile app调用,还可以其他后端服务调用。

当然我说的这些一个初中级工程师平常基本的工作,一旦你踏入高级或架构师行列,做的就不止这一些了,架构选项,架构调优,性能优化等等。

后端工程师主要需要的技能如下:

1)计算机基础

  • 计算机组成原理
  • 计算机网络:OSI七层协议、TCP/IP四层模型。
  • 算法:排序、分治、动态规划、搜索、回溯。
  • 数据结构:数组、队列、栈、堆、树、哈希表、字典树等。
  • 2)前端知识

    由于前端与后端的工作密切相关,所以后端工程师也应了解、学习前端的基本知识,且掌握的前端开发水平要能够支撑验证后端实践的程度。

    3)操作系统

    后台开发中,熟练使用Linux系统是最为关键的一环,毕竟后端服务多数都运行在Linux系统上。Linux的学习可以从以下方面入手:

  • 环境搭建
  • 系统安装
  • 图形界面使用
  • 常用命令
  • 软件安装配置
  • 网络管理
  • 系统维护
  • 服务器领域
  • 程序开发
  • 4)编程语言

    后端工程师至少要掌握一种编程语言。掌握一种编程语言,指的是要足够了解这种语言的功能和语法特性,能够理解它的设计原理、能力边界与高级功能,这样也有助于其他语言的学习。

    5)版本控制系统

    版本控制系统可以记录一个或若干文件内容变化,以便将来查阅特定版本的修订情况。在大型软件项目中,版本控制系统可以有效组织、管理源码及历史版本。常见的版本控制系统主要分为两类:

  • 集中式版本控制:版本库集中存放在中央服务器,代表产品是SVN。
  • 分布式版本控制:版本库分布在每个协作开发者的电脑中,代表产品包括GitHub、GitLab。
  • 6)数据库

    后台服务程序会处理各种数据,如订单、合同、用户数据等,这些数据一般存储到数据库中。数据库的学习主要分为两类:

  • 关系型数据库(Relational Databases)
  • 关系型数据库(Relational Database)指的是创建在关系模型的基础上的数据库,用于超大规模数据的存储。它借助于集合代数等数学概念和方法来处理数据库中的数据。数据库管理系统(DBMS,Database Management System),是一种专门用于存储、修改并从数据库提取信息的系统软件。

    常见的关系型数据库管理系统主要有MySQL、MariaDB、MS SQL、Oracle等。

  • 非关系型数据库(NoSQL Databases)
  • 非关系型数据库是对不同于传统的关系型数据库的数据库管理系统的统称,它使用对象关系映射(ORM)来促进与其数据的通信。

    常见的非关系型数据库管理系统主要有MongoDB、RethinkDB、CouchDB等。

    7)安全

    后端开发中,由于系统自身的漏洞引发的恶意攻击等安全问题,需要引起后端工程师的密切关注:

  • 跨站脚本攻击XSS
  • 跨站请求伪造攻击CSRF
  • 前端Cookies安全性
  • 点击劫持攻击
  • 传输过程安全问题
  • 用户密码安全问题
  • SQL注入攻击
  • 信息泄露
  • 社会工程学
  • 8)设计模式

    软件开发中要遵循最佳实践,这有助于后端工程师们写出更加健壮、可扩展的代码。

    设计模式七大原则:

  • 开闭原则(Open Closed Principle,OCP):一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。模块应尽量在不修改原(是”原”,指原来的代码)代码的情况下进行扩展。
  • 单一职责原则(Single Responsibility Principle, SRP):一个类或者模块应该有且只有一个改变的原因。如果一个类承担的职责过多,导致高耦合,这样一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。
  • 里氏代换原则(Liskov Substitution Principle,LSP):所有引用基类的地方必须能透明地使用其子类的对象,也可以简单理解为任何基类可以出现的地方,子类一定可以出现。
  • 依赖倒转原则(Dependency Inversion Principle,DIP):程序要依赖于抽象接口,不要依赖于具体实现。也就是要求对抽象进行编程,不要对实现进行编程,这样能够降低客户与实现模块间的耦合。
  • 接口隔离原则(Interface Segregation Principle,ISP):客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小的接口上。
  • 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP):尽量使用合成/聚合,而不是通过继承达到复用的目的
  • 最少知识原则(Least Knowledge Principle,LKP)或迪米特法则(Law of Demeter,LOD):一个软件实体应当尽可能少地与其他实体发生相互作用,以降低耦合。该原则希望类之间建立直接的联系,如果真的有需要建立联系,也希望能通过它的中间类或者跳转类来转达。
  • 如何选择自己的软件方向

    二、前端

    前端工程分类更清晰下,就按我们刚才举例来说吧。

    网站/小程序:前端工程师。

    APP(苹果/安卓): 苹果开发工程师、安卓开发工程师,这两个也可以统称应用工程师,但一般我们不会这么叫。

    应用程序:应用工程师。

    上面所说分类统称都是前端,对应的工程师岗位按我上面的叫没啥问题,游戏这行我没进入过,怕误导大家,有同行的兄弟可以补充下。

    开发APP和应用程序的又是另外一个分类,不过逐渐进入末期了,或者不久后大前端就可以把这波人淘汰一大半,目前已经淘汰很多了,今天重点还是讲偏网站/H5/小程序等前端工程师,其它感兴趣可以去百度搜索一下。

    前端开发工程师需要具备创新能力,高超的技术创造力和想象力,良好的沟通能力和不断学习的能力。当然专业能力也是非常重要的,具体包括但不限于以下:

    1)HTML5+CSS3

    HTML是网页的主要组成部分,网页的本质就是HTML,是用来制作超文本文档的的简单标记语言;CSS样式是对HTML语言的有效补充,通过使用CSS样式,便于页面的修改以及页面风格的统一,而且还可以减少网页的体积,通过HTML和CSS完成静态页面的布局。HTML5+CSS3是HTML+CSS的更新,增加了很多非常实用的功能。这部分主要是从PC端和移动端两方面掌握整体的页面布局技术,并且配合项目实战操练、学以致用;

    2)JS交互设计

    这一部分主要掌握JS的基本语法、算法和高级语法,熟练的使用面向对象的思想进行DOM编程,通过jQuery经典案例学习精通jQuery技术;

    3)Node开发

    这一部分主要ES6的基本用法、兼容性和核心语法,能使用ES6实现前端的模块开发,学习Node开发,并能用Node.js操作MongoDB数据库;

    4)前端框架

    这一部分主要是学习Vue、React、Angular这些前端主流框架,在实际开发中做到熟练运用,提高开发效率;

    5)小程序与APP开发

    掌握小程序和APP的开发,学习第三方AI平台的使用,并学习React Native混合开发框架,实现快速开发。

    如何选择自己的软件方向

    三、总结

    前端和后端都不容易,最重要是学好一门,另外一门也自然可以掌握起来。前期学习可以倚重,但千万不要轻易放弃,比如你喜欢前端,你可以70%的精力学习前端,留30%的精力学习后端,等你入了门(做完一个项目)你再进行选择一次。

    来源:一名小白程序员

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年10月11日
    下一篇 2022年10月11日

    相关推荐