一个提问引发的职业规划热议-拨开迷雾,走向光明
一个小火点
广州.NET微软技术俱乐部,各路大神的聚集地;日前,引发了一场小小的讨论,一位新人(新入群的朋友)在群里提出了自己的疑问,希望可以得到大家都帮助答疑。
*(本图已获得发言者本人授权发布)
整理了一下他的发言,他本人思路比较清晰,也明确知道自己的想要的东西和遇到的问题,描述还是非常细致的,这里给他点赞!很多人都会在提问题的时候由于描述不够详细而无法得到有效的帮助,他在这一点上做得非常好。针对他提出的问题,群里立刻就热闹起来,俱乐部叶主席提出了非常有意义的参考,群里的朋友大神纷纷表示,和自己的经历非常的相似,比如下面这位朋友
*(本图已获得发言者本人授权发布)
气氛空前的活跃,也勾起了我的回忆。下面结合自己的经历,尝试给这位朋友一些解答。
关于语言选择
在多平台的大环境下,语言选择意味着生态的选择,进而影响到你的朋友圈,最终,影响到的,是你的收入和发展。我从06年开始接触编程,之前真的是只会玩游戏,当我真正进入编程的世界后,我也没有时间去思考我到底要学习什么语言,在那个时代,Java 和 .Net 平分秋色,开发一个 Web 应用,基本要求是全栈,.Net 使用 Asp.Net,Java 使用 Jsp+Javabean+Servlet,这是最基础的, Asp时代不表。桌面应用程序基本就是 Winform 的天下,Java 虽然也有 Swing,但是在 Windows 横行的中国,Swing 犹如沧海一粟。
但是,彼时 Java 已在移动开发领域崭露头角,相信30+的朋友对手机游戏在启动画面的时候,都会出现 Java Logo 的事情记忆犹新,企业级应用 Java 也已经占领了大部分市场份额,从政府到企事业单位,PHP+Java+Oracle 是标配;即使在服务器以及数据库市场上,Windows Server 和 MSSQL 的价格也无形中增加了企业的成本;社区的生态也在快速的拉开了差距,各种开源的论坛和企业网站几乎都是PHP为主流。
但是从 .Net 1.0 开始,微软凭借其快速开发的优势和强大的IDE工具征服了一大批粉丝,桌面应用也一直占据着统治地位,从2008 年开始,我开始看到一丝曙光,这一年,微软发布重磅发布了 WWF+WCF+WPF 三大重要功能,作为微软的忠实粉丝,我义无反顾的投入了进去,在博客园创建了 WF小组,目前 WF 小组已经好几年没有人发言了,在项目中应用了 WCF 进行通讯,桌面应用使用了 WPF,仿佛一切看起来都非常美好,但是我心里清楚,这三个组件都有一个共同的问题:太重了,最重要的是无法跨平台,在企业内部,自我感觉一直处于二等公民的状态,使用 Windows 给公司带来了太多成本上的开销,包括硬件和软件的开销。
这一晃,10年过去了,我个人认为,这是微软失去的 10 年。
在这 10 年间,我也未放弃过对其他语言的探索,PHP,Python,Java,NodeJs,等等,看到了这些语言的发展,也看到了许多的不足,整体来说,语言使用没有局限性,如果有,那就是语言限制了自己的想象力。在许多年以前,你无法想象 Javascript 也可以用来编写高性能的服务器程序,但是今天,各种应用比比皆是。
在今天,微软推出了 .NetCore ,我还是会义无反顾的投入了进去,从我的博客就可以看出来,我写了 Asp.Net Core 轻松学系列,从心里,我希望这个产品越来越好,也坚信我的选择。
对于语言的选择,我的建议是,当你需要时,就去学习!
公司的选择
对于选择公司,是很多人都会遇到的难题,这就是一道单选题,而且你还不能选错,对于新人,能进大公司,不进小公司,为什么呢,从容错率上面来说,大公司的容错率会高很多,在大型的互联网公司里面,你更容易遇到大神,事实也是如此,大神通常都被大公司收编了;大公司有整套的规范化的流程,在这里,你可以学习到更多。
从大公司出来的人,和一直在小公司做全栈工程师不同,大公司给你的锻炼是小公司所不具备的能力,流程管理、团队协作、代码规范,因为这都是一群站在食物链顶端的人,技术趋势也几乎都由他们带领,不是说小公司就能学习到这些东西,只是会比较困难和缓慢,当然,像上面这位兄弟后来遇到了贵人,那是要另外说法的,毕竟千里马常有而伯乐不常在。而另一个收益是,你的工资水平在大公司里必将处于行业中上水平。
横向比较的话,比如以前我的老东家多益网络(此处应该给我广告费),其招聘应届毕业生的程序员入门薪资标准是15k/月,大公司里面还有各种福利待遇,比如旅游、包餐、接送、员工宿舍、各种团建活动、图书馆、健身房、每年免费体检、有的甚至父母小孩都免费,图书馆就是你加班时间提升的好机会,如果你有幸进入比较知名的公司,说不定你还可以直接向开源框架的作者发IM消息进行请教,不管怎么样,所有人都应该到大公司走一趟,然后再做打算,由大公司带出来的技术和流程,在小公司中应用起来,也带来更规范和高效的收益,这是一个正向的过程。
另一半的相遇
轮子哥前几天在群里面说:在美国,如果你有幸取了一个做技术的老婆,那你几乎就是全国收入 10%。当然,轮子哥确实做到了。在大公司里面,意味着更多的人力和资源,不夸张的说,大公司的前台妹子质量是非常高的,当然,做技术的妹子也不知少数了,这些都看个人际遇,我一个朋友的老婆也是做技术的,Java工程师。
技术的积累
相对上面说的这几点,这里说的技术积累尤其重要;在你个人的技术生涯中,一定要不停的学习,特别是要注意专项的提升自己的基础水平和思维能力,如果基础较差或者半路出家,一定要学习计算机原理,了解内存、CPU、高速缓存、字节占位、IO读写、网络传输、安全认证等等,像我就是半路出家,从一个对计算机完全不懂的人变成一个标准的程序员,付出了常人于几倍的努力,别人在玩游戏逛街的时候,我在背单词(开发语言关键字),对着一个示例一遍又一遍的模拟,直到自己无需看 Demo 也能写出来这个程序,才算结束,对于设计模式,需要真实的去思考和使用,设计模式是非常抽象的东西,如果你不去使用,你就不能完全掌握它;程序员这个行业,是非常讲究动手能力的;说白了,我们是靠技术吃饭的。
市场上的开发语言,都非常具有互通性质,所以,你会发现,大牛学什么都快,这是思维模式决定的,真正顶端的人,是创造技术,而我们普通程序员,致力学习好技术,然后自然的去应用到业务中,这就是自我的成功。关于架构,始终相信,好的架构都不是一蹴而就,从来都是随着业务的发展慢慢进行演进,没有银弹,只有适用!对于我们个人也是一样,一步一个脚印,坚持学习2年,后面几乎就是适应,把难掌握的内容进行一遍又一遍地模拟,直到掌握,然后这些经验和教训就像鞭痕一样印在你的脑子里,当需要使用的时候,很自然的,他们就出现了,好的架构师,总是有解决方案就是这个道理。
多参与开源项目,多看优秀开源项目的源代码,学习他们的架构,学习他们的代码书写风格,学习他们高效和精炼的设计,通过阅读源码,提升自己,如果可能,参与维护社区开源项目,既贡献了代码帮助别人,又通过开源项目提升了自己的技术水平,还为社区生态的进一步扩大做出了自己应有的贡献,这是我们的义务,也是一个程序员的应有的担当;通过参与开源社区互动,结交到更多良师益友。像广州.NET微软技术俱乐部里面大神云集,轮子哥、张队、叶主席、还有很多MVP,还有很多开源框架的作者,我们甚至直接向作者咨询问题,这些体检和机会,大概在一个人的世界中很难遇到。
经验和教训
对于个人成长,这里多说两句,如果工作中遇到了问题,要学会适当的提出问题,然后再向别人提出问题之前,先想好解决方案,这样,在你提问的时候,别人会比较重视,觉得你也是经过了思考的,切忌提问的时候上来就喷,无助于问题的解决,还有的人开局一张图,描述全靠猜,这类人,历史终将把他们淘汰在长河里。要善于总结经验教训,不论是技术还是人际关系上的,实际上就是要多思考,这也是预防阿尔茨海默症的好办法。
关于跳槽
我个人参加过大大小小应该有不下100场招聘,包括校园招聘和社会招聘,总的来说,对于3年内跳槽超过超过2次的人来说,我是会特别留意为什么会如此频繁的跳槽,根据劳动法规定,合同3年试用期为3-6个月,合同1年的试用期不得超过1个月,所以,从合规性上面来说,频繁的跳槽意味着可能在团队协作方面会有一些问题,或者其它方面的原因,但是除非碰到特别出色的、聊得来、技术不错,我会降低要求,团队协作我始终摆在第一位,所以,建议不要频繁的跳槽,特别是不要进行大跨度的跳槽,比如一个程序员今年在干开发,明年跳槽做项目管理,后年做售前支持,然后面试岗位为:架构师,这就让人比较怀疑其岗位适配性。当然了,跳槽是走向高薪的非常好的手段,希望大家都被猎人盯上,哈哈。