前言

人被压迫了,为什么不斗争?——鲁迅

作为一个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,会不定期的软件崩溃,大约持续了两三年,也没人解决。

刚入职不久的我,奉命前往现场攻关调查这个问题。

在茫茫多的代码中,一点点追查,最终找到了问题所在,调查结果,是因为这样的一句,看上去很可笑的代码。

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++开发欺辱的岁月的更多相关文章

  1. 能力不足的C++开发会欺辱能力不足C#开发

    能力不足的C++开发会欺辱能力不足C#开发 我被C++开发欺辱的岁月   前言 人被压迫了,为什么不斗争?——鲁迅 作为一个C#开发者,我经历了,也见证了很多同行饱受C++开发的歧视和欺辱. 而且,这 ...

  2. 深入Guerrilla Games解密次世代开山大作《杀戮地带暗影坠落》(The technology of Killzone Shadow Fall)

    文章摘要:这几天终于有时间,把全文翻译完了,自己感觉不是太满意,不过大家能看懂就好,就当一个学习的机会.整篇文章通过SONY第一方游戏工作室Guerrilla Games主创的语录,为我们展现了次世代 ...

  3. 前言(CSDN也有Markdown了,好开森)

    实战出精华 在具体的C++网络编程中提升你的逼格 John Torjo Boost.Asio C++ 网络编程 Copyright © 2013 Packt Publishing 关于作者 做为一名权 ...

  4. 【Win 10 应用开发】文件读写的三种方案

    本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...

  5. 成为 Web 开发大师你必须知道的 7 件事情

    曾经是这样的,懂点编码,并可以偶尔耍点酷,那么你就会被认为是一个Web开发大师.但是现在,情况再也不是这样的了.Web开发已经朝着主流方向发展,开发人员数量显著增加.这意味着,如果你想成为这个领域的大 ...

  6. 程序开发心理学阅读笔记——第I篇

    1.软件的任务是为了解决某一特定的问题,而软件开发者的任务却需要解决一系列问题.2.温伯格说,我们不能要求每个人都聪明异常,能够解决所有难题:但是我们必须持续思考,因为只有如此,我们才能明白自己在做什 ...

  7. Windows下用Eclipse搭建C/C++开发环境

    本文假定你已经熟悉Java,Eclipse的安装,并能顺利启动和运行Eclipse.此外因为各软件版本在不断更新,有些地方可能不准确,以最新的.原文资料为准. 距上一次写和调C++程序,已经5.6年了 ...

  8. node-webkit:开发桌面+WEB混合型应用的神器

    顾名思义, node -webkit就是 node js+webkit. 这样做的好处显而易见,核心奥义在于,用 node js来进行本地化调用,用webkit来解析和执行HTML+JS. 快速上手 ...

  9. iOS开发-javaScript交互

    前言 当前混合开发模式迎来了前所未有的发展,跨平台开发.热更新等优点决定了这种模式的重要地位.虽然前端界面在交互.动效等多方面距离原生应用还有差距,但毫无疑问混合开发只会被越来越多的公司接受.在iOS ...

随机推荐

  1. powerDesigner 把name项添加到注释(comment),完美方案!

    第一次写博客,分享一点经验吧,平时大家用powerDesigner的时候,pd是不会把name项默认添加到comment的,所以生成的数据库表里面也没有中文字段的注释. 我在网上查了一下.有解决方案了 ...

  2. leetcode_935. Knight Dialer_动态规划_矩阵快速幂

    https://leetcode.com/problems/knight-dialer/ 在如下图的拨号键盘上,初始在键盘中任意位置,按照国际象棋中骑士(中国象棋中马)的走法走N-1步,能拨出多少种不 ...

  3. iview modal 点击打开窗口,打开前先销毁里面的内容再打开

    <Modal v-model="addSubOrgModal" @on-cancel="addSubOrgCancel" @on-visible-chan ...

  4. numpy次方计算

    >>> 2**np.arange(3, 6) array([ 8, 16, 32])

  5. Hibernate-03 关联映射

    学习任务 关联映射 inverse属性.cascade属性 单向的多对一.双向的一对多映射 多对多映射 关联关系 类与类之间最普遍的关系就是关联关系. 单向的关联 双向的关联 单向多对一关联 以Emp ...

  6. Oracle中的for和while循环

    实例: beginfor i in 51..500 loop delete from test t where t.date=to_date('2016-07-01', 'yyyy-MM-dd') a ...

  7. Mac下Apache服务器的初步搭建

    回送地址  127.0.0.1(localhost)  ping 这个地址可以检测网卡是否正常 ping 本地地址如果不正常说明网线挂了   // 启动 sudo apachectl -k start ...

  8. 面试奇遇 -- 原生JS

    最近几日去参加一些面试,多多少少有一些收获. 现将遇到的一些面试题,做一下分析和总结. 1.使用原生JS,不能使用递归,查找dom中所有以“<com-”开头的自定义标签tagName. < ...

  9. POJ-1011(sticks,深搜)

    Description George took sticks of the same length and cut them randomly until all parts became at mo ...

  10. js事件默认行为

    事件默认行为: 当一个事件发生的时候浏览器自己默认做的事情 怎么阻止? 当前这个行为是什么事件触发的,然后在这个事件的处理函数中使用 return false; 但是return false 阻止的是 ...