提问:
我一直在思考一个问题,就是程序员这个职业,他应该负责的工作是否有一个明确的边界呢?也许你会觉得,这个想法很愚蠢,一个职业,怎么可能没有边界?难道会有人让你去做超出你职业的事情吗?别急,现在请你在大脑里想一下,你认为程序员的工作范围,然后,我们来研究一下以下这几种情况:
- 公司需要搭建自动化部署流程,来减少运维人员的工资成本。
- 老板为了节省测人员的工资成本,想让你提供自动化测试的方案。
- 面试的时候、被CPU的时候,总是被问到和算法、数据结构有关的问题,但你工作中却几乎用不到这方面的知识。
- 被人拉着修一下鼠标····
原因分析:
论述开启前,强调下,本文适合软件开发行业的朋友阅读。
伙计们,我提出的这四种情况,你们是不是遇到过?然后和你们头脑里面设想的范围,是不是不一样呢?其实,随着DevOPS、TDD等思想的提出和相关工具链的逐渐成熟,程序员的工作范围已经“沧海桑田”了。首先,这些思想是高度契合商业需求的,最直观的,它可以降低公司成本、减少出错率(机器比人更可靠)、对外宣传(展示公司科技水平)。符合资本家的利益的东西,自然就会被注资、被推广!
解决方案专家而不是程序员:
我觉得,现在市场需要的,是“解决方案专家”,而不是程序员。 我们来举个🌰,现在,代表商业的董事长对你说“我想要一个东西,它能负责打印客户信息”。如果你的回答是:
1、没问题,都交给我就好了;那你就是总经理。
2、没问题,但我需要一个产品经理,那你就是CTO。
3、没问题,请给我具体的项目周期和预算。那你就是项目经理。
4、没问题,我开发完谁来部署?那你是个后端开发。
5、有问题,我做不了,那你应该是提过离职,正在交接的人员(🐶)。
也就是说,不管是在公司,还是要做私活,市场对于程序员好还是坏的定义,取决于,关于“概念落地”这件事,你能包揽多少工作。 说到底,软件开发是属于工科的,工科的目的,就是落地与实现。
所以,程序员提高自身竞争力的手段,就是提高自己落地客户想法的能力。这个链条大概是这样:
引导客户需求-设计产品原型-论证技术手段-设计技术架构-开发计划制定-部署/运维/迭代-架构持续演化
我认为,这条线上,你掌握的越多,你的职位就会越高!你的收入就会越高!
好像漏了点什么?:
在上文中,我们提到了算法、数据结构,但是解决方案专家所需要的能力,好像并没有包括这些知识,那程序员对算法、数据结构的态度应该是怎样的呢?
我们还是举个🌰,我觉得程序员就如同医生,医生负责解决病人的身体问题,比如给病人开出1瓶青霉素吊瓶,但是,医生并不会需要知道青霉素的提炼方式或者青霉素的分子结构。当然,知道这些知识更好,但一个优秀的医生,是要把这些知识当作“黑盒”来处理的!因为人的精力、时间是有限的,你必须能够从宏观上使用这些工具,才能为你的客户,解决实际的问题!
总结来说,设计数据结构的人很伟大,但是他们只能去设计数据结构了(无意冒犯,只是想强调术业有专攻)。
所以在学习中,一定不要掉入“微观陷阱”,要注重对细节掌握的度!要宏观的调度这些“黑盒”。
总结:
对于出身普通的同行,能够获取财富最可靠的方式,就是帮助手中握有财富的老板,落地他们的想法,因为这个世界上,只有技术是无法被愚弄的。
引导客户需求-设计产品原型-论证技术手段-设计技术架构-开发计划制定-部署/运维/迭代-架构持续演化