从边际成本角度思考程序员职业

程序员职业提供的是软件知识服务。

程序员真的是以写代码为生?yes and no. 既是,也不全是。

从表面来看,程序员产出代码和软件,领工资过日子。再往里一层看,程序员职业提供的是软件知识服务。而产出代码和软件,只是软件知识服务的常见产出形式。为什么软件是服务业而不是制造业呢?因为软件并不生产制造实体商品,而是作为一种技术手段来提升实体商品的生产、制造、流通、消费的效率、质量和体验。

一个认真对待职业生涯的程序员,必然要仔细审慎地思考这个职业,充分发挥这个职业的真正价值。

作为”理性经济人”,要特别注重边际成本。程序员也不例外。需要从经济角度来量化和从事职业活动,作为一个”理性经济人”,而不是一个傻傻的整天只知道写代码的技术人。

边际成本,是指每多生产一个单位的商品要付出的成本。这里的一个核心概念是”一个单位的商品”。如果仅仅只是局限在代码的层面上思考问题,那么”一个单位的商品”,就很难说清楚指的是什么。因为软件是一个整体。写多少行代码才能算得上生产了”一个单位的商品”?如何量化”一个单位的商品”?可以先从软件知识服务提供哪些价值产出形式说起。价值是经济活动的核心要素和起始点。

软件知识服务,可以提供哪些价值产出形式呢?

  • 代码和软件提供的功能点和体验。 最常见最直接的主要产出形式。
  • 方案文档和用户手册文档。经常被忽略的重要产出形式。
  • 工程指导。 为实际项目工程的开发中所遇到的问题提供方法论和方案指导。
  • 疑难杂症求解。解决生产服务运行过程中产生的各种疑难问题。
  • 决策咨询服务。为重大项目的关键方向、架构设计等,提供有价值的设计决策和解决方案服务。
  • 具体知识服务。提供关于特定技术的使用或者新知识新技术的咨询服务。
  • 行业报告。提供关于行业领域的动态和趋势相关的分析和见解。

从这些价值产出形式来看,就能看得更清楚些。对于程序员职业而言,”一个单位的商品”,可以指:

  • 一个能帮助用户做点事情的小的功能点
  • 一篇有价值的用户手册文档
  • 一个可复用的设计和实现方案
  • 一次实际问题的求解
  • 一次实际疑难问题的排查和解决
  • 一次重要的设计咨询及方案输出
  • 一篇阐述新知识新技术原理及使用的文章
  • 一篇有价值的译文
  • 一篇阐述行业发展趋势的分析报告

有了这些价值产出形式,程序员的职业活动就有了量化的尺度和前进的方向。

边际成本里的另一个核心概念是”成本”,即必须付出的代价。

成本的基本形式是资源与时间。程序员最宝贵的资源是不可再生的时间。时间是程序员提供价值产出所付出的最主要成本。其次是好用的笔记本、物廉价美的服务器、云资源和其它设备。摸着胸口自问下:你的时间用在了哪里?产出了什么?

写完一篇有价值的文档,有多少人从中受益,花费了多长时间? 做完一个功能点,花费了多长时间,产生了怎样的经济效益?是否沉淀出通用的解决方案,花费了多长时间?写出有用的用户手册和帮助文档,花费了多长时间?是否为别人遇到的开发问题提供帮助,花费了多长时间?是否针对项目的疑难棘手问题、关键点给出了有益的决策建议,花费了多长时间?能否写出有价值的行业分析报告,花费了多长时间?

很少有程序员关心这些。有的程序员想方设法拖延,难以量化工作效率;有的程序员反复做最基本的开发,不去思考更高层次的问题和解决方案,随着时间的增长,产出价值一直处于初级水平;有的程序员不关心自己的工作产出价值,只关心代码和技术;有的程序员不关心自己花费了多长时间,时间哗啦啦如水流。不一而足。无意批评哪一种做法,只能说:种瓜得瓜,种豆得豆。各得其所。

职业规划究竟是什么?很多人的理解可能就是,N 年要获得什么职位或头衔。

高级工程师与初级工程师的区别在哪里? 很多人的理解可能就是,高级工程师比初级工程师的”经验”更加丰富,做事更加熟练。

从边际成本的角度来看职业规划,就可以把职业规划看成一个量化的目标阶梯。即:在一定阶段,能够提供的价值产出形式与成本的关系的变化。

比如初级工程师,提供的价值产出主要是”功能点”、”文档”,所花费的时长通常以天计,而高级工程师提供的价值产出不仅包括”功能点”、”文档”,也包括”可复用的方案”、”实际问题的求解”、”疑难杂症求解”,部分还能提供一定程度的设计咨询和方案输出,时长通常以”小时”计;专家提供的价值产出,则更侧重”可复用方案”、”疑难杂症求解”、”设计咨询和方案服务”、”行业分析报告”等,时长以小时或分钟计。

来看看一个可复用可扩展方案的边际成本。假设开发一个扫描任务,需要花费 3 人天,价值 200 元,边际收益投资比是 200/3 = 66.6。如果方案不具可复用可扩展性,那么再开发一个扫描任务,依然是 3 人天,价值 150 元,边际收益投资比是 50。假设原来 3 人天开发了一个可复用的方案,使得后续开发一个扫描任务,只需要 1 人天,那么边际成本是 1 人天,边际收益投资比为 150。显然,开发可复用可扩展的方案,是具有很强的经济价值的。这也是加薪的有力依据。

本文尝试从边际成本的经济角度来思考程序员职业生涯。边际成本的两个要素是:一单位的价值产出与成本(资源与时间)。感觉是,对一些事情看得更清晰了些。

Original: https://www.cnblogs.com/lovesqcc/p/16247361.html
Author: 琴水玉
Title: 从边际成本角度思考程序员职业

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594546/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JS使用BLOB方式下载Excel导致文件损坏的问题解决

    这两天写一个后台生成Excel返回前端下载的功能,遇到了一个问题,记录一下。 前端点击下载按钮,文档损坏,但是使用Postman调用下载,文档却是正常的。 exportExcel(…

    Java 2023年6月9日
    079
  • 关于二叉树BFS、DFS的总结

    1 BFS、DFS算法的定义 BFS:广度优先搜索算法,也可称为层序遍历,按照二叉树的层次进行访问,可采用队列保存每一层的节点。 DFS:深度优先搜索算法,尽可能深的搜索树的分支,…

    Java 2023年6月8日
    071
  • 阿里云服务器中MySQL数据库被攻击

    前几天刚领了一个月的阿里云服务器玩,在里面装了MySQL,然后这几天找了个小项目练习着玩呢,就将表建在里面了。刚访问添加员工还好好的,刚给员工分页查询呢 ,啪一下 ,很突然昂 ,就…

    Java 2023年6月15日
    093
  • pom.xml成了普通xml文件

    最近公司老有新同事由于各种原因,差点导致整个项目崩溃,其中有一个问题就是idea没有识别出来mavn中的pom.xml文件,不能自动下载依赖包。问题现状:pom.xml成了普通黄色…

    Java 2023年6月8日
    089
  • springboot系列十二、springboot集成RestTemplate及常见用法

    一、背景介绍 在微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的 URLConnection、Apache的 H…

    Java 2023年5月30日
    088
  • 面向对象(上)

    面向对象(上) java面向对象学习三条主线 * 1.java类及类的成员:属性、方法、构造器、代码块、内部类 * 2.面向对象的三大特征:封装,继承,多态 * 3.其他关键字:t…

    Java 2023年6月6日
    075
  • Java,求一个字符串中指定字符出现的次数

    如题,这里介绍两种方式 1、把字符串转化成字符数组,然后通过for循环比对出结果 这种方式虽然明面上看着有for循环,实际执行速度却很快,也很好理解。 2、用string的spli…

    Java 2023年6月5日
    092
  • 替代反射调用的几种方式及性能测试

    园子里和这个话题的相关文章比较多,本文是旧话重提,外加个小的总结。主要因为近期看到很多同事、朋友都已经使用 VS2012 进行 .NET 4.5 开发了,却还在大量使用反射,不知道…

    Java 2023年5月30日
    080
  • mybatisPlus整理

    1.在启动类上面添加@MapperScan注解,扫描mapper包 1 @SpringBootApplication 2 @MapperScan("com.qiao.de…

    Java 2023年5月30日
    081
  • Spring Cloud Gateway 网关处理器

    API网关作为后端服务的统一入口,可提供请求路由、协议转换、安全认证、服务鉴权、流量控制、日志监控等服务。那么当请求到达网关时,网关都做了哪些处理以及怎么处理的呢? 一、Sprin…

    Java 2023年5月30日
    066
  • Spring Boot 2.7.0 更新说明

    Spring Boot 又接连发布了三个版本: Spring Boot 2.7.0(最新) Spring Boot 2.6.8 Spring Boot 2.5.14 后面两个版本都…

    Java 2023年6月8日
    096
  • IO多路复用 基于IO的单线程并发 协程

    一. IO多路复用 检测多个socket是否已经发生变化(是否已经连接成功/是否已经获取数据)(可读/可写) 操作系统检测socket是否发生变化,有三种模式: select:最多…

    Java 2023年5月29日
    063
  • Spring Boot启动流程

    Spring Boot启动流程 君生我未生,君生我已老。君恨我生迟,我恨君生早。 一、简述 Spring Boot启动流程分析使用版本SpringBoot VERSION:版本 2…

    Java 2023年6月5日
    0119
  • Spring Cloud Feign+Hystrix自定义异常处理

    开启Hystrix spring-cloud-dependencies Dalston版本之后,默认Feign对Hystrix的支持默认是关闭的,需要手动开启。 feign.hys…

    Java 2023年6月6日
    0103
  • 6. 软件架构的演进过程

    1.软件架构的演进过程 1.1单一应用架构(ORM) 当网站流量&am…

    Java 2023年6月5日
    089
  • Java反射

    用来动态的操纵Java代码 反射机制的主要作用: 在运行时分析类的能力 在运行时查看对象 实现通用的数组操作代码 利用Method对象 Class类 在Java程序运行时,系统为所…

    Java 2023年6月13日
    081
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球