程序员第一大职业风险就是被科技浪潮无情淘汰。
很多行业,从业者的职业生涯从入场到退场,像是在乘机场的自动传送带。人少的时候,你可以往前挪挪,或者伺机走一下快速道,越过那些挡在你前面的浑浑噩噩的家伙,但你能做的也就这些,快不了太多;人多的时候,你只能耐心排着,什么岁数到什么位置,前面的人不离场,你不能抢下他的位置。这一路你走的慢慢悠悠,四平八稳,但好歹,不那么辛苦,除非遇着剧变,你被踢出传送带的几率不大。
程序员不一样。从入场到退场,活脱脱一出 tomb run 的游戏:身后怪物穷追不舍,你只能不停地往前跑。虽然沿途可以收获很多金币(package),但你一旦放慢脚步,或者没能及时则袭裤变道,就不得不主动出局或者被清场出局。主动出局一般是体面的 —— 当 manager,当法人,转 VC,转 sales,去教书,做庄德扑等等, 总之换个角色浪,从此和之前的角色相忘于江湖;被清场则是不体面的 —— 钱还没赚够,就被服务了多年的东家无情抛弃。为了养家糊口,只得 restart,重归赛道。可赛道哪是那么好挤回来的 —— 略微谢顶,银发中间或夹杂着些许黑发,肚腩厚实得,从上往下看,都看不见脚趾的奔四大叔,被二十岁出头的毛禅知头小子面试:大叔,说说看,你能给我们带来什么价值?
程序员的第二大职业风险是马太效应过于明显,有时候稍低的起点就意味着经年累月数倍于别人的奋斗。
2017年的计算机应届生,我听说到的白菜价是二十五万。我信,但这可能是 top 10% 在北上广深的水平。剩下的,平均收入至少要拦腰。五年后,这些 top 10% 平均水平能上五六十万,加上股票就没边了;而剩下的,平均水平可能还达不到他们同龄人五年前所谓的「白菜价」。
这个游戏是这么玩的:
你学习好,卯足劲上了 985,然后大学的四到六年又认认真真地学习和开发,毕业后工作找你,拿了 BAT 等一线的 offer,兢兢业业工作,工资水涨船高,公司股票翻番,周围还都是优秀的人,有闲得无聊读个 MBA 的,有出国接受更大挑战的,有跑去创业公司当 CTO 的,人比人气死人,你也就被逼不断学习维持优秀的状态,好让自己不至于垫底。市场上满满都是向你抛来的橄榄枝,挪个窝轻松二三成的涨幅,你却不待见;
你学习不好,仅仅够上了个一本,大学有点荒废,代码没写几行,毕业后你找工作,鞋底磨穿,勉勉强强有个外包公司收留,没日没夜地工作,但公司就这么个水平,薪水很难涨,周围的同事浑浑噩噩地混日子,你稍微努力点,就显得鹤立鸡群。想跳吧,履历不好,跳不出好结果 —— 给心仪的几个大公司发了简历,却好像荷叶上泻过的水,连个痕迹都没有。
这个行业就是这么 *** 蛋:起点低一些,人生的轨迹就差了很多。你要认清这一点,如果你不幸是那个起点低,现状差的人,那就加倍努力,想办法证明自己不比别人差。和咨询这种出生决定命运的行业,这一行还有很多证明你的水平的机会 —— 起码,talk is cheap. Show me your code 是行业的共识。
程序员的第三大职业风险是诱惑太多,容易毁了自己的职业生涯。
这里的诱惑主要是市场机会的诱惑。前面说了,局部供需严重不平衡,因而不乏挥舞着巨额钞票的工作机会。如果你没有一个良好的职业规划,也没有清楚地计算机会成本,那么就很容易被这样那样的高薪诱惑,从而在不合理的时间,不合适的机会上跳槽。当新的工作没有想象的那么好,或者新的公司遭遇崩孙简盘,你不得不止损出局。这时候,找下一份工作就相当棘手。市场不认可你的价值,而你却经历了由俭入奢的过程,不愿回头,于是下一份工作依旧是一个不够深思熟虑的选择。当连续几次错误选择之后,你的职业生涯就岌岌可危了。
我见过五年换过八份工作的人,也见过对自己没有稳定定位,在几个方向上来回飘的人。我还见过履历倒着来的人 —— 在硅谷,见得多的是 Google - FB - Airbnb 的职业切换,我却见过 FB - Google - MS 的切换(没有贬低 MS 的意思)。这种没有想清楚,仅仅因为 package 一时之高低就随意跳槽,是程序员们的《伤仲永》。
以上。希望能触发你的思考。陷入深深的沉思前:请先不吝赞赏
如何学习自学编程的方式最好的莫过于在网络上面查找资源。
目前,网络上电脑资源多不胜数。其中有很多都是基础到精通的视频教程。通过视频讲解。让磨察你明白重点知识。你通过查找一套适合自己的视频。然后看完是基本。
这里推荐几个可以在线学习的好网站:慕课、极客学院、传智播客、如朋网、网易公开课等等做笔记在进行看视频的过程中,一定注意要记笔记。
对视频中重点的部分进行截图,并加以文字解释。就形成了自己的笔记。这些笔记对于你来说很重要。通过记笔记的形式,你就不需要重新观看视频了。只需要复习的时候查看笔记就够了,这样就大大的节约了时间。
下面介绍一个记笔记的好软件:CherryTree多练习代码在视频中讲解的代码,我认为你至少需要自己写三遍以上。在写代码的时候,就用到了上面写的笔记了。通过看笔记截图,即可自己慢慢摸索写出来代码。当然练习到一定程度,就需要你适当的做个项目。巩固自己的知识。
程序员必备技能
1、熟练开发工具
做为一名程序员至少熟练掌握两到三种开发工具的使用,这是程序员的立身之本,其中C/C++和JAVA是重点推荐的开发工具,C/C++以其高效率和高度的灵活性成为开发工具中的利器,很多系统级的软件还是用C/C++编写。
而JAVA的跨平台和与WEB很好的结合是JAVA的优势所在,而JAVA即其相关的技术集JAVAOne很可能会成为未来的主流开发工具之一。
其次,能掌握一种简便的可视化开发工具,如VB,PowerBuilder,Delphi,CBuilder,则更好,这些开发工具减小了开发难度,并能够强化程序员对象模型的概念。另外,需要掌握基本的脚本语言,如shell,perl等,至少能读懂这些脚本代码。
2、熟知数据库
为什么数据库是如此重要?作为程序员,他们自然有自己的理由:很多应用程序都是以数据库的数据为中心,而数据库的产品也有不少,其中关系型数据库仍是主流形式,所以程序员至少熟练掌握一两种数据库,对关系型数据库的关键元素要非常清楚,要熟练掌握SQL的基本语法。
虽然很多数据库产品提供了可视化的数据库管理工具,但SQL是基础,是通用的数据库 *** 作方法。如果没有机会接触商业数据库系统,可以使用免费的数据库产品是一个不错的选择,如mySQL,Postgres等。
3、了解 *** 作系统
当前主流的 *** 作系统是Windows,Linux/Unix,熟练地使用这些 *** 作系统是必须的,但只有这些还远远不够。要想成为一个真正的编程高手,需要深入了解 *** 作系统,了解它的内存管理机制、进程/线程调度、信号、内核对象、系统调用、协议栈实现等。
Linux作为开发源码的 *** 作系统,是一个很好的学习平台,Linux几乎具备了所有现代 *** 作系统的特征。虽然Windows系统的内核实现机制的资料较少,但通过互联网还是能获取不少资料。懂得网络协议TCP/IP。
在互联网如此普及的今天,如果您还没有对互联网的支撑协议TCP/IP协议栈有很好的掌握,就需要迅速补上这一课。
网络技术已改变了软件运行的模式,从最早的客户/服务器结构,到今天的WEBServices,再到未来的网格计算,这一切都离不开以TCP/IP协议栈为基础的网络协议支持,深入掌握TCP/IP协议是非常必要的。
至少,需要了解ISO七层协议模型,IP/UDP/TCP/HTTP等常用协议的原理和三次握手机制。
4、明白DCOM/CORBA/XML/WEBServices存在的意义
随着技术的发展,软件与网络的无缝结合是必然趋势,软件系统的位置无关性是未来计算模式的重要特征之一,DCOM/CORBA是当前两大主流的分布计算的中间平台,DCOM是微软COM(组件对象模型)的扩展,而CORBA是OMG支持的规范。
XML/WebServices重要性不言而喻,XML以其结构化的表示方法和超强的表达能力被喻为互联网上的和游山“世界语”,是分布式计算的基石之一。
5、不要唤中将软件工程与CMM分开
大型软件系统的开发中,工程化的开发控制取代个人英雄主义,成为软件系统成功的保证,一个编程高手并不一定是一个优秀的程序员,一个优秀的程序员是将出色的编程能力和开发技巧同严格的软件工程思想有机结合。
编程只是软件生命周期中的其中一环,优秀的程序员应该掌握软件开发各个阶段的基本技能,如市场分析,可行性分析,需求分析,结构设计,详细设计,软件测试等。
6、需求理解能力
程序员要能正确理解任务单中描述的需求。
在这里要明确一点,程序员不仅仅要注意到软件的功能需求,还应注意软件的性能需求,要能正确评估自己的模块对整个项目中的影响及潜在的威胁,如果有着两到三年项目经验的熟练程序员对这一点没有体会的话,只能说明他或许是认真工作过,但是没有用心工作。
7、模块化思维能力
作为一个优秀的程序员,他的思想不能局限在当前的工作任务里面,要想想看自己写的模块是否可以脱离当前系统存在,通过简单的封装在其他系统中或其他模块中直接使用。
这样做可以使代码能重复利用,减少重复的劳动,也能使系统结构越趋合理。模块化思维能力的提高是一个程序员的技术水平提高的一项重要指标。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)