‘壹’ 良心整理:IT程序员在北京可以选择哪些好国企、央企以及研究所
北京适合程序员工作的企业实在太多了,所以怎样给大家介绍北京适合程序员的工作机会一直让我十分头疼。如果写得太简单,我跟大家说北京有网络、腾讯、阿里、美团等等,大家一定觉得我是在废话,但把所有企业一次性全介绍了工作量太大,并且文章也看不出重点了。所以我最终决定,把北京拆成三片来讲,一篇介绍北京的国企央企研究所、一篇介绍北京的大型互联网公司和大型外企、一篇介绍北京的中小型互联网公司。
我发现在互联网公司工作的程序员都对国企央企以及研究所十分好奇, 但是因为这些单位的信息比较封闭,所以大家对于这些企业的工作方式以及薪酬情况都都不清楚。为了能给北京系列开个好头,第一篇文章我就以我熟悉的北京的国企央企研究所来给大家介绍了。想提前声明一点,虽然我有很多同学和朋友在北京国企央企以及研究所,但是 同一个公司,不同的部门或者不同的组差别都太大了。
尤其是研究所,每个系列都有数量庞大的下属研究所,并且下属的研究所独立性都特别高,所以风格差别很大。我只能把我见到的情况给大家做一个介绍,具体去到哪个研究所哪个团队还得你们自己去详细打听。只能说我的介绍相对于更接近一些真实。如果大家发现哪里有误,欢迎大家指出。
下面还是分开来介绍一下:
在这篇文章中说的都是国企和央企的直属软件开发中心,子公司是不包含在里面的。子公司的工作风格差别很大。总体来说,国企和央企在软件技术上都是差互联网公司一大截的,待遇好不好真的看具体公司。有些好的国企,我一个朋友在某国企虽然工资不太高,但是上了两年没加过班。也有一些国企,加班比拼多多都重,但是工资低且福利差。
最近几年计算机相关专业应届毕业生对于银行的软件开发中心热情越来越高,主要是由于银行的软件开发中心比较稳定,薪酬也还可以。目前应届生选择比较多的是工行、农行、中国银行、邮储银行的软件开发中心。大家比较感兴趣就分开详细介绍下吧。
银行软件开发中心在校招时和互联网公司不太一样 ,hr 只会和你说一个大概的工资,hr 说的工资只能参考,工资还是以实际发放为准。如果想知道具体工资你得私下去问和你关系好的学长学姐,或者只能等工资发下来了才能知道。另外银行软件开发中心的稳定也只是说轻易不会开除你,但是忙不忙就要看你运气了。银行软件开发中心有的组忙起来完全不虚 PDD。
和同行相比,工商银行的软件开发中心算是技术最好的了。工行喜欢招应届生,社招进来得比较少。刚进来的应届生职级是助理经理,税前年薪差不多是20万左右(到手15-16万吧,加上年终奖和节假日补贴)。工资发放方式稍微有点奇怪,就是每月发八九千,然后留一部分年底一并发放。每月会有饭补,过节也会有节假日补贴(放三天的节日假期给 1000,国庆给 2000,过年 4000)。
这个职级的工资对于在北京工作来说还是有点难顶的,毕竟光跟人合租每月就要花掉两千多了。如果你是本科毕业进入工行,从助理经理升到经理一需要两年时间,硕士只需要一年,这个职级基本上全都能按时达到,不过工资变化不太大。从经理一升到经理二大约要一到两年的时间,这就看你的能力了,经理二以后工资就相对多一些了,经理二绩效不太好的话每年到手能拿 22 万年左右,如果绩效好,可能能拿到 29 万左右。经理二升经理三就完全看你自己能力了,到经理三以后每年到手都能 35 万左右,收入就很可观了。另外在工行发专利什么的也有些奖金,一个专利貌似是奖励 5000.
工行的总行是在珠海。工行在西安、杭州等地也设立了研发中心,都是属于总行的。目前北京这边也一直在动员员工去西安,薪资和北京差不太多。听说西安那边的工行加班比较严重。北京这边总体还好,卷不卷看你组长了,不过你也可以不甩你领导,他们是很难开掉你的,他们能的只是绩效给你打低点,你工资少点。
感觉农业银行的软件开发中心技术比工行差一点,不过工资比工行多一些,刚毕业的应届生税前能到税前25万-32万(这是hr说的啊,我了解到的西安每月税后到手是 1万2,加上年终奖税前能算 20 万的年包,北京比西安稍微多一点点,但是多不了太多)。
农行软件开发中心有个大问题就是工资分配很平均,但是工作量分布不均,有的组十分 养生 ,有的组忙的受不了(越接近客户用的产品线越累)。我的一个学长天天早早就下班了,另外一个同学周末跟我吃个饭都急匆匆的,为了投产要加班到凌晨。目前农行内部的怨气比较大,这点大家在脉脉上也能看出来。农行想要升职还要去考软考。
中国银行软件开发中心算是给钱最少的了,年包15万左右。这钱在北京确实太少了。不过工作是目前几个银行软开里最轻松的,家里不怎么缺钱,只想找个轻松稳定的可以选。
第一年包含试用期,年薪税前总包 26w, 第二年年薪税前总包 31w。加不加班看你运气了,运气好被分到好的组不怎么加班,运气不好就很惨了。在北京工作的话不会被外调,但是在西安等地工作的许多人会被外调。
曾经农行团开的一位领导来我们学校校招宣讲时就说因为银行的工资有限制,涨薪比较慢。所以很多银行软开的职工干几年后就会跑到券商去挣钱。那时我才知道券商居然还招不少程序员。后来我发现中信建投证券是真不错,北京这边学校招生进来月薪 18k ,年终奖 6 个月,虽然薪资还是不及互联网公司,但是涨薪速度相比于其它国企央企还是快很多的。另外只有股票开市的日子用上班,加班很少。不过对于学历的要求比较高,必须是985硕士,并且还是本科。
对于其它券商的情况我知道的就不多了,这里给大家提供一个找工作的思路,大家可以多去了解下。
这里说的运营商说的是移动联通还有电信的研究院。移动的工资发放风格和工行有异曲同工之妙,每个月发的工资很少,到年终会一起再发一些。应届生年薪大概 20w 左右,平时工资发一半,年终把剩下的一半发给你。联通在北京的研究院有两个,一个叫联通研究院,一个叫联通软件研究院。我听说的是联通研究院比较好,联通软件研究院比较坑。电信研究院的据说很轻松,但是工资低,没朋友在这里,我不太确定,只是听说。
北京有着数量庞大的研究所,比如航天 科技 系列、航空工业系列、中船舶系列、中科院系列、中电科系列、军事科学院下属系列、工信部下属研究院、中国兵器等等。不得不说计算机相关专业真的是万金油,因为上述研究所,不管他们主营业务是啥,他们全都招计算机相关专业的毕业生,并且招的还不少。
近几年想成为这些研究所的正式职工都需要是硕士以上了,签的本科生基本都是劳务派遣。户口的事放在生活里统一说。
可能家里的长辈听到你去了研究所会觉得很有面子。但是单论软件技术来说,目前研究所是落后于互联网公司的,并且差距还不算小。研究所和互联网公司的办事风格不太一样,互联网公司会把岗位划分的很细致甚至有的互联网公司会无限的细分一个岗位(这点是我觉得不太好的地方,因为划分的太细了,以后跳槽会存在问题),但是研究所的岗位又划分的太粗糙了(从订需求、写开发文档、代码开发、测试、到和客户扯皮这些流程全的你来搞)。
另外因为研究所的大部分领导软件方面技术没有互联网那么专业,所以对工作量的评估不是太准,有时候安排起活来就比较离谱。是否来研究所要想想明白以下几个问题:(1)你家庭的经济情况,至少在北京买房首付家里能掏出来。(2)你的兴趣(如果只想安安静静地写代码,研究所不太合适)。(3)面试通过后你要充分地了解你所在的团队情况,同一个研究所,不同的团队的差别那可大了去了。
总体来说,个人感觉如果你在一个二线城市的研究所工作会比在一线城市的研究所工作舒服。在一线城市去互联网公司干几年攒点钱撤一个二线城市压力没那么大。在北京的研究所工作北京户口是拿了,但是干几年根本攒不下多少钱,一线城市研究所分房这事就不用做梦了,充其量会给你提供一个宿舍,这种宿舍也就是毕业三到五年内可以住,以后就不能住了。相比于二线城市的研究所,一线城市研究所的工资每月多个两三千,但是房价是二线城市的三到五倍,生活幸福感会大打折扣。
我有很多的校友都在航空航天系列的研究所。研究所的具体薪资都比较保密,大部分研究所在给你 offer 的时候不会像互联网公司那样把薪资给你说的清清楚楚并且写在合同上,而是大概和你说个数。而且你入职后两到三个月的薪资往往都很少,等三四个月以后薪资稳定了你才能确定你开多少钱。
航空航天目前效益比较好,算是研究所中薪资比较高的。另外食堂和宿舍都有,如果没宿舍还会有租房补贴。但是挣钱和互联网公司肯定没法比。薪资的话刚毕业的学生每月到手大概是一万出头,工资加上各种补贴年薪差不多税前能到20多万。加班没有加班费,出差会有出差补贴,有的团队出差一天补300,有的团队出差一天补400。所以如果你一个月都驻在外面的话,一个月工资到手也两万多呢。但是一年有个一两月出差还行,有的项目组一年有三分之二时间在外面出差,你会怀疑人生的。其实刚毕业头两年航空航天的薪资和互联网公司差距不大,不过在两三年后薪资水平就会逐渐拉开,研究所薪资涨的都慢。
另外航空航天的研究所是很忙的,所以别想着进来轻松。研究所的忙法和互联网公司不是一种忙法,有的人在工作强度大的互联网公司待过的可能觉得自己 996 和 007 都能抗,来个研究所还怕啥?我是想说你可能想的有点简单了,在研究所写代码只是工作的一小部分,让你烦心的事多着呢。只是说你如果不把领导打了的话,他不太容易把你开掉。另外研究所有个好处是比较支持在职读博,如果你的组不是太忙,提升下学历是个不错的选择。
工信部下属的研究院整体上都不错,就比如信通院(中国信息通信研究院),如果你对这个单位陌生的话你可以看看你的行程码下面服务提供商排在第一个的是谁。信通院是制定标准的单位,也是监理单位。在信通院的话代码就很少写了,更多就是写文档了,不过信通院这种地方的视野肯定高一些。薪资的话信通院每个职工薪资差别很大,刚进去工资很低,可能就四五千块钱,但是薪资每个月都会变化,然后稳定在一个数。薪资低的每月到手有一万出头,但我知道每月到手两三万甚至更多的也是有的(不是领导啊,只是职工)。
中科院系列下计算机相关最强的三个所就是自动化所(搞 nlp 的应该都听过宗成庆老师)、软件所、计算所。另外还有信工所、电子所也还凑合。整体待遇上,中科院系列的待遇不如航空航天系列的。你可以把中科院系列的研究所完全的想象成一个大学(嗯,不用想象,确实是个大学,中国科学院大学嘛)。每个团队就是你们研究生的实验室。基本上就是一个大老板,带几个小老板,再带几个职工,另外再配几个中科院的学生。课题组想要挣钱也是需要大老板出去拉活,然后小老板带着学生去干活。工作方式和技术水平和你们研究生的实验室一模一样的,就是多了一些硕士博士职工罢了。
中科院系列各个所和各个课题组的待遇以及工作方式差距特别大,工资有少量的比较高的(我说的比较高是能和互联网公司持平),大部分刚进来的硕士应届生工资差不多就是八九千,博士一万多点。有的所提供宿舍,有的所连宿舍都没。总体上来说想在中科院有好的发展,需要你是博士,然后多发论文。等你成为小老板后,且团队可以项目成果转化,或者孵化企业后你的待遇会有比较大的变化。
中电科系列的待遇比航空航天系列稍差,比中科院系列稍强一些。我感觉中电科系列的加班强度比较高,认识的几个在中电科系列的经常 996 甚至 007,还经常出差。待遇的话基本工资也是每月1万出头,然后出差也是有出差补贴,每天300 或者400,具体要看团队。感觉工资主要是靠出差补贴堆起来的。大部分下属院所会提供职工宿舍,中电科系列下属研究所风格差别很大,好起来是真好,坑起来是真坑啊。
中国兵器系列计算机相关专业招的不是太多,其实每年一共招的人也不多。我最初对中国兵器系列的研究所有了解是一个所来我们学校宣讲。感觉中国兵器在西安的几个所能算的上是西安研究所的天花板了吧,待遇还不错(和航天504所比我有点不太确定)但是在北京我就不太清楚了。
军事科学院系列的研究所招的职位都是军队文职,也就是说都需要考试的。我上时,听过几家军事科学院下属单位来宣讲,只是有个粗略的了解。军队文职也是上班制的,上班时也是需要穿军装的,下班后的生活不干预。工资有个很详细的职称对应表,硕士进去我记得是一万出头。想有好的发展最好去抓总单位,因为上面提的很多研究所想要项目都得抓总单位批。不过抓总单位的科研岗都要博士了,硕士进去只能是支撑岗位。
北京来我们学校宣讲的几家军科院下属研究所都是承诺户口以及包解决子女上学问题的。当时说的是博士进去副营级,会提供一个四十平左右的房子住。硕士就是普通两人一间的宿舍。
北京具体的房价、 美食 教育等情况我放到下一篇讲北京互联网公司的文章中好好去讲下。这篇文章只讲一个事,那就是 北京户口 。北京户口的主要用处就是子女教育问题,其它的一些好处就是有北京户口可以申请共有产权房还有摇车牌等。应届毕业生是最好搞定户口的时候了,如果你能进这篇文章中讲的这些单位,大概率你是有户口的。不过拿户口的同时都要签一个五年的服务期合同,违约金每个单位不一样, 20万-50万不等,逐年递减。对于应届生来说户口貌似吸引力没有特别的大,毕竟现在自己还顾不过来,也不知道自己子女在哪呢。但是对于已经有子女的人来说,我一提给北京户口的事他们眼睛就亮了。
北京这些年对于户口有也逐渐放宽,一些互联网公司的特殊应届招聘计划也会给户口,另外今年双一流学科的硕士以上应届毕业生都给户口了。
另外想要户口还可以走积分落户,不过想要靠积分落户解决北京户口,就需要你头上有犄角,身后有尾巴了。
好啦,这篇文章就介绍这么多,期待下一篇北京有哪些大型互联网公司和外企吧!
‘贰’ 为什么国内很少有35岁以上的程序员原因不是技术能力
大家都说程序员是吃青春饭,认为程序员是体力活,并且在国内,实际情况看到也的确是这样的,年龄大一点的程序员的确很少,35岁以上的程序员大多都转技术管理或者做架构师了,或者一些已经转行做技术培训什么的,那么35岁以后就不能做开发了么?接下来咱们一起看看答案是否真的如此。
35岁以后就不能做开发了么?
当然不是了,35岁以上是可以写程序的,大家都听说过java之父,詹姆斯高斯林,他是一位编程天才,他出生于1955年,而java这门语言是他近40岁时才创造出来的,就这个事例就证明35岁以后写程序一点问题都没有的,年龄大的程序员往往都阅历更广,经验更深,编程思想更成熟,对技术的细节更敏感。其实从某种意义上来说年龄大的程序员应该更吃香。
为什么国内35岁以上的程序员很少?
上面得出结论是年龄大的程序员更吃香,可是现实中不是这样,起码国内不是这样,那这到底是什么原因呢,首先从这3个维度去分析。咱们把时间按成x轴,随着x轴的延伸,y轴有这样3个指标,一个就是阅历(经验),一个是编程思想,一个就编程的反应速度。随着年龄的增长,编程思想,阅历(经验)是毫无疑问增加的,可能编程反应速度,精力方面是下降的。如我下面的示意图所示。
因此年龄大的更适合一些专门研究技术的公司,工作节奏又不是那么快的,不需要天天加班的公司。不需要天天加班这一点好像不太现实,因为国内的互联网公司,搞技术的不加班简直是太少了,国内的公司对时间节奏要求的很高,国外的一些技术公司更注重程序员的编程思想,经验,而国内的则更注重程序员的编程反应速度,为啥呀,很明显,产出高呀,不需要你有什么高深技术,做一个快速编码的码农就行了,因为行业竞争的压力,你有再好的思想,你慢别人一步,你后开发出来就是死,正因为有这样的互联网环境下才会出现我们看到的景象,35岁以上的程序员很少了。
年龄还小的程序员应该怎么做?
鉴于国内互联网行业的大环境,建议现在还算是年轻的程序员应该想想以下这些事情。
前几年把精力主要放在自己的技术提升上,这个是首要任务,不用老想着怎么升职,只要你有足够的技术能力,以后就不会发愁。如果把这段黄金时期的心思花在其他事情上,那么年纪大一点在职业上就会比较被动了。
其次要刻意锻炼一下自己的沟通表达能力,撰写文档能力,时间管理能力等这些软技巧,为以后向管理岗转型做铺垫,避免中年危机的到来。
要做好资金储备,避免月光族,等到你人已中年,发现还没有任何积蓄,在加上上有老,下有小,外加有职业危机感,那你真的就很崩溃了,如果有一定的积蓄在身,你就不可能这么狼狈了。
“我们相信人人都可以成为一个java开发大神,现在开始,找个师兄,带你入门,学习的路上不再迷茫。这里是java开发修真院,初学者转行到互联网行业的聚集地。"
‘叁’ 找c++方面的职位越来越少,c++程序员的出路在哪
不认可C++方面的职位越来越少的说法。我是一名有十多年C++开发经验的程序员。并没有感到岗位少,反而是招聘越来越难了。
其实有这种感觉也不足为奇。最近几年,程序员这个群体的数量急剧增长。各种培训机构如雨后春笋般冒出来,大部分是教授JAVA或者前端技术,C++相关的培训机构则寥寥无几。其中最主要的原因,如果不是科班出身选择C++语言,学习起来堪比天书。
随着互联网的发展,能短时间将某个idea落地变的越来越重要。JAVA、PHP、python、GO等语言,甚至JS都以其框架多生态好,在竞争中占据领先地位。但是不容忽视的是,其他语言是各领风骚三五年,C++从来没有跌出前五名。可见他们在业界内的地位,用常青树来形容它都不为过。
C++语言最重要的优势是内存自管理。这也是为什么它的框架,乃至类库都非常少的主要原因。内存自管理需要具备操作系统、计算机原理的理论基础知识,是大家觉得它比较难的根本所在。在实时控制,高并发等领域,C++语言的优势非常明显。比如证券行业的交易系统,大多是由C++语言编写。
了解到以上情况之后,题主应该就能明白具体的出路所在。
我们喜欢弯道超车,不喜欢做踏实的工作。所以,我们只关心现成的什么框架啊什么的,基础的没人做。
不得不承认,你说的这种现象确实存在,当今C++的职位确实不如以前,但也不不是说没有出路,只要你够专业,够精通,任何一门语言都还是有用武之地
1.以前因为开发语言相对比较少,而且更多的是进行底层开发以及行业性软件开发,所以c++应用应该说也非常广,特别是visual c++在某段时期还是比较有热度的。而c++在做底层硬件开发,服务程序开发都是有其独特的魅力。这张图是不是特别熟悉,又能做界面,又能做底层。
2.后来开发语言日益增多,而技术和应用也在不断发展,比如后面应用广泛的java,还有当今发展很快的python,无一不是 社会 不断发展的产物,互联网的发展催生了web开发,人工智能的发展催生了python语言,所以其他语言相对而言热度有所降低,导致很多人看不到未来,是不是需要转语言等等。
3.不过c++还是有很多领域应用,很多细分领域和还在使用,另外做服务器端开发还是不错的,现在很多 游戏 服务器都是c++开发的。另外,我不得不说的,语音、视频这方面还是c++,现在很多语音聊天,视频直播,不也是c++开发的吗?所以c++不会过时,继续在擅长的领域腾飞吧
C++语法太过度设计了,里面一大堆平时很少用到的语法,语法又极其灵活很容易出现错误,对使用者的要求比较高。学习成本也很高,做一个C ++项目要有很严格的编码规范来限制编码,从而防范由于对语法了解不深导致的错误。编写详尽的编码规范这也是一件很麻烦的事,加大项目的工作量。因此用c++的项目越来越少了
C++适合开发核心模块,不适合开发应用逻辑为主的项目。
C++语言不会是正方向。怎么说呢,C语言是最佳的的过渡底层学习。工作中都是c++的衍生工具软件,qt几年我学过的,需求在北京还不算少。或者就像大多数说的走嵌入式方向的底层开发,不过只会c++肯定是不够的。总之就像你学java开发,只会java开源软件坑定是不够的,还需要框架项目接口的知识。服务期间怎么连接的,传输过程之类的(我对java不算太了解,勿喷)。
一句话,核心算法都是c++语言写的,高层应用用c++的少了。但是话又说过来,如果你精通c++语言,学其他的语言,只是一星期的功夫而已。
开源项目越来越多,C/C++主要面向的基础组件都比较成熟了,搬砖拿来会用就行。
没有新的理论和平台,基础的东西无需太多关注。只有新方向出现,才需要基础组件的大量更新,这时候C/C++才会短暂性的繁荣。
从C++学 Java JavaScript C# python 都不过是几个礼拜的事情,自己不愿意学习坐在那怨天怨地?
因为golang开始慢慢蚕食c++
‘肆’ 为什么现在的程序员,真正的大牛非常少
简单算个账:近十多年来,中国的各种大学每年有30万计算机相关专业毕业生,加上其他行业的转入,编程岗位每年新增超过20万人,全国的规模大约300万。平均每人年15万成本,大约需要4500亿成本。市场有多大呢?手机万亿级,互联网万亿级,游戏万亿,企业服务市场万亿。至于不足的那部分在哪里呢?中国之外, 还有很多国家。
而IT和编程这种转移成本几乎为零的行业,在世界上任何一个角落都可以占领。以美国为例, 它本国市场规模比中国还大, 却也占领了世界上其它国家包括中国的大部分市场。美国大约有700-800万程序员,编程工资相当于中国的2-3倍,原因正是因为我们不能自给。世界范围来看, 把上面的市场单位换成美元就好了。
当程序员, 确切的说是码农, 是一个见钱最快的职业, 这也就导致现在干这个的特别多,各种培训机构也满天飞。当然, 程序员也是有分水岭的, 这取决于掌握的知识技能的多少。也有一些比较精深的知识,如数据结构算法、编译原理、操作系统、计算机网络、面向对象等这些, 如果能掌握,会让一个程序员的工作效率和质量有巨大的提高 , 也有了向高阶程序员进化了资格 。 然而, 对于一份普通的写代码的工作, 这些东西最多只能算是绵上添花, 掌握与不掌握, 对于饭碗没有本质的影响 。 假如把掌握这些知识作为程序员的入门标准, 那么程序员的数量估计会少一大半。不过话说回来, 不应该说程序员的数量多, 而是整个IT行业的从业人员多, 像做设计、产品、运营这方面的人, 数量不比程序员少吧。
‘伍’ 为什么国内程序员都很少进行代码重构
说到代码的重构对于国外的程序员提到的比较多,特别是大型的开源工程,基本上一个模块或者函数的实现会反复的修改,一个文件能被修改成千上万次,曾经订阅了linux内核组的邮件,每天的收到的修改文件成千上万,有时候一个文件都能被修改上百次,对于文件修改最疯狂的是google的chrome源码,重构的次数,让你觉得每天都在重写但是功能上感觉越来越流畅。为什么我们周围的程序员绝大部分时间做的不是这样的事情。
为啥从直觉上觉得老外的写的代买质量比我们的要高,我们国内的程序员绝大部分的时间是在赶进度,准确的来讲忙着增加功能和修改bug,其实也从侧面反映出为什么国内出不了android以及Linux等影响深远的 科技 创新,从全球开源代码的占比就可以看出,差距还是很巨大的。
为什么觉得老外写的代码比我们的强?
1.国内软件发展主要阶段还在解决有没有,还远谈不上强大
中国的软件经过近几十年长足的发展,已经取得了巨大的成就,特别在互联网行业已经有几个巨头跻身世界前列了,最近炒的很热的脸书的用户数据泄密事件,作为当事人扎克伯格,也在论述中提到中国有几个很厉害的互联网公司,这说明中国在互联网领域还是取得了相当大的成就,但是在一些核心的领域,或者门槛很高的领域差别还是非常巨大。
任何事情在发展的初级阶段首要考虑的是不是有没有,所以如同创业初期的公司会选择短时间内搞出来个产品,哪怕是不成熟的产品,然后快速的投入市场,根据市场用户的反应同步追踪问题,等到产品差不多稳定,并且产品在市场上有了一席之地之后,后续的事情就要考虑优化功能,对里面的代码或者产品的性能进行全方面的提升,目前国内大部分的互联网一般比较年轻,还在解决有没有的问题,相信随着时间的推移以及国内软件的发展,也会有大量的高质量的开源框架代码出来,但这一切都需要很长的时间。
所以国内的程序员大部分时间都是在赶进度和根据需求完成功能代码。
2.软件产业的底子还很薄弱, 历史 积淀还不够
举个很典型的例子,现在很多国内的程序员到了30多岁就开始考虑后续的转型了,因为后面的轻轻人会带来很大的冲击,所以大部分的30多岁的程序员都在考虑自己后路,都要考虑转型的问题。老的有经验的程序员反而转型去做管理或者合伙创业了,哪有几个还在安心搞技术,年龄大了还在搞技术的还被人鄙视,觉得自己没有出息。
但是在国外写代码是一种很常见的职业,和别的工种没有多大的差异,40,50岁了写代码也是比比皆是,做软件是一种技术工种,经验的占比是很高的,所以老程序员写出来的代码更加有深度,稳定性更高,一切的根源还是产业的发展不够成熟,需要时间和 历史 的积淀,从这方面讲国内的软件整体产业还是比较薄弱,从业人员的整体素质和工作氛围还有待慢慢的成熟,周围都是有经验的程序员在带领着如何去重构代码,如何提升代码的质量,而国内大部分的程序要还是被产品经理鞭策着增加需求和修改代码。
3.公司的文化差异
目前很多的中国技术公司更多的追求的是短期利益的最大化,在基础软件的投入远远不够,毕竟基础的投入很难短期见成效,在一个具体的场景,有一个产品主体的功能已经实现了,也能在用户那边投入使用了,一般的公司很难拿出时间来,让你做代码的重构,毕竟这种事情很难直接产生经济效益。这与公司本身的文化差异有很大的关系,重视的技术或者懂得技术的公司对于这方面相对比较重视,反之就差很多。
小时候课本上就说着我们落后100年,所以高楼大厦不是一天建成的,所以在追赶的道路很漫长,所以承认存在差距,然后努力加倍的去追赶。
Time is money. 以目前国内互联网的情况,需求应接不暇,程序员基本上都是被需求与业务赶着走,时间非常紧张,在这种情况下,程序员很多时候唯一的选择就是赶紧实现需求的功能。所以,一个项目下来,代码基本上都变得非常非常的“垃圾”。
也有很多程序员想过在项目结尾的时候进行代码的重构,基本上每个程序员也都知道重构代码的好处,但是并不代表着真正能做起来。还是那个原因,国内互联网的速度太快,需求应接不暇,做为程序员,基本上没有时间来做这件事情。
而另外一个原因是跟团队负责人有关。若团队负责人能够意识到重构的好处,那么他可以为此单独划分一段开发时间出来,让大家分别负责一个模块进行重构,这都是可以安排做起来的。这也需要团队负责人如何在需求人员的需求与代码质量的进度上做一个平衡,进行统筹安排。
最后我想说一个可能很少意识到的原因,那就是人员流动问题。国内互联网目前人员流动非常的大,尤其是北上深这样的互联网发达的城市,基本上是平均两年就会走一大波人,在这样的情况下,也会考验从业人员的职业道德,即我到底要把代码写的多好,要把代码的可维护性做到多好,其实这都是从业人员自身需要考验的问题,因为完成一个功能很容易,但是要考虑的全面就是另外一回事了。而人员流动带来的另一个问题就是有一些代码是很难看懂的,即有些代码在人员离开后成为了“ 历史 ”,无人敢动。这也会阻碍着软件的重构工作的进行。
从我所讲的这几种情况来看,重构其实是大家都能知道的好处,但是真正实施起来却又有现实的约束,需要负责人来做这样的统筹安排与推动。
成本太大
大多数软件产品的开发都是经过了很多开发人员的付出,如果进行代码重构需要了解产品、了解框架、了解代码逻辑,这个过程会花费大量的时间和人力成本,对于企业来说,效益是第一位的,与其花费精力进行效益不大的产品重构,不如去承接更多的项目来的实在。
领导决策
由于大部分企业的老板都是非技术人员出身,他们更关注效益和客户,为了符合企业的发展,在进行产品开发时会更多的采用新技术来吸引客户,花费精力重构代码不如开发一套新产品或者开发更酷炫的效果更具有实在意义。
代码规范不足
由于国内互联网较之国外起步较晚,很多企业发展时间较短,加之人员流动比较大等多方面的因素,很难形成标准、严谨、行之有效的代码规范,所以很多技术人员在开发时都是根据个人风格习惯在开发,等其他人接手代码时,缺少相关标准和文档,很难理解代码逻辑,花时间去了解代码、重构代码不如直接推翻重做来的方便。
客户定制化需求
部分企业创业初期对企业信息化是不够重视的,只有企业发展到一定程度才会考虑信息化建设,而由于业务的限制,大多数标准化的互联网产品都很难满足企业的实际需求,需要进行大量定制化的开发,对于互联网企业来说,即使产品开发足够完善,在实际项目中也需要进行扩展,倒不如直接在项目中进行调整。
程序员的发展限定
在国内很少有终身的程序员,大部分都会逐渐转向销售、售前、项目经理、产品经理等岗位,而这些岗位则需要了解业务、了解客户,对技术的需求反而不会太高,所以与其花时间去专研技术不如将更多的精力用在业务和项目层面。
代码能够重构对底层框架要求深度掌握、且代码框架本身要足够灵活,而国内绝大部分技术人员都是停留在对框架的使用层面、少数可以完善、结合使用,极个别的在做同语言山寨或者换一种语言重写,能够对产品体系进行把握、与时俱进扩展实在是凤毛麟角。随着国家的经济提升、IT行业逐渐成熟,在我国这么多IT公司基数下,即便是凤毛麟角的概率,重视基础框架、积累萃取、不断迭代完善的一些技术公司也会慢慢崭露头角、涌现出来的。
【国内程序员很少进行代码重构】,这个现象虽然没有什么调查统计,不过我写了十多年代码,也发现身边的程序员大多数是这样的,【宁可写新的代码,也不愿意重构老代码】。下面我也谈谈自己的看法:
系统没有问题,就是最大的功劳
我见过的大部分的传统行业的软件公司或IT部门是这样的(互联网公司不太了解),“只要系统稳定,那么就是最大的功劳”,而保持系统稳定最好的方法是什么? 就是尽可能的不要动系统!
可能很多人不能理解,但很多公司确实是这样,甚至公司对项目的考核标准中,项目有什么突破的权重很低,是否有生产事故的权重很高。所以很多“机智”的项目组成员,千方百计的不接需求,或者把需求推给别的项目组。在这种单位里面,别说重构了,新代码都写的不多。
测试覆盖度太低,重构代码没办法保证质量
代码重构,很重要的一个问题:“重构后的代码谁来保证?如果影响到原有的功能怎么办?”
这时候很有效的一个方法,是使用各种自动化的测试来保证重构代码的质量。
但是,大部分公司,不管是单元测试还是其他的自动化测试,都是不健全的,甚至是没有的。所以只要不是被逼不得已,程序员宁可重新写一个方法,也不愿意重构之前的代码。
其他
进行代码重构不是一件容易的事情,务必需要对需求熟悉;对代码 历史 变更熟悉;对代码框架,模块熟悉;对产品更新迭代做好风险把控,时间成本把控……
进行代码重构需要能力非常高,责任心非常强的人进行,甚至需要一个优秀的团队完成。
为什么要代码重构?理由一大堆,我认为主要有两条,一是原代码已不适合扩展新需求,二是原代码已拥肿不堪,乱七八糟。
为什么很少重构?除了上述分析外,还有其他因素,如人员流动快,原团队原作者早已不知何去何从了。又如需求和业务繁多,完成工作开发都累得半死不活,日理万机似的,哪有时间和心情重构?
谢谢大家。
1.国内程序员技术能力不足以进行代码重构
大量的软件从业人员连编程规范都不熟悉,怎么可能做代码重构?更多的人只会写写hello world,只会拷贝粘贴小段代码,连if else这种语句都写不清楚甚至漏掉逻辑,连面向对象的编程思想都没有,谈何重构?
2.国内程序员的沟通能力说服能力一般。
进行软件重构,必须说服经理,让经理相信重构会带来软件质量的提高和故障率的逐步降低,这样经理才会安排人力进行重构。
3.国内软件开发更注重bug的及时解决
国内软件开发大量的人力被分配到解决短期的某个bug,没人抽时间思考如何长久的彻底的解决软件缺陷,其实解决bug不重要,找到软件的缺陷或者性能低下的地方才重要,这些才是重构的点。国内加班加点疲于奔命式的开发,没人考虑bug率是否长期内能够收敛,总是先解决眼前的问题再说,处于一个永远解决bug的死循环里。
这种工作模式是愚蠢的,不是smart的。
软件开发,一定要动脑子,不要蛮干,这不是耕地,力气大就耕的多。
重构代码的目的说白了,就是让软件开发人员更自由。
谢谢楼主的问题,这是一个我特别想回答的问题?
为什么?因为,第一,我是一个对代码有洁癖的人,受不了一坨,一坨那样的代码。第二,我是一个践行Clean Code 的人,给大家我主要负责的一个项目的一组数据(JAVA),总代码量20万行,UT coverage(单元测试代码覆盖率)82%,代码重复率0.5%,代码规则(sonar)违反(Code issue)0,甚至连最低的违反都没有。
也正是因为我的项目在实践Clean Code上的数据,我经常去给不同的团队做分享,也对团队对这个重构不太上心有一些理解。
大致以下几个原因。
第一,也是最多的,交付压力,大部分人都会抱怨,你看我们有这么多新功能,还有那么多bug,根本忙不过来,哪有时间重构?
第二,重构意识不足,老板,管理人员总是希望这个我们要有,那个我们也要实现?为什么?因为别人有,别人有我们没有可能会造成用户流逝。即使有一些有见识的程序员和老板反应这个重构问题,但是重构从来不是高优先级的。毕竟,现在的软件的生命周期可能很短。
第三,人员流动性大,这个是我听过最奇葩的一个理由,我问一个来听培训的哥们,说你代码写成这样,以后怎么维护?这个哥们说,我也知道难维护,但我明年就跳槽了。
第四,设计上就不需要重构,曾经给一个保险公司做分享,我本人也是做金融相关产品后台的,我就问你们这样写代码,可能三四年以后就非常难维护了,还是要尽快重构。他们的回答是,我们不重构,我们只重写。什么意思那?就是一个系统,三四年以后在写一遍。
第五,程序员本身的问题,可能第一写单元测试,修改命名,修改代码结构,是一件很没有成就感的事情,也是一个没有多少附加值的事情。毕竟现在你去找工作,这个代码质量方面的问题会问得很少。
第六,我见过的我不能反驳的一个回答,我的英文太差,不能很好的命名,而我也不想学英文。
第七,反正我已经实现了功能。
最后,用一句话来提醒程序员们,重构是多么重要。
出来混迟早要还的,挖了坑迟早要填的。
在国内,【重构】这件事是程序员最喜欢做的事,而不是公司喜欢做的事。
但程序员喜欢并不能影响公司的决策,所以,国内的现象就是软件系统很少有重构。
其根本的原因在于,国内的公司所推出的系统大多没有重构的价值。
1、国内的互联网公司存在这样一种快节奏,那就是发现一个有价值的创意,就马上进入开发,开发完成立即上线,并立马推广使用。这是一种快速试错的模式,一旦发现系统在 社会 中没有引起反响,那就马上把系统再下线。这种情况下的系统哪来的重构价值呢?
2、即使一个系统上线成功了,也积累了大量的用户,貌似为了系统的稳定性和性能,可以有重构的机会。但事实上不是,国内公司仍旧不会选择重构,因为重构带不来新的价值。所以,公司多数都会在系统上添加新的功能来吸引新的客户,而不会考虑重构现有系统。
总得来说,引起重构的原因在于能够有持续的价值。没有价值的事,企业当然不会做,仅是程序员的一厢情愿而已。
你只是见到了你所在的公司现象,不代表所有,也不能代表大部分的。
代码重构还是存在的现象
代码设计烂,经常出问题、扩展麻烦、维护心累、数据混乱、结果不清醒、模块划分混乱
就可能要考虑到重构了
呵呵,
老大说:
你赶紧去修复一下这个bug,
还有几个功能没有实现,加班搞一下,
pm 说:
这个功能改一下,
还有这个,界面重新调整一下,
这个业务流,现在不一样了,
客户需求需要多几个功能,
老板说:
这东西下周能出来吗?
‘陆’ 中国的程序员数量是否已经饱和或者过剩
程序员的数量是否已经饱和或者过剩?
任何一个行业,基本都是呈现金字塔结构。处于低端的人很多,越往上人才越少,很多大厂还不是喊着招不到人。
1、未来IT行业会持续发展,C端近几年内用人需求会缩减,B端和高级产品端会加强,对人才技术会有更高的要求,高端技术人才的春天来了。
2、初级人员的确会更内卷。
3、35岁现象短期内不会得到改变或者缓解,会变成各行业普遍现象。35岁会变成一个分割线,变成贫富分化线。
4、油条岗位会变少,低端业务码农,未来堪忧。
‘柒’ 女生适不适合学软件开发
女生其实非常适合软件开发,做一个程序员对于女孩子来说没有任何问题,只不过女生对于这一行业有一定的偏见,所以女性的程序员比较少,正是因为如此啊,物以稀为贵,女性在程序员这个职业上的优势会更大。