苹果
今年的新 iPhone 你们也看到了。
旗舰款——iPhone Xs,iPhone Xs Max。
还有个五光十色“廉价版”
——iPhone Xr
发布会一结束,我看我的朋友圈就看到有人订购了,听说新iPhone太难买了,为什么难呢?因为余额不足呗;蚂蚁花呗不够用呗;信用卡不够刷呗;
但是罗马不是一日建成的,苹果也不是一天就贵起来的,然而最扎心的是,新款iPhone价格破万,你还没有月薪过万。
想要
月薪过万,选对行业、岗位很重要
在我们身边,经常听得到别人家的工资,动则就是一万起;近年来北京上海的平均工资,也都远远超过了一万;甚至不久前,一位在公园为女儿相亲的上海老大爷直言:月薪一万是讨饭。
乍一看,好像月薪过万真是一件再稀松平常不过的事,所以在总的概率上讲,想要月薪过万,还是挺难的?
数据显示:2017年全国主动申报个税人数,也就是年收入12万以上的人数,大概1500万,就算没主动申报个税的也是1500万,那月薪过万的总人口也不过3000万。而2017年全国总的就业人口,超过7.7亿,也就是月薪过万的人数占总就业人数不到5%。
月薪
过万,你就打败了至少95%的职场人。
并且,想要月薪过万,还很大程度上跟工作经验、行业、岗位等有关。
工作时间越长,工资越高;互联网行业,相比传统的制造业、农林牧副渔要有更高的薪酬;技术岗普遍比职能岗待遇高。
月薪
过万,都是什么职业?
互联网行业这几年一直是“朝阳行业”。无论是前段时间鼓吹是下一个风口的“人工智能”,还是近来爆火的“区域链”,互联网行业一直处于“爆炸式上升”的阶段,各大互联网公司对毕业生开出的价位也越来越高,甚至到了“不过万就无人问津”的程度,月入过万者多如牛毛。
那怎么样才能做到月薪过万的程序员呢?
一、用技能赚钱
现在,有这样一种主流观念,压垮了很多新手软件开发者,那就是你需要学习很多东西才能成为软件开发人员,并且很多人不知道从哪里开始起步。
这里我会尝试着具体说明那些在你追求成为软件开发人员的路上将让你受益的必要技术技能。
二、
编程语言
不懂编程语言,怎么能成为一个真正的程序员?
许多新手程序员会试图一次性或在第一份工作之前学习几种编程语言,以便于有备无患。
虽然我个人认为你应该学会一种以上编程语言,但是不建议提前这样做,因为这只会导致混乱,并且会分散你需要学习的其他技能的精力。
相反,我建议你应该深入研究,重点学习单一编程语言的来龙去脉,这样你才能对用这种编码语言来写代码信心十足。
那么在你决定想要成为什么样的开发人员的时候,怎么样才能尽可能地独树一帜呢?
三、
如何构造代码
在学习了一门编程语言之后——或者最好是在学习的同时——我坚信,你需要知道的下一件事就是如何正确地构造你的代码。
我所
说的构造代码是什么意思呢?
我的意思是,要写出好的,清晰的,易于理解的代码,不需要大量注释,因为代码本身就是一种表达方式。
很多软件开发者在他们整个职业生涯都不曾去学习这个技能,这是不幸的,因为这是你的老板判断一个软件开发人员技术和能力的主要方式。
良好的代码结构展示了对这种技艺的热衷,而不仅仅是为了完成工作。
构建代码是软件开发真正的艺术部分,但它也是至关重要的,因为你和你的同事得花费相当多的时间来维护现有的代码,而不是编写新的代码。
四、
面向对象的设计
这一条是有争议的,特别是如果你正在学习的编程语言并不面向对象,但是有大量的软件开发世界会按照面向对象设计的思维思考,所以你需要确保你了解它。
面向对象的设计是一种将复杂程序设计分解为单独的类或对象(类的实例)的方法,其中封装功能且具有特定的角色和责任。
在软
件开发中,我们总是试图管理复杂性。
从对象的角度思考可以帮助我们做到这一点,因为它能让我们从一堆交互组件中定义并设计一个复杂的系统,而不是作为一个整体的试图解决整个复杂性。
现在的编程世界有着大量的函数式编程语言,但你在软件开发中找到的最流行的语言和模式,仍然深受面向对象设计和分析的影响。
你应该好好理解什么是类,继承的不同类型——何时使用它们——还有理解像多态性和封装等术语。
五、
算法和数据结构
如果你上传统院校学习并想获得计算机科学学位的话,那么这是一个很大的考点。
算法是解决各种计算机科学/编程问题的常用方法。
例如,有若干常见的在程序上用于排序的算法。每一种排序算法都有一系列关于速度,内存大小要求,以及数据理想类型的不同属性。
计算机科学领域有很多这样的算法,并且理解如何变化这些算法来解决你可能遇到的棘手问题也很重要,当你解决现实编程问题的时候。
通常情况下,擅长这些算法可以让一个开发人员在1个小时之内就能解决可能需要另一个开发人员几天时间才能搞清楚的问题。
除非你熟悉和擅长算法,否则你甚至不知道已经有了优雅的解决方案在那里。因此,仅仅只为这个原因,我认为这也是一个值得掌握的宝贵技能。
数据结构也是如此,并且可以与算法结合使用。
有几个所有软件开发者都应该熟悉数据结构中的,包括:
数组或向量
链表
堆栈
队列
树
哈希
集合
通过熟练掌握数据结构和算法,你可以轻松又优雅地解决许多艰难的编程问题。
学习这些东西是一个挑战,但非常值得。这是可以让你超越众多同行的技能之一。大多数软件开发人员都不擅长这个领域。
如果你想通过如微软或谷歌这样的大公司的面试,那么你一定得掌握这个技能集。
六、
开发平台及相关技术
你应该具备一些经验,并至少掌握一个开发平台以及与之相关的技术或框架。
我所
说的平台是什么意思呢?
通常它的意思是操作系统(OS),但也适用于其他可以充当类似于操作系统角色的抽象。
例如,你可以是专注于Mac或Windows操作系统得Mac开发者或Windows开发者,你也可以是一名专注于特定的web平台的web开发人员。
具体确切的关于平台是什么就不讨论了——不同的人会有不同的看法——但这里我要定义平台为你开发的特定环境,它有自己的生态系统和特殊性。
再者,这是另一个我认为选择并非那么重要的技术技能,只要你选择了一个就好。
企业通常会聘请开发人员针对特定的平台或技术开发软件。
你作为iOS开发者将更容易找到工作,如果你专业于那个特定平台的话。
这意味着要熟悉平台本身,以及开发工具,惯用模式,还有大多数程序员在为那个平台开发时会使用的通用框架。
你可能会认为编程语言的选择决定了平台,但实际上事实情况很少是这样的。
就拿C#举例。如果你是一个C#开发人员,那么你可以用这种编程语言为Windows,Mac,iOS,Android,Linux,甚至是嵌入式系统写代码。
所以,不要仅仅只是选择语言;还要选择平台。
七、
框架或堆栈
除了学习特定的编程语言和平台,我高度建议去学习框架,或者更好的是,与之相配套的完整的开发堆栈。
什么是框架?
什么是堆栈?
框架就是一系列被用于在特定平台或多个平台上开发代码的库。它通常可以使得在该平台上的编程任务变得更加容易。
看这个C#的例子。大多数C#开发人员使用.NET框架来编写C#应用程序。 .NET框架包括许多库和类,能够让C#开发人员在更高的抽象级别上工作,因为每当他想做什么事情的时候,没有必要完全重新发明轮子。
例如,.NET框架的部分还包含了处理图像的代码。这类代码从头编写是极其困难的,所以框架极大地帮助了C#开发人员去编写需要以某种方式处理图像的代码。
堆栈则有点不同。堆栈是一组技术,通常包括一个框架,并且常一起用于创造一个完整的应用程序。
例如,有一个常见的称为MEAN的栈。它代表MongoDB,Express.js,AngularJS,和Node.js。
Mong
oDB是一个数据库技术。
Express.js是一个用于创建web应用程序的Node.js框架。
AngularJS是一个用于为web应用程序创建用户界面的前端Java框架。
最后,Node.js是一个用Java开发基于web应用程序的运行时环境。
有没有理解所有这些东西并不重要—— 除非你打算成为一个MEAN开发者——重要的是要明白,如果你知道所有这些技术和框架,那么你就能够开发一个完整的web应用程序。
栈使得创建应用程序变得更容易,因为它们提供了一种许多开发者用来开发应用程序的通用范式,因此知识可以很容易地共享,并且你也能确定哪些特定的技能集市可以一起工作的。
学习堆栈真的是非常有价值,因为这意味着你拥有开发一个完整的应用程序所有必要的技能。很多使用特定堆栈开发应用程序的企业,更愿意雇用那些熟悉那类堆栈能够立马开展工作的软件开发人员。
八、
基础数据库知识
即使数据库的景色在过去几年时间里已经改变了不少,但我不认为数据库会很快消失,因此对此了解一二总是不会错的,对吧?
当前主要有两种数据库技术:关系数据库和文档数据库。
现在的开发人员至少应该熟悉关系数据库,并稍微了解文档数据库。
在软件开发中,数据库经常被用来存储应用程序的数据。
当然,有些团队甚至有专门的数据库开发人员或数据库管理员(DBA),但是这并不能真正允许你不懂至少是基本的数据库知识。
最起码,你应该知道:
数据库如何工作
如何执行基本的查询来获取数据
如何插入、更新和删除数据
如何连接数据集
此外,你可能会想知道如何以编程方式从你的代码与你所选择的平台和/或框架检索和存储数据。
大多数开发者被期待能够编写与数据库进行交互代码。
九、源代码控制
源代码控制是任何软件开发项目的组成部分。
在我们使用源代码控制之前,我们必须在网络上共享项目的所有文件,或者通过U盘来回查看存储在上面的不同软件版本。
当前,几乎所有专业的开发者人员都被期待懂得如何使用源代码控制来反复检查代码,并希望懂得合并来自多个源的变化。
最基本层面的源代码控制可以让你保持在一个软件项目中对不同的文件所做更改的历史记录。
它还允许多个开发人员在同一时间工作于相同的代码,然后合并这些更改。
具体就不细说了,但你应该知道如何熟练地使用至少一个源代码控制系统,并且你应该熟悉大多数基本的源控制概念。
在当今软件开发领域,几乎所有专业的软件开发团队都会使用某种源代码控制。
十、
构建和部署
现在,大多数软件开发项目都有着某种自动化的构建和部署系统。
有几种不同的软件应用程序,可以帮助软对自动化这两个任务,曾经是手动,当然对于某些团队而言,现在仍然如此。
你问什么是构建和部署?
你知道如何写代码,并检入到源控制系统吗?
拥有一些方法来确保代码可在你检入后真正能工作很不错。
这就
是构建系统的用武之地。
最起码,构建系统将编译所有代码,并确保没有编译错误。
一个复杂的构建系统可以运行单元测试或用户测试,运行代码质量检查,并提供关于代码库当前状态的一些报告。
部署系统将负责部署代码要么到生产机器要么可能到某种测试环境。
你不必成为这些技术的绝对专家,但是了解至少这些系统如何工作的基础知识,以及构建和部署代码的过程,是非常重要的。
通常情况下,创建和维护构建和部署系统的实际职责属于所谓的DevOps(developer operations的简写)——这个快速增长的领域。
以上
这些你都get到了吗?