我在外包公司做增删改查有前途么?

作者:邹溪源,长沙资深互联网从业者,架构师社区特邀嘉宾!


起因


这是我无意中在筛选简历时,看到一位朋友发布的求职说明中,明确指出,外包勿扰,并给出了他做出这个决定的理由:

过去若干年间,他一直在中软国际从事.NET方向的软件研发,虽然工作了很多年,但是做的项目类型特别多,总感觉没什么积累,而且工作很累,经常要加班,压力很大。不仅如此,由于外包类型的项目,往往需要驻场开发,一旦在客户现场进行开发,其实都会成为封闭式开发,每天投入工作的工时往往会超过十几个小时。而且在客户现场的开发时,有时候就是低等公民,得承受来自各方的压力。

前不久也刚刚看到一位来自西安软通动力的资深Java工程师,由于长时间加班后引发身体疾病,并最终猝死,还得不到工伤补偿的新闻也触动了我们的心。

这边的互联网公司从业人员还可以吐槽每天996,让自己成为被公司圈养的小绵羊,更是让自己的家庭生活都受到了无穷影响;那边的外包公司从业人员们显然没有互联网公司这么多的露脸机会,哪里有时间运营自己的公众号啊,每天都被客户压榨得死死的,还得跪下来对客户说:爸爸,再爱我一次!

当然,坦率而言,现在国内的IT行业现状其实压力都很大,无论是外包公司、还是互联网公司,如果是几年前大环境还好的时候,或许大家压力大点,至少不会饿肚子,现在冬天来了,不仅压力大,而且还吃不饱穿不暖,一旦遇到公司困境,还得面临被裁员的后果。

好吧,在这篇文章中,我还是不输出焦虑了,只单纯的讨论一下这个问题。

在外包公司做增删改查有前途么?

有没有感觉,这是一个通用的句式:干xxx有前途么?

例如,在百度里面输入,“干程序”,首先会自动提示的就是“干程序员有没有前景”?好吧,有没有前途我也说不准,我就单纯的探讨一个问题,什么叫做有前途;在外包公司有前途么;做增删改查有前途么?

什么叫做有前途?

嗯,大家都认为钱=前途。有前途等于发财。这个问题就这样吧。

在外包公司有前途么?

外包公司的主要盈利点,其实是软件研发过程管理或者软件项目管理能力,一套优秀的软件项目管理流程体系,往往能够实现软件开发过程中的生产力最大化,进而为企业的发展带来巨大的利润。

在外包公司,主要的收入其实是来源于项目参与人员的人工费用,一般会采用“工料合同”的形式。这种合同又称为单价合同,一般会根据产品在研发过程中的实际投入或服务来计算合同总价。

当然,其实许多外包公司会采用这种方式来进行工作量的评估,然后再用总价合同的形式来签订合同,毕竟“工料合同”其实浮动空间很大,容易造成甲方的成本超支严重,而使用总价合同就可以将风险转嫁给乙方,对于甲方来说自然而然就实现了利益最大化了。

而总价合同的特点是应该明确设定需求、对功能的工作量评估都应该尽可能的科学,问题是,客户明白他想要什么么?大概率客户并不懂他想要什么,或者他以为他懂他想要什么,而且你以为你也懂他想要什么。于是陷入双方需求的拉锯战,软件的风险急剧提高,让苦逼的乙方程序员们成为砧板上的肉,被迫每天牺牲自己的时间,拿有限的生命投入到无穷无尽的需求大坑中。

而且有时候由于行业不同,还会陷入需求陷阱中,各行如隔山,客户想要的,往往与你能提供的,存在很大的差异。例如,连微软都会被武汉上诉,要求赔偿其在智慧城市项目中造成的大几千万损失,一般般的外包公司就更不用说了。

如果遇到这种情况,请勇敢的选择拒绝,或者使自己成为更专业的人。努力花更多的时间学习行业知识,然后用数据或阶段性成果让客户尽可能的无话可说吧。

当然并非所有的外包公司都是这种情况,例如像SAP或者Thoughtworks,其实也可以被世俗的理解为外包公司,他们也是为客户提供外包服务,但是由于他们是行业内的领先者,能够为客户需求提供更加专业的建议,所以他们有资格找客户签署“工料合同”。

例如一个SAP的服务工程师,从上飞机起就开始计算工时费用,每天动辄万元的服务费,服务工程师的工资自然而然也低不到哪里去了。我一位同事他哥哥就是从事SAP的外包服务,他说他哥哥每年只上半年班,工资超过3万一个月。。。嗯,好吧,这种外包就等同于有前途。

依然有许多公司会走在签署总价合同的外包公司的道路上,毕竟企业生存是第一要务,万一哪天接到一个合适的项目,让公司能够顺利的摆脱外包公司的这块皮,进入细分市场,获得进一步的生机呢?

不过大部分外包公司或许其实并没有那么好的命,而且还会由于内卷化(指优秀员工逐渐流失,而新人难以加入,最后被中庸的老员工主宰企业的命运)最终越来越丧失竞争力,并最终只能凉凉。而且缺乏核心主业的外包公司确实很难获得技能上的积累,这需要开发者能够提高自己的技术学习能力,努力使自己成为最专业的工程师。

做增删改查有前途么?

许多开发者都吐槽,每天的工作都是CRUD,也有许多开发者经常吐槽身边的那些开发者没前途,只会增删改查。

怎么觉得这个问题为啥这么魔性呢?难道你和他们不是同一拨人么?

有时候还会看到有人吐槽,说每天都在做CRUD的业务开发,感觉自己人都要玩废了。还问我怎么想。

我个人认为CRUD才是公司业务的常态,只有能够把CRUD玩得非常好,公司业务才能获得更快的发展。从表面上看,CRUD工程师的主要职责就是建表、封装接口、然后让接口输出数据符合客户端需求。实际上这里面依然牵涉到许多充满技术含量的东西。

例如,该如何建表呢?从海量的用户需求中,分析出与系统息息相关的核心部分,并分析出符合用户需求的核心领域,这种业务分析与设计能力是一位软件工程师非常重要的核心技能。

例如,以前都是撸sql,现在都用orm了,是不是觉得很香?增删改查一样也充满了期待啊。

该怎么建表,也并非想象中那么简单。例如主键是用自增序列,还是用UUID,该怎么设计索引,如何设计缓存,如何运用分表分库策略?这些看起来很简单的东西,往往并不简单。

除此之外,代码的质量本身,也是一件值得深入钻研的方面,例如《代码整洁之道》和《重构改善既有代码的艺术》这两本书就专门介绍了如何写代码和如何把代码写好。这也是一件看起来简单,却并不简单的事情。

除此之外,沟通技能、架构能力、风险意识,也都会在这些CRUD的开发过程中得以体现。

为什么总是会认为CRUD毫无挑战呢。如果你已经成为软件开发领域的大牛,请收下我的膝盖,否则大概率是因为你已经走在了云程序员的路上,把一切问题都想象得太简单了吧。

突然想起之前看的的一张段子,说火箭其实没什么技术含量,因为中国古时候早就有了。还有之前看的郭德纲嗯段子,他说:如果我跟一位火箭工程师讨论火箭的燃料不应该用氢氧,应该烧煤,对方正眼看了我一眼,那就是我输。

嗯,云程序员们,咱们离专业开发者还有不少差距啊!

总结

回到主题:在外包公司做增删改查有前途么?

  1. 在外包公司也好,非外包公司也好,努力使自己成为专业的人,都会有前途。

  2. 不管在哪家公司,如果你觉得不开心可以离去;但是如果留下来了,请珍惜每一段时光,上帝既会给你关门,也往往会给你开一扇窗户,只要用心去发现,你总会有所收获。

  3. 其实认真干好每一件事情,都会充满前途。如果过于敏感,总觉得干这个没前途,干那个没前途,那大概你应该去选择创业。那里你可以找到属于你的好归宿。

  4. IT的职场的时光说漫长也漫长,说短暂也短暂。干得好就是四十年,干得不好,就是五年。

  5. 或许每个人都有机会花五年时间成为技术总监,但是却只有少数人,能够成为真正合格的工程师。

如有收获,点个在看,诚挚感谢

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

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

相关文章

csv.reader读取txt中的文本数据

Python里读取txt文件的方法有很多,但numpy读取字符串比较困难,这时可以考虑使用csv库,读取txt文件中的每一行文本。 代码 data [] with open(*******.txt, rt) as csvfile:reader csv.reader(csvfile, delimiter,)for row in reader:data…

[译]C#8.0中一个使接口更加灵活的新特性-默认接口实现

9月份的时候,微软宣布正式发布C#8.0,作为.NET Core 3.0发行版的一部分。C#8.0的新特性之一就是默认接口实现。在本文中,我们将一起来聊聊默认接口实现。众所周知,对现有应用程序的接口进行更改是一项很危险的操作。如果这个接口又…

Linux服务器 常用命令

定义当前文件夹中有result.txt 查看当前文件夹ls 查看当前路径pwd 进入目录homecd home 返回上一级目标cd .. 查看文件内容less result.txt 删除文件rm result.txt 查看进程信息top

鲲鹏来了,在EulerOS试用.NETCore-3.1

在EulerOS试用.NETCore-3.1前言EulerOS其实出来有一段时间了,一直在关注,单是仅仅也只是停留在观望的阶段,目前还没有接入的打算;正好看到园子里的兄弟分享了华为云免费试用的活动后,难捺激动的心情,我马上…

scp连接计算节点操作

定义计算节点为ip,计算节点用户名为name,待运行的文件名为file,其在登录节点的路径为path,登录节点文件夹名为log 登录计算节点 ssh nameip将登录节点的文件传输到计算节点 scp -r file nameip:path反之,将计算节点…

如何在ASP.NET Core 中快速构建PDF文档

比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间。在本文中我们将要使用DinkToPD…

动态规划 0-1背包问题 二维数组

定义 dp[i][j]是从物品0到i中挑选物品,放进容量为j的背包中的最大价值总和。 初始化 int dp[maxn][maxn]; memset(dp, sizeof(dp), -0x3f3f3f3f);for(int j bag_size; j > 0; j--) dp[0][j] dp[0][j-weight[0]] values[0];先遍历物品法 for(int i 0; i &l…

在VS2019发布独立程序与单一执行程序

背景随着.NET Core 3.1 LTS的发布,.NET Core 3.1 进入了3年的支持周期,在这期间使用.NET 的人数肯定会发生一个质的飞跃。01目标本次主要集中在使用.NET Core 3.1 WPF程序发布一个独立的单一执行程序。首先,新建一个wpf项目,名称为…

动态规划 0-1背包问题 滚动数组

定义 dp[j]是从物品0到i中挑选物品&#xff0c;放进容量为j的背包中的最大价值总和。 初始化 int dp[maxn]; memset(dp, sizeof(dp), -0x3f3f3f3f);一维滚动数组法 for(int i 0; i < weight.size(); i)for(int j bag_size; j > 0; j--){if(j < weight[i])dp[j] …

C#异步编程看这篇就够了

随着.NET Core的流行&#xff0c;相信你现在的代码中或多或少的会用到async以及await吧&#xff01;毕竟已成标配。那么我们为什么要用async以及await呢&#xff1f;其实这是微软团队为我们提供的一个语法糖&#xff0c;让我们不用996就可以轻松的编写异步代码&#xff0c;并无…

sklearn PCA特征降维

机器学习中降维能够消除冗余&#xff0c;防止过拟合&#xff1b;发现潜在特征&#xff1b;减小计算量&#xff0c;节省资源和时间&#xff0c;常用的降维方法有&#xff1a;PCA &#xff0c;ICA&#xff0c;SOM&#xff0c;MDS&#xff0c; ISOMAP&#xff0c;LLE&#xff0c;本…

2019 AI Bootcamp·Guangzhou 参会日记

2019年的全球AI训练营在北京、上海、广州、杭州、宁波五个地方同时举办&#xff01;12月14日&#xff0c;微软全球AI Bootcamp活动再次驾临广州&#xff0c;本次会议结合 ML.NET 和基于 SciSharp 社区介绍最新的基于 .NET Core 人工智能技术&#xff0c;还有云端人工智能解决方…

LeetCode动态规划 杨辉三角

Given an integer numRows, return the first numRows of Pascal’s triangle. In Pascal’s triangle, each number is the sum of the two numbers directly above it as shown: 前几天做的动态规划题好难呜呜&#xff0c;做道水题找回自信~ 状态转移方程 triangle[i][j] …

AI Boot Camp 分享之 ML.NET 机器学习指南

今天在中国七城联动&#xff0c;全球134场的AI BootCamp胜利落幕&#xff0c;广州由卢建晖老师组织&#xff0c;我参与分享了一个主题《ML.NET 机器学习指南和Azure Kinect .NET SDK概要》&#xff0c;活动虽然只有短短的2天时间的宣传&#xff0c;报名70人&#xff0c;到场40多…

LeetCode动态规划 分割等和子集

Given a non-empty array nums containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal. 思路 这道题假如能看出是一道0-1背包问题的话&#xff0c;就很好解决了。题目说需要划分…

使用 Ocelot 匹配路由的方法匹配路由

使用 Ocelot 匹配路由的方法匹配路由Intro之前我们在 Ocelot 网关的基础上自定义了一个认证授权的 Ocelot 中间件&#xff0c;根据请求的路径和 Method 进行匹配&#xff0c;找到对应的权限配置&#xff0c;并判断是否可以拥有访问资源的角色&#xff0c;如果没有则返回 401/40…

【.NET Core 3.1】 策略授权中获取权限数据

▼更多精彩推荐&#xff0c;上午11点到达▼随着项目关注度渐渐升高&#xff0c;目前已经1.2k个star&#xff0c;我的内心反而更加的惶恐了起来&#xff0c;最近也是很有强迫症&#xff0c;只要有小伙伴反馈项目的问题&#xff0c;就很着急&#xff0c;哪怕一丁点的问题&#xf…

sklearn决策树概述

决策树是一类常见的机器学习方法&#xff0c;决策树学习的目的是为了产生一棵泛化能力强&#xff0c;即处理未见示例能力强的决策树。决策树是个递归生成的过程&#xff0c;如何选择最优划分属性是决策树学习的关键。我们希望决策树的分支节点所包含的样本尽可能属于同一类别&a…

使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商

现在&#xff0c;当谈论起 RESTful Web API 的时候&#xff0c;人们总会想到 JSON。但是实际上&#xff0c;JSON 和 RESTful API 没有半毛钱关系&#xff0c;只不过 JSON 恰好是RESTful API 结果的表述格式。也就是说 RESTful API 还可以使用其它的表述格式&#xff0c;例如 xm…

sklearn随机森林概述

随机森林是一个拓展变体&#xff0c;在以决策树为基学习器构建Bagging集成的基础上&#xff0c;进一步在决策树的训练过程中引入了随机属性选择。具体来说&#xff0c;传统决策树在选择划分属性时是在当前结点的属性集合中选择一个最优属性&#xff1b;而在随机森林的每个结点&…