作为一名新时代农民工,工作这些年来,在碰壁中成长,对「程序员」这个职业也有些自己的思考。写这篇文章,一方面是为了分享,另一方面也是想留下一份记录,过两年,回头看,自己的认知是否更新。
在做什么事儿&需要什么能力
我想从两个方面来说。
在做什么事儿
在我看来,程序员的工作就是发现问题、分析问题、解决问题三类。事实上,世界上绝大多数工作都可以囊括进这三类事中。
发现问题、分析问题、解决问题,是宏观到微观的区别。平时做的事,肯定是以解决问题为主,各种琐碎的事,也都是在解决问题。发现问题和分析问题对人的思维深度会有更高的要求,不过对于工作来说,我倒并不觉得这三类事有什么高下之分。如果对确定的问题,总能给出恰当的解决方案,这也是职场上非常硬核的核心竞争力。
需要什么能力
从能力上来看,我将能力分为两种:对现实世界的认知能力和将现实世界映射成计算机语言的能力。
对于这两类能力,一般还是更关注第二种。但是我觉得对现实世界的认知能力,对于程序员的职业发展是非常重要的。就像抠业务,做一名切图仔这事儿,有门槛吗?我觉得是有的,至少把业务做的很好门槛非常高。有些人总是以非常奇特的方式去实现业务,然后赖产品经理需求描述不清楚,很可能就是缺少对现实的认知。
发现&分析&解决
发现问题
发现问题的能力,对程序员来说,其实不是必需的。很多问题,即便你发现不了,或者发现了然后假装它不存在,系统一样可以运行的很好。但是,逐步的累积这种问题,最终必然会导致代码不可维护。
那么,怎么才能发现问题呢。这需要我们有对现实世界的认知能力,也需要对设计模式等基础知识有足够的理解。要发现问题,我们首先得有“正常状态”是什么样子的概念,与正常状态不一样的,就是问题。比如,写单元测试应该是很简单的,当发现单元测试不好写的时候,就需要考虑一下是不是代码的设计出了问题。
分析问题
对于分析问题,我觉得说白了就是把一个表现出来的问题,拆解成一个或若干个“指标”出了问题。这些“指标”,可以是首页加载时间,打包构建时间等这样实际的指标,也可以是一些基本的概念理解、设计思路。有时候,我们发现的问题就是一些很简单的需求,但是实现起来很难,最后拆解出来的出问题的“指标”其实就是问题的根本所在。
对于分析问题,要会做合理的可能性推测,然后多利用工具验证或者推翻猜测。逐步就可以定位到问题了。
解决问题
对大部分程序员来说,这个是耗费时间最多的事。而程序员的解决问题,也就是把现实中的概念在计算机中表示出来。
其中最关键的,我理解有两个,一是分解任务,把一个大任务拆分成若干个独立的子任务;二是迅速的理解并使用新工具能力,也就是持续学习的能力。
很多人会经常抱怨程序员要学的东西太多了,学不过来了。不过一定要注意哪些东西是值得花费大量时间去学的,哪些东西是简单看看就足够了的。发现有很多人热衷于工具的学习,喜欢写各种版本的Hello World, 这个在我看来就是无效的学习。编程方面的学习,需要兼顾深度和广度,深度,是需要非常透彻的研究一些技术,这个看了一些之后,你会发现各种技术,看起来可能没什么关系,比如Vue和React,但是其中就是会有非常多相似的概念和思想。学过一些之后,就可以建立起自己的知识体系了,然后再去学其他的东西,就会非常快。
因为一个新技术的产生,必然是迫切的要解决一些实际问题。当知道要解决什么问题后,就可以先试着想一下换成你的话,有什么解决方案。然后再去看看人家实际的解决方案。如果方案很接近,那么恭喜你,你对技术的理解已经又上了一个高度。如果不一样,那也恭喜你,又学到了一种新的思想。这些思想,在以后做业务的时候,随时都可以化用。
未来的职业出路是?
有人说,程序员是一个青春饭。
我认为这是一个伪命题。一是国内互联网发展时间较短,20年左右的时间,因此人才工龄相对年轻。二是对于技术行业,就是越老越吃香。除非干了十年的开发工作,做着还是23岁的活,那被年轻人替代也是正常的。所以我们现在这个时代是成长类型的时代,任何一个行业只要不成长就会淘汰,都是一样的。
网上有很多人讨论未来程序员的职业出路是如何?
我认为社会变化太快了,没人能预测。90年代国企下岗的时候很多人也都接受不了:说好的养一辈子呢?最后这些人也得自己扛。会计能干到老吧?也未必,说不定就被软件取代了。报社稳定吧?结果现在几乎没人看报纸。
并不是抬杠,其实很多职业都是相当不稳定的:跟经济形势、技术、政策都是高耦合的。唯一不变的就是变化。主要不稳定的因素有两个:看不到的不稳定(黑天鹅)和能预料到的不稳定(灰犀牛)。很多人不慌,是因为根本看不到危机。
其实程序员的出路,还是决定于社会的走向——这没人知道。风口上猪都能飞,关键是风来不来。
既然未来不可知,盛世必衰败;大宴豪奢后,飞鸟各投林。那我躺平如何?没事儿读读《红楼梦》,有些现实人总得接受,正好远在内蒙古的家乡还有几头羊。其实不然,作为一名程序员,还是得留些心眼子。
程序员的心眼子
- 保持健康。经常锻炼,规律作息,合理饮食。切勿拿命换钱。
- 保持好奇心,不对自己设限。有一个或多个属于自己且能坚持下去的爱好。技术路线向“T”型,或者“π”型发展。稚晖君从事算法工作,但业余也是硬件能手;乔布斯也未料想到大学期间旁听的字体设计课程会影响到苹果公司的创立。
- 了解底层原理。无论出现了什么新技术,绝大多数都是对于底层技术的封装。
- 多总结,多记录,多思考。
- 学好英语,可听说读写。
- 投入开源社区,勤分享,多学习。
- 保持危机意识。任何时候,任何状况,任何事件都有自己的plan B。
- 探究润学的可行性。