昨晚被网友灵魂拷问了,被问及这个经典问题,它就像经典哲学问题一样难以回答:你是谁?你从哪里来?要到哪里去?编写本文前,也参考了网上很多相关文章,但总不尽如人意,要么带着主观情绪,要么局限在某个领域去分析,分析的维度不够,要么就是分析过于专业化,不够通俗易懂,还有就是那种纯粹想引起争论的赚点击的贴子。我想这种方向性的问题必须谨慎、客观回答,否则会误人子弟,造业深重,阿弥陀佛正能量!所以我花了很多心思整理了这篇文章,来回答这些问题。
一、认知问题
首先要解决的问题是认知问题,程序编程语言只是一个工具,它并不是圣经,没有必要搞技术崇拜,大牛崇拜,不会就学,不懂就问,没有什么大不了的,不应该有编程语言的鄙视链存在,例如:开发硬件的鄙视开发软件的,开发软件的鄙视开发网页的,开发网页的鄙视开发脚本的,保持虚心和平常心非常重要;
第二,我用白话文来描述现在的计算机编程语言,类比我们生活中的英语、德语、法语、印地语、中文、日语、韩语 ....... 它就是一门普普通通的语言而已,唯一不同的是英语是为了解决和人对话的问题,而编程语言是为了解决和计算机对话的问题;
第三,正确认识你自己的性格,是外向、内向,可以参考九重人格的书籍来定位自己,正确认识自己的优势和劣势,最大程度发挥自己优势,避免自己的短板,正确认识自己是左脑逻辑型、还是右脑创造型;
第四,最后一条重要的是你选择从事编程的目的,这是最重要的一点,目标导向、学以致用:学习编程,你是为了你的个人梦想?还是将来准备要职业化,找工作?还是深入深井坑做科研类工作?还是纯粹业余爱好,想解决工作中遇到的问题,提高工作效率?切记不要为了显示你牛来学编程,那就跟暴发户开了个布加迪威龙去和出租车比踩油门谁快、谁声音大差不多,情商已到了最低点.......
上述的四点是你选择一门编程语言,需要考虑的维度,我想方向上的选择你必须得慎重,否则可能在未来浪费数以年计的时间和生命,下面的文章我会将这些维度展开,给与你推荐,给你引路,但不一定正确,仅供参考,你需要加你自己的思考。
二、职业化推荐
1、中庸之路
如果你想将编程当作未来的工作,在当下2020年,建议你从 c/c++、java 两种语言,考虑其中一种,为什么?很简单,这两种语言目前流行度是最高的,就像你学英语一样,对于大多数人,可以选择一条中庸之路,不在人前、不在人后,普普通通。换个例子说:参加高考,这就是最保险的一种投资,亏亏不到哪里去,富也富不到那里去,如果你说你不想走平庸路线,不参加高考,你要去当足球运动员,这就是高风险投资,学费一学期30万,前期投资巨大,学到后面1000人里可能就1人能职业化。所以建议80%的不是天才的人,走中庸之路。
2、硬件之路 - c/c++
在 c/c++、java 两种语言间,若你是性格内向的人,坚韧不拔的人,左脑逻辑强于右脑创造的人,喜欢和底层的机器打交道的人,请选择 c/c++,直指《硬件嵌入式开发》,您可以在百度搜这个关键词,这里不展开细节,直接说优点、缺点:
优点:你会成为一名计算机领域的深度技术专家,随着你的年龄增加,越老越值钱,掌握高门槛的技术,年轻人很难短期超越你,你在公司开发的项目其他公司短期内也很难复制,这条路是运筹帷幄、精耕细作型,想想德国、日本的那种精工精神,你会很容易感受这是一个什么氛围。
缺点:你将成为一个无比沉闷的人,整天活在自己的世界的,会心一笑,但无人能懂,你专业的深度决定了你的短板就是计算机知识的广度,你的知识面会很狭窄,除了针对某款芯片架构进行嵌入式开发外,你什么都不知道;举例:你做 linux 操作系统下某款设备的驱动开发、汇编优化,或图像输入、图像处理等,就里面随便选一个小的领域你就可以做上一辈子,但当硬件架构有较大变更时,你的学习成本会非常之高,就像汽车大修一样,你很难从一个深井立即跳入另一个深井,从井里爬出来都很难,还得跳进另一个深坑,不过前面说了,你坚韧不拔,不是吗,这点困难根本难不倒你。
建议:如果选择你的职业走这条路,你务必要进一家大公司发展,至少是股份制的,切勿频繁跳槽,找同类工作,是非常艰难的决定。
3、软件之路 - c/c++
当然,你也可以选择走软件道路,仍然还是这两个高考式的普选:c/c++、java;
同样,如果你是内向的人,不喜欢和客户打交道,你选择 c/c+ 好了,选定服务器开发领域,处理大型服务器的并行访问、搜索引擎性能优化、游戏引擎性能优化等等这条道路,做的事情均是后台用户不可见的事情,负责处理你的服务器与众多客户端之间的对话,请求、回答、请求、回答,这是以白话文的方式阐述职业化的工作内容,如果在请求/回答这个模式中加个形容词,那就是快,快速请求、快速回答。除了传统服务器领域,苹果公司的 iPhone 手机开发也是 c++ 来驾驭。
优点:同样你是深度领域的专家、越老越值钱,同时,不会像硬件开发那要枯燥无味;
缺点:同样是知识面窄的问题,但不会像硬件开发那么窄,有回旋余地;
推荐:你可以选择进大公司,也可以进中型公司,都是需要这样的人才的;
4、软件之路 - java
如果你的性格比较均衡,既不内向也不外向,或外向活泼,建议你选择 java,选定 java 后台开发,如果你想积极寻求解决客户的业务痛点、与客户充分沟通,提高客户的业务效率,请选择 java,除了开发 java 后台,现在的热门的 android 手机程序,也是 java 来驾驭。
优点:到目前为止,2020年,说到中庸之道、说到普通高考,java 可以算是最中庸的一个选择,学会它,你根本不必担心工作问题,到大、中、小甚至皮包、外包公司你都能找到工作,相关的学习资料、疑难解答也是最多的,你的知识面也会很宽,但知识深度较浅。
缺点:中国程序员普遍的痛点最多就体现在 java 身上,越老越不值钱,正是因为知识的深度不深,门槛浅,你到35岁以上之后就会开始走下坡路,热爱学习的疯狂程度、加班的疯狂程度比不过年轻人,但拿的工资却高于年轻人,这是每个公司都希望干掉的人。有的人说可以去做系统架构师或转管理,但想一下,这种岗位毕竟是少数,都是系统架构师,谁来写代码?所以这是风险。
推荐:进什么公司无所谓,关键是你要考虑最好不要当一个终身程序员,提前考虑好30~35岁转型的事情,以你的研发基础,会让你在销售、方案、售前等领域出类拔萃。
5、数学之路 - python
看字面不解释,如果你是个数学家,走学术研究路线、科研路线,必须 python,你的数学如果足够出类拔萃,进 google 这种公司轻而易举,甚至你不会任何编程语言都可以进到很多的IT大公司,学会一个语言就是一个小工具而已,并不是重点。
优点:越老越值钱的典范,TOP第一名、没有之一;未来不想在公司干了,出来搞个咨询公司、教育公司什么的轻而易举,有大公司品牌工作经历加持,来参加培训的小白们会被你搞得一愣一愣的。
缺点:掉头发,影响颜值,女朋友不怎么好找。
6、美工之路 - html css javascript
如果你是非常外向的人、对美充满期待,右脑高度发达,但左脑是短板,那么你可以选择美工作为你的工作路线,众所周知,与用户面对面最多的就是我们的网页了,如何美化网页、处理网页交互、深度俘虏用户的心,这是一个伟大的职业美工需要去做的,把沉闷的IT行业变成百花齐放的艺术,多么美妙。
优点:工作总能保持一个愉悦的心情,每次用你设计的 UI 用户界面间接与客户交流时,都能发挥你的创造力,自由的典范。
缺点:语言架构更新频繁,html css javascript 本身入门门槛低,但是内容量却很大,非常的烦杂,语言的更新速度基本1年更新1~3次,你必须时刻保持学习热情,紧追新技术,玩起来,显然有点累人,容易被年轻人超越,艺术这东西就像网红一样,三十年河东三十年河西。
6、其他语言和路线
当然还有很多其他的语言可选择,但相比上面两种,并不是主流,它可能只是你职业化当中的一个支线,并不是主线,比如公司突然有个项目需要用 vb c# 或 asp.net 或 php 或 ruby 或 delphi 来做,当你有了上面两种语言的基础,现学支线语言是轻而易举的,语言嘛,相互想通,就像你学会英语,就很容通德语、法语一个道理。
三、非职业化推荐
只有一种语言,那就是 python,你是房地产的、金融的、制造业的、服务业的,如何用简单的几句代码来解决工作中的实际问题,不断辅助提高工作效率,这是一个经典语言。
优点:简单、易用、资源多、开发快速、快速解决问题
缺点:难以体系化、商业化、只适合开发工具软件
四、个人经历分享(参考)
最后我分享一下个人的经历,我当日记和回忆写写,您当小说看看好了,也可以参考参考,以考虑自己的路线,我以历史年轮展开。
1992年:7~8岁左右,家里买了小天才游戏机、迷上了双截龙3、魂斗罗、三国志2、吞食天地 ...
1995年:10岁左右,有网吧的存在了,那时候叫电脑房,迷上了 Command & Conquer 命令与征服、仙剑奇侠传;开始迷上电脑 dos 命令,觉得很 cool,那时候住大学里面,找大学的老师给了本 dos 命令管理,然后自己瞎折腾,竟然把命令背完了。
1996年:家里买了小霸王学习机,学着用那个自带的 f-basic 还是 q-basic,忘记了,跟着老师编采蘑菇、那个水管玛丽程序,搞了一整天,结果把电源线碰到关机了,不能保存,哎。
1997年:死缠烂打找家长买了一台真电脑,在那个年代,大多数都是 386、486,8Mb内存,一般就6000多元,我直接买了个奔腾133, 32Mb内存,想到这里还对不起父母,家里没啥钱,这个实在太贵了,先说不买,我还发小孩脾气,不过后来父母也想,这个投资也是值得的。那个时候电脑都是 win3.2操作系统,dos 模拟的假 windows,为了玩极品飞车2,我装了 windows 95,从此开始折腾,那些电脑城的什么装电脑、系统、杀毒、优化,编写一些 dos 的 bat 批处理,这些技巧就是在那个时候倒腾会了。
1998年:在利用电脑玩游戏,看电影荒废1年后,开始学编程 borland c 语言和 pascal 了,附带着有其他的 foxbase、foxpro,后面相继接触了 linux、c++ ........ 这个时候读初中了,后面再学些 mfc、stl数据结构、atl、vc++、windows api 什么的,基本上一直在学习;那个时候偶像就是雷军、求伯君,没错,就是现在的小米掌门人,他的背景可能很多人都不知道,这两个人可是中国的微软创始人,中国的盖茨和艾伦,搞软件的那个时候无不崇拜微软公司。
2000年:逐步的选择走嵌入式开发路线,因为那个时候有鄙视链,认为这是底层的技术,学得越深越好,茫无目的,我动不动就能搞个交叉编译,写个 driver 驱动,性能不好的地方,用汇编代码块代替 c 语音,我当时觉得自己大神,很牛B,现在想起来有点傻,主要还是 linux c/c++方面;
2006年:开始接触 java 和 c#,我还是纯在鄙视链,不太看得起写网页的,觉得没啥技术含量,我会用,但没有认真去学,这个就和微软迟迟不转型互联网的例子有点像,认为操作系统和软件是最重要的。网页?给用户看看小说而已,搞不出多大事情。但互联网崛起之后,世界变天了,java 如日中天,c# asp.net php 分一杯羹。
2009年:厌烦了嵌入式开发和生活方式,迷茫了,因为我知识面太窄、缺乏社交沟通,对自身发展很不利,我希望多结交朋友,多和用户沟通,而不是一个人的精彩世界。于是转型了,转到了 java c#/asp.net 领域,开发应用去了,当然这又有了很多年的,也有很多支线像 html css javascript oracle sql server 等等,这里就一堆了,横向发展嘛,每样都会用,但每样都不精,能完成项目就好。
2012年:彻底告别研发,喜新厌旧,去搞技术支持、市场、方案、售前、产品、项目管理,基本把所有岗位轮了一遍,走遍了国内35个省,差旅APP报告我的差旅、机票、住宿超过全国99%的人。
2019年:国内腻了,再不想跑了,现在跑海外去了,继续在快乐中折腾,折腾中快乐,除了工作外,平时业余时间用 python 写点工具软件不断提高自己工作效率,并且在头条上分享,期望能和更多人交流,这样的生活还不错。欢迎大家在 今日头条搜索 Marco快乐编程 关注我,我们一起折腾不休。