昨天是我一同学结婚的好日子,同学们大家聊各自的工作,有个同学突然问了我一句:我们同学中好像做软件的不多?如果再细分,好像做网络相关的更少?

回想起当时为何读计算机信息管理的专业,是因为那时听说读电脑未来很有出路,所以计算机是我中专的第一志愿,而我的第一台电脑就是那时买的,还记得那时买一台 486 电脑花了我妈五万块,在 20 多年前它是一比不小的数字。

毕业后专科考上电子系,当完兵后大学考上资管系,理论上我同学里应该会有不少人从事软件工程师,但事实上真的少之又少,要很认真的想才好不容易凑到十个,其中不少还是写硬件的…

之前天下杂志有一篇文章科技之岛找不到软件工程师 以教育的角度讨论软件工程师短缺的问题,而下面的留言却大多集中在薪资的问题上,我总觉得这有点瞎子摸象的感觉,好像有提到问题又感觉不够到位。

我从本科系毕业,出社会第一份工作就是软件工程师,一路升到项目经理,创业后成为老板,当然也变成了 Sales,需要卖服务给更多的老板,以下就我看到不同的面向与大家分享台湾软件工程师的困境。

教育的问题

学生的天份

其实程序设计像艺术一样是需要有一些天份才会学的好,偏偏学校的课程有该有的进度,老师无法因为你听不懂就卡在那个章节太久,所以跟不上的同学只好死背,背不起来就开始讨厌,所以读到最后只是让来不及发现自己天份的同学更早放弃当软件工程师这条路。

师资的培育

学程序设计需要天份,想当然的,要能教好这堂课的老师也需要这样的天份、能力还要知道怎么教,但通常这样的老师很少,即使有,他也需要不断地学习,和业界保持同步,不能脱节。这真的很难。

所以我们常会看到学校会教一些现在比较少用到的语言,因为那是老师自己最擅长的程式语言而不是业界最需要的。

软件工程师的问题

薪水与价值的不对等

工程师认为自己该拿多少薪水是以对公司的价值来思考,如果我一年能帮公司赚到或省下一千万,那我年薪百万不为过吧?老板认为工程师该拿到的薪水是以工时来思考,如果我每天正常上下班,那要和老板要求年薪百万真是难上加难。

最后,为了生活不得已,很多工程师如果不是在干私活就是偷偷在接私活,如果不是偷偷在接私活就是在接私活的路上。不相信?我之前写了一篇《软件工程师的创业陷阱:接私活》,感受到大家不小的怨念迴响 XD

价值的错估

很多工程师会用对原公司的价值来对新公司要求更高的薪资,但价值通常是需要搭配其它的客观条件才成立。例如团队、资源… 等

如果新公司没有这些条件,工程师是否能发挥该有的价值?通常新公司会抱持怀疑的态度。

即使高薪也无法选择小公司

虽然有些小公司愿意提出高于市价的薪水,但这薪水能持续多久?里面有能一起讨论的同事吗?未来的发展好吗?写在履历上好不好看?朋友都没听过这间公司?….

除了薪水以外的一堆疑虑都跑出来了。最后大部份的工程师还是留在大公司等待机会比较保险。

升迁制度的问题

无法跳脱的彼得原理

「彼得原理」是指:在组织或企业的等级制度中,人会因其某种特质或特殊技能,令他在被提拔到不能胜任的地步,相反变成组织的障碍物(冗员)及负资产。

好的工程师为了拿高薪,不得不往管理层升迁,变成管理层后再也不需要写代码,所以为什么好的工程师这么少?因为他们都变经理了。

可惜的是,代码写的好的人不代表会管理人,最后反而因为管理绩效不好需要离开公司,但也回不去以前工程师的状态了。

CTO (技术长) 的问题

CTO 决定了公司的技术天花板

每间公司只会有一位 CTO,基本上也不会写代码了,也就是说 CTO 如果离开公司要找工作没那么容易。基于这样的原因,你觉得 CTO 会找比他能力好的人进公司吗?CTO 能接受后面进来的人拿比自己还高的薪水吗?那你知道如何审核 CTO 吗 ?

主管的问题

追求 KPI

请工程师会花到当月的部门预算,但可能要等到半年后才会有明显的成效,为了兼顾每个月的 KPI ,无法花太多钱请工程师。

老板的问题

投资与成本的混淆

对很多老板来说软件工程师就像水一样,没有的时候很痛苦,有了后就没感觉了,什么?水要卖这么贵?不就只是水而已吗?老板总认为软件工程师是固定成本,而成本就是要控制在越低越好,如果换你当老板,很可能你也会这样做。

如果工程师一直想的是加薪、老板一直想的是省成本,这双方永远都会是对立无解,但如果工程师想的是帮公司赚钱,老板想的是投资工程师,最后这结果应该会好很多。

就是赚不够多

就算有好的软件工程师,但他要的薪水老板就是给不起。好的软件工程师老板请不起,请的起的都是不好的工程师,老板说市场上都没有好的工程师,其实是说市场上怎么都没有利害又便宜的工程师。

不用钱的迷思

你知道卖软件或服务比卖硬件困难吗?我曾经想要卖一套软件给一个老板,我说这可以提升员工的工作效率,他回说:我为什么要花钱提高员工的效率?他干不完就加班啊,反正我每月都固定付他的薪水,又不用多花钱。

产业的问题

成功的网络公司太少

二个一样是三年工作经验的软件工程师,一个做过可以同时 100 人在线的网站和另一个做过可以同时 1,000,000 人在线的网站,这二个人的技术能力就差非常的多,薪水当然也会差很多。但有多少网站需要作到同时 1,000,000 人在线上?所以能有相关经验的人一定是少之又少。

如果成功的网络公司越多,里面就能培养出更多有实际经验的工程师,当这些工程师换工作时,会把身上的技术及观念带至另外一家公司,久而久之,好的软件工程师就会越来越多,产生正向循环。

结语

以上种种问题一个卡一个,造成了软件工程师的困境,如果当初有一间公司愿意让我写一辈子代码,薪水可以因为我的价值一直往上加,不会因为职位而有限制。我想我应该就不会创业了。市场上也不会少了我这个好的软件工程师 XD,我的力量很难改变整个环境,但至少还能从自己的公司慢慢作起,期许能成为市场上的成功案例。

[No00004D]深度思考好文:软件工程师的困境的更多相关文章

  1. 软件工程师所需掌握的“终极技术”是什么?

    软件工程师所需掌握的"终极技术"是什么? http://yunli.blog.51cto.com/831344/1019990 最近,我在微博上看到@程序员邹欣老师发的一条微博 - ...

  2. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业

    相关文章:随笔<一个程序猿的生命周期>- 逆潮流而动的“叛逆者”        15年前,依稀记得走出大山,进城求学的场景.尽管一路有父亲的陪伴,但是内心仍然畏惧.当父亲转身离去.准备回到 ...

  3. CEO应向软件工程师学习的7个技能

    软件工程师的哪些技能是值得CEO学习的?显然,软件工程师是逻辑的,高效的,注重细节的,有计划的,并且大多数CEO也是如此.但是,软件工程师还有一些更微妙,甚至是令人懊恼的品质,那么CEO是否可以从中学 ...

  4. Google前工程经理王忻:如何准备软件工程师的面试

    http://t.jobdu.com/thread-368-1-1.html 导读:原文作者王忻,Google前工程经理,2003年月加入Google,是Google Lively背后的主导力量,是G ...

  5. 转载:CEO应向软件工程师学习的7个技能

    软件工程师的哪些技能是值得CEO学习的?显然,软件工程师是逻辑的,高效的,注重细节的,有计划的,并且大多数CEO也是如此.但是,软件工程师还有一些更微妙,甚至是令人懊恼的品质,那么CEO是否可以从中学 ...

  6. net软件工程师求职简历

    Net软件工程师求职简历 姓    名: 王静静 性    别: 女 出生日期: 1991-12 籍    贯: 河北 居住地: 北京 学    历: 专科 E-mail: 335659753@qq. ...

  7. JavaSE 软件工程师 认证考试试卷2

    JavaSE 软件工程师 认证考试试卷   笔试   考试时间150分钟 总分 100分   姓    名_______________________ 身份证号___________________ ...

  8. Java 初级软件工程师 认证考试试卷1

    Java 初级软件工程师 认证考试试卷   笔试(A卷)   考试时间150分钟 总分 100分     姓    名_______________________ 身份证号_____________ ...

  9. MySQL 5.7 优化SQL提升100倍执行效率的深度思考(GO)

    系统环境:微软云Linux DS12系列.Centos6.5 .MySQL 5.7.10.生产环境,step1,step2是案例,精彩的剖析部分在step3,step4. 1.慢sql语句大概需要13 ...

随机推荐

  1. Linux新手扫盲

    一. Linux特点 1.免费/开源: 2.支持多线程/多用户: 3.安全性好: 4.对内存和文件管理优越. Linux最小只需4M ——> 嵌入式开发 二. 文件目录 Linux系统所有软硬件 ...

  2. iOS开发init方法解析

    自定义的init方法,都必须调用父类的init方法. 一般情况下为: - (id)init {      [super init];      xxx = xxx; }   通常情况下,这种模式可以满 ...

  3. 【C语言】C语言局部变量和全局变量

    目录: [局部变量] · 定义 · 作用域 · 生命周期 · 用static修饰局部变量 [全局变量] · 定义 · 作用域 · 生命周期 1.局部变量 · 定义 在函数(代码块)内部定义的变量称为局 ...

  4. Android性能优化的浅谈

    一.概要: 本文主要以Android的渲染机制.UI优化.多线程的处理.缓存处理.电量优化以及代码规范等几方面来简述Android的性能优化 二.渲染机制的优化: 大多数用户感知到的卡顿等性能问题的最 ...

  5. NSoperation用法详解及与GCD的比较

    NSInvocationOperation // 基于一个对象和selector来创建操作.如果你已经有现有的方法来执行需要的任务,就可以使用这个类 NSInvocationOperation * o ...

  6. NSPredicate

    NSPredicate 1. 正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.通常被用来检索.替换那些符合某个模式的文本. 2. iOS中正则使用 有三种(NSPredicate, ...

  7. iOS开发之多线程技术——NSOperation篇

    本篇将从四个方面对iOS开发中使用到的NSOperation技术进行讲解: 一.什么是NSOperation 二.我们为什么使用NSOperation 三.在实际开发中如何使用NSOperation ...

  8. Android 学习资料收集

    收集整理这份资料灵感来自于 trip_to_iOS, 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 Android 开发, 希望能快速帮助到他们快速入门, 找到适合自己学习资料, ...

  9. SQL Server 分区表补充说明

    分区教程参阅:http://database.9sssd.com/mssql/art/951 切换分区(归档):http://technet.microsoft.com/zh-cn/library/m ...

  10. mysql下优化表和修复表命令使用说明(REPAIR TABLE和OPTIMIZE TABLE)

    随着mysql的长期使用,可以修复表来优化,优化时减少磁盘占用空间.方便备份. REPAIR TABLE `table_name` 修复表 OPTIMIZE TABLE `table_name` 优化 ...