程序员的发展观

程序员的发展观(摘自凤凰架构)

程序员,字面意思是指编写程序代码的人。但在不少程序员的认知里,今天去写代码,目的却是为了日后可以不必再写代码。程序员的”进阶职业“中,无论是对“顶层设计”、“战略架构”侃侃而谈的架构师和资深专家,还是“从技术走向管理”的研发部门管理者,似乎都已脱离了字面意义上的“写程序代码的人”,作为程序员这个群体的领导者或管理者,理应以治下的程序员能有更高的效率更好的产出作为工作目标和考核依据。

按职业经理人的视角来看,以上是合情合理的,但这种视角下的程序员,恐怕也算得上是最难以管理的职场群体了:工作的过程无法标准化和流水线化,编码的产出指标与质量指标都很难量化地衡量和对比;偏偏写代码这种工作还是一种创造性的脑力劳动,性质决定了程序员必须是一群能独立思考,带有一点天生洁癖,有一点习惯性找茬纠错抬杠的人,领导交办的任务,动辄“这个需求不合理”,要么是"这个功能实现不了”,天哪,怎么会有如此难缠难管的员工?

与此相对的另外一面,业界普遍都认可程序员是相对单纯,不必琢磨复杂人际心思的职场群体,这群人天生带有一种工匠式的图腾崇拜精神,本质上与旧时的小手工业者并没有什么区别,都奉行达者为师,不迷信管理他们的人,但充分尊重能够指导他们的人;都带着些许理工钢铁直男式的直线思维,爱讲逻辑爱讲道理,万一讲不通,起码还能“Talk is cheap, Show me the code”,从这个角度来看,一个对事不对人的、爱讲道理的群体,又怎么可能会难缠难管呢?

Talk is cheap. Show me the code.
屁话少说,放"码"过来。

—— Linus Torvalds, Re: SCO: “thread creation is about a thousand times faster than onnative”, 2000

以上这些,是希望无论日后你的职业目标是永远做一名程序员,还是架构师,抑或是成为一名研发管理者,都不要轻易地离开技术领域的一线前沿,离开技术、放弃编码的决定很可能会像你高考之后放下的数学、生物、地理等知识那样,一旦放手,毕生就很难有机会再重新捡起来。

久而久之,你对代码、技术、产品状态与团队研发状态的理解,渐渐和团队成员产生了偏差错位,丧失了细节上给予指导的能力,丧失了专业问题上提出接地气解决方案的能力,只能在无法“Show me the code”短期难以校验对错的大战略方向提意见,在会议、流程及团队管理措施上下功夫,在职业经理人式的宣讲与汇报上寻找存在感,此刻,你便从团队的导师变成了管理者,最终你与团队的关系,从携手并肩奋斗的伙伴,完全演变成只能靠公司制度与管理职位的权力来维系雇佣关系。

《架构整洁之道》,第 15 章

Software architects are the best programmers, and they continue to take programming tasks. Software architects may not write as much code as other programmers do, but they continue to engage in programming tasks. They do this because they cannot do their jobs properly if they are not experiencing the problems that they are creating for the rest of the programmers.

软件架构师本身就是最好的程序员,他们会一直编写代码,虽然可能不会像其他程序员输出的代码量那样多,但是只有持续地编程,才能确保他们遇见其他程序员所面对的问题,体会其他程序员心中的感受,因此如果不编程,他们亦将无法胜任软件架构这项工作。

—— Robert C. Martin, 《Clean Architecture》, 2018

我很清楚在目前的 IT 业界,只有少量极客文化浓厚的公司会允许少量高端程序员以“独立贡献者(Individual Contributor)”的角色做到高端的职位,绝大多数企业都还是“技而优则仕”,去做管理或者做战略方向的务虚工作,往往是由屁股决定的问题而非由脑袋决定的问题。

我也相信假如能够轻松地做好技术,没有人愿意随便放弃。我所听过的离开技术一线最常见的原因是“年纪大了,时间不够用了”或要“聚焦精力去做管理了”。对这种现象我的看法是:确实很难轻松地做好技术,但是做在好技术工作的前提下,却有可能较为轻松地做好架构和管理工作。

我自己也是一名架构师和管理者,在作自我介绍的场合,用的头衔却从来都是“兼职一些管理工作的程序员”,这是一种人设标签。如果你问我为什么管理几十人、几百人的团队的同时,还能抽出时间去编码、去写作、去关注具体的细节与技术的潮流发展,我会理所当然地回答“因为我是一名程序员”啊。这句话的第一层意思是,我是程序员,去编码是天经地义的。另一层意思是,我是程序员,与一群最讲道理、最直来直往、最不需要琢磨小心思的程序员协同工作,管理才不需要耗费太多的精力,因此“兼职管理”才是可行的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692378.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用大数据和API优化电商决策:商品性能分析实践

在数据驱动的电子商务时代,大数据分析已成为企业提升运营效率、增强市场竞争力的关键工具。通过精确收集和分析商品性能数据,企业能够洞察市场趋势,实现库存优化,提升顾客满意度,并显著增加销售额。本文将探讨如何通过…

Spring的事务(@Transactional)

文章目录 一、介绍二、开启事务三、声明式事务(Transactional)1、原理2、注解标注的位置3、事务的条件4、事务生效、不生效的场景5、Transactional属性1、value、transactionManager2、propagation3、isolation4、timeout5、readOnly6、rollbackFor7、ro…

fabric-contract-api-go快速上手

hi,好久没有更新Fabric相关文章,今天给大家带来fabric-contract-api-go快速上手,相较于原文省略较多,希望深入理解的小伙伴可以点原文学习。 背景 Fabric提供了大量的API来开发智能合约,支持 Go, Node.js, 和Java。本…

qt-交通路口仿真

qt-交通路口仿真 一、演示效果二、核心代码三、程序链接 一、演示效果 二、核心代码 #include "generator.h"Generator::Generator(SimulationScene *scene):m_scene(scene),m_mode(VEHICLEMETHOD::GO_THROUGH),m_running_state(false),m_VisionOn(false),m_IsInter…

HTML元素和属性快速参考指南

​ 以下是几个与HTML元素和属性相关的参考资料网站链接: HTML Reference - 提供所有HTML元素和属性的免费指南。W3Schools HTML Reference - W3Schools 提供一个广泛的HTML标签和属性参考。freeCodeCamp HTML Cheat Sheet - freeCodeCamp 提供了一个HTML元素列表参…

【Label Studio运行报错】ModuleNotFoundError: No module named ‘google.rpc‘

报错截图: 解决方法: 新建虚拟环境,安装google相关包 pip install google-cloud-core google-cloud-storage把虚拟环境中site-packages下google文件夹拷贝到当前环境的对应位置下。去官网下载最新的sqlite3,复制到AppData\Loca…

Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高,Kotlin

Android挖取原图中心区域RectF(并框线标记)放大到ImageView宽高,Kotlin 红色线框区域即为选中的原图中心区域,放大后放到等宽高的ImageView里面。 import android.content.Context import android.graphics.Bitmap import android.graphics.BitmapFactor…

163邮箱发邮件

1、Jenkins安装Email Extension Plugin 2、网易邮箱里获取授权码:qa_jenkins_robot@163.com 开启POP3/SMTP 我已经配置过了,所以这里会有一个使用设备 3、配置Jenkins邮箱通知 Manage Jnekins-Configuration System Jenkins Location: Extended E-mail Notification: …

【MySQL】如何处理DB读写分离数据不一致问题?

文章内容 1、前言读写库数据不一致问题我们如何解决?方案一:利用数据库自身特性方案二:不解决方案三:客户端保存法方案四:缓存标记法方案五:本地缓存标记 那DB读写分离情况下,如何解决缓存和数据…

【最新Dubbo3深入理解】Dubbo特性、工作原理以及负载均衡策略

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

代码随想录算法训练营第56天 | 300.最长递增子序列 674.最长连续递增序列 718.最长重复子数组

最长递增子序列 这里dp数组的定义比较难想。dp[i] 表示 i 之前的序列中以 nums[i] 结尾的最长递增子序列长度&#xff0c;只有这样才能实现状态递推。对于dp数组初始化&#xff0c;所有下标位置都应该初始化为1。 class Solution{ public:int lengthOfLIS(vector<int>&a…

课后延时服务选课报名管理系统功能清单

课后延时服务选课报名管理系统分为学校端&#xff0c;培训机构端&#xff0c;家长端。 学校端提供学生管理&#xff0c;课程管理&#xff0c;班级管理&#xff0c;班级排课&#xff0c;班级课表&#xff0c;可直接安排学生入班上课&#xff0c;查看学生考勤情况&#xff0c;查…

网关服务gateway注册Consul时报错Consul service ids must not be empty

网关服务gateway启动时&#xff0c;初始化Consul相关配置时报错。 Consul service ids must not be empty, must start with a letter, end with a letter or digit, and have as interior characters only letters, digits, and hyphen: cbda-server-gateway:10.111.236.142:…

stm32学习笔记-STLINK使用

stm32学习笔记-STLINK使用 使用ST-LINK调试程序进度表格 使用ST-LINK调试程序 说明 组成 总结 记录使用STLINK进行项目的烧写和调试&#xff0c;旨在高效的进行代码调试学习工具包括笔记本、keil5MDK、stm32f030c8t6电表主机、STLINK V2、导线、电表代码总的来说&#xff0…

深度学习图像算法工程师--面试准备(1)

1 请问人工神经网络中为什么 ReLU 要好过于 tanh 和 Sigmoid function&#xff1f; 采⽤Sigmoid 等函数&#xff0c;算激活函数时&#xff08;指数运算&#xff09;&#xff0c;计算量⼤&#xff0c;反向传播求误差梯度时&#xff0c;求导涉及除法和指数运算&#xff0c;计算量…

企业级 文件传输加密应用,干货分享

企业级 文件传输加密应用 简历一直在投&#xff0c;一直无音讯&#xff0c;今天我又从硬盘里翻出一个 好玩的加密软件&#xff0c;这个是 2017年的时候和荷兰某世界500强公司合作的小项目。 今天分享给大家 。 文章目录 企业级 文件传输加密应用1.目的2.软件介绍3.下载好 安装…

Discuz! X3.4上次访问时间显示1970积分不增加问题

您好&#xff0c;我discuz论坛的【注册用户注册信息的运行】存在问题&#xff0c;您看能调试吗&#xff1f; 这个论坛的“注册用户信息是”从其它discuz论坛【迁移过来的】&#xff0c; 所以&#xff0c;目前&#xff1a; 全部用户 新注册用户 迁移过来的用户 故障现象是…

我的NPI项目之Android USB 系列(一) - 遥望和USB的相识

和USB应该是老朋友了&#xff0c;从2011年接触Android开发开始&#xff0c;就天天和USB打交道了。那时候还有不 对称扁头的usb/方口的usb&#xff0c;直到如今使用广泛的防反插USB3.0 type-C。 但是&#xff0c;一直有一个不是很清楚的问题萦绕在心头&#xff0c;那就是。先有…

Java基于SpringBoot+Vue的图书管理系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

leetcode第124场双周赛

第一题&#xff1a;相同分数的最大操作数目I 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作&#xff1a; 选择 nums 中的前两个元素并将它们删除。 一次操作的 分数 是被删除元素的和。 在确保 所有操作分数相同 的前提下…