通过上一篇文章《01_编程语言》,我们了解到
- Java是众多编程语言中的其中一种
- 编程语言可以用来开发软件
因此,我们即将要学习的Java技术,是属于软件开发的范畴。那软件开发的前景如何呢?这个行业是否值得我们长期扎根呢?本篇文章将带着大家初步认识一下软件开发这个行业。
应用范围
网站_应用_游戏
软件开发涵盖的范围极其广泛,你的手机、平板、电脑、手表、电视等设备上安装的网站、应用、游戏等,都是由软件开发工程师(程序员,Programmer)开发出来的。
VR/无人驾驶/AR/刷脸
还有大家平时听到的VR、无人驾驶、AR、刷脸等技术,都是属于软件开发的范畴。如果你经常去超市购物,那么对右下角这台自助结账机应该不会陌生。现在我们去超市购物,可以通过扫码自助结账,再也不用去收银台排队结账了。甚至还可以刷脸支付,连手机都不用掏出来了。
智能家居
还有智能家居,也是属于软件开发的范畴。现在我们完全可以通过手机软件来控制家里的电视机、空调、摄像头、路由器、音箱、台灯等设备,甚至还可以控制窗帘。
人工智能
这几年比较流行的人工智能,也属于软件开发的范畴。这些机器人之所以这么智能,是因为它们背后有强大的软件在做支撑。
区块链
还有最近非常火热的区块链技术,也是属于软件开发的范畴。大家应该听说过比特币,比特币的底层就是区块链技术。现在我们国家也非常鼓励大家学习和应用区块链技术。
可以看得出来,软件开发涵盖的范围真的是非常广泛,而且在不断地提高我们的生活质量,让我们的生活越来越美好。我们的生活必然是越来越离不开这些丰富多彩的软件了,一旦脱离了它们,我们的生活质量必将大打折扣。你可以想象一下:如果生活中突然不能使用手机支付了,只能使用现金支付,那得多么繁琐和痛苦。
我觉得在我们有生之年,软件技术都是我们人类的刚需,而且随着技术的不断发展,会有更多好用、强大的软件被开发出来,人类的生活质量也会不断地被提高。因此,软件开发人才的需求会一直存在,而且在不断地增长。
编程教育
国外
其实,外国很多国家在很久以前就开始注重:从小培养孩子的编程能力。比如美国政府投资40亿美元开展少儿编程教育,呼吁全美青少儿学习编程,奥巴马总统也亲自上阵宣传编程,还邀请了Microsoft创始人比尔盖茨、Facebook创始人扎克伯格等IT大咖录制节目宣传编程。
扎克伯格从6年级开始学习编程,而打败人类围棋顶尖高手的AlphaGo之缔造者、谷歌人工智能设计师杰米斯从8岁就开始喜欢编程。所以,那些全球顶尖的互联网公司(比如Microsoft、Google、Facebook、Apple等),都是美国的公司,这并不是偶然;还有现在世界上流行的很多软件开发技术,都是源自美国,这也并不是偶然。
国内
目前,我们国家也越来越重视青少年的编程能力,经常会举办一些针对初中生、高中生、大学生的编程竞赛,如果你能在竞赛中获得比较好的名次,可以直接保送名牌大学、互联网一线名企。而且也已经开始出现了少儿编程,连小学生都开始学习编程了。
另外,此前有新闻报道:编程科目将被纳入新高考,浙江地区首先会做尝试,未来极有可能会推广到全国各地,这只是时间问题。
在今年两会上,网易CEO丁磊提议:在全国推广少儿编程,将少儿编程纳入学业水平考试。
对比美国的编程教育,显然我们已经落后了一大截。但我们已经在努力加强编程教育,编程将会越来越普及。预计在不久的将来,家长们在辅导孩子写作业时,不仅仅要辅导语文数学英语了,可能还要辅导孩子写代码。
职责分工
软件开发类型
按照职责分工的不同,需求量比较大的常见的软件开发类型有:(了解一下即可,不用去深究)
- 移动开发(也叫“移动端开发”)
- Android开发,主要用的编程语言是:Java、Kotlin
- iOS开发,主要用的编程语言是:Objective-C、Swift
- 前端开发
- 主要用的编程语言是:JavaScript
- 后台开发(也叫“后端开发”)
- 主要用的编程语言是:Java、C++、PHP、.NET、Python、Go
- 嵌入式开发
- 主要用的编程语言是:C、C++、汇编语言
那上述的这几种类型的开发在公司中分别干些什么事情呢?他们的职责分工是怎样的呢?
移动/前端/后台开发
先来说说移动开发、前端开发,如上图所示
- 移动开发:可以开发移动设备(手机、平板、手表等)上的软件
- 前端开发:可以开发网站
根据日常生活中的经验,大家应该可以发现:
- 只要有网络,网站上显示的内容是可以不断更新的,比如说新闻网站,你每一天用浏览器打开它,看到的新闻数据都是不一样的。
- 还有手机上的购物软件,你每一天打开它,都会给你展示新的商品数据,而且是有看不完的商品数据。
那这些网站和手机软件上的新数据是哪里来的呢?这些数据其实都来自服务器(Server)。什么是服务器?顾名思义,就是提供(数据)服务的机器。
你的手机只要联网了,手机软件就可以通过网络向服务器发送一个网络请求,向服务器请求数据:求求你,给我点数据吧!!!然后服务器就会大发慈悲地利用网络返回数据给手机软件。然后,手机软件会将服务器返回的最新数据展示在用户眼前。
网站也是一样的,当我们在浏览器上尝试打开或刷新一个网站时,浏览器会利用网络向服务器请求数据,然后服务器返回数据到浏览器上显示出来。
那服务器这边的开发和维护工作,又是谁在做呢?那就是后台开发。这里再来说一个小细节,那为什么要叫它们为移动开发、前端开发、后台开发呢?
- 移动开发:这个很好理解,因为手机、平板、手表等都是可以随身携带的,人走到哪里,它就去哪里,统称为移动设备。
- 前端开发:因为它展示的内容(比如网站),是在用户眼前能直接看见的,所以叫前端。
- 后台开发:因为它对用户来说是不可见的,在后面默默为移动端、前端提供数据服务,所以叫后台,或者叫后端。
- 但是前端一般就不叫前台,说前台会有歧义,前台我们一般是指公司负责接待的工作人员。
嵌入式开发
另外,不仅仅是手机软件和网站需要服务器的数据,现在很多设备都能联网,它们也需要数据,比如说现在的电视、洗衣机、空调,甚至是微波炉,它们都能够上网。像这些智能设备的开发是属于嵌入式开发的范畴。
再比如下图中的智能机器人,它也可以上网。
- 如果你问它:今天天气如何?它就会通过网络向服务器请求天气数据,然后服务器返回天气数据给它,它就把天气数据说给我们听
- 如果你吩咐它:给我播放一首周杰伦的歌吧!它就会通过网络向服务器请求歌曲数据,然后服务器就返回歌曲数据给它,它就开始播放歌曲。
后台开发的重要性
不难发现,移动开发、前端开发、后台开发、嵌入式开发,每一个角色都特别重要。但你知道最不能缺的是哪个么?必然是后台开发。
- 因为数据真的非常重要,你没有优质的数据就没有用户
- 你的网站做得再漂亮、手机软件开发得再好看、用户体验再好,但是没有优质的数据,也是不会有多少人用你产品的
- 但是反过来,如果的你的手机软件开发地不太好看、用户体验一般,然后网站也非常地难看,但是你服务器提供的数据是别的公司没有的,你的用户量照样是非常多
- 举个例子:如果你公司的服务器有全国最全面的车票数据,你的手机软件和网站做得再烂,都不可能会缺少用户的,因为大家都需要用到你的车票数据,都要去你那里买票
可以想象得到,一旦服务器死机了或者缺少了后台开发这个角色,手机软件、网站、智能机器人都会变得“死气沉沉”,因为已经没有服务器给它们提供数据。手机上的购物软件永远显示的都是那几件商品,再也没有新的看不完的商品。新闻网站上的新闻也是一成不变的,不会再有新的新闻。智能机器人也变得不再智能了,问它啥它都回答不出来。
所以很多公司对后台开发这一块是比较重视的。当然,我并不是说移动开发、前端开发、嵌入式开发不重要,其实都很重要。只是相比而言呢,后台开发这一块是最关键的。很多公司的CTO、技术总监,都曾经历过后台开发的洗礼,因为你只有懂后台开发,才能更好地把控公司整条产品线的技术方案。
另外,现在很多人想创业,首先会招聘的开发人员或技术合伙人,一般都是懂后台开发的人。因为创业初期,资金、时间等资源非常有限,根本没必要去开发手机APP、网站,只需要开发公众号、小程序即可,等以后发展起来了再去开发手机APP、网站。由于公众号、小程序的开发工作并不会太复杂,所以前期也由后台开发人员来负责就好了。
后台开发的编程语言
后台开发可以选择的编程语言比较多,主流的有:Java、C++、PHP、.NET、Python、Go等。目前市面上后台开发需求量最大的编程语言,必然是Java,所以想学习Java的人还是比较多的,很多培训机构都有开设Java课程。
那为什么Java这么受欢迎呢?原因有很多,我个人觉得目前还不适合讨论这个话题。等你有一定的编程经验了,再来讨论这个话题会更加合适,你的理解会更加深刻。因此,以后有机会再回来探讨这个话题。
从业疑问
本文的最后,针对初学者可能会产生的一些疑问,发表一下我个人的一些浅见哈。
英语水平
大家可能听说程序员写的代码基本都是英文的,查询的技术资料很多也是英文的,那是不是意味着这个行业对英文的要求很高呢?
- 其实很多时候,代码中用到的英文单词数量还是比较有限的,1000行代码中,可能就只用了50个单词不到。比如下面这段代码,用来用去就是那几个单词(
public
、void
等),写多了自然就记住了。
public class Cat {
public void run() {
System.out.println("run");
}
public void eat() {
System.out.println("eat");
}
public void sleep() {
System.out.println("sleep");
}
}
- 就算遇到看不懂的英文单词,用翻译软件查一下不就好了么?
- 其实我的英文水平也很一般,只过了英语四级而已,但这并不影响我写代码哈
- 我也见过很多连英语四级都没有过,但也可以把代码写得很漂亮很优秀的
- 但是,如果你英文水平不错的话,在阅读别人代码、查阅英文资料等方面,是个很大的优势,你可以比别人学得更快
总结一下:不要求有很高的英语水平,能看懂26个英文字母,会使用翻译软件就行了。如果英语水平好,是个加分项。
计算机专业
- 不一定要计算机专业,熟练使用计算机就行
- 像我本人也不是计算机专业的,我大学的专业属于物理系(有点偏电子、光学)
- 我身边也有很多优秀的程序员朋友并非计算机专业出身
学习难度
- 首先,不管什么行业,只要你是从0开始踏入这个行业,必然要学习大量行业相关的专业知识。作为初学者,第一次接触到大量的技术名词时,可能会有一点点的学习难度和压力,但是这个学习难度是会随着你知识储备的增加、技术的积累而逐渐降低的
- 其次,全世界有这么多的程序员,这就侧面说明了这个行业并没有超高的门槛,只要你找对了学习资料、学习方法,都是可以掌握的
- 但在我看来,也并不是所有人都适合从事这个行业,不开玩笑,有些人是真的不适合从事这个行业
- 如果你能基本读懂《秒懂Java》系列,我相信你是适合从事这个行业的
- 如果你基本读不懂《秒懂Java》系列,那么你有可能是不太适合从事这个行业(仅仅是个人浅见)
智商
- 全世界有这么多的程序员,难道每个人都是智力超群、天才型选手?
- 在我看来,我们只要是个正常智商的人就行,另外,认真努力才是王道
女生
并不是只有男生可以从事这个行业,很多公司都不乏优秀的女程序员(程序媛)
行业薪资
参考招聘网站,比如拉勾网
电脑系统
- 不管你的电脑是Mac还是Windows系统,都可以学习本课程
- 学习中用到的工具在Mac、Windows系统中是通用的
最后的个人浅见
我一直都觉得程序员是一个非常Cool的职业,给你一台电脑、一根网线,你就可以利用你的双手在键盘上噼里啪啦敲出非常优美的代码,开发出非常优秀的软件,从而改变这个世界。
程序员也是一个可以改变世界的职业。下面列举的IT大佬们,相信大家或多或少都用过他们企业的产品,比如
- Microsoft创始人比尔盖茨
- Facebook创始人扎克伯格
- 字节跳动创始人张一鸣
- 腾讯创始人马化腾
- 小米创始人雷军
- 微信创始人张小龙
- 360创始人周鸿祎
他们曾经都是非常优秀的程序员。是的,世界上很多IT名企的创始人都是程序员出身,再比如Google、Twitter等。他们企业的产品的确了改变了世界、让这个世界变得越来越美好。感谢这些大佬前辈们!
软件开发行业,也是一个相对比较公平、稳定的行业。有些行业,需要攀关系、勾心斗角你才能往上升。软件开发行业呢?全凭实力说话,给你一台电脑、一根网线,一看你写的代码便知水平如何,也不需要去处理那些复杂的人际关系,更多的还是跟机器打交道、专心写好自己的代码。
软件开发行业也可以随着自己技术的积累而不断增值,技术越厉害,机会也就越多,值得长期扎根在这个行业。不像有些行业,1年经验3K薪水,5年、10年、20年工作经验,依然是3K薪水。也不像有些行业,这个月薪资1W,下个月薪资3K,非常不稳定。
我当初之所以踏入这个行业,其实跟薪资待遇一点关系都没有。当初的我从来没想过我要拿多少薪资,纯粹是因为对代码的执着和热爱,才在这个行业长期扎根的,我一直都觉得写代码是一件非常享受、有成就感、有趣的事情。回想当初在公司打工时,废寝忘食,不写完这个功能就不想吃饭,也经常睡前脑子里还在想着某段代码可以怎么去优化?很幸运的是,我最后一次打工时,年薪突破了7位数,为了纪念这个阶段,薪资协议书现在都还保留着。这里并不是想炫富,因为在这个行业突破7位数年薪的大有人在,我只是想告诉大家,只要你肯努力,这个行业其实拥有无限的功能。
时至今日,虽然我已经创业了,但我仍然坚持每一天都在钻研技术、写代码,每一天的进步能让我很兴奋很快乐,甚至还经常废寝忘食地钻研,跟当初在公司打工是一个状态。不过不同的是,现在确实熬不动夜了,毕竟随着年龄的增长,身体素质肯定会有所变化。大家在学习技术的同时,一定要注意劳逸结合哈。
这个行业虽然有前景,但是你若想在这个行业站稳脚跟、取得自己满意的成绩,必然还需要多下功夫。现在也不用想太多,一步一步来,慢慢积累,积累到一定程度,机会自然会找上门,该有的都会有的!但是如果你没积累好,就算会有机会摆在你面前,你也抓不住,眼睁睁看着机会从手中溜走!最后送大家一句我一直都非常喜欢的8个字:你若盛开,蝴蝶自来!加油!