首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在软件开发行业选择一条正确的职业道路?

当我进入软件开发领域时,我非常兴奋。我想要同时学习所有东西:游戏开发、移动开发、人工智能以及所有与之相关的内容。我把时间浪费在了写“hello world”和一些简单的程序上,使用了大约30种语言,只是为了弄清楚我应该学哪一种。

最后,一切都变得很无聊,因为我没能创造最酷的东西。然而,当我决定专注于一件事并把它学好时,一切都改变了。从那时起,我开始感受到了坚持不懈带来的好处。

面对现实吧,当人们进入软件行业时,不是每个人都知道他们想要做什么;更进一步说,不是每个人都能做出正确的选择好让自己在人群中脱颖而出。这对于初学者和初级开发人员来说确实如此。

但如果我们更深入地观察,就会惊讶地发现,即使在这个领域有一些经验的人也在因此而挣扎。这主要是因为软件开发每年都在随着新的技术栈、框架和语言的发展而快速发展。因此,作为软件开发人员,我们必须每天不断地学习。

在软件行业中选择一条理想的路径需要考虑以下几点:

  1. 知道如何达到目标(学习曲线、技术栈或语言)
  2. 工资中位数
  3. 工作环境
  4. 最后,是你自己的个人优势。

从以上标准和下面的解释来看,你就会知道什么是最适合你的。你可以选择多条路径——你可以选择“双重职业”——但是你应该至少精通其中一条路径。这不仅能缩短你的学习曲线,还能帮你更快地找到工作。

嘿,集中注意力,让我们一探究竟吧。

Web开发

这是进入软件开发行业的一种非常常见和简单的路径。大多数开发人员都属于这一类,或者至少进行过一些Web开发。现在,Web开发分为两大类:前端(即客户端)和后端(即服务器端)。在两者之间,我们有全栈开发,它包含了两者。

前端

前端开发工作的内容包括用户在浏览器或应用程序中看到的所有内容。前端开发人员负责Web应用程序的外观和用户体感。

其所需技能包括设计用户界面(UI)和提升用户体验(UX)、CSS、JavaScript、HTML,以及React.jsVue.jsAngular等越来越多的UI框架。

大多数框架都是基于JavaScript写的。

进入这个角色的门槛非常低,你只需要选择上面任何一个框架来配合HTML、CSS和JS,就可以开始开发了。要成为前端开发人员,你不需要接受任何正规培训或获得计算机科学学位。事实上,大多数前端Web开发人员都是自学成才的,或者参加过新兵训练营。但是大专或本科学历是在该领域进一步发展的必要条件。

后端

后端是指发生在幕后的活动。它可以是从登录帐户,到从网上商店购买手机的任何活动。

后端开发主要关注数据库、脚本和网站架构。后端开发人员编写的代码能够将数据库信息传递给浏览器。这条路适合有计算机科学或软件工程背景的人。

进入后端开发至少需要:了解服务器端语言,如Java、Python、PHPGolang或Ruby;.NETNode.js(服务器端编程用的JS框架);数据库管理系统(DBMS)技术,如MySQLMongo DBOracleSQLserver等;以及处理ApacheNginx或Microsoft IIS等服务器的经验。良好的Linux背景对管理服务器相当有帮助。

全栈

全栈开发人员是既懂前端开发又懂后端开发的人,但并不一定在这两方面都是专家。这条路适合entreprogrammers (程序员/企业家的混合)。这条路径很好,因为你可以很快推出一个完整的产品,甚至光靠自己的技能就可以启动你的创业公司。

许多初创公司对这一职位的需求很高,他们的目标就是希望以一种高成本效益的方式将所有这些功能整合在一起。现在,这条路即使对初学者来说都更容易了。

通过使用诸如JavaScript这样的语言,你可以选择像React.js这样的前端框架和像Node.js这样的后端框架,再加上像Mongo DB这样流行的DBMS,从而成为一个全栈开发人员,然后你就可以开始做你想做的事情了。

Web开发人员的平均工资因地区而有所差异。Glassdoor的数据显示,美国Web开发人员的平均年薪为7.5万美元。收入最低的不到5万美元,而收入最高的开发人员收入超过11.7万美元。大多数Web开发人员都是全职工作。

移动开发

这是一个体面和直接的路径,特别是伴随着移动市场爆炸性的增长。如果你喜欢与移动应用程序交互,并且希望构建一个移动应用程序,那么移动开发可能是适合你的正确路径。

这也是非常具有企业家精神的,因为如果你足够幸运的话,你可以开发自己的应用或游戏并赚到数百万美元。移动开发平台有很多,但最流行的仍然是AndroidiOSWindows mobile。Android占据了全球最大的市场份额(StatCounter的数据显示为76.23%),IOS以22.17%位居第二;Windows mobile拖在后面,为0.2%。

要成为一名Android开发者,你必须从Java(它已经在Android开发领域流行很长时间了)或Kotlin(这是Android平台新的官方语言)开始你的旅程。然而,这两种语言是可互操作的,并且可以一起使用。

在开始iOS开发之前,你需要学习Objective-C。然而,在苹果的生态系统中,它正慢慢地被一种更强大的语言——Swift所取代。

最后,如果你对Windows Mobile感兴趣,可以使用C#这样的语言。从服务器应用程序、游戏和移动应用程序,到Web服务,你几乎可以用C#创建一切。

Xamarin平台彻底改变了C#社区的期待。Xamarin是一个应用程序构建工具,它使C#开发人员可以很容易地为Android和iOS用户创建应用程序。这就引出了跨平台开发的概念,跨平台开发是一个术语,用于描述可构建运行在多个平台上的应用程序。最流行的跨平台构建器包括React Native、Flutter、Xamarin、IonicPhoneGap

Glassdoor的数据显示,美国移动开发者的平均年薪为97,445美元,该领域的年薪通常在7.8万美元到18.8万美元之间。

桌面开发

桌面应用程序开发主导了软件行业几十年。然而,随着Internet的兴起,Web应用程序以令人难以置信的速度占据了主导地位。随着智能手机的流行,移动应用的需求也越来越大,将桌面应用挤到了第三位。

然而,桌面开发远没有像许多人所想的那样消亡。今天,大多数企业和专业应用程序仍然是基于桌面的;例如,我们开发用的IDE——尽管基于云的IDE在这个领域中逐渐浮出水面。

桌面开发人员经常使用GUI工具包,如下一节讨论的那些。

JavaFX和Swing

JavaFXSwing是来自Oracle的两个Java UI框架。两者都是跨平台的。JavaFX是较新的产品,Oracle鼓励它作为Swing的替代品。JavaFX还通过场景生成器(Scene Builder)提供了拖放特性,这使开发变得更快,它还提供了现代化的UI。

大多数桌面应用程序仍然维持在用Swing。如果你熟悉Java,这个选项是合适的。用Swing编写的一个示例应用程序是JetBrains Intellij

Qt和WPF

Qt:一个跨平台的,基于C++的UI框架。你可以用代码编写UI对象,也可以使用QML, QML是一种声明式语言,有点类似于JSON。用Qt编写的流行应用程序包括MayaVirtualBox

WPF:一种流行的、成熟的、基于XAML的Microsoft技术。使用WPF,你可以用C#或Visual Basic.NetVB.NET)编写。

WPF具有强大的模板、样式和绑定功能,适合大型应用程序。

WPF也有一个相对陡峭的学习曲线,但它是一项成熟的技术,可以在任何Windows操作系统上运行。Yahoo Messenger使用WPF。其他你想知道的微软技术,包括提供拖放功能的Windows表格,以及通用Windows平台(UWP),微软最新的桌面应用技术。它们是基于XMAL的,就像WPF,你可以用C#、 VB.NET和c++来写。大多数应用程序都是用C#编写的。

Electron

Electron是一个框架,它允许你使用网络技术(HTML/CSS/JavaScript)来开发桌面应用程序。Electron背后的奥妙在于它使用了Node.js和Chromium在桌面窗口中创建Web视图。Electron在一段时间里颇受欢迎,并且有很多用它开发的应用程序,如SlackGitHub DesktopVisual Studio Code。尽管与其他技术相比,它与PC的交互能力要差得多,但它仍然可以使用Electron简单的API来实现基本的操作系统功能,或者直接使用Node.js调用.dll文件。

大多数桌面开发人员都与成熟的企业合作。Glassdoor的数据显示,在美国,桌面应用程序开发人员的全国平均年薪为76,195美元。其他地区的情况可能不同。根据不同的角色,高薪的桌面开发者可以挣到11.7万美元甚至更多,而低收入的开发者只能挣到5.8万美元甚至更少。

视频游戏开发

以前,当我玩GTA Vice City和其他游戏时,我对编程一无所知。因为我过去(现在仍然)是一个非常好奇的人,所以我到附近的网吧做了一些研究,并为自己开发了一款游戏。我想我可以在几天内构建一个游戏,然后邀请朋友来参加我想要的游戏派对。事情并没有按计划进行,但我有了一个重大发现——我热爱编程。生活总是让人有些出乎意料。

长话短说,我仍然认为游戏开发是一个很好的职业选择。这是一个困难的工作,竞争很激烈,工作时间很长。如果你对游戏很感兴趣,那就沿着这条路走下去,但要意识到你以后可能会换工作。游戏开发人员使用的框架包括DirectXOpenGLUnity 3DWebGL,语言包括c、c++、C#和Java。JavaScript和HTML5游戏越来越受欢迎。在移动设备上,Swift和Java分别是iOS和Android游戏的首选技术。

Glassdoor的数据显示,美国游戏开发者的年薪在6.6万至14.8万美元之间,平均年薪为101,932美元。

嵌入式系统

嵌入式系统控制着当今许多常用的设备。嵌入式系统是执行特定任务的微控制器或微处理器系统。如今,几乎所有的设备都有一个大脑。ArduinosPIC8051和Atmel微控制器通常用于设计嵌入式系统。嵌入式开发人员通常使用c、c++、汇编、Java等语言,或专有技术、框架和工具包。

随着物联网(IoT:Internet of Things)、人工智能(AI:Artificial Intelligence)和实时分析的兴起,嵌入式系统已经发展到可以控制包括家庭和建筑在内的各种系统的自动化。在嵌入式系统中工作是一个很好的选择,特别是对于那些有电子背景的人来说。但不管你的背景如何,只要你下定决心,你几乎可以学到任何东西。

Glassdoor的数据显示,在美国,嵌入式软件开发人员的年薪在5.8万美元至11.2万美元之间,平均年薪为8万美元。

数据科学

数据科学是一个多学科领域,使用科学的方法、过程、算法和系统从结构化和非结构化数据中提取知识和见解。尽管这是科技行业最热门、薪酬最高的工作之一,但数据科学本身的历史可能比你想象的还要悠久。

它是从数学、统计学、计算机科学和信息科学等多个领域中提取的技术和理论。同样,数据科学并不是软件工程的子集,但是大多数有数学背景的软件工程师和计算机科学毕业生更容易进入这个领域。

如果你是初学者,我不会认为这是一个很好的选择。数据科学主要是为那些已经在技术、统计学或类似领域有工作经验的人准备的(当然,如果你下定了决心,这也不应该让你气馁)。使用数据科学时,需要理解的主题和工具包括:

虽然你不需要一开始就了解所有这些技术,但是为了保持竞争力,不断学习是很重要的。

数据科学家通常在大公司和机构工作,年薪在8.6万到19万美元之间,平均年薪为11.7万美元。

工具和企业

这个领域的工作涉及到创建工具,以便在机构或内部应用程序中使用,为你的公司创建更简单的工作流,这是非常了不起和值得的。

然而,企业级的开发工作可能非常具有挑战性,需要一套独特的能力和知识。企业开发人员通常必须对组织及其策略有深刻的理解,这决定了如何构建软件。同样,如果你是刚刚开始职业生涯,则不建议使用此路径。

企业工具通常是面向对象编程的,设计成可以跨多个业务伙伴运行。企业开发工具将程序和功能链接在一起,允许企业实体有效且高效地工作。

好的企业开发工具将包括Allegro Common Lisp、Java、C++接口、SOAPXML支持。它应该包括为最高级功能工具开发的CORBA ORB数据库连接,如果企业需要,它应该在工具集里包含外部函数接口。适合此路径的编程语言包括Java、C#、Python、JavaScript、C和C++等。

这些开发者的收入在6.2万至11.7万美元之间,平均年薪为8.7万美元。

云计算

随着越来越多的应用程序迁移到云上,对云领域的专业人员的需求不断上升。这个领域的必备技能之一是云安全。

认证云安全专业人员(CCSP:Certified Cloud Security Professional )证书可以为你提供各种各样的职业机会。基础设施即服务(IAS:infrastructure-as-service)之争已基本尘埃落定,亚马逊网络服务AWS微软Azure和谷歌云平台在市场上各有斩获,其中AWS获得了最大份额。

所需技能包括使用云平台的能力;数据库(诸如Mongo DB、Apache CouchDBSQL DB之类的NoSQL数据库;编程语言(Java、Python、C#、c++、JavaScript等);Linux、数据获取、信息安全和特定的Web技术,如RESTGrails

云开发者每年的收入在7.3万到8.3万美元之间,平均年薪为7.7万美元。

软件测试

软件测试是评估软件应用程序功能的过程,目的是确定它是否满足指定的需求并识别其中任何的缺陷。有两种类型的测试:手动测试和自动测试。如果你是一个编程新手,你可以把这看作是执行算法演习。作为一个软件测试人员,你将:

  • 分析用户的故事、用例,以及合理性和可行性的需求;
  • 与其他团队成员和部门合作;
  • 执行所有级别的测试(系统、集成和回归测试);
  • 设计和开发自动化脚本;
  • 检测和跟踪软件缺陷和不一致性;
  • 在整个敏捷产品生命周期中应用质量工程原则;以及
  • 提供支持和文档。

熟练掌握自动化工具,例如SeleniumKatalon StudioTestComplete、统一功能测试、soapUI,或者Rational functional Tester,等等,这些工具都是非常重要的。

编程知识是至关重要的。下面是一些测试时需要用到的语言和框架:

  1. Javascript。流行的框架有:cucumber.jsNightwatchProtractor
  2. Java。流行的框架包括:GaugeTestNGJUnit
  3. Python。流行的框架包括:PyUnitLettuceBehave
  4. C#。流行的框架包括:Visual Studio单元测试框架、SpecFlowNUnit
  5. PHP。流行的框架包括:CodeceptionBehatSimpleTest
  6. Ruby。流行的框架包括:CapybaraRSpecminitest

Glassdoor的数据显示,美国软件测试人员的全国平均年薪为61977美元,而经验更丰富的人的年薪最高可达8.4万美元。

DevOps

DevOps表示开发加运维。它是一组使软件开发团队和IT团队之间过程自动化的实践操作,好让他们可以更快、更可靠地构建、测试和发布软件。在更大程度上,DevOps是一种强调思维方式转变、更好的协作和更紧密集成的文化。

DevOps工作内容的演变使得开发者掌控了更多的运维——这就是Chef的工作方式。我们再也不能把开发代码直接扔出去了事。我们的工程师需要负责QA、编写和运行他们的测试,才能将软件交付给客户。—— Julian Dunn,Chef的产品经理

DevOps要求精通编程和脚本。

必须掌握Gradle、Git、Linux、JenkinsDockerKubernetesPuppet等工具。此外,DevOps工程师应该了解基于数据中心和云基础设施的组件,并能够确保系统具有针对常见网络安全漏洞的防御机制。

DevOps专业人员的收入在9.1万美元到15.5万美元之间,具体取决于他们所在的地理位置。

人工智能

20年前,人工智能和机器学习的概念还仅限于科幻电影。而现在它们已成为了我们日常生活的一部分,在未来十年,我们的社会将进一步依赖人工智能、机器学习、深度学习网络等等。

人工智能不是软件工程的子集,但大多数计算机科学家和软件工程师正在转向人工智能,或至少在他们的应用程序中使用一些人工智能。像谷歌这样的大公司,例如,已经可以让开发人员轻松地通过工具在他们的应用程序中包含人工智能的能力,如ML工具包:一个机器学习的工具包,其附带许多API,并且能够给图像打标,能检测条形码,文本,人脸和物体,具有自然语言处理等功能。

人工智能主要是模拟人类的智能处理。这些过程包括学习(获取信息,获取使用信息的规则)、推理(使用规则得出近似或明确的结论)和自我纠正。

流行的人工智能云服务包括亚马逊的人工智能服务IBM的沃森助手微软的认知服务和前面提到的谷歌人工智能服务。

以下是从事人工智能项目的主要语言:

  1. Python:Python被认为是人工智能应用的首选。它的简单性和强大的库使它更容易实现AI算法。其中一些库包括NumPyPyBrain,前者有助于执行许多科学计算,后者使我们能够在Python中使用机器学习。
  2. R:说到统计计算,R是最强大的语言之一。除了是一种通用语言外,R还有许多包,如RODBC、gmodels、class和tm,它们都用于机器学习领域。这些包使得机器学习算法的实现更加容易。
  3. Java:人工智能与搜索算法、人工神经网络和遗传算法有很大关联性。Java提供了许多好处:易于使用、易于调试、大量的包服务、简化大型项目的工作、数据的图形表示和更好的用户交互。由于Java支持对Apache Spark和Apache Hadoop等大数据平台的无缝访问,它已经在数据分析相关的AI开发中巩固了自己的地位。
  4. Lisp:基于Lambda演算,Lisp是人工智能领域最古老的语言之一。Lisp可以被描述为计算机程序的实用数学符号。人工智能开发人员经常在机器学习任务繁重的AI项目中求助于Lisp语言,因为Lisp提供了快速原型化功能、对符号表达式的支持、一个集合类型库,并且高度灵活,能够满足他们解决问题的需要。

你可能希望研究的其他语言包括c++、JavaScript和 Prolog

目前最流行的人工智能工具有IBM沃森、Kerasscikit-learnSwift AI、TensorFlow、Theano和Torch。

在美国,大多数AI开发者的年薪在$97,000(第25百分位)到$143,000(第75百分位)之间。

结论

选择正确的道路并不意味着你必须坚持到你的职业生涯结束,而是要去掌握这条特定的道路所需的技能。一旦你掌握了,你可能会决定学习新的东西,以扩展你的视野和知识。记住,你必须不断学习。

原文链接:

How to Choose the Right Career Path in Software Development

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/w4LPOKE6OAAmemfGwC67
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券