当我进入软件开发领域时,我非常兴奋。我想要同时学习所有东西:游戏开发、移动开发、人工智能以及所有与之相关的内容。我把时间浪费在了写“hello world”和一些简单的程序上,使用了大约 30 种语言,只是为了弄清楚我应该学哪一种。
最后,一切都变得很无聊,因为我没能创造最酷的东西。然而,当我决定专注于一件事并把它学好时,一切都改变了。从那时起,我开始感受到了坚持不懈带来的好处。
面对现实吧,当人们进入软件行业时,不是每个人都知道他们想要做什么;更进一步说,不是每个人都能做出正确的选择好让自己在人群中脱颖而出。这对于初学者和初级开发人员来说确实如此。
但如果我们更深入地观察,就会惊讶地发现,即使在这个领域有一些经验的人也在因此而挣扎。这主要是因为软件开发每年都在随着新的技术栈、框架和语言的发展而快速发展。因此,作为软件开发人员,我们必须每天不断地学习。
在软件行业中选择一条理想的路径需要考虑以下几点:
- 知道如何达到目标(学习曲线、技术栈或语言)
- 工资中位数
- 工作环境
- 最后,是你自己的个人优势。
从以上标准和下面的解释来看,你就会知道什么是最适合你的。你可以选择多条路径——你可以选择“双重职业”——但是你应该至少精通其中一条路径。这不仅能缩短你的学习曲线,还能帮你更快地找到工作。
嘿,集中注意力,让我们一探究竟吧。
Web 开发
这是进入软件开发行业的一种非常常见和简单的路径。大多数开发人员都属于这一类,或者至少进行过一些 Web 开发。现在,Web 开发分为两大类:前端(即客户端)和后端(即服务器端)。在两者之间,我们有全栈开发,它包含了两者。
前端
前端开发工作的内容包括用户在浏览器或应用程序中看到的所有内容。前端开发人员负责 Web 应用程序的外观和用户体感。
其所需技能包括设计用户界面(UI)和提升用户体验(UX)、CSS、JavaScript、HTML,以及React.js 、 Vue.js 、[Angular 等越来越多的 UI 框架。
大多数框架都是基于 JavaScript 写的。
进入这个角色的门槛非常低,你只需要选择上面任何一个框架来配合 HTML、CSS 和 JS,就可以开始开发了。要成为前端开发人员,你不需要接受任何正规培训或获得计算机科学学位。事实上,大多数前端 Web 开发人员都是自学成才的,或者参加过新兵训练营。但是大专或本科学历是在该领域进一步发展的必要条件。
后端
后端是指发生在幕后的活动。它可以是从登录帐户,到从网上商店购买手机的任何活动。
后端开发主要关注数据库、脚本和网站架构。后端开发人员编写的代码能够将数据库信息传递给浏览器。这条路适合有计算机科学或软件工程背景的人。
进入后端开发至少需要:了解服务器端语言,如 Java、Python、 PHP 、 Golang 或 Ruby;.NET 或 Node.js (服务器端编程用的 JS 框架);数据库管理系统(DBMS)技术,如 MySQL 、 Mongo DB 、 Oracle 、 SQLserver 等;以及处理 Apache 、 Nginx 或 Microsoft IIS 等服务器的经验。良好的 Linux 背景对管理服务器相当有帮助。
全栈
全栈开发人员是既懂前端开发又懂后端开发的人,但并不一定在这两方面都是专家。这条路适合 entreprogrammers (程序员 / 企业家的混合)。这条路径很好,因为你可以很快推出一个完整的产品,甚至光靠自己的技能就可以启动你的创业公司。
许多初创公司对这一职位的需求很高,他们的目标就是希望以一种高成本效益的方式将所有这些功能整合在一起。现在,这条路即使对初学者来说都更容易了。
通过使用诸如 JavaScript 这样的语言,你可以选择像 React.js 这样的前端框架和像 Node.js 这样的后端框架,再加上像 Mongo DB 这样流行的 DBMS,从而成为一个全栈开发人员,然后你就可以开始做你想做的事情了。
Web 开发人员的平均工资因地区而有所差异。Glassdoor 的数据显示,美国 Web 开发人员的平均年薪为 7.5 万美元。收入最低的不到 5 万美元,而收入最高的开发人员收入超过 11.7 万美元。大多数 Web 开发人员都是全职工作。
移动开发
这是一个体面和直接的路径,特别是伴随着移动市场爆炸性的增长。如果你喜欢与移动应用程序交互,并且希望构建一个移动应用程序,那么移动开发可能是适合你的正确路径。
这也是非常具有企业家精神的,因为如果你足够幸运的话,你可以开发自己的应用或游戏并赚到数百万美元。移动开发平台有很多,但最流行的仍然是 Android 、 iOS 和 Windows 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、Ionic 。
Glassdoor 的数据显示,美国移动开发者的平均年薪为 97,445 美元,该领域的年薪通常在 7.8 万美元到 18.8 万美元之间。
桌面开发
桌面应用程序开发主导了软件行业几十年。然而,随着 Internet 的兴起,Web 应用程序以令人难以置信的速度占据了主导地位。随着智能手机的流行,移动应用的需求也越来越大,将桌面应用挤到了第三位。
然而,桌面开发远没有像许多人所想的那样消亡。今天,大多数企业和专业应用程序仍然是基于桌面的;例如,我们开发用的 IDE ——尽管基于云的 IDE 在这个领域中逐渐浮出水面。
桌面开发人员经常使用 GUI 工具包,如下一节讨论的那些。
JavaFX 和 Swing
JavaFX 和 Swing 是来自 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 编写的流行应用程序包括 Maya 和 VirtualBox 。
WPF :一种流行的、成熟的、基于 XAML 的 Microsoft 技术。使用 WPF,你可以用 C#或 Visual Basic.Net ( VB.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 在一段时间里颇受欢迎,并且有很多用它开发的应用程序,如 Slack 、 GitHub Desktop 和 Visual Studio Code 。尽管与其他技术相比,它与 PC 的交互能力要差得多,但它仍然可以使用 Electron 简单的 API 来实现基本的操作系统功能,或者直接使用 Node.js 调用.dll 文件。
大多数桌面开发人员都与成熟的企业合作。Glassdoor 的数据显示,在美国,桌面应用程序开发人员的全国平均年薪为 76,195 美元。其他地区的情况可能不同。根据不同的角色,高薪的桌面开发者可以挣到 11.7 万美元甚至更多,而低收入的开发者只能挣到 5.8 万美元甚至更少。
视频游戏开发
以前,当我玩 GTA Vice City 和其他游戏时,我对编程一无所知。因为我过去(现在仍然)是一个非常好奇的人,所以我到附近的网吧做了一些研究,并为自己开发了一款游戏。我想我可以在几天内构建一个游戏,然后邀请朋友来参加我想要的游戏派对。事情并没有按计划进行,但我有了一个重大发现——我热爱编程。生活总是让人有些出乎意料。
长话短说,我仍然认为游戏开发是一个很好的职业选择。这是一个困难的工作,竞争很激烈,工作时间很长。如果你对游戏很感兴趣,那就沿着这条路走下去,但要意识到你以后可能会换工作。游戏开发人员使用的框架包括 DirectX 、 OpenGL 、 Unity 3D 、 WebGL ,语言包括 c、c++、C#和 Java。JavaScript 和 HTML5 游戏越来越受欢迎。在移动设备上,Swift 和 Java 分别是 iOS 和 Android 游戏的首选技术。
Glassdoor 的数据显示,美国游戏开发者的年薪在 6.6 万至 14.8 万美元之间,平均年薪为 101,932 美元。
嵌入式系统
嵌入式系统控制着当今许多常用的设备。嵌入式系统是执行特定任务的微控制器或微处理器系统。如今,几乎所有的设备都有一个大脑。 Arduinos 、 PIC 、 8051 和 Atmel 微控制器通常用于设计嵌入式系统。嵌入式开发人员通常使用 c、c++、汇编、Java 等语言,或专有技术、框架和工具包。
随着物联网(IoT:Internet of Things)、人工智能(AI:Artificial Intelligence)和实时分析的兴起,嵌入式系统已经发展到可以控制包括家庭和建筑在内的各种系统的自动化。在嵌入式系统中工作是一个很好的选择,特别是对于那些有电子背景的人来说。但不管你的背景如何,只要你下定决心,你几乎可以学到任何东西。
Glassdoor 的数据显示,在美国,嵌入式软件开发人员的年薪在 5.8 万美元至 11.2 万美元之间,平均年薪为 8 万美元。
数据科学
数据科学是一个多学科领域,使用科学的方法、过程、算法和系统从结构化和非结构化数据中提取知识和见解。尽管这是科技行业最热门、薪酬最高的工作之一,但数据科学本身的历史可能比你想象的还要悠久。
它是从数学、统计学、计算机科学和信息科学等多个领域中提取的技术和理论。同样,数据科学并不是软件工程的子集,但是大多数有数学背景的软件工程师和计算机科学毕业生更容易进入这个领域。
如果你是初学者,我不会认为这是一个很好的选择。数据科学主要是为那些已经在技术、统计学或类似领域有工作经验的人准备的(当然,如果你下定了决心,这也不应该让你气馁)。使用数据科学时,需要理解的主题和工具包括:*
*线性代数
*非线性和动态系统
*解析几何
*优化
*微积分
*统计和概率
*编程语言(R、Python、SAS、Java)
*软件( Excel , SAS Enterprise Miner )
*通用的 DS 和 MLASS 平台
*和 Analytics
*Azure Machine Learning Studio
*谷歌云机器学习引擎
*BigML
*Rapidminer 和 KNIME
*Amazon SageMaker
*数据可视化:Power BI、Tableau、 使用 Plotly/ggplot/Highcharts 的 R/Python
*机器学习的知识(监督、非监督和强化学习)
*大数据( MapR 、 Redshift 、Snowflake、 BigQuery、 Cassandra 、Hadoop、 Spark )
*硬件(CPU、GPU、TPU、FPGA、ASIC)
虽然你不需要一开始就了解所有这些技术,但是为了保持竞争力,不断学习是很重要的。
数据科学家通常在大公司和机构工作,年薪在 8.6 万到 19 万美元之间,平均年薪为 11.7 万美元。
工具和企业
这个领域的工作涉及到创建工具,以便在机构或内部应用程序中使用,为你的公司创建更简单的工作流,这是非常了不起和值得的。
然而,企业级的开发工作可能非常具有挑战性,需要一套独特的能力和知识。企业开发人员通常必须对组织及其策略有深刻的理解,这决定了如何构建软件。同样,如果你是刚刚开始职业生涯,则不建议使用此路径。
企业工具通常是面向对象编程的,设计成可以跨多个业务伙伴运行。企业开发工具将程序和功能链接在一起,允许企业实体有效且高效地工作。
好的企业开发工具将包括 Allegro Common Lisp 、Java、C++ 接口、 SOAP 和 XML 支持。它应该包括为最高级功能工具开发的 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 CouchDB 或 SQL DB 之类的 NoSQL 数据库;编程语言(Java、Python、C#、c++、JavaScript 等);Linux、数据获取、信息安全和特定的 Web 技术,如 REST 和 Grails 。
云开发者每年的收入在 7.3 万到 8.3 万美元之间,平均年薪为 7.7 万美元。
软件测试
软件测试是评估软件应用程序功能的过程,目的是确定它是否满足指定的需求并识别其中任何的缺陷。有两种类型的测试:手动测试和自动测试。如果你是一个编程新手,你可以把这看作是执行算法演习。作为一个软件测试人员,你将:
- 分析用户的故事、用例,以及合理性和可行性的需求;
- 与其他团队成员和部门合作;
- 执行所有级别的测试(系统、集成和回归测试);
- 设计和开发自动化脚本;
- 检测和跟踪软件缺陷和不一致性;
- 在整个敏捷产品生命周期中应用质量工程原则;以及
- 提供支持和文档。
熟练掌握自动化工具,例如 Selenium 、 Katalon Studio 、 TestComplete 、统一功能测试、 soapUI ,或者 Rational functional Tester ,等等,这些工具都是非常重要的。
编程知识是至关重要的。下面是一些测试时需要用到的语言和框架:
Javascript。流行的框架有: cucumber.js 、 Nightwatch 、 Protractor
Java。流行的框架包括: Gauge 、 TestNG 、 JUnit
Python。流行的框架包括: PyUnit 、 Lettuce 、 Behave
C#。流行的框架包括:Visual Studio 单元测试框架、 SpecFlow 、 NUnit
PHP。流行的框架包括: Codeception 、 Behat 、 SimpleTest
Ruby。流行的框架包括: Capybara 、 RSpec 、 minitest
Glassdoor 的数据显示,美国软件测试人员的全国平均年薪为 61977 美元,而经验更丰富的人的年薪最高可达 8.4 万美元。
DevOps
DevOps 表示开发加运维。它是一组使软件开发团队和 IT 团队之间过程自动化的实践操作,好让他们可以更快、更可靠地构建、测试和发布软件。在更大程度上,DevOps 是一种强调思维方式转变、更好的协作和更紧密集成的文化。
DevOps 工作内容的演变使得开发者掌控了更多的运维——这就是 Chef 的工作方式。我们再也不能把开发代码直接扔出去了事。我们的工程师需要负责 QA、编写和运行他们的测试,才能将软件交付给客户。—— Julian Dunn,Chef 的产品经理
DevOps 要求精通编程和脚本。
必须掌握 Gradle 、Git、Linux、 Jenkins 、 Docker 、 Kubernetes 、 Puppet 等工具。此外,DevOps 工程师应该了解基于数据中心和云基础设施的组件,并能够确保系统具有针对常见网络安全漏洞的防御机制。
DevOps 专业人员的收入在 9.1 万美元到 15.5 万美元之间,具体取决于他们所在的地理位置。
人工智能
20 年前,人工智能和机器学习的概念还仅限于科幻电影。而现在它们已成为了我们日常生活的一部分,在未来十年,我们的社会将进一步依赖人工智能、机器学习、深度学习网络等等。
人工智能不是软件工程的子集,但大多数计算机科学家和软件工程师正在转向人工智能,或至少在他们的应用程序中使用一些人工智能。像谷歌这样的大公司,例如,已经可以让开发人员轻松地通过工具在他们的应用程序中包含人工智能的能力,如 ML 工具包:一个机器学习的工具包,其附带许多 API,并且能够给图像打标,能检测条形码,文本,人脸和物体,具有自然语言处理等功能。
人工智能主要是模拟人类的智能处理。这些过程包括学习(获取信息,获取使用信息的规则)、推理(使用规则得出近似或明确的结论)和自我纠正。
流行的人工智能云服务包括亚马逊的人工智能服务, IBM 的沃森助手,微软的认知服务和前面提到的谷歌人工智能服务。
以下是从事人工智能项目的主要语言:
- Python:Python 被认为是人工智能应用的首选。它的简单性和强大的库使它更容易实现 AI 算法。其中一些库包括 NumPy 和 PyBrain ,前者有助于执行许多科学计算,后者使我们能够在 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 沃森、 Keras scikit-learn、TensorFlow、Theano 和 Torch。
结论
选择正确的道路并不意味着你必须坚持到你的职业生涯结束,而是要去掌握这条特定的道路所需的技能。一旦你掌握了,你可能会决定学习新的东西,以扩展你的视野和知识。记住,你必须不断学习。