一名程序员的自白
文/小加
程序员节,图片来自网络.JPG昨天是1024程序员节,在这个“全猿不加班,快乐嗨翻天”的节日里,我竟然忘记了自己也是一名程序员。
科普一下,所谓程序员节的来源,是因为1G=1024M,1M=1024Kb,1kb=1024bit,1024是二进制计数的基本计量单位之一。程序员们就把1024作为了一种表示自己身份的符号。从2015年起,每年10月24日定义为程序员节。
1.甲方的程序员也能称得上是程序员么?
之所以常常忘记自己的身份,是因为我属于程序员中比较独特的一个群体:甲方程序员。也就是那些产业不是软件相关而仅仅是依靠软件提高管理水平的传统企业的程序员。
在乙方程序员眼里,甲方程序员顶多就算一个修电脑的。他们啥都不懂,就知道每天找找茬,挑挑刺,还不用一年到头的出差和没日没夜的加班。与乙方程序员与比起来,他们简直就是养尊处优的大爷。
在企业同仁眼里,信息部门的那帮人也算是程序员么?开发的系统难用不说,出了问题半天都喊不来人,每天就知道把他们的需求传递给乙方,代码都是别人家的程序员写的,简直就像一个传声筒。
更让人纠结的是,若是项目成功了,待到邀功请赏的时候,还会有人质疑:“听说这个系统是某某公司开发的,跟你们又有什么关系呢?”
甲方程序员是常常会被边缘化的一帮人。很多时候我们在那里自嗨,说我们的软件如何如何先进,给用户带来多少便利和好处,但用户部门却总是不买账。
2.程序员的进阶之路
普通人眼中的程序员,带着厚厚的眼镜,目不转睛的盯着电脑屏幕,专心的敲打着代码。他们常常会有化腐朽为神奇的力量,一堆杂乱的代码,运行之后就可以生成精美的画面。
这其实仅仅是狭义的程序员,属于编码人员,俗称码农。在一个软件项目的组织中,码农通常位于组织的中下端,可以参照下图理解一下。
一名程序员的自白这里有必要再科普一下,在一个软件项目里,会有很多种角色,比较重要的有项目经理,业务咨询顾问,系统架构师,编码人员,测试人员,数据库管理人员,基础平台架构师以及美工等等。
当然做一名合格的码农并不那么轻松,首先从路线上来讲,就会面临很多的选择需要去确定。仅从编程语言上讲,就有JAVA,.NET,PHP,Python等等等等,并且不同语系的程序员会有点文人相轻的感觉,如果是前些年你在专业程序员论坛中抛出一篇标题类似“论JAVA语言优于.NET语言10大铁证”的帖子,基本上都能引发一场程序员之间的大战。
另外还有前端页面开发、后端逻辑处理以及数据库层面的开发等更进一步的细分。总得来说,程序员只要定位明确,然后再用点心,几个项目下来,基本都能练成一把好手。让客户觉得专业、放心!
代码写到一定的水平和名气,可以继续往上走。善于沟通和组织的就往项目经理和多项目总监的管理方向发展;对技术情有独钟的也可以去做系统架构师和技术总监;再厉害的就可以单独拉出一只队伍自己做老板接单子;更更厉害的可以自己拉团队做一个产品,比如说Windows操作系统之类的……那就有点说的太远了!
3.进阶之道并不适合甲方程序员
就拿开发语言的选择来说,每个企业的确都会有自己主流的架构平台,但是总会对一些其他半成品级的软件要求放低。就拿我曾经供职的单位来说,就混杂了JAVA、PHP、ABAP等多种语系,这就逼得自己东一锤西一棒子的都要懂一些。另外数据库及其操作语言是一定要掌握的。
就算你会死磕,就能把这些都学精么?且慢,作为一名合格的甲方程序员,你还需要具备如下技能。
首先你需要是一名合格的项目经理,因为作为甲方程序员的代表,你需要对项目的最终成败负责,项目成功了不一定算是你的功劳,但失败了板子一定会打在你的身上。最多的时候我曾经同时负责过三四个不同乙方不同技术平台不同用户的软件项目,光是开小组会议都能让你崩溃。
另外你还需要具备测试人员的能力,知道如何有效的验证乙方程序员交付的软件成果。测试工作在软件开发团队中常常被忽视,其实它也有自己完整的知识体系。
你还需要是一名合格的系统架构师,知道如何进行系统设计才能更适合现有的情况,对已有的软件不产生影响,并且让新的软件也符合统一的规划。
咨询顾问通常是一个项目组中身价最高的人员,薪水有可能是码农的四五倍。如果你在企业已经工作了很多年,就应该具备业务咨询顾问应该有的能力了,否则就会被别人牵着鼻子走。事实上很多乙方的业务咨询顾问就是甲方的用户或者程序员跳槽过去的。
乙方做完项目就走人了,接下来就是无穷无尽的维护和修改。如何建立更好的服务和运维体系,这同样是一门非常复杂的学科。
要掌握的其实还有很多……
4.协作与博弈
企业的每个软件开发项目都存在一场甲乙双方程序员的不断协作和博弈。
协作是团队取得成功的基础。项目刚开始时,甲方想借助乙方的力量完成工作指标,乙方对甲方的情况不太了解,想通过甲方程序员掌握情况。常常遇到这样的情况,用户对乙方的程序员口干舌燥的讲了半天,乙方程序员却仍旧一脸茫然不知所云,这时候我们登场,三言两语就可以让其恍然大悟。因为甲方程序员是同时掌握了业务和IT之间的“沟通密码”的那一群人。
协作固然很多,博弈也必不可少,最常见的就是乙方程序员会对用户夸大工作的难度和复杂度:这个技术上无法实现,这个需要再派多少多少人加多少钱。这时候就需要甲方程序员站出来从技术上来进行谈判,每当此时很是有种“本是同根生,相煎何太急”戚戚然的感觉。
当然在具体合作过程中,甲方程序员虽然在业务上相对见多识广,但又难免眼高手低,总把事情想得很简单;而乙方程序员虽然精准专业,却又常陷入业务处理的牛角尖而固执己见,各种冲突在所难免。
但通常项目结束后,双方都会建立良好的私人关系。毕竟工作是单位的,资源是个人的,项目的成败自有合同等其他去约束,作为做事层面的程序员,没有了这种工作上的对弈,交交朋友,多些对外面世界和行业的沟通也是蛮好的。
5.各有千秋
很多乙方的程序员是很让人尊重的,他们很敬业,能吃苦,专业水平高,总能在关键时刻挺身而出,克服技术上的难关,让项目顺利上线。而作为一名负责任的甲方程序员,也要接触更多的技术知识,满足企业不同部门和发展阶段的需要。
乙方的程序员虽然工作辛苦,但在事业上的通道常常也很顺畅,在一个领域混上八九十来之后,年薪几十万总是没有问题的。甲方的程序员却要跟着企业内部的薪资水平走,并且通常会低于主要业务的工作人员,很容易就看到事业上的天花板。
在甲方做久的程序员会想着是否有机会跳槽到乙方,拿更高的薪水见识不同的客户;在乙方漂泊久了的程序员也会想着有机会也可以跳槽到甲方,工作稳定收入也可以接受。但通常大家还是会在各自的轨道上走下去。
6
不管怎么说,我们都有一个共同的名字:程序员。
多年之后,我们仍然会为能在这个独特的信息时代作为一名程序员而感到骄傲。
写在程序员节的第二天!