当你完全认清程序员这个行业,你才能越走越远
程序员是一个具备长久生命力的职业
我大学刚毕业的时候,程序员还是一个年轻的职业,那个年代,我们都没见过35岁以上的程序员。很多人告诉我,程序员是吃青春饭的,你在国内见过35岁的程序员吗?我说,没有。
就是嘛,所以要尽早转行呀......
这种话听得着实不少,事实上也真的有很多程序员早早转行了,我没转不是因为内心强大,而是我喜欢编程,尽管我也不小了,以后会怎样,35岁听起来像光年一样的距离,谁会考虑那么遥远的事情。所以我什么都没想就继续编程了。
看看周围的朋友,他们要么在某个技术领域成为行家里手,要么在做产品的同时演讲布道,有的设计出了很多人使用的软件,有的则成为了一个纯粹的管理者,经营着上千人的机构。这些人从前是程序员,现在也是。
程序员是这个时代最好的职业之一,是不是最好,不敢确认,毕竟我没离开过互联网行业。不过程序员喜欢自嘲倒是真的,甚至以互黑作为生活的乐趣,有时我们也会被别人黑到喜马拉雅山的高度,但不可否认的是,大部分程序员都是在空调房里敲敲键盘就有可能冷不丁改变了世界,并且,大部分时候,我们都让这个世界变得好了一点点。与很多职业相比,程序员的投入产出比都算高的,稍有智力门槛,也没比其他行业高多少。而这个时代,给了程序员们大展宏图的机会,给我们足够的自由度去创造我们想要的东西。
至于传说中的「程序员职业病」,其实和程序员这个职业并没有多大关系,伏案工作的人群大抵如此。越来越多的互联网公司为员工提供了各种福利,免费的健身房,舒适的桌椅,香浓的咖啡,甚至一些娱乐设施。自己不运动,其实很难怪到这个职业头上。另外,程序员的工作也「并没有想象的那么辛苦」,有太多的行业比我们辛苦的多,所以,遇到头脑清楚逻辑清晰又喜爱计算机并且没有意向进入其他领域的年轻人,我总是对他们说,来做个程序员吧,这是个能让你的生活变得精彩的职业。
程序员不一定要写一辈子程序
以前人们总是说年龄大了就不要写代码了,或者说写不动代码了。现在多少有点矫枉过正,比如CTO怎么能不写代码呢,写代码可是一辈子的事呀。在我看来,这个问题根本没什么可以争论的,一个阶段一种做法。如果你写代码是最有价值的,就去写代码。如果你做产品是最有价值的,就去做产品。如果你去管理公司是最有价值的,就去管理公司。
前一阵子看过一篇文章「扎克伯格开发笔记:打造Jarvis的日子」,扎克伯格在文章里写到:
2016年我给自己制定了一个挑战:打造一个像钢铁侠里Jarvis那样的家庭AI助手。
在这一里里,我打造了一个可以通过手机和电脑进行对话的AI系统。它能够控制我家里的灯光,温度,电器,音乐和安防系统,而且这个AI还能了解我的品味和习惯,可以学习新的词汇和概念,甚至可以逗我的女儿Max开心.Jarvis是由Python,PHP和Objective-C编写的,运用了包括自然语言处理,语音识别,面部识别以及强化学习在内的人工智能技术。
扎克伯格是为了编程而编程么,显然不是。除了保持技术的敏感度,他主要是为了了解人工智能发展的现状。通过挑战熟悉Facebook的工程师们使用的内部技术,同时了解智能家居。而且,这些工作仅仅占用了他很少一部分时间。
实际情况也是这样,与我一起成长起来的80后程序员,差不多有超过一半,他们的工作重心已经不再是编码,而是其他工作事务,另外一半则依然以编程为主要任务。这两种状态,都是很好的存在。
程序员职业生涯的关键点是哪些?
以我并不丰富的程序员阅历来看,入行三到五年的经历对程序员以后的职业生涯有非常重要的作用。互联网时代学习环境开放,资料浩如烟海,很多大学生在走出学校大门的时候,很可能在某项专业技能上已经达到了很高的水准,但是这三到五年的探索,依然是不可或缺的。
很多人喜欢制定学习计划,但这些计划大都无法执行下去。不是计划出了问题,而是人学习和提升的方式很难按部就班,很多时候我们都是在摸索前行。就像你今天按计划要耕完一亩田,作业进行到一半的时候,你发现一块土质的异常,于是深挖下去,用镰刀割去杂草,用铁锹铲除泥土,用钻头钻出深洞,最后发现了一口油井。如果你按照计划耕完这一亩田,可能永远发现不了那口井。
我相信每个人身体里都有某种特质,这种特质让你在某个领域取得成就的可能性远远大于其他,这种特质也能让你异于他人。但是,人们并不是生来就知道自己擅长干什么的,需要花时间去寻找,找到它,然后去做自己最擅长的事情,这对你漫长的职业生涯是一笔巨大的财富。
需要五年这么久的时间吗?依我个人的经历,恐怕更长也说不定。无论程序员也好,软件工程师也罢,叫着简单,领域知识却是浩如烟海。进入现代互联网阶段,程序员的领域细分到了令人发指的程度,比如XX语言工程师,前端工程师,后端工程师,架构师,大数据工程师,安全工程师,运维工程师,移动开发工程师,DBA等等,叫法繁复,甚至职能重叠,这些角色最初都叫做程序员,最终他们像一棵大树,枝条粗壮,蜿蜒生长,然后在树冠分开,并结出了各种各样的果实。同时,每个细分的领域又会衍生出浩瀚的领域知识。
比如编程语言,常用的编程语言就有几十种,静态语言,动态语言,脚本语言,函数式编程,面向对象编程,过程式编程等等,从平台角度,Java VM上有Java,Scala,Groovy ,Clojure,Jython,Ceylon等,。Net平台上有C#,J#,F#,VB.Net,VC#,ASP.Net,移动平台有iOS,Android,Windows Phone ......
即便我们把目光聚焦在一门语言或技术上,Java,你也不可能仅仅掌握它的语法特性和函数库,然后写写业务表单和增加改查就完了.Java的虚拟机,性能,并发编程,Jit技术,垃圾收集,集群,分布式,异常,日志服务,还有大量的Java平台开源项目,都需要深入了解。除此之外,一些数据结构和算法也是程序员们应该掌握的内容,比如栈,队列,链表,二叉树,红黑树,B树,散列表,排序算法,查找算法,最小路径,最小生成树等等......
这么看来,五年的时间并不长是不是?
当然,还有一种可能,你花费了五年的时间,发现自己并不适合做程序员,虽然这听起来有点悲哀,但也不失为一件好事,因为你还有时间转型啊。程序员几乎可以转型为其他任何角色,反过来却很难。我们听说过很多优秀的产品经理,创业者,管理者最初都是程序员,却很少听说哪个顶尖的程序员是从产品经理转过来的,有吗?反正我不知道。
五
程序员如何做出好产品?
在很多人眼中,产品经理做需求,程序员做实现,似乎是一对冤家对头,比如最新的段子是这样的:产品经理失踪了,程序员第一时间到警察局报警警察对程序员说:你先冷静一下,你这样一直笑没办法做笔录。
其实根本不是这样,一个好的产品,一定是程序员和产品经理一起努力协作的结果,甚至,很多技术人员本身就是这个产品的产品经理,有的即负责技术又设计产品,有的干脆是从程序员转成了产品经理。
张小龙在刚并入腾讯的时候负责QQ邮箱,那时候他觉得自己应该做一个管理者,产品的事情让团队的人去做就行了。“说老实话,我个人没有太关注它的体验,几乎很少参与到产品的设计中,结果出了大问题」。之后张小龙彻底改变风格,重回一线。「从极简版开始,我真正投入去做一些我自己掌握的产品体验,我怎么说就怎么做,任何一个元素要改都必须得到我的同意才行,我会全程参与到这个产品的每一个功能体验中」。最后始有微信。
据说张小龙是那个时代南方最好的程序员。
马化腾对技术和产品的重视程度也由来已久,他在2008年的公开演讲中就说:产品和服务是需要大量技术背景支持的,我们希望的产品经理是非常资深的,最好是由做过前端,后端开发的技术研发人员晋升而来。好的产品应该交到一个有技术能力,有经验的人员手上,这样会让大家更加放心。如果产品经理不合格,让很多兄弟陪着干,结果发现方向错误,这是非常浪费和挫伤团队士气的。
如果你是个程序员,如果你热爱你的正在研发的产品,一定要参与到产品的方方面面中来,彻底了解产品的逻辑,体验,交互和用户心理,每一次版本发布后去观察用户的反馈,收集产品数据,与产品经理反复探讨和确认每一个细节。
事实上,无论产品经理和设计师做到何等的事无巨细,最终软件是由程序员写出来的,这个产品必定天然携带了这些程序员的特质和元素,如果程序员在每一行代码中倾注了自己的情感,这个产品就是个有情感会呼吸的产品。如果程序员只是实现产品的工具,那做出来的东西也是没有生气的,苍白的。
只有程序员和产品经理同时全情投入,才有可能做出最好的产品。
6
专业性很重要,但也别太「专」了
程序员一看就是个很专业的工种,但是正如前面所述,这个领域的技术用浩如烟海来形容豪不为过,我们穷尽一生也无法掌握其万分之一。人们常说先做专才,再做通才,也就是所谓的T字型人才,既有某个领域的专业知识,同时知识技能广泛,为人处世,大开大合。古代开国皇帝大抵都是这种,雄才大略又武艺高强,上马砍人,下马治国,一通百通。
所以程序员必须首先具备专业技能,才能在这个残酷的领域里存活下来,不要没干两年就想着去管理,抛弃专业知识。翻一翻互联网招聘职位列表就知道了,一百条里面99条是各种各样的工程师,好容易有一条是管理性质的,一看是总经理,您能胜任吗?
所以,专业技能是需要优先考虑的,等你真正成了技术大拿,自然知道怎么去扩展横向知识。
但是你也别太专了,以至于成了偏门技术。我有个朋友一直在国外生活,他的技术栈就是大型机 - MainFrame,每天和JCL(Job Control Language),COBOL等技术打交道,工作机会不多,但这个专业的人员更少。找工作倒是不难,但是看不到上升的空间,每次换工作都得换城市,为了一个更好的职位,甚至需要从美国辗转到日本,每次被折腾的死去活来,换方向代价有太大,薪水还会降很多,进退维谷。
选技术方向,不要让自己处于这种境地。
7
程序员的跳槽?
跳槽也是一种选择,关键是要找到自己的价值。谈到价值,大家就会想到财富,毕竟每次跳槽大家都希望能挣到更多的钱。凭借工资能够完成足够的财富积累吗?不一定。
财富积累应该是阶段性的,而不是线性的。比如你在很长的阶段里,薪水一直徘徊在两万左右,突然有一天,到了一个不可预知的拐点,月入十万了(注意不是月薪),又或者,股权兑现了,又或者,家里拆迁了,等等。总之,财富的积累不是一点点涨上去的,你可能在很短时间内积累的财富远远超过之前积累的总和,或者说,财富积累也符合二八原则。当然,你也可以等着薪水一点点的涨上去,那样的话,就是说,嗯,基本上最终你也不会有什么财富。
无论通过哪种方式,跟随公司上市也好,自己能力大幅提升年薪百万也好,投资也好,创业也好,总之要找到或者碰到这个拐点,坚持,勤奋,坚定,都是不可或缺的因素,当然,运气有时候更为重要一些。无论如何,最重要的是你得一直往前走。
跳槽是往前走的方式之一,跳的过程中,也可能遇到拐点。举个例子,前阿里的王勇睿老师,2010年面试外企失败(原因未知),退而求其次进了阿里巴巴,结果四年后阿里咔就上市了,王老师富废,结果还是闲不住,又去创业了。举个反面的例子,杭州二爷邱岳,2008年加入阿里,干得风生水起, 2012年不知道什么原因就从阿里巴巴跳槽了,2016年不知道什么原因就失业了......
之所以举了两个好朋友的例子,意思就是,跳槽的变数也挺大的,有时候做了有价值的事,获得了应得的财富,有时候则只取其一,或者两手空空。
每个上过班的人都知道,在同一个公司加薪实在是太慢了。为什么会这样?因为你入职的那一天,公司人力部门是以当时的市场价值评估确定你的薪酬的,随后的日子里,如果公司正常发展,加薪升职都要遵循公司的内部通道和规则,如果这个规则赶不上市场薪酬的涨幅(就像最近几年),那你干了三年,薪水还不如同等水平的新员工就是很正常的情况了。
知道了这个真相后怎么办?去判断短期利益和长期利益。无论个人财富还是知识积累,从长远来看,能够让你获得自由的,都是指数级别的增长,也就是那个拐点,而不是你的工资。一个人一辈子挣到手的工资其实是可以一眼看穿的。而可以看穿未来的事情,往往比较无聊。
所以决定离开一个公司或加入一个新公司,问自己几个问题就好了:????公司是不是在成长你自己能不能获得成长公司的成长和自己有没有关系干的开不开心如果这几个问题都是肯定的回答,那么就该留下共同成长。反之就该离开。如果2:2呢?这就需要你去判断了。
程序员如何实现个人价值?还是得踏踏实实的写好每一行代码,做好每一个产品,然后等待时间的力量,万一是大器晚红呢?
感谢
欢迎工作一到十年的Java工程师朋友们加入Java进阶架构:878249276,
点击链接加入学习:https://jq.qq.com/?_wv=1027&k=5SG5BWn
本群提供免费的学习指导 架构资料 以及免费的解答
不懂得问题都可以在本群提出来 之后还会有职业生涯规划以及面试指导
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
numpy.min(axis)用法
选择python,就是选择使用数学工具解决问题。numpy中的矩阵运算功能可谓强大,但手册不多。规律要自己总结。 numpy.ma.minnumpy.ma.min(obj, axis=None, out=None, fill_value=None, keepdims=)[source] Return the minimum along a given axis. Parameters: axis : {None, int}, optional Axis along which to operate. By default, axis is None and the flattened input is used. out : array_like, optional Alternative output array in which to place the result. Must be of the same shape and buffer length as the expected output. fill_value : {var}, optional Value used...
- 下一篇
JVM Profiler CpuAndMemoryProfiler
开篇 CpuAndMemoryProfiler主要用来采集cpu和memory相关的信息,采集核心方法都是由ManagementFactory提供的接口: getClassLoadingMXBean() 返回 Java 虚拟机的类加载系统的管理 Bean。 getCompilationMXBean() 返回 Java 虚拟机的编译系统的管理 Bean。 getGarbageCollectorMXBeans() 返回 Java 虚拟机中的 GarbageCollectorMXBean 对象列表。 getMemoryManagerMXBeans() 返回 Java 虚拟机中的 MemoryManagerMXBean 对象列表。 getMemoryMXBean() 返回 Java 虚拟机的内存系统的管理 Bean。 getMemoryPoolMXBeans() 返回 Java 虚拟机中的 MemoryPoolMXBean 对象列表。 getOperatingSystemMXBean() 返回运行 Java 虚拟机的操作系统的管理 Bean。 getPlatformMBeanServer(...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果