现在大家的学历基本提升上来啦,基本搞编程的都是本科或者大专起步,这里仅那本科举例。
好多大学生跟我说是计算机专业,软件工程专业等,啥都学一点,这样真的好?
对于大学生,如果是计算机相关专业,想走程序员这条道路,我建议你还是尽早确立人生方向,比如你想从事前端方向,就深入研究前端的技术,可以用一门技术解决各种问题,这样就很棒棒,前端相关技术可以参考我上一篇文章:--->2020年前端技术概览
大学期间可以找一两门感兴趣的课程,朝着精通的方向研究,这个社会确定不是全才,而是专家。
关于编程这个职业,正如前一点所说的,很普通的职业。比如与建筑行业做类比,都一样,数量最庞大的还是底层的“小工”,在我眼里,如果只有一膀子力气只会别人让你干嘛就干嘛,那用手敲键盘和用手搬砖其实区别并不大,不要觉得在办公室里吹空调通宵跟在工地晒太阳相比会轻松高贵一些,近些来听到的活活累死在办公室的例子可也有不少呢。同样的,在编程这个职业里,从小工要进化成“架构师”、“专家”、技术总监等等高端岗位的难度,一点不比搬砖工进化成建筑设计师啥的岗位难度来得小,甚至更大。
学编程有前途吗?编程在当今世界只是一个很普通的职业,其他职业有的一些特性它多少都有一些。比如各位最关注的收入,和其他职业一样,高薪只属于小部分人,绝大多数人拿的工资和其他行业的区别并不是很大。所以幻想这只要入了这行就能轻松登上人生巅峰迎娶白富美的,那你还是死了这条心吧。所以说,学编程有前途,但不一定比学销售、学设计...来得更有前途。
“你看现在很多统计报告都说IT行业平均工资很高……”,列位,这年头最不靠谱的词就是平均,有多少人是“被平均”的。
写前面几点的目的不是劝退初学者。很多初学者之所以愿意进入到这个行业,我想大部分都是因为宣传的引导。有些是合理引导,比如国家学校,因为作为比较朝阳并且能带来大量税收的行业,国家当然希望越来越多的人从事这个领域推动发展;另一些是为了达到一些个人目的而进行的夸大性引导,比如部分无良培训班的一些就业保证、收入保证。在这种背景下,我希望在一些过度发热的大脑上适当地浇一点凉水,说明一下一些现实情况,冷静下来以后我们再来说后面的事情。
如果你冷静下来了以后还是愿意继续从事这个行业这个领域,那么我们就能理性地介绍一下这个职业了(这里就不灌鸡汤说为了兴趣为了梦想什么的了)。现阶段,这个职业相较于其他来说,是一个变化速度最快的职业。变化速度快会让从事这个职业的每个人都过得很累,没办法,因为变化得快你就得不停地学,停止学习就意味着淘汰,这在IT领域体现得尤为明显和残酷;反过来,变化速度快也就意味着机会大,如果说你跟上了变化速度而其他人没有跟上,那么好了,你就踩着他的尸体上去了。竞争这件事哪里都有,有些职业上的竞争点主要是经验、关系沉淀等,那么反超难度自然很大了;而编程这个职业里,经验和关系虽然也会对竞争结果产生影响,但是技术实力所占据的比重更大,因此可以说,这个职业相对机会更多。另外一方面,虽然同级人之间存在竞争,而且这种竞争更加显而易见,但实际上真正影响到你生活品质的对手是那些高高在上的前辈。之前,由于这个行业还处于一种“野蛮生长”的阶段,各种岗位的需求量都在不断扩大,这种“与前辈争利”的现象还不明显,但是在现阶段乃至未来,这类竞争会越来越凸显,直到和其他行业相同。在这个领域里,技术实力的累积虽说与经验也有关系,但当你真正入了门以后,技术实力的增长与你的专注度、精力、能用于学习的时间是非常相关的。(这里假设前提是你已经懂得如何学习、提高技术水平和能力)假如你刚毕业,浑身打满鸡血,身体倍儿棒,恰巧又是个单身狗(嘿嘿...),那么与一个40多岁,上有老下有小,身体开始走下坡路的中年工程师相比,一起去学习某个新的技术,你的优势显而易见。因此可以说,这个职业抓住机会更加容易。
所以,如果你对未来充满渴望,并且有信心坚持付出努力,那么选这行没错。没有别的,这行里付出以后获得回报的概率比较高,仅此而已。
瞎分析完行业,我们来说学编程。学编程难吗?幼儿园和小学都开始教编程啦;学编程不难吗?一些好大学相关专业的学霸也不见得是合格的程序员。然而无论难不难,先得正视这个技能。在我眼里,现在学编程跟电脑刚出现时学打字其实区别并不大。当年,一个每分钟能打一百多汉字的打字员那也是响当当的高端技术人才,如今呢,打字已经沦为和拼音一样的基本技能啦。编程也是如此,可以预见,如果只是学会了xx语言的xx语法,那么几年后的你和现在的打字员没什么区别:谁都会的东西还要你干嘛?但是换个角度想,你会打字就一定能写出好文章来么?那种阅读量几十万几百万的好文章难的是构思内容还是打字?同样的,对于编程,真正难的是如何写出能解决实际问题的代码,而不在于xx语言语法或者xx框架使用方法本身。因此,学编程,学会xx语言预发或者xx框架使用方法简单,但是必须要学(要写好文章你总得会打字吧),难学的是,如何写出能解决实际问题的代码。
程序员这个职业的学习和一些传统职业的学习存在很大的不同。如果把大学和培训机构比作一个工厂,对于一些传统行业来说,他输出的合格产品是一些能够胜任工作的员工;而对于IT行业来说,他输出的合格产品是一些能够快速学习新技能胜任工作的员工。再厉害的大学和培训机构,也不可能仅靠他们所提供的教学内容培养出完美胜任软件岗位需要的人才,这个过程中必须要求学习者自身能够自己探索,紧跟技术发展。IT行业变化很快,新技术层出不穷,也许一年前正确的理论在一年后就被人喷得一文不值。而技术是先出现于实验室研究所,然后在行业内应用,最后才会被人总结成教材出现在学校和培训机构里,这个过程需要一个很长的时间,所以对于编程来说,学校教学内容的落后是必然。因此,你不用到处说学校教材如何如何落后不靠谱,培训机构如何如何不贴合行业实际,真正落后的是你自己的思想。如果你还在学校或培训机构学习,那么你一定要分析一下a)你要什么;b)它能给你什么。我这里给你的答案是:a)你要的是这个行业的基本知识(学会打字),并且如何学习新东西的技巧;b)它能给你的是教会你基本知识。你看,有一条东西看起来学校和培训机构给不了你,那就是学习新东西的技巧,而这一点又至关重要,影响到你的职业发展。其实任何学校和培训机构在教你基本知识的过程中就在一遍遍给你演示如何学习新东西,比如让你做作业,让你看书,让你练习写代码(有些好老师会直接总结成方法单独拎出来让你学)。不是他们不给,是给你了你没接住。
培训班好不好?很难评价,但是它既然能存在就必定有其存在的价值。很多时候培训班学员找工作成功率低于科班出身或者自学出身的程序员,不能全怪人家培训班。首先,学历这东西在中国多少还是有用的,如果说你没有一个好学历,只有培训班培训经历,那你得先承认你的起点比其他人略微低了一点(这里插一句,无论学什么东西,承认自己的弱点只有好处没有坏处);再者,我相信有很多人选择培训班是因为不知道怎么自学,那么按照第7点的分析来看,“如何学习新东西”这项关键技能对于这部分同学来说,从开始时就要弱一些。而这部分同学在经历了培训班之后如果只掌握了基础知识,而在最缺乏的“学习新东西的能力”上没有所斩获的话,我说直接点,培训班上了跟没上区别不大。
如果选择上培训班,那么需要注意哪些事情呢?首先上了培训班的一个最大好处在于你会比自学更加专注,更加能保障时间和精力的投入,并且不会轻易放弃。你交钱了,还不便宜,半途退缩人家也不给你退钱,所以处于心疼钱你也会好好听,也会坚持到课程结束(土豪忽略)。另一方面,封闭式的环境让你难得没有心思和时间干别的,说真的,在如今这个时候,想找这样的环境真挺不容易的。上了培训班就得努力,毕竟人家也只是辅助,最终能学多少还是在你自己,你要是上课睡觉作业不做谁都救不了你。认真听讲努力学习是必要条件但不是充分条件。另一个,你得自己找资料再以基础知识为起点再学点别的,这一点最为关键。学一点别的不是为了让你有资本在同学面前吹牛逼,而是要通过方式一点点学会,在没有老师教的情况下,你自己还是能学会一些东西的。在培训班上课期间,你要不断练习这件事情,否则就如我前面说的,培训班上了跟没上区别不大。
所以我来总结一下培训班这件事:
- 上了培训班就能有高薪工作。假的,趁早死心,高薪跟培训班无关,跟你这个人本身有关,人家否定的就是你这个人,而不是你上培训班的经历。
- 培训班都是骗子。不对。骗子是存在的,也听说过以培训为名实际上是传销的,也听过搞什么学费贷款其实是诈骗的,这种是真的骗子,培训班只是他们骗人的手段。而对于正经上课的培训班来说,一方面上培训班是投资,投资有风险(老师水平有高低);另一方面你自己如果没搞清楚你需要从培训班得到哪些东西,出来找不到工作,我认为这个责任在于你自己。
- 培训班作用很大。对于自制力差,周围干扰因素多的人来说,这句话对。对于自制力强,学习能力强的人来说,作用确实不大。
- 业界歧视培训班,简历上有培训经历找不到好工作。假,我说句实在话,自己菜就是菜,别找客观原因甩锅,你要是怕过不了简历海选你可以走内推渠道啊,这年头对于高手哪个人不是如饥似渴的。如果你觉得能力强技术好但是没找到工作,请把简历私信发我,我可以无偿对你做评估,如果确实有实力,我包推荐(热烈欢迎,我们这如饥似渴期待高手的加盟),到时候进来后就算我给你打下手我也心甘情愿,抱着你的大腿求你带我飞。
你的工资与什么相关?在一个公平的环境里,你的工资与你能为公司创造的价值相关,这是一定的。那么如何产生价值?那就是替公司解决问题。能解决问题的事就是有价值的事,无法替公司解决问题的事就是没价值的事,就是这么简单。这样一来可以看到,你的技术和你的工资实际上并没有直接关系。我举个例子,如果一个公司他只有PC端产品,公司的收入全部来自于PC端产品,那么你手机开发能力的高低对于公司来说是没有意义的。这种情况下能给公司产生价值的有这样几种渠道:1. 公司以后可能会发展手机端业务,那么留着你当储备人才,那么你就是能替公司解决“当需要发展手机端业务时如何快速开始”的问题,产生了价值;2. 你经验丰富触类旁通,你多年的工作经验对现有PC端业务也有指导意义,那么发挥作用的不是你手机端开发技术的高低,而是伴随他的其他能解决问题的技术。由此得到了几点建议:1. 如果你不打算换工作,那么想要提高工资(公平的环境),就要分析公司的核心问题是什么,然后一层层细化分解,选择问题去尝试学习新的工具方法去解决,你能解决的问题层次越高,越接近根本问题(公司的根本问题就是持续快速赚钱),你的价值就越大;2. 根据自己掌握的技术选择一个能让你发挥最大价值的公司。
产生价值的只有技术?如前面所说,技术是间接产生价值的,直接产生价值的是解决问题。解决问题的第一步是发现问题,或者说是理解问题。不知公司需要你解决的问题是什么,不理解问题内容的程序员技术再牛逼,也产生不了价值(至少在这家公司)。而一些非技术的专业知识,对发现问题理解问题的作用是很关键的。比如说如果要开发一款炒股软件,那么本科学金融学然后转行做技术的程序员能产生的价值,会高于本科就是学软件而技术水平又没有显著优势的程序员(因此啊,科班程序员注意了,如果你的技术水平和非科班的程序员差不多,那你们的价值实际上已经差很多了,只不过对方不一定把价值完全发挥出来了而已)。解决问题的方法有很多,解决问题过程中涉及到的事情也有很多,技术只是一小部分罢了。可能你技术不强,但是擅长统合资源,擅长项目或人员的管理,那么依然价值巨大。反而由于技术具备可替代性,技术对于问题的解决倒是没有想象中那么巨大的作用(例如对于那些业务强势的小公司,大不了技术的活外包出去咯)。对于做技术来说,不要妄自菲薄把自己比作苦力,但也不要自视过高觉得公司少了自己就不转了。做技术,不仅要关注技术本身,更要关注你所在的业务领域。而那些从别的行业转行过来的程序员,如果你转行成功了,那么你的实际价值其实非常巨大,千万不要得自己不如别人,反而要冷静分析一下自身的优势,选择适当的领域悉心钻研,把自身发质发挥到最大。
编程不是考试,还按照初高中备考的思路去学习编程这是不现实的。编程是一个实践性非常强的工种,很多知识和语法你知道并不代表你掌握了。编程考究的是你是否能够灵活的应用这些编程知识。很多时候,你只需要在你脑海中留下一个浅浅的印象,当需要解决问题的时候,迅速能够调出这些知识片段,把他们“组合”在一起来解决问题。细节不记得,不要紧,语言的速查手册就是帮你具体化这些知识的。
很多编程基础知识就如同阿拉伯数字一样,你只看他他就是数字,但你可曾想过数字也能演化出正数、负数、小数、实数、虚数、指数、复数?
这些变化只有在实践中,只有在你真正去解决问题的过程中,你才能体会到变化的奥妙与组合的奇妙。
很多同学经常会抱怨我不在大公司,我没有优质的项目机会,可你要知道80%的coder都在中小公司,绝大多数coder都没有接触优质项目的机会。
那难道我们就放弃实践?
人之所以为人,就在于我们有很强的主观能动性。外界条件不够优越,我们就自己寻找。模仿你会吗?找一个自己很欣赏的产品,1:1或者尽可能在细节上复制一个产品作为自己的练习项目,有什么不可以吗?连设计师的UI设计都给你省了。
但这个过程中,大家一定要注意细节,如果你只是实现了大体的功能,这意义不大。好的产品其实就优秀在细节上,好的程序员和普通的程序员一定的差距也在细节上。
工作中我们要更关注成果,但学习一定要注重过程。
好啦,今天的内容就分享这么多,我们下期见!
相关阅读:
什么是大前端,前端工程师要不要成为全栈工程师?
谈一谈我对前端的学习路线及方法的一些心得
应广大粉丝的要求,推荐几本前端书籍