能力不足的C++开发会欺辱能力不足C#开发
能力不足的C++开发会欺辱能力不足C#开发
我被C++开发欺辱的岁月
前言
人被压迫了,为什么不斗争?——鲁迅
作为一个C#开发者,我经历了,也见证了很多同行饱受C++开发的歧视和欺辱。
而且,这种行为,现在依然持续的发生在C#开发者的身上,就目前为止,绝大部分C#开发还都无法摆脱这样的命运。
能力不足的C++开发会欺辱能力不足C#开发
C++语言的基础是【语法+windows系统调用逻辑】,其他语言的基础是【语法+基础设计模式】。
事实上,就基础而言,需要学习的时间和学会后的技术等级,都是差不多的,两个都只有一年工作经验的新人,按理说,不存在谁比谁更厉害多少。
但在聊天和会议等语言沟通中,却是不一样的。
C++开发会占据极大的理论优势,因为windows系统调用逻辑和C++的语法中包含了一部分内存的管理,当然那不是性能,但C++开发会误认为那就是性能。而程序员这东西聊着聊着,就会聊到一些高级的东西,比如性能,所以,C++开发在这样的交流中,更能说的上话。因此,这种交流也容易让外行人产生,C++开发更厉害一些的错觉;而当你准备反击,想改变在别人心中的水平低的印象时,当你准备谈一些基础设计时,则会被轻松反杀。这也很好理解,因为设计这东西真不是你能在三言两语中给说出来的,你说出来的只能是一点点片段,因此你要么被对方抓住把柄反杀,要么被对方以没时间听你废话反杀。
实际上类型与其占有的内存及使用方式都是微软开放给大家的,并不能成为一个人傲慢的依据,但C++开发不懂这些,当然C#开发也不懂,所以很多C#开发,在即兴的聊天中,并不能及时的有效切中要害,有效的攻击对方。而据我个人经验,就算切中要害,也会轻松被对方诡辩回去。所以,结果就变成了,在外行人和技术水平不够高的人眼中,同样学习一两年的开发,C++开发远超其他语言开发的水平了。
其实,大部分C++开发是不懂性能的,这很好理解,因为他们没到那个水平,但似乎C++开发都有一种莫名的自信,以为学两年C++就有架构师的水平了。所以C#开发要保持平常心,心里要有数,不要真的认为他们如同他们自身所吹嘘的那样厉害,不要因为辩论失败而丧失信心,进而对自身的技术水平产生怀疑,要相信自己。
总结,能力不足的C++开发会欺辱能力不足C#开发,并会引发周围非技术人员的歧视。这对C#开发是一种极大的,无形的负担。但请不要因此丧失信心与追求。
多年前,我的一个小故事
人被压迫了,自然是要斗争的,但斗争也是要付出代价的。
很多年前,我经历过这样一件事。
在一次团队会议中,我提出了产品框架设计要加入AOP设计元素,结果当场被【所谓的】C++大神开发,以及其不客气的语气直怼:“你知道AOP是什么吗?”
我忍耐住怒火,以最平静的心态,详细的为他讲解了AOP的基础概念,结果又收到另一个直怼“你去查查百度去”。
彼时,年轻的我,还不擅长这种应对,愤怒的反问道“那你觉得AOP是什么”。
对方显然是斗争中的高手,经验丰富,留下一句“你去百度查查”,反身离开了会场。
会议草草结束,而我,恐怕是在部分与会人员心中留下了“装腔作势,触怒了大神”这样的印象。
那时,年轻的我,确确实实的感觉到了,自己被压迫了。但一次的压迫并没什么,这种事,成年人都可以忍耐,当时以为,忍耐过去了,就了事了。
但随后的事态发展,却并不是我想象的那样,忍耐并不可以收获安全,因为对方并是只想打击你一次,而是想一次次的打击你。(后来反思,对方其实也并不是针对我,因为对方是个假大神,所以他一定要把其他技术强点打压下去,而我只是他打击的其中一个对象而已)
忍无可忍,无需再忍,所以,当时的我,毅然决然的决定了,要斗争。
虽然斗争是一定要斗争的,但要如何斗争呢?
毕竟彼此之间,只是同事;又没有仇恨,矛盾也只是技术层面的交流。
既然如此,那斗争就要在技术层面展开。
首先,要证明自己的技术能力,因为,自身能力如果没有获得证明,那所有的斗争就都是扯淡了,因为没人相信弱者。
接下来,就是去了解对手的技术水平;如果发现对手是个装X的水货,那么,就要彻底撕开对手的假面具,让所有人都知道他是个假大神;如果对手是个真大神,那只有先敬而远之。
斗争
要了解一个人的技术水平高低,真的不难,稍微聊几句,调查一下,就可以知道了;所以,很短的时间内,我就发现了对手是个假冒的大神。不过,说实话,对手【装】高手的能力和手段真的很强。
自那以后,每一次会议被【所谓的】C++大神开发打断话语,都保持平和心态,绕开他,坚持把技术观点讲述完整,这样可以让与会人员了解到自己正确的观点。因为与会人员并不全了解技术,一旦你被打断讲述,与会人员认为你的描述错误,所以,当有人提出疑问,他们完全不会想到有人会因为其他因素而打断你的发言。在非技术人员面前,坚决回避技术讨论,一旦被迫发生,则留下一句含糊不清的话,尽早脱身。在技术人员面前,坚决讨论技术,一定要讨论出对错,如果对方执意回避,则尽量追回讨论,实在追不回,也要把正确的结果摆在参与讨论的技术人员面前。
斗争的过程是艰苦的,是不开心的。因为,一开始我并不适应这种对杀,技术层面的斗争说起来容易,当你真的在做的时候,总是会过多的把个人感情投入到里面,届时,对手就不在是对手,而是敌人了。那种感觉真的很不好。
虽然,最终我适应了那种对杀,但真的希望未来的职业生涯不在出现这样的局面,因为那真的不是理想的工作环境。
假大神的反击
这是一个很有趣的故事,当时我们有个项目在线上运行时有个bug,会不定期的软件崩溃,大约持续了两三年,也没人解决。
刚入职不久的我,奉命前往现场攻关调查这个问题。
在茫茫多的代码中,一点点追查,最终找到了问题所在,调查结果,是因为这样的一句,看上去很可笑的代码。
1
|
string.Format(变量); |
我想,稍微有点基础的人,应该都了解string.Format的用法吧。如果,如上面这样写代码,会出现什么样的结果?
当有人在这个变量中输入字符串【{ 】或 【}】的时候,系统会因为字符串格式不正确抛出异常。而我们那个项目不定期崩溃的原因正是在此,因为当有用户打字输入了【{ 】或 【}】时,才会引发系统崩溃,不过客户由于并不是天天都输入【{ 】或 【}】,所以也就造成了不定期的系统崩溃。。。
找到问题的所在,自然是回公司复命,当时,我还并不知道这段代码,是项目早期的最原始的代码,并且是出自那位假大神的手笔。
回公司后,自然是要向我的直属领导汇报,描述问题出在哪里,要如何修改,领导听了汇报后,很满意,并让我发邮件,向全体开发人员,说明修改方案,和以后要注意,不要这样写代码。
因为这样的代码,并不是只有一处,而且很多人都这样写,我猜想,大约是那位假大神写了初稿,然后再大肆宣扬,要别人也和他一样这么写,因为如果不是这样的原因,后续假大神的反应,似乎是不太合逻辑的。
我想,我的领导大约也是知道这代码是怎么回事,因为他是和假大神同期进入项目的,估计早期还被迫写过这样的代码。
假大神当然也收到了这邮件,于是乎,他恼羞成怒,开启了一轮大秀,他居然集体回复了一封邮件,【那你说该怎么写】。
每当想起此事,我都不禁发笑,我从来没想过他会如此自爆,哈哈。这么基础的语法,其实只要百度一下就会了解了,何必如此白痴的集体回复邮件秀智商呢?
之后,我并没有回复他,一是保留自己的人品,二是我真不知道该如何回复,难道要我回复他【你是白痴吗】,哈哈。
不过,现在,我仔细想了想,我没回复他,实在是错误的。看过琅琊榜的同学应该都知道,如果问题是因为太子和誉王的党争,则皇帝并不会太事件本身的对错。
所以,虽然项目组的开发人员都通过邮件知道了他的水平,但那些不懂技术的高层领导,恐怕只会认为这是一次普通的技术斗争,并不影响假大神的技术水平定位。
也就是说,假大神,并不在乎自己在同事心中的地位,他在乎的是,他在高层领导心中的地位。
而事实上,直到我离开那家公司时,假大神在高层领导心中的地位,也没有动摇,即便已经没有开发人员相信他的技术意见了。
说到底,还是我的斗争经验距离对方差距太大,视野和对方不在一个等级上,相信,多年以后的现在,那家公司的技术人员已经换了一批又一批,而假大神,依然屹立不摇。
反思
我曾经认为,在项目中做正确的技术选择和正确的技术判断,对项目是正向发展,在领导心中,这应该是我的加分项。
但事与愿违,人是有情绪的,尤其是高层领导在不能和你长期接触的情况下,是很容易被刻板印象和情绪所主导。
而且在长期的斗争中,我虽然撕碎了【假大神】的伪装,但在其他同事和高层心中,留下了喜欢争斗,不善于忍受的印象,这是非常不利于我的长期发展的。
撕碎【假大神】的伪装,是因为被压迫等等因素而引发的斗争之心;而证明自身技术能力,是职业需要;其实,对我自身而言,两者之间是没有直接关联的;但在他人眼中,却可能被联系到一起,会认为我是借由打击他人来抬高自己(因为他们根本不会去想,也没有时间去想,你打击的是个真大神还是个假大神),而这样的结果,显然是彼时的我始料未及的。
因此,真的不要轻易去选择斗争,因为斗争的代价,太昂贵了,即便打到敌人,自身也会是伤痕累累,而且敌人未必是你想象中,那么轻易可以被打倒的,说不定倒下是你自己,即便你有更高的技术优势。
这也是很多年长的开发,特别能忍的原因,我想,如果是今天的我,面对当年的情况,我也会选择忍耐,一直忍耐。
而这个故事的结论则是,能力不足的C++开发也会欺辱能力很高C#开发。也就是说,C++开发是无差别的欺辱C#开发。
部分C++开发更像工人
经过多年的经验和经历,我总结出来,部分C++开发更像工人,而不像程序员,也许是因为C++过早出现的原因。
很多C++开发,给别人提供DLL的时候,都不给文档,甚至连口头说明都没有。
因为,他们不习惯配合,不习惯共享,不习惯拥抱变化,当然,这也和工人很封闭的流水线思想很一致。
这部分C++开发在带新人的时候,也像工人一样,有【带会徒弟饿死师傅】的想法,所以,他们都吝啬的传教技术。
并且这种C++工人的特质,是会传递的,所以,即便是思想更开放,视野更优秀的90后的C++开发,也会因为遇到这样的师傅,而变的更像工人。
我们可以看到很多工人是任劳任怨的,这是优点,但优点伴随着缺点,那就是工人是习惯颐指气使的,他们不仅习惯别人的颐指气使,也习惯颐指气使别人。
而我的亲身经历是,我的一些同学,因为在工厂上班,原本青春飘扬的知识分子,在十几年后,变的和农民工一模一样,那说话的语气语调,对事物的认知态度,根本和当年判若两人。
对于C++工人,我还没见过,有变成跟农民工一样的气息的。但确实,气息是真的很接近,区别可能就是穿的更好一点,骂街这种事,对他们而言就是常规的语言输出。
这一点我在上一篇文章《一个C#开发者重温C++的心路历程》的评论里,再一次深刻的感受到了。
虽然有很多C++开发温文尔雅的回复,证明了C++开发的高素质,但也确实有更多的C++开发直接骂街。
也许是林子大了,真的什么鸟都有,而且成群结队。
经验分享:【当你听到C++开发需要更多思考,C++工作强度更大,C++开发是底层工作,C#做不了C++能做的事的时候】等等证明C++更高级的言论时,切记不要生气,不要反驳,因为对方一定是个菜鸟,他即不了解C++也不了解C#,而你能听到这样的言论,说明你的水平已经远远在对方之上了,因此,你的反驳,其实是在教导对方学习,这很吃亏。
能力不足的C++开发会欺辱能力不足C#开发的更多相关文章
- 无责任Windows Azure SDK .NET开发入门篇一[Windows Azure开发前准备工作]
一.Windows Azure开发前准备工作 首先我们需要了解什么是 Azure SDK for .NET?微软官方告诉我们:Azure SDK for .NET 是一套应用程序,其中包括 Visua ...
- [敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum
[敏捷开发实践](2) 用于开发和维持复杂产品的敏捷开发框架Scrum 1,Scrum概述 上篇中提到敏捷开发有两种主流的方法,一个是XP,另一个是Scrum,本篇简要介绍Scrum方法.Scrum是 ...
- 跨平台移动APP开发进阶(二)HTML5+、mui开发移动app教程
前端开发APP,从HBuilder开始~ 序 通过 HTML5 开发移动App 时,会发现HTML5 很多能力不具备.为弥补HTML5 能力的不足,在W3C 中国的指导下成立了www.HTML5Plu ...
- 微信小程序开发平台新功能「云开发」快速上手体验
微信小程序开发平台刚刚开放了一个全新的功能:云开发. 简单地说就是将开发人员搭建微信小程序后端的成本再次降低,此文刚好在此产品公测时,来快速上手看看都有哪些方便开发者的功能更新. 微信小程序一直保持一 ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- 深度剖析:最新云端开发工具如何实现敏捷+DevOps开发落地
相信很多软件开发人员们对今年国内新兴的云端开发工具——华为软件开发云都有耳闻,有些人可能还免费体验过,由于它5人以下的团队是免费使用的,很庆幸本人的这个项目正好5个人,就注册使用了.下面就自己的使用心 ...
- 在树莓派上开发SpringBoot 之使用VSCode远程开发
一些运行在ARM单板电脑上的IoT应用通常会提供RESTful风格的API接口.本次的文章记录如何在本地电脑上通过VS Code的远程开发功能,在树莓派端创建一个SpringBoot工程,并实现调试和 ...
- 《C#微信开发系列(Top)-微信开发完整学习路线》
年前就答应要将微信开发的学习路线整理给到大家,但是因为年后回来这段时间学校还有公司那边有很多事情需要兼顾,所以没能及时更新文章.今天特地花时间整理了下,话不多说,上图,希望对大家的学习有所帮助哈. 如 ...
- C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询
前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并 ...
随机推荐
- BZOJ 4129 Haruna’s Breakfast ( 树上带修莫队 )
题面 求树上某路径上最小的没出现过的权值,有单点修改 添加链接描述 分析 树上带修莫队板题,问题是怎么求最小的没出现过的权值. 因为只有nnn个点,所以没出现过的最小值一定在[0,n][0,n][0, ...
- BZOJ 1299: [LLH邀请赛]巧克力棒 【SG函数/博弈分析/高斯消元】
因为太懒,放个博客 我只写了O(2n)O(2^n)O(2n)的 CODE #include <cstdio> int n, x[15]; int main () { for(int T = ...
- linux笔试题
1. cron 后台常驻程序 (daemon) 用于: A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和错误 D. 管理系统日常任务的调度 2. 在大多数Linux发行版本 ...
- mouseover([[data],fn])
mouseover([[data],fn]) 概述 当鼠标指针位于元素上方时,会发生 mouseover 事件. 该事件大多数时候会与 mouseout 事件一起使用.直线电机选型 注释:与 mous ...
- bzoj 3545
bzoj 3555 离线版本 线段树合并 做法是将询问和边权都排序 给每个点建一棵线段树 然后边建mst边回答询问 每次合并两个连通块的时候 要将两个连通块的线段树合并起来 线段树合并部分code i ...
- ansible的become
# ansible sudo 问题 官方下载centos7.6fcow2镜像不给直接远程ssh了,所以必须sudo,但是有的命令sudo也解决不了的如管道重定向还有多个命令组合. 解决办法: vim ...
- P1169 [ZJOI2007]棋盘制作——悬线法
---恢复内容开始--- 给你一个矩阵,选出最大的棋盘,棋盘的要求是黑白相间(01不能相邻),求出最大的正方形和矩形棋盘的面积: 数据n,m<=2000; 这个一看就可能是n2DP,但是写不出. ...
- spring相关知识点易错
1.spring不支持静态变量注入,即不能再static变量上面加@Resoure 要是想注入的话就用set方法注入 private static ComboPooledDataSource pool ...
- linux下编辑VI窗口插入与编辑命令
前言 在嵌入式linux开发中,进行需要修改一下配置文件之类的,必须使用vi,因此,熟悉 vi 的一些基本操作,有助于提高工作效率. 一,模式 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握 ...
- git如何配置邮箱和用户名?
答: 1. 配置邮箱 git config --global user.email "jello_smith@163.com" 2. 配置用户名 git config --glob ...