前言

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

作为一个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. 7-Java-C(四平方和)

    题目描述: 四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和. 如果把0包括进去,就正好可以表示为4个数的平方和. 比如: 5 = 0^2 + 0^2 + 1^2 + ...

  2. SQA定义、质量模型、SQA与测试的关系

  3. C/C++语言:科学计数法

    主要用来表示浮点数,表达方便 浮点数的科学计数,由三个部分组成: a + E + b a:由一个浮点数组成,如果写成整数,编译器会自动转化为浮点数: E:可以大写E,也可以小写e: b:使用一个十进制 ...

  4. hibernate5.x版本org.hibernate.MappingException: Unknown entity问题

    /* * //创建hibernate配置对象 Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xm ...

  5. VW结合rem进行移动端布局

    ---恢复内容开始--- html { font-size:10vw: } div { width: 1rem; height: 1rem; } VW这个单位适合用来适应不同设备的 一个设备的宽度就为 ...

  6. selenium——操作滚动条

    在自动化测试的过程中,难免会应用到翻页键,但是webdriver提供的方法都是操作当前页面可见的元素,对于未在当前范围展示的翻页键,该如何操作呢? 小编在这里介绍一种方法:使用JavaScript操作 ...

  7. SVN 初级教程

    版本控制器:SVN 1.SVN 作用? 备份.代码还原.协同修改.多版本项目文件管理.追溯问题代码的编写人和编写时间.权限控制等. 2.版本控制简介 2.1 版本控制[Revision control ...

  8. VMware Workstation 14 UEFI启动

    1.新建虚拟机 完成后不要启动 修改虚拟机目录下的XXX.vmx文件 添加一行:firmware="efi" 然后启动UEFI安装系统.

  9. POJ 3659 Cell phone Network (树的最小点覆盖, 树形DP)

    题意: 给定一棵树,每个点可以覆盖自己和相邻的点, 求最少要多少个点覆盖图 #include <cstdio> #include <cstring> #include < ...

  10. Oracle获取最近执行的SQL语句

    注意:不是每次执行的语句都会记录(如果执行的语句是能在该表找到的则ORACLE不会再次记录,就是说本次执行的语句和上次或者说以前的语句一模一样则下面语句就查不出来的): select last_loa ...