天天财汇 购物 网址 万年历 小说 | 三峰软件 小游戏 视频
TxT小说阅读器
↓小说语音阅读,小说下载↓
一键清除系统垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放,产品展示↓
首页 淘股吧 股票涨跌实时统计 涨停板选股 股票入门 股票书籍 股票问答 分时图选股 跌停板选股 K线图选股 成交量选股 [平安银行]
股市论谈 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事
商业财经 科技知识 汽车百科 工程技术 自然科学 家居生活 设计艺术 财经视频 游戏--
  天天财汇 -> 科技知识 -> 目前中国程序员和美国程序员的差距在哪里? -> 正文阅读

[科技知识]目前中国程序员和美国程序员的差距在哪里?

[收藏本文] 【下载本文】
这里说的差距,是指平均技术水平,我知道国内也有很多高手!我希望大家能够从各个方面做出客观的讨论! 又:面对这些差距,我们应该怎么做?
我是在美国工作过两年,回国经历了逆文化冲击,现在勉强算是适应了国内互联网公司的节奏。随便聊聊,没有崇洋媚外的意图,只是刚好最近被剥削得很不爽,趁机吐槽一下。
1.年龄 美国公司:同事里20多到70多岁的都有,众数是三四十的中年人,大部分工作目标都是为了早日退休,攒够钱就随时办退休party。也有些纯粹因为热爱工作、热爱写代码选择不退休的。我们组的核心成员之一,是位72岁的老头,他每天4点多起床到公司写一会儿代码,等天全亮就戴上头盔去骑山地车锻炼,9点多回公司继续工作。对这老头印象深刻,是因为他逻辑清晰、思路锐利,他是code review小组的成员,经常在邮件里破口大骂其他人写的代码写得有多烂,被投诉,只好在邮件里道歉,过几天继续骂,在我工作的两年里一直循环。我的另一位资深同事,是位68岁的架构师,热爱工作,每天都乐呵呵的,对我这种新毕业生也很友好,有人问他什么时候退休,他回答说他死的那天。我国公司:回国之后我现在工作的公司,员工平均年龄在30岁以下。年纪大的都去哪里了呢?极少数在管理层。 2. 加班 美国公司:从没加过班,晚上发版除外(会默认第二天调休)。经常正开着会,时间到了5点半,产品打断领导说到点了他要回去喂狗(他是一个50岁的不婚族,养了一院子狗),然后就散会下班了。加班需要申请,有次我申请工作日晚上加班,没批准只好回家了。因为加班费会比较高,需要从项目预算走,领导控制预算不给批。偶尔周末去办公室取东西,几层停车场只有两三辆车。我国公司:996是常事了。印象比较深的是我司之前有个清华本科+美国硕士的小伙子,每天7点半准时下班,结果试用期被辞退了,原因是工作态度不积极,据说后来还和公司打了官司,不知输赢。 3. 代码质量 美国公司:项目在前期花的时间是最多的,比如说需求分析、架构讨论、技术讨论。写代码会考虑得比较长远,比较有时间去考虑开发原则、维护成本,领导也会乐意去安排版本来解决技术债务。我国公司:国内互联网节奏会要快得多,讲究小步快跑,就几天的开发时间,不管三七二十一先上线再说,刚开始我都惊呆了。4.工作氛围 美国公司:老美的公司确实比较尊重员工,在员工关怀上做得比较好。我可以感受到,和领导职位不同,但是我们人格是平等的,彼此尊重。记得有一次发版前几天,组里程序员说他压力太大,领导给他假期让他放松调整,版本被延迟上线。美国有family first的文化。有个老印同事,家里老人身体不好,公司同意他回印度工作照顾家人,远程跨国工作。经常有同事因为要看孩子比赛请假。领导自己也会偶尔周五请假,因为要去和女儿一起参加学校的公益活动。对差异性接受度也比较高。同事有变性人、残疾人,大家相处得都很好。我国公司:领导高高在上,官威很大。请个假,和求他借钱似的,组长还提醒我让我请假原因不要写“旅游”不然可能会不给批假。记得有个需求,大家都认为不合理没必要,我去找领导沟通,刚提了一句还没展开,领导直接甩脸色“你是领导还是我是领导”。有个同事因为耿直,和领导不和,被各种排挤冷暴力,逼他自己辞职拒给赔偿金。开个线上事故复盘会,做root cause分析,就像要把人钉在耻辱柱一样,我不理解这对解决问题有什么帮助。5.工作之外 美国公司:很注重对健康的投资。至少1/3同事有每天早上去健身房的习惯。公司很多球场,晚上下班能看到很多同事在楼下踢足球、打排球。健身不只是为了锻炼,还是很多同事的爱好。看起来平平无奇的程序员,可能都是隐藏的运动高手,多年马拉松选手、山地车骑手遍地都是,还有不少极限运动爱好者。喜欢看牙医。喜欢看各种体育比赛。喜欢旅游,基本上每年至少一次家庭旅游,游轮是热门项目。一部分同事热衷慈善回馈社会,小到捐血捐钱做公益,大到组织慈善拍卖会。据我观察都没啥夜生活,下了班就开车直接回家两点一线,偶尔聚餐也是和同事朋友。可能是我自己的感觉,人和人之间的链接比较淡薄,所以华人码农也会经常吐槽空虚无聊。已婚同事的其他时间和我国的一样,花在养孩子和投资上。我国公司:办公室的好多同事,不敢看体检报告。都是20多岁的年轻人,检查出来啥的都有,胆囊炎、结石、痛风。。。前几天还有一个要好的同事请假去做痔疮手术的(捂脸),据他说是因为久坐,加班经常吃小龙虾。相比之下离职率高太多了,每个月都有几个认识的同事离职,跳槽的、转行的、回老家躺平的。除了领导们,几乎每个人看起来都很焦虑,都想着退路,想着搞点什么副业。
至于会不会趋于一致,个人认为是时间的问题,但是我们这一代还能不能等到,要看身体好不好了。无论怎样,一定保重好健康。
来源:https://www.zhihu.com/question/497793332/answer/2216734220
忘了是哪一年,驾车路过山景的Google总部,我记得才当地时间21点多,反正也不是很晚,就绕进去看看呗。记得当时我跟安卓的机器人合了影,版本号应该是小蛋糕,反正有看到那个小蛋糕(Cupcake?Muffin?不记得了)这个就可以反推出大概是哪年哪月的事情。
反正所有的办公室全部关门,锁门,连食堂都关了,灯都关了,食堂里发着悠悠的光芒但不是紫外线消毒灯。
车库内包括我的车,统统加在一起,总共3辆车,当时我跟老婆确认是这儿么?
然后我和老婆2个人,前前后后转遍了前前后后整个Google,一方面确认这的确是Google总部,一方面也是找活人,失望的是,一个活人都没有,连个巡逻的安保都没有,基本的岗亭都没看到,后来拍了几个照片就准备走,居然发现了2个活的印度人,他们也发现了我们,4个人很激动地相互靠近,聊天。
意料之中的是,这二位也是游客,不是员工,员工早跑得光光的。另外,那3辆车中有1辆就是他们的,他们来得比我们还早了,但是因为园区比较大所以一开始没有相互发现,他们也是瞎转了半天,也是想找个员工聊天。然后得知这二位也是来自印度,是来朝圣的,他们其实早就看出来我们也是游客,一男一女还穿着冲锋服,游客夫妻4个字直接写脸上了,后来跟他们合了影,蓝鸡上相互fo了一下,但后来也没联系。
再后来我去过上海的阿里、腾讯,杭州的阿里总部,还有B站总部、字节……
21点的时候,这些公司还是灯火通明。
其实老外没你想象的那么强。中国的程序员也没有你想象的那么弱。
我在国外公司大概工作了8年,主要是做infra,只有碰到一个程序员让我眼前一亮。在国内工作了不到一年半,已经碰到了好几个优秀的同事了。
两边主要的差距更多在管理层的眼界方面。国内习惯了跟随,比较缺勇气做一些不确定性的工作。
美国程序员有每年8.5w h1b名额护体,而每年美国可能需求基本都多于8.5w,导致你多少没办法招到一个水平非常契合岗位的候选人。
差距来自这里...




























出处:中国程序员VS美国程序员,太形象了...
我在美国工作过、创业过,在中国工作过,创业过,在 freelancer 上发过外包接过外包,维护过开源项目。
顶尖工程师水平:
美国 > 中国 > 日本 = 欧洲 = 韩国 > 印度
平均水平:
中国 = 美国 > 欧洲 = 印度 > 日本 = 韩国
大型互联网公司技术能力:
美国 > 中国 > 剩下全加起来
无论公司角度,还是计算机技术能力角度,现在世界上只有两个国家能放在一起说,一个美国,一个中国。
-
统一回复一下。
我接触过很多三哥,写的代码根本不是人看的,三哥是把计算机和互联网行业当做了低端制造业去做,能力真的不要太高看他们。印度那些外包公司很大程度只是他们能产出大量廉价会说英语的工程师而已,不代表技术又多好。
毛子和日本其实非常像,都有一些领袖级的人物和公司,但平均水平非常低。我之前接触过一些日本和俄罗斯的公司,他们还在拿至少10年前的那套东西搞开发。
国内互联网行业从业者千万不要妄自菲薄啊,至少 BAT 的平均水平不会比 Google + Facebook + 苹果的平均水平差多少,国内更多是管理层的问题。真正技术上的差距差在2%的牛逼阶层,这些公司有些叼炸天的大牛,这是国内互联网公司不具备的。真正剩下的98%其实都在一个水平线上。
最后我其实也没有回答问题,我完全赞同
@赵劼
说的就是英语的差距。
工资。
求折叠吧..._(:з」∠)_
从教育说起
中国:实践太少,填鸭式灌输太多,大学起『汇编』『数据结构』,学不好又培训『java三大框架九大XX』,然 并 你懂~
美国:引导发扬兴趣试教育 『黑客与画家』,发现一个问题,搞出一个解决方案,然后命名『XXX』,积累几个解决方案之后,就成了中国最先进大学最前沿教材研究方向『YYY』。
故事
好久之前美国一个青年小伙看JavaScript 不爽很久了,然后写了个自己的js框架jQuery,发布到github上好多人来fork。
三个月后,中国程序员开始吵架『jQuery到底是不是最好的js框架』,大量中文翻译文档出现,老程序员面试鄙视小程序员『你连jQuery都不知道?』,小程序员心里非常胆怯,『心想赶快回去恶补一下』
最后
美国程序员成了商业精英,他们拿了钱,把技术做成公司越玩越high
中国程序员被一帮商业精英忽悠着面临转业


我说个最具体的,差距在于对开发流程的理解。国内程序员,或者说国内公司,重视的是结果,是X天内上线,非常忽视性能以及测试这两个非常重要的领域,所以代码越写越多,结构越来越臃肿,性能越来越差,出问题的几率越来越大,无意义的耗时也随之增多。
我最早在某美国大厂,后来加入了一个有国内背景的初创公司(下文简称国内公司),现在又跳到了某美国中厂。聊几个亲身体会。
1,测试框架。在美国公司的时候,无论是之前微软这种大厂,还是现在这个近两年才ipo的中厂,都非常重视测试,我之前有个项目是个后端项目,每个api都有单独的unit test,合到一起还有regression test,专门雇了两个合同工跑behavior test,时不时整个部门再来个一周的pressure test。在国内公司的时候,同样的后端项目,测试是没有的,我要增加一个功能的时候,有个已有的api和我需要的新功能非常类似,正确的做法是我去修改这个现存的api,增加几个新的parameter和scenario就可以了,多个几十行的代码。但是我敢吗,不敢,因为没有这个api的unit test,我也不知道谁在用,万一搞挂了怎么办,所以,重新加了一个api,多了一百多行。
2,性能。在美国公司的时候,我曾经抽空鼓捣了一个infra相关的改动,降低了某几个重要的请求的反应时间,manager非常高兴,单独发了一封email给他的manager,cc了和他同级的manager,介绍我们的性能提升,升职的时候,这个也作为很重要的一点。不仅仅是我的manager,整个大组,只要是性能方面的提升,经常见到这种可以发到很高层的email。国内公司?别折腾这些没用的了,这个项目3周上线行不行,不行?测试和性能方面的工作先砍砍,我们一定要尽快上线。
其实能想到的还有很多,比如说文档方面,部署流程方面。其实程序员的工作,标准化很重要,而国内对标准化的普及,真的是有点差。甚至还觉得那些能把三行写到一行,天马行空特立独行的才是高手,这是完全搞错了方向。
以前我和一个技术大牛聊过一个很有意思的问题,如下:
当一个程序员,花了很多时间在底层,架构,这些方面的时候,后面写出的代码质量就会挺高的,而且出bug的时候也少。这样的代码和程序员,在我们这里是不行的。
因为,这体现不出你的价值。
最优秀的程序员呢,就是在底层搭建的时候,弄一些不疼不痒的问题,后面的代码出了bug,你可以去摸鱼,去改,而且还能体现你的价值。
你看,这程序员就是厉害,有问题就能解决!
而那些把底层弄得很好的,一天到晚没啥事干,天天就知道上班摸鱼~
这是真事,而且是某大公司的技术总监。
唉。。。。。。
所以,一个公司的老板和董事,懂技术和不懂技术,差距会有多大,就在这里看出来了。
差距在于是否:
敢于拒绝加班
敢于和老板表达自己的不同意见
敢于坚持自己的技术路线
敢于跳槽
被网站要求修改,一千多字的内容我全部删除,只留一张插图:


飘在美国的美帝原装程序员(因为我的计算机是在美国学的,在国内时没学过任何)强答一波:
第一个是语言问题,我说的是英语。中国程序员在单挑全世界,因为太多程序员看不懂英文。我发现很多好的小教程和demo都是中东人或是东欧、俄罗斯人贡献的——用英文,所以美国程序员可以无损无障碍接受拿来就用,中国程序员大多数就看不懂。这个缺点很致命在于,中国程序员获取信息的壁垒,是要高得多的,即使Google开放了又如何,大部分人还是看不懂。所以中国人的技术其实是相当厉害的,因为信息的接受要落后于所有英语国家,包括印度,但作出的成果却是世界第二的。
第二个是职场文化问题。中国官本位,认为管理高于技术,美帝其实也这么认为,但是技术人员地位高很多。美国的很多资深程序员有机会也不愿意做管理,认为管理更难、更累、风险更大、还不容易跳槽,收入却没有本质上的提升,所以其实是把人才留在技术方向。
第三个是管理水平。中国人的技术不弱于美国,但是管理差得多。主要是文化和历史原因比如接触西方太晚。我在微软时跟国内的外包公司打过交道,带他们干活,发现工程师还是很可以的,至少性价比是相当高的,但是管理混乱,管理人员大多数油滑、又贪功,缺少真正的责任感。美国我见到的各公司的管理阶层(除部分在微软外)都是精英,对各方面的把握都非常精准。所以,公司不会因为过大层次过多而降低效率。
第四个是社会差距。美国是技术的原产地,因此技术和新的模式是天然和社会状态匹配的——比如诚信水平和隐私保护、立法等。所以,Google成为了技术创新公司,百度成了医药行业公司。这里不是贬低百度,而是说假设东亚有个说汉语的美国,那么我相信百度也会成长为Google的。Google不是不想做医疗行业(美国最赚钱最黑的行业),是有人不允许啊。我记得读过案例,Google卖过药,结果被罚了几十亿,老实了。
其实大家总提的薪水水平差得倒没那么大。不要算绝对值,要综合人力成本来看,美国的程序员工资并不过分。比如扫地的年薪怎么也有4万美元,那么FB、Google的毕业生起薪也不过是5个扫地的。国内扫地的假设4000人民币一个月,BAT起薪2万也就相当于5个扫地的。这个例子数字不准,但大概意思是说人力其实是差不多的。
当然,不要问我为什么不少博士后赚得跟扫地的一样多。我也不懂,可能因为他们产生的垃圾paper还污染科研环境吧。
最后的最后,我觉得国籍和原产地倒不关键。我经历的这些公司,感觉人的水平还是跟公司有关,跟国籍和出生地关系不大。美帝的程序员移民数目多得发指,各种小国都来了人不说,而且越是这些小国的,甚至很多shithole country来的,技术往往还越精湛。
======以上是2018年5月18日的答案=======
======以下是2023年10月23日的答案=======
主要差距在身份(绿卡或国籍),最地狱的是,这几年H1B都难抽,我们群里有个小孩说自己被裁员了,但有H1B,大家都说“有工签,找下家很容易的啦!”
美国落后、过时、随机而又卡得很严的技术移民制度,一方面阻止人上车非常恶心,但一旦上车后又形成了强大的行业保护
如果可以随意跨国招人,中国、印度来的程序员会很快把美国整体的就业市场彻底改变。但实际上一年8万5的H1B成了最大的瓶颈(何况,8万5里面很多都不是程序员)
这也导致,美国的移民码农过了35岁更吃香因为有了身份,可以随意跳槽了,就算面不上大厂卷不动,去那些小公司或是2B的厂子,尤其是不办H1B和绿卡的,机会大把大把的
其他什么技术、文化、英语都不关健了这么一看——因为,技术可以学,工作文化可以适应,英语可以练,只有绿卡不容易获得
——这也解释了近年来小红书上各路文科小仙女转码大厂的“成功故事”泛滥:抛开包装的,很多是有身份的,会数数就能进厂子干活了
中国工程师打开百度,搜技术问题,翻两三页,摇头叹息,打开vpn,Google翻译后的问题,点开链接(右键在新tab中打开),阅读,把问题答案在脑中翻译一遍,解决。
美国工程师
Google,点开,阅读,解决。
=======以=下=链=接====与=本=题=无=关=========================
有个任性无比为所欲为的女朋友是什么体验? - 知乎用户的回答pvp玩家玩pve是种怎样的体验? - 知乎用户的回答
为什么男人对丝袜有幻想,会被诱惑,尤其是黑丝? - 知乎用户的回答
月薪两万在北京能过上什么样的日子? - 知乎用户的回答
目前中国程序员和美国程序员的差距在哪里? - 知乎用户的回答
============================================================
没在国内工作过,所以大部分是针对在美国的华人和美国本土工程师的差距.
1. 沟通能力:
在这点上差距非常明显. 很多人说是英语问题, 但我觉得深层次的是思维方式问题. 和美国工程交流的时候, 你能很清晰的理解他的问题在哪里, 他解决问题的切入点和具体思路. 在他们阐述问题的时候背景信息给得相当全面, 所以理解他们的问题很容易. 而当你阐述思路的时候, 他们也会非常用心的去理解你的思路, 帮你解决问题. 可华人这方面基本不行, 很多时候讲一个问题根本不考虑别人的感受, 背景知识没给全, 就直接开始讲了,搞得很多人云里来雾里去, 根本不知道他在讲什么. 有时候也不愿意理解别人的想法, 就顾着自己讲.
2. 解决问题能力
我们国家, 由于教育方式和美国不同, 所以出现了一个很有意思的现象. 如果给我们中国程序员, 规定好的方案, 我们普遍完成的非常好. 但如果没有具体方案, 完全是一个开放性课题, 很多时候华人工程师完全无法下手. 但美国程序员这方面能力相当了得, 他们的探索研究能力非常强, 经过一定时间的研究后, 他们能提出一套非常具体有效的方案然后一步一步去解决问题. 这也是我们和美国教育的差别,一个善于解决问题, 另一个善于发现探索问题.
3. 技术实力
这方面主要是对比国内程序员和美国程序员.我们工作初期的时候美国程序差距不大.但问题是5年以后开始出现变化了, 已经不止一次听人说所谓程序员吃青春饭这种理论了. 在一项技术上我们有多少人钻研10年以上的? 多数人工作个5-6年就开始琢磨转管理了. 虽然这5-6年我们代码上的时间,积累的经验可以说很多时候是高于美国程序员的. 但问题是之后我们就不干了, 而美国程序员10年以上经验的人有的是. 我以我们小组为例, 一个工作经验是30年, 从dos时代就开发debugger一直干到现在, 一个24年工作经验外加5年的博士研究经验, 还有两个从毕业到现在一直从事CLR diagnostic api的开发到现在基本都干了十几年了. 在国内我真的很难想象有这种团队. 记得stackover上统计过, 程序员的黄金年龄应该在40岁左右, 但我们国内40岁的时候有几个还愿意写程序呢.
4. 对技术的热爱和对工作的耐心
实话讲有多少人是热爱编程的呢, 很多人学习程序想得都是那个方向火容易赚钱. 什么技术火就学什么. 然后去所谓牛逼的公司, 干牛逼的事情, 然后拿着几十万的工资. 很多人工作没两年都跳了3-4次了. 我不能说这种是错误的, 毕竟大家都是混口饭吃. 但看看美国程序就会发现差距, 像我之前说的很多人专注某一个领域几十年. 我们现在都是想着自己开公司或者加入快要上市的公司, 然后上市了到达人生巅峰. 各种浮躁的风气盛行. 可美国很多程序员其实我自己感觉想法不多(当然也有可能和我接触的这些人有关), 他们想法很简单, 对于编程这种事情更多的是那种单纯的孩子似的热爱吧.
====================================================================
5. 对于好程序员的定位
这点是看了底下的评论想到的, 在美国(当然也有可能是我们组的标准), 对于一个好工程师的评价不单单是对系统了解的深入程度, 解决多么难得技术问题这么简单, 同时还有其他的一些要求, 一个是领导能力, 一个好的程序员不应该只是自己完成feature, 同时也要帮助或者指点其他组员克服技术上的难题. 另一个就是vision, 能够把握技术的发展方向, 根据这些把握产品的发展方向. 虽然这个有点类似PM, 但和PM的区别是一个只是根据市场和客户需求, 另一个是通过自己多年开发的开发经历进行判断. 我觉得比较好的例子就是我们组的.net native 和 reyujit项目, 或者是Facebook的php hack项目. 这些项目都是很多工程师的提出来的而不是PM. 还有就是交流协作能力这点我之前提过就不多说了. 而我们华人有时候对于好工程师的评价往往只是简单认为技术好, 对系统了解就是好程序员. 至于我说的这几点感觉并不是太在意. 所以一句话概括是我们华人认为你coding厉害, 你就厉害, 但老美有时候的想法是, 好的程序员并不是coding厉害那么简单.
============================================================
最后说明一点, 我只是针对我接触这些人的情况, 可能会和硅谷的情况有一些不同. 事实上我认为即便是整个西雅图氛围和硅谷的氛围都是不同的. 西雅图经历老的工程师是主力, 硅谷相对来讲更年轻化当然也浮躁一些.
以软件工程为例,当一个软件工程的理论出现,美国程序员会真的围绕着这种理论,开发出一系列相关的工具,包括框架和生态。在没有成功案例之前,很少有中国程序员会跟风。而且虽然优秀的中国程序员会应用这些理论和工具生态,但是真从事其开发工具的开发,真的少之又少。
当依赖管理开始流行的时候,每个语言都有了自己的包管理软件,如npm,composer,Maven,nuget,pip等等。
当单元测试作为重要的开发一环后,PHPUnit,nUnit,Jest,JUnit,Mocha等等出现。
当单元测试中的实验模型理论出现后,Faker,Mock,Mockery,Stub等等实验模型工具出现。
另外诸如风格测试,性能测试,持续集成,持续部署,任务自动化等等理论出现后,都有一批程序员会马上把这些工具理论实现,然后放到项目中使用。而且这些工具的使用,的确是能大幅提高应用程序的质量。
而这些实践理论本身又大都是美国那边的程序员或者研究人员提出来的。这样就产生了良性闭环:
实践总结,写出提高程序质量的理论按照理论,写出各种相关辅助工具程序员在项目中,使用这些工具,提高自己软件质量
第一,美国程序员真的信这些计算机理论。
第二,美国程序员真的愿意为实践理论,写出这些辅助工具,帮助实现这些理论。
第三,大家愿意给足这些提出理论和编写工具人的足够尊重,让这个闭环成为了良性循环,让生态中有了越来越多计算机理论和其相关辅助工具。
而中国程序员,聪明的,会作为跟随者,去学,去用这些理论和这些个相关工具。有些天赋的,会改进甚至创造出更好的轮子,但前提是有国外的成果案例已经证明了此路可通。但很多中国程序员是不屑于去研究这些先进的编程理论和用这些工具,只是停留在我写的代码能用,能运行就行了。
(当然凡是会有例外,有些工具是中国人先写出来的,然后才有跟风。比如说NW.js就是国内开发人员先创造出了nodejs和webkit browser的结合的本地Javascript的桌面编程技术。然后才有国外electron这样的跟风项目)
这种现象不但在计算机工程上有,而且在计算机科学,程序中间件,云架构,单片计算机等领域都能发现类似的现象
这些差别的造成,可能也是工作环境的原因吧,首先国外工作时间实践严格的8小时工作制度不说,甚至在8小时内,公司也鼓励员工去研究或开发和自己项目无关的技术,甚至鼓励你去修复别人的开源项目的代码。第二,你做出一个更好,更易用的代码技术,在美国更多是佩服尊重为主;而国内看你重复造轮子,就可能直接人生攻击说你抄袭或浪费时间重复造轮子。每次看到国外大部分都是赞扬Vuejs的尤雨溪,而国内网曝尤雨溪的言论,就能看到两国的开发环境的天差地别了。
总结一下,美国程序员的优势,更多在于他们不但愿意总结提炼编程过程中的理论,更愿意用代码实现工具来辅助实践这些理论。而且美国程序员的工作环境也更是鼓励美国程序员这么做。而中国程序员的相比之下的情况,就是公司环境不鼓励程序员在项目之外的研究,996让中国程序员也没有多余时间来研究自己感兴趣的技术理论,很少能提出厉害的计算机理论,更不要说围绕理论去创造工具和生态了。能跟着美国程序员,创造出一个比他们更好的轮子,让中国程序员扬眉吐气,可能是现阶段中国程序员能做到的天花板了。(例子有:vuejs,NW.js, eChart等等)
希望以后能在中国程序员中能看到这方面的突破
就是这种区别。


首先,跟加不加班没有任何关系。
中国程序员还比卢旺达程序员强呢,卢旺达程序员就是天天不上班也干不过中国程序员啊,他加班加死也干不过中国程序员啊。
1.世界顶级优秀的程序员中国匮乏
所谓美国程序员并不是指一个国家的程序员,而是指在美国工作的全世界的程序员。中国程序员指在中国工作的程序员。
美国是超级大国,在美国可以吸引全世界最优秀的一批程序员,而中国仅仅是本国人才。从人口基数到资本规模,中国远小于美国。所以中国顶级程序员的成色和数量是不如美国的
2.产学研体系支撑
美国有一大批非常好的大学,可以为产业届培养人才,而且产业届学术界之间的合作互动非常频道。产业届把遇到的问题反馈给学术界,学术界解决问题发表科研成果然后拿到产业届做成产品。
中国这块是学习美国的。如果放在十几年前,大陆才刚刚起步。现在虽然有起色,但是还不如美国成熟。
而且中国大陆的大学目前还存在本科教育质量下降,教学教师水平较低的问题。
整体这块逊色美国不少。
3.国内的产业环境
这两年不少科技公司至少还在喊口号做技术,前些年那完完全全就是在资本市场加持下跑马圈地,对技术的尊重,对核心技术的投入严重不足。更多的是拼低端人力,开始疯狂加班来凑量和速度。严重缺乏内部员工可持续的培养发展投入,又因为中国新一代大学生数量一年比一年多,很多国内的企业忽视内部潜力挖掘,往死里用人,也不给他们培训提高机会和时间。然后用完裁掉,招聘应届学生。
这就导致一个问题,大量的从业人员年龄增长,但是技术深度广度并没有得到增长。而补充进来的年轻人,除了体力好一些,经验严重匮乏,老人都不能得到真正的提升,新人进来必然一通踩坑。这也严重影响新人成长速度。没有形成一整套的传帮带体系
4.缺少国家层面强力的扶持
美国的高科技公司不止做美国的生意,而是凭借其超级大国地位,畅通无阻的将高科技产品销售到全世界。
中国高科技公司在国内打的头破血流,真正能走出去的更是少之又少。
就算这些公司能够凭借自己的实力在国外打下市场,很多时候也会受制于美国的整体实力,受到打压,比如华为。
出海受阻,国内市场有限,为了维护利润,很多时候就不止比拼技术了,因为投入技术的成本过高,他们更愿意做表面创新
5.缺乏真正有眼光的管理人员
在一个科技公司里面,一个优秀的技术人员可以顶十个平庸的人。而一个平庸的管理人员可以让十个优秀的技术人员真实产出低于一个平庸的人。
我这里说的管理人员的能力还不同于前面产学研结合中科技人才的培养。技术人才可以在学校培养,但是管理人才只能在实战中培养。
一个无能的管理者不仅不会给公司带来真正革命性的突破,反而会通过各种方式赶走优秀的人才。然后团队里就开始各种关系,各种小白兔。
以上就是我的观点。
需要特别指出的一个问题就是加班到底是不是导致中美程序员差距的根本原因?
我认为是否定的。
因为美国程序员如果公司真的处于快速扩张期,该加班照样加班,除了加班费可能会给的更地道一点,因为很多中国公司加班都不给加班费的。
我在上面的回答说了一部分原因。任何一个打工的人,心里都不喜欢加班的。但是有的时候你菜难道更本质的原因不是因为你菜而是加班吗?
美国能吸引全世界优秀的程序员,比如谷歌的一个创始人就是从苏联移民过去的,再比如以太坊的创始人也是俄罗斯移民。linux之父,芬兰的,就挨着俄罗斯。但是这批人在it界打拼没有说不去硅谷往中关村跑的。中国大量的计算机方面的公司尤其创业公司,如果说有从来年来的人基本也是中国人在美国干几年跑回来创业的,很多业务模式因为美国先进,回来利用信息差做一个low版本。
比如说百度的搜索引擎啊,各种各样的ai创业公司啊,自动驾驶啊,淘宝啊,等等吧。
本质上这是利用信息差做买卖,跟创新有鸡毛关系呢?
所以别看国内很多科技公司说什么创新啊,技术投入啊。很多就是在跟人家屁股后面走。加班玩命搞内卷,但是真到了拼硬实力创新,就尿了。
而且加班有时候也可以起到缩短技术差距的作用。
人家两个小时干完,你起步晚,加班用了四个小时也做到了,能做到就行呗,你基础本来就不如人家,还要跟人家一样时间?那什么时候能追上呢?
至于有的人说的什么天赋,好像自己在美国工作天生就是做计算机的材料。在中国的程序员多花一些时间貌似他们就很不乐意一样,是怕被追赶上?
如果说加班纯粹就是搞技术研发,里面没有各种划水混kpi,加班往往就是可以缩短技术差距的。但是现实实行往往就变样子了。因为一个群体的个体水平差距很大,有的人真的在提升技术,有的人就摸鱼,挖空心思讨好领导。专研汇报去了。搞这种技术上怎么可能有长进?
而且如果有傻逼领导瞎指挥,加班的精力都特么用在折腾上了,那技术只会更差。
所以加班不是实力差距的根本原因
我看了很多回答,扯什么按时下班什么的,我认为避重就轻了,非常多宏观因素影响,怎么就用一个加班来一言概之呢?
美国程序猿在写代码的时候中国程序猿在睡觉。
美国程序员可以按时下班,之后研究他们真正感兴趣的技术
之前在国内当玛农,项目经理,现在在美国,当玛农。还当不到项目经理。叹气。
个人感觉,技术水平在同等水平公司,其实都差不多。毕竟人的智力都是差不多的。
接下来就以各种水平来对比分析下:
初级程序员:
中国:基本上什么都不会,什么都要教。
美国:因为大学对实践比较重视,而且计算机很火,学生基本上有基本的开发能力
总结:美国稍强
中级程序员:
中国:吃饭睡觉,混时间,或者想办法转管理,或则准备跳槽,花时间学习英语
美国:吃饭睡觉,混时间,担心自己被炒鱿鱼,职位被外包到印度或则中国,不学中文
总结:水平一样,美国收入高好几倍
高级程序员:
中国:数量较少,有自己的想法,想自己创业,基本不再学英语
美国:有自己对于技术的见解,如果在硅谷,就想创业,如果在别的州,就基本是继续不断研究技术,担心自己被炒鱿鱼,不学中文
总结:水平一样,美国收入高两三倍
技术大牛:
中国:国内机会太多,所以大牛们基本有机会就开始想自立门户,争当CEO,迎娶白富美。
美国:由于美国技术人员的工资很高,管人特别难,因为人权,自由,各种问题。很多人也就不愿意去尝试管理职位。因为工资高,所以创业的机会成本更高。创业的人比较少,又担心自己被炒,只有不断闷头学习新技术。
总结:水平一样,收入差不多,但美国大牛人数高好几倍
技术大神:
中国:神一样的人物,只有在神一样的传说里面。个人感觉几乎没有。nb黑客大神倒还是有的。
美国:因为从小到大,在美国,做为一个nerd(书呆子),就是不受欢迎的。不像国内,读书好,老师妹子都喜欢。美国的nerd就是生来不同,受尽各种冷眼,很难有妹子喜欢。一路走来,习惯了寂寞和独处,漫画,游戏,码代码成为了人生唯一的爱好和能做的事,能坚持下来,真的是对技术有很大热情。然后又因为美国各大公司对于神级技术人员的热捧,疯抢,要什么给什么,要多少钱,给多少钱。年薪基本都是百万美金以上。而且公司也尽量不让大神们参与公司管理。久而久之,美国的技术大神,在研发新技术的精神和技术水平上都碾压国内的技术大神。
个人愚见,有什么不同想法,都可以来一起探讨。
最大的差异是文化,以Google为例介绍下软件工程里文化的力量与影响。
本文首发自我的博客:https://www.bmpi.dev/dev/software-engineering-at-google/culture/
在软件工程的概念被提出之前,IT行业经历了软件危机。当时IT行业开发的软件正在经历从小规模到大规模的过程,而没有系统化的方法论指导大规模软件的开发过程,导致软件工程师之间的协作非常的低效且质量难以得到保证。
直到IT行业意识到软件需要一种工程化的方法论来指导开发过程。
软件工程是将系统化的、规范的、可度量的方法用于软件的开发、运行和维护的过程,即将工程化应用于软件开发中(IEEE,1993)。编程与软件工程
编程是利用某个编程语言实现某个算法或技术方案从而来解决某类问题,但这类问题规模一般很小,也不太会随着时间产生变化,或者其生命周期也很短,不需要考虑长期维护的问题。但软件工程与编程的区别在于前者需考虑时间与规模带来变化的影响。
时间的因素使软件工程需要考虑质量的问题,糟糕的质量会产生很多认知负荷,最终难以长期维护。规模的因素使软件工程需要考虑协作的问题,低效的协作可能与沟通方式有关,最终拖垮交付进度。
软件工程发展史
早期的软件工程借鉴了项目管理的流程,而传统的项目管理关注生产过程大过于人。


以过程为中心的软件工程过程方法论主要有瀑布式与统一软件开发过程。这种软件开发过程需要产生大量的正式文档,通过严格的流程管理控制软件的开发过程。但软件开发过程却是一个知识密集型的生产过程,过于关注流程而忽略人的因素导致这类方法论很难适应需求变化,花费很多时间开发出的产品很难满足变化迅速的市场,最终逐渐被淘汰。
以人为中心的软件开发过程是为适应需求变化的代码编写和团队组织方法论。这类逐渐产生以极限编程与敏捷过程两种方法论。


这里以敏捷过程为例,敏捷开发至今已经成为很主流的软件开发过程。


敏捷开发倡导信任人而非死板的流程与计划管理,通过一系列如上所示的实践来营造一个信任为主的文化土壤,从而打造一个高效的研发团队,最终开发出高质量的软件成品。
当然本文不是介绍敏捷开发过程的,而是介绍Google公司的软件工程实践。
Google是一家伟大的互联网公司,同时研发出来了大量知名的软件产品。Google是怎么做到的?在2020年Google的三位工程师@TitusWinters @manshreck @hyrumwright出版了《Software Engineering at Google》这本书来介绍Google的软件工程实践,这给了我们一个机会一窥究竟。
本文是Google软件工程系列的上篇之文化篇,来介绍软件工程最重要的一个基石:文化要素。
Google软件工程文化以下是《Software Engineering at Google》一书第二部分文化篇的思维导图,由于此部分占全书近20%,所以本文不会详细的介绍其中的概念,想详细了解的读者建议阅读原书。本文会结合此书这部分内容分享作者的个人理解及相关经验。


文化为何是软件工程很重要的一个要素?我在刚入IT行业时对软件开发的理解只是学习某个编程语言来写代码。之后经过多年多个项目的历练,我逐渐对整个软件开发的全貌有了一定的理解。但还是停留在对软件开发过程的了解及相关工具的使用,直到读完这本书的文化篇后才意识到了文化的重要性。
文化虽然是和技术没有直接关系的一些软性的东西,但文化就像水一样,利用好它的力量,可以让软件开发变得更高效、高质。
团队协作的基石
软件开发早已不是单兵作战的时代了,虽然人们喜欢听黑客奇迹般的故事,但现在的中大型软件都是团队的集体智慧产出。




如上是两大顶级开源基金会 @TheASF 与 @linuxfoundation 的知名项目,成千上万的软件工程师的集体协作开发了达上亿的代码行数最终才诞生了这些伟大的项目。
而团队协作最重要的是成员间的谦虚、尊重与信任。如果没有这些最基本的条件,集体协作将会困难重重,团队成员无法形成稳固的合作关系,时间和精力很容易被内耗完。
打造知识共享文化
软件工程与传统工程的区别在于其是一项知识密集型的活动,其中涉及到了大量的知识管理工作。知识管理很容易做差,最终产生了以下的一些问题:
缺乏心理安全:当一个新成员进入组织的时候,会因为缺乏心理安全感而不敢暴露自己不懂的知识,这会阻碍该成员的个人成长,最终也会传导到团队的开发效率上来。知识孤岛:知识没有分享的文化土壤,每个团队都闷头搞自己的项目,会逐渐产生很多重复造轮子的现象。知识单点故障:团队内的重要信息只有一个人知道,而这个人又没有分享给其他人,一旦这个人不在场,团队将无法正常运转。团队知识断层:团队内的技术专家并没有意愿将个人的经验传授给团队其它成员,导致团队的运转离不开一小部分技术专家,一旦这些人离开,整个团队将无法正常运转。鹦鹉行为:这种很容易出现在团队新成员,由于经验限制或背景上下文了解有限,而在不了解其原理的情况下复制一些代码。虽然系统可以运行,但潜在的埋下了一些问题。知识禁区:团队成员由于经验限制或不了解背景上下文,而不敢修改代码库的某些遗留代码。
这些都是组织学习文化中会遇到的一些挑战。Google在打造知识共享文化上做了很多尝试,比如营造安全的学习环境,鼓励新人通过提问与分享来提高个人的技术。这些实践在敏捷过程中也可以看到,比如:
鼓励个人反馈的文化(Feedback)。对事不对人,根据事实对成员提供建设性的反馈,帮助成员变的更好。鼓励团队成员定期做分享(Session)。比如每周某个成员可以做某个主题的Session,这种实践能让分享者对分享的主题有更深的了解。每日站会同步工作进度。不仅可以让其它成员了解你所工作的范围,还能告知其它成员潜在的交付风险。定期回顾(Retro)。团队定期举行迭代回顾的会议,回顾最近工作中好的、不好的的方面及相关建议,最终制定出一些行动来提升团队的工作效率、质量与幸福感。团队Wiki工作区。团队知识沉淀的体现,新人可以通过查阅这些资料迅速了解项目背景上下文。代码评审(Code Diff)。代码评审在Google的软件工程中是一项全员必须执行的实践。代码评审可以提高团队成员的编码水平,发掘代码潜在Bug,识别代码坏味道,形成统一的编码风格,共享业务与技术知识,消减团队知识断层的影响,甚至可以解决鹦鹉行为与知识禁区的问题。比如我所在的项目上团队所有开发成员每天会拿出一小时做集体的Code Diff,虽然成本不低,但其收益也很高。结对编程(Pair Programming)。结对编程看起来是两个人在做一个人的活,但一般也有两种模式:乒乓模式(Ping-Pong)与领航员观察者模式(Navigator-Observer),前者适合以TDD的方式开发,后者适合老带新。结对编程是成本高但非常高效的知识共享的实践,需结合项目实际的带宽决定当前是否采用此模式开发。比如我们项目会在交付时间不紧张时采用此开发模式。
以上的一些实践需结合组织或项目的实际带宽来决定是否使用,比如Code Diff一般是建议或者强制的,而结对编程是可选的,分享(Session)和回顾可能是定期或不定期的。
领导团队(Tech Lead)
当做了一段时间独立贡献者(Individual Contributor)后,可能有机会做Tech Lead了。Tech Lead是一个团队必备的角色,具有一定的职权影响力,当然更多的是采用非职权影响力去带领团队。
如何领导团队是个复杂的工作,对技术人员来说,从技术到管理是很难的事情。


对于此我的个人经验也不是很丰富,所以想了解此部分的推荐阅读此书原文。当然下面这些文章也不错:
The Definition of a Tech LeadWhat Does a Software Tech Lead Do?Tech Lead工程效率测量
没有测量就没有优化。只有测量到团队的工程效率后,我们才有可能制定提升效率的行动。Google设计出了GSM框架来测量工程效率。


工程效率的测量一般发生在大规模团队或组织级别,我所经历的项目上并没有此实践。对小型团队来说,可以通过简单的一些问卷调查这类定性的方式来收集团队成员的反馈,当然也可以通过一些量化的指标如流水线构建速度、迭代开发速率、代码静态分析结果、测试覆盖率等指标测量团队的工程效率。
总结
软件工程是一项复杂的知识工程,这让其区别于传统的项目管理。Google的软件工程文化与以人为中心的敏捷过程所倡导的理念有很多相似之处。
但反观国内很多软件公司虽然也用上了敏捷过程的方法论,但底层的文化土壤还是以过程为中心的方法论,对团队成员的不信任,没有分享文化,团队领导一言堂还是存在的。希望这种现象能随着国内IT行业的逐渐成熟越来越少吧。
不抖机灵地说,唯一的差距是英语水平。
产业的差距不需要程序员背锅!
整个行业体量庞大但是大多在上层卷业务,底层的市场非常不发达,导致无法形成规模效应。优秀的程序员被打散在深度不够的方向得不到有效的训练。才会产生资深岗位供应不足,老程序员竞争力下降等诸多表象。
我曾经和国内某头部企业交流过加速器适配的问题。我说你们把编译器和手册扔给我,我来实现中间有问题找你们。结果对方说过往这么对接的发现压力太大,你把代码给我们我们核心研发直接编译好给你们用,修改的代码再推给你们。我当时惊掉下巴。这是多么严重的人才断档才导致对社区的能力如此不信任?这么搞即使芯片速度上来了开发者生态也完全没法搞嘛?
我们总嘲笑美国的制造业空心化。但是到了软件行业,其实目前大家看到的程序员和行业诸多问题,某种意义上都是空心化的问题。
没什么差距,就是他们github的网速很快!
[收藏本文] 【下载本文】
   科技知识 最新文章
《消失的问界里》为什么网传华为选择大面积
特斯拉万人大裁员涉及中国市场,销售部门是
媒体报道「特斯拉一天内失去 2 个高管和 10
去年是「大模型元年」,今年会是「AI应用落
2024 年人工智能方向的就业前景怎么样?
如何评价小米汽车SU7全球首例无故抛锚?
如何评价比亚迪与大疆合作发布的车载无人机
如何看待波音「吹哨人」遗言曝光:如果我出
电动汽车为什么一下爆发了?
怎么看待华为太空宽带计划?
上一篇文章      下一篇文章      查看所有文章
加:2024-03-07 13:21:11  更:2024-03-07 13:44:12 
 
 
股票涨跌实时统计 涨停板选股 分时图选股 跌停板选股 K线图选股 成交量选股 均线选股 趋势线选股 筹码理论 波浪理论 缠论 MACD指标 KDJ指标 BOLL指标 RSI指标 炒股基础知识 炒股故事
网站联系: qq:121756557 email:121756557@qq.com  天天财汇