《程序员的自我修养》

简介: 从程序员的群体基数,自我成长,职业发展,开源文化等多方面介绍程序员这个“物种”,希望能够对刚刚进入或即将进入这个行业的同学有所帮助。

image.png

"编程不仅是一项技能,更是一种生存手段,同时也可以是一部哲学,或者一门艺术,取决于开发者自身,你认为it是什么,it就是什么"
——希望这次分享能给大家带来一些思考,顺便祝各位程序员节日快乐。

前言&背景

各位同学大家好,近期在准备给刚入职的小伙伴做培训,纠结了许久,一方面不确定可以教给他们什么,另一方面不知道他们是否会感兴趣,反复思考后才有这次分享,我们今天不聊技术细节,聊聊程序员的自我修养。

程序员群体介绍

首先引用一下IDC在2014年发布调查报告《2014 Worldwide Software Developer and ICT-Skilled Worker Estimates》

幻灯片3.png

在这篇报告中可以看出,2014年全球软件开发者和ICT从业人员一共2900万,其中专业开发者1100万,业余开发者750万。在这些开发者中,排名前三的国家分别是:美国(19.2%)、中国(10.1%)、印度(9.8%),专业开发者全球分布的情况是:美洲占32.59%,欧洲+中东+非洲占30.39%,亚洲+大洋洲占37.02%。

虽然这份报告已经很久远了,但IDC出具的调查报告还是比较权威和客观的,能够反应当时的实际情况,中国的开发者(程序员)人数在全世界也属于头部位置,我们再来看看国内的情况。

幻灯片4.png

根据工信部给出信息,2020年我国软件业从业平均人数 698 万人,不过软件行业的从业人员不单单只有和程序员相关的岗位,有可能一些中后台的职能部门也计算在内了,那么目前中国程序员数量有多少呢,看到博客园的数据统计后我感觉200-300万这个区间还是比较客观的。

我们再来看看大厂的情况,中国市值最高的10大互联网公司,有多少个程序员员工?

幻灯片5.png

根据网上公开数据查询得出:阿里 4万+,腾讯 3万+,百度2万+,美团 1万+,京东 1.8万+,拼多多 2000+,贝壳 3000+,小米6000+,网易 1万 +,好未来没有查到。

但这里没有包含一些互联网或者科技大厂,比如华为、中兴,比如字节跳动、蚂蚁集团和滴滴打车等。粗略统计TOP 10 公司可以占据中国研发人数的5%左右。

还有《2020中国程序员调查报告》非常有必要和大家分享一下:

幻灯片6.png

  • 从程序员的性别上看男女比例在9:1,虽然女性从业者的占比还是非常少,不过最近些年一直在提高,这里和大家说一下我刚工作时的情况,程序员主要分两种,一种就叫做“程序员”,另外一种叫做“女程序员”,不是性别歧视,是女程序员真的非常稀有。
  • 程序员的平均年龄在25-29岁之间的占比最多,接近40%左右,说明程序员还是偏向年轻化的。
  • 工作年限方面1年工作经验的同学有很多,但综合来看2-5年工作经验的占据了近一半人数,这部分人可能是IT公司研发序列的中流砥柱。
  • 程序员的“地狱”分布,北京的程序员集中程度还是具有压倒性优势的,其次是广东省(深圳),然后才是上海,接着是浙江省(杭州)。

幻灯片7.png

  • 关于程序员经常被叫做“单身狗”,其实是有数据依据的,报告给出的数据是单身人群在45%。
  • 程序员的公司属性,大多数的程序员还是在民企工作的,占比72%多,国企不到10%。
  • 程序员相比IT公司的其他岗位,个人觉得还是比较稳定的,所以跳槽率也不是很高。
  • 因为去年疫情的影响,可能有些公司会有裁员的动作,但90%的程序员认为并没有受到影响。

下面我们来看看大众眼中的程序员是什么样的,程序员的终极目标就是格子衫自由?

幻灯片8.png

其实程序员也可以是这样的,本人已征求这两位同学的同意,但自拍照不可用于其他用途。

幻灯片9.png

当你看一个人的言谈举止可能是搞艺术的,他可能是个程序员,当你看一个人的穿着打扮可能是玩摇滚的,他可能也是个程序员,当你再看一个人的从头到脚都散发着程序员的气质,那他一定是个程序员~。

多数程序员都喜欢自嘲,经常以“码农”、“IT民工”自居,直到今年8月份到被国家人力资源和社会保障部“官宣”。

幻灯片10.png

关于“新生代农民工”,官方给出的明确定义为:出生于20世纪80年代以后,年龄在16周岁及以上,在异地以非农就业为主的农业户籍人口。

换句话说,新生代农民工的定义,和你的工作性质、收入是没有关系的。另外,农民工这类群体,一直承担着国家城镇的基础设施建设,他们会比其他行业付出更多体力劳动,同样也是值得尊敬的群体。况且,你也不一定赚的比人家多。

接下来,我们来思考两个问题:

幻灯片11.png

关于第一个问题,经常在知乎能看到类似的问题,但是我们在一些招聘网站上查询相关岗位就会发现,上面提到的大厂几乎都在招聘,并且在这次疫情的冲击下,这些大厂的裁员信息并不多,反而有的公司(比如字节跳动、华为等)仍然在大量招聘,翻看这些招聘的JD就会得出一个结论:高级程序员的数量仍然非常的紧缺。但是同样面临着一个问题是,现在很多刚毕业或者刚培训机构出来的程序员,发现工作并不是那么的好找?这说明一个问题:初级程序员竞争比较激烈,也就说刚入门的程序员比较多,导致竞争压力比较大。综合来看的话,就是初级过剩,高级紧缺。

第二个问题,很多刚进入这个行业的新人,都有这样一个疑问,会不会过上几年整个行业就凉凉了。可以肯定的和大家说,只要人类文明不倒退,IT和互联网仍然是朝阳行业,并且未来10年甚至50年仍然都是。 尤其我们这一代人对此十分坚信,因为我们经历的从电子商务、移动支付、共享经济、生活服务,见证了人们的衣食住行等方方面面都被改变了。中国互联网满打满算也不到30年,这才哪到哪呀,紧张个毛钱,未来有很多事情需要程序员去做,如果真的有志从事这个行业,只需要加速往前冲...

程序员的自我成长

编程语言是程序员的“内功”,至少要掌握一门编程语言,从熟练使用,再到逐渐精通,最终融会贯通。

为什么这么说呢,因为很多编程语言的底层原理是想通的,掌握和精通一门编程语言后,学习其他语言将不再是一件难事。

TIOBE刚刚不久发布的榜单让我很意外,因为在大多数人的印象中也包括我自己,Java和C是常年霸榜的两门语言,但是就在今年10月份,Python从第三名直接跳跃到第一名,成为当下最热门的编程语言!TIOBE的官方发言:“20 多年来,我们又迎来了一位新的王者”,恭喜Python!

幻灯片13.png

很多同学可能会在一些网站会看到,编程语言也是有鄙视链的,什么“写汇编的看不起写C和C++的,写C和C++的看不起写Java和Python的,写Java和Python看不起写C#和doNet的,写C#和doNet的看不起写Php的,而Php又说自己是世界上最好的语言”,诸如此类各种版本,奉劝大家就当做笑话,听一听乐一乐就可以了,因为编程语言本身就没有可比性,每个编程语言的特性、场景、解决的问题都不一样,只要这门语言还存在,还有人在用,那这门语言就是有用的,“存在即合理”,如果非要比较的话,去看看哪些技术更接近基础科学,因为越底层的技术,门槛越高,越靠近鄙视链的顶端,比如数据结构和算法,它们是程序员的“内功心法”,对内功心法理解的越透彻,你内功修炼的层次越高。

“工欲善其事、必先利其器”,熟练使用开发工具是程序员的基本技能。

软件开发过程中,会用到各种各样的工具,这里不得不吹一下JetBrains的全家桶,真正面向程序员的IDE,非常智能和友好,建议使用正版。

幻灯片14.png

如果有些同学对这些工具还比较陌生的话,我换个角度来讲,“王者荣耀”或“英雄联盟”大家都玩过吧,这些工具就是你在游戏中使用的英雄,你需要熟悉这些英雄的各种技能,并且熟练使用各种快捷键。

“它山之石、可以攻玉”,熟练运用技术框架和中间件是程序员的必备技能。

技术框架和中间件是软件开发中非常重要部分,简单通俗的说:技术框架是你开发程序时所依赖和使用的第三方组件(VUE/Spring)。中间件是独立于你的应用程序运行,但与你应用程序有交互的组件(MySQL/Redis)。

幻灯片15.png

或者你依然可以按照玩游戏的思路这样理解:
技术框架=Buff,叠了一些buff,你的移动速度变快,说明开发效率提高了,你的防御力变强了,说明程序的健壮性提高了,但是客观的说没有buff也可以的。
中间件=装备,它是一种必然的存在,如何没有好的装备,装备不进行升级,就算你操作再6,走位再性感,也很难抗住敌方使用“流量暴击”。

如何学习一门新技术

程序员是一个愿意学习的群体,或者说是一个不得不学习的群体,如何去学习一门新技术,给大家一些建议:

幻灯片16.png

如何长期的积累技术

一个程序员的幸福是:找一个合适的环境,选择一项可以长期积累的技术,长期积累下去。

幻灯片17.png

如何提升自身软素质

程序员提升软素质才能保持竞争力,某种程度上也决定着程序员的职业生涯。

幻灯片18.png

程序员的职业发展

程序员这个职业,无论在企业内部还是在整个行业中发展空间还是比较大的。

程序员小白通过自己不懈的努力,“混”到了开发工程师,或者中途转向了其他岗位(产品、需求、测试、运维岗等)。再往上晋升有可能成为技术专家(某一技术领域的资深专家,能够解该领域的核心问题),架构师(对系统进行合理设计,提出相应的解决方案,并不断持续的演进和优化),技术经理(主要负责研发团队的管理工作,制定分工和工作计划等),产品/项目经理(关注用户、市场、运营、成本等,对团队日常进行管理),如果有好的机会,可以成为核心管理层(企业的管理层,负责整个企业的经营管理),技术VP/SP(公司的技术副总裁,战略规划、体系能力搭建、人才策略等),CTO首席技术官(能力全面,突出的领导力、文化建设能力、技术实力等),或者成为技术创业者/自由开发者(通过自身的技术能力,自主创业或者未无入职任何企业,并能够养活自己甚至达到财务自由的群体)。

幻灯片20.png

程序员的成长路径也和玩游戏很像,从青铜到王者都是需要漫长的过程,需要锻炼你的操作,意识,战术,团队协作等等。当然也可以找人带你上分,这个人就是你们在的公司里导师,当有一天你达到了你导师现在的段位了,你也开始带人上分了。

当然程序员的发展也不仅限于这些,每个人的成长路径可能都不一样,以上只是给大家作一个参考。之前看过一个段子和大家分享一下:“一个程序员每天都繁忙于写代码,但他代码写的很有特点,形容一下就是大彻大悟,一花一世界,一行一BUG,他最终看清现实出家了,找了个香火不错的寺庙当住持,现在年薪百万”。

如何反内卷?总结了一下优秀程序员的13素养:

IT行业的内卷其实已经不是一天两天了,惯性加班,末尾淘汰,KPI绩效等等,这些东西在“内卷”这个词出现之前就已经形成了。不想躺平的话,如何反内卷或者不被卷到,来看看优秀程序员的13素养:

幻灯片21.png

给大家简单展开一下:

  • 0.扎实的基本功和专业技能:这个不用多说了,大家的共识
  • 1.良好的编码习惯、文档习惯、测试习惯:关注代码的规范性,健壮性,可读性,运行效率,有没有写注释,readme,有没单元测试,甚至格式化
  • 2.团队精神和协作能力:不同岗位之间是否有效沟通,同岗位之间有没有知识分享
  • 3.需求理解能力:有没有get到用户真正的诉求
  • 4.模块化思维能力:你的代码有没有合理的抽象、封装和复用
  • 5.学习、总结、分享的能力 + 6. 解决问题的能力:上一part有提到过,核心软素质
  • 7.不断学习的精神 + 8.追求极致的精神 + 9.保持编程思维和头脑灵活:大多程序员会体现一种工匠精神,追求极致,精益求精
  • 10.充足的睡眠和持之以恒的锻炼 + 11.保持良好的心态:这两点是程序员要关注身心健康,养成自律习惯
  • 12.时常规划自己的人生:在忙碌的工作中,时常关注一下行业动态,为自己努力定好方向,“低头赶路的同时,也要抬头看看天”。

发量和技术成反比?变秃就会变强?

经常有人说程序员的发量和技术成反比,变秃就会变强?其实不是的,科学证明大多数脱发是和基因遗传有很大关系的,而颈椎病才是困扰程序员健康的第一问题,所以从现在开始,保护好你们的颈椎。

幻灯片22.png

再补充说两点,经常会看到有些同学会把IDE的背景色调成黑色或者深色,有可能是为了炫酷,但是深色的背景确实对眼睛的伤害小一些;还有些同学会去跟风买机械键盘,建议青轴和黑轴就不要考虑了,还有带背光的,除了好看没什么用,如果真的感兴趣建议看看静电容的键盘。

我们再来思考一个问题:

幻灯片23.png

这是一个很有争议的问题啊,有人管这个叫程序员的35岁魔咒,分析一下原因主要有两方面:一方面是大多公司对于大龄程序员是有顾虑的,另一方面大龄程序员自己也很迷茫。。。其实不光是程序员,工作十来年的职场人士,这时30-40岁,上有老下有小,各种房贷车贷信用卡,职业生涯可能并不尽如人意,这是个社会现象,一般我们叫这个事儿“中年危机”。也就是说其实这个问题在讨论的是“程序员的中年危机”。

为什么造成这种危机现象,因为每年还有几十万以上程序员涌入这个行业。也就是你们同学们,你们大多数是初级和中级岗位占了绝大部分,这些岗位不需要多高深的技能,也不需要付特别高的薪水,所以如果一些还在从事着基础工作的老大哥们,就没有核心竞争力,没有不可代替性。这些人一直呆在舒适区,不管技术还是管理的,技能都没有提升。而且随着年头增长,他们的对新知识和对工作都没有你们有热情。这些都导致了,这个层级的大龄程序员的职场竞争力不如每年加入到程序员大军的小年轻。这样就是所谓的35岁程序员被淘汰的真相。

怎么打破这种危机,就是尽快的随着年纪的增长,不断上升到上一个层次,那个层次上竞争的人更少,被替代的可能性也更小。刚毕业的程序员,需要跟200万的同行竞争,虽然岗位多,但是竞争大,甚至过饱和了。工作了3-5年,成为高级程序员,只需要跟50-80万同行竞争了,竞争压力小了,议价能力强了,薪水就上来了。如果能努力一把,跳出高级程序员的瓶颈,成为核心开发或者技术专家/架构师,只需要跟8-10万人竞争了,这时你的对手少了很多,这个层级现在市面上还是紧缺资源,能力够了,会有很多机会,高薪水也是必然了。再往上,除了不但努力,还需要好的机会,但是不努力,有机会来了也抓不住。

其实最终发现,限制程序员的根本不是年龄,而是圈层。打破魔咒的办法,只有不断学习,提升能力,到下一个层级。

以前有同学跟我说平时工作上太忙了,天天加班,增删改查做不完,不是再改BUG就是在写BUG,根本没时间学习,怎么办,“种一棵树,最好的时机是十年前,其次是现在”,意识到自己要学习了,永远不晚。这个世界上有一样东西可以做到绝对的公平,就是时间,无论你是谁你一天就只有24小时,取决于你用它来做什么。

代码天堂

GitHub(https://github.com) 全球最大的社交编程及代码托管网站,没有之一。

看看数据就知道为什么这么牛了,6500万开发者,300万组织机构,2亿多代码仓库,财富50强有72%在用。

幻灯片25.png

因为某些不可描述的原因,国内访问GitHub经常超时,考虑要科学上网,才能流畅的使用它。国内对标它的产品是Gitee(https://gitee.com),中文名叫“码云”,建议大家多关注一下,国产开源托管平台~

关于GitHub和Gitee的使用,给大家几点建议:

幻灯片26.png

开源文化

整个IT行业能够高速的发展,很大程度要归功于开源技术。全球来看97%的软件开发者和99%的企业都在使用开源软件,整个产业的供应链中有80%-90%的代码来源于开源。

我们所使用的操作系统,SDK是开源的,我们使用的技术框架是开源的,我们使用的中间件和数据库也开源的,我们使用容器云都是开源的。

幻灯片27.png

聊到开源,不得不提一下Apache软件基金会(Apache Software Foundation),简称ASF,有些同学可能会问,apache不是一个web服务器吗,和这个有关系,apache服务器(基于HTTPd)在建设的时候就是由一群热爱技术的程序员,完全自发的以开放共享的方式,把代码重写与维护的工作有效组织起来,然后这些OG开发者们逐渐地把他们这个群体称为“Apache组织”,就是ASF的前身,他们把这种开发模式叫做The Apache Way:可持续开源之路。

国内的开源文化最近几年才开始逐步成型,一线互联网公司贡献了一些自主开源的技术,但是整个开源生态还处在起步阶段。2020年9月,中国首个开源基金会“开放原子开源基金会”成立了!

幻灯片28.png

基金会由华为、阿里、腾讯、百度、浪潮、招商银行、360等十家互联网企业共同发起组建,对开源项目进行孵化和资助,为开源项目找到更多的应用场景和生态合作。

CCTV-2《经济半小时》的一期节目 软件开源里的中国声音 对开源进行了深度的分析,建议大家去看一看国家对开源是怎么说的。

开源的意义与价值

幻灯片29.png

也谈谈我对开源的理解:开源是在整个行业和社会体系算得上是真正的“共产主义”,我们的核心技术可能取之于开源,所以我们也应该回馈开源,给开源社区贡献不单单只是代码,也可以是文档、注释、给开源提issue、修bug、甚至写些技术博客帮助开源推广。很多人参与开源,可能是因为兴趣爱好、对技术有热情,或者是一种使命感和存在感,这些都是开源精神的体现。在这个过程中,你也会有一些收获,比如成就感,知名度,还有就是你会遇到很多志同道合的小伙伴,你们一起成长和提高,未来这些人和资源都是你一生中宝贵的财富。往大了讲开源是贡献给全世界,往小一点说开源是给自己的一份肯定,大仲马的《三个火枪手》里面有句slogan:“人人为我,我为人人(All for one, one for all)”,这就是开源文化和开源精神的内核。

GitHub Archive计划

幻灯片30.png

GitHub要把开源软件代码归档到Arctic Code Vault(北极代码库),这里给大家科普一下,GitHub北极代码库是保存在北极世界档案馆(AWA)中,位于北极圈,一个远离战争、政治和自然灾害的小岛上,而档案馆建设在这个小岛地下250米深的永久冻土中,我们今天所使用的大多数数据存储和硬件设备都有使用寿命,随着时间以及存储数据量越来越大,充其量也只有几十年,而他们将代码保存到特殊材质的胶片上,可以保存至少2000年以上。同学们,这是在延续人类的文明啊!就算哪天爆发世界大战,或者出现生化危机,只要地球不毁灭,我们的代码就还在!!!

结束语

最后我想问大家一个问题:“有没有哪位同学,想要一辈子写代码?”,如果有的话,真的很感谢你的这份勇气,希望你能多年后还能记住今天,记住这个moment,也祝愿你的理想能够实现,终身编程,终身受益。

幻灯片33.png

相关文章
|
5月前
|
开发框架 Java .NET
不惑之年,反思我如何成为一个程序员
不惑之年,反思我如何成为一个程序员
44 0
|
设计模式 算法 程序员
代码能力,程序员自我修养之基石
提高代码能力不是一蹴而就的事,需要我们不断努力,通过持续学习和练习、参与开源项目、阅读优秀的代码、与他人合作、提升解决问题的能力等方式,提高自己的代码能力,为自己为公司创造价值。
228 0
代码能力,程序员自我修养之基石
|
NoSQL 算法 架构师
程序员的自我修行——如何越走越长
程序员的自我修行——如何越走越长
|
Web App开发 前端开发 算法
程序员的自我修养:如何写出高质量的代码
程序员的自我修养:如何写出高质量的代码
192 0
|
人工智能 前端开发 JavaScript
没想到真有此书!!!《一个程序员的自我修养》
最近在看程序员的自我修养 (豆瓣),作者陈逸鹤,一本写给程序员的思考书,其实市面上类似题材的书也不少,比如我看过的另外两本内外兼修:程序员的成长之路 (豆瓣)、程序员必读的职业规划书 (豆瓣),我只是后悔自己看的太晚,很多道理明白的太晚,要多看看此类书,给自己寻找点方向感和动力,我也一直在努力践行书中的一些方法和认识,本文是此书的第一部分内容的归纳,希望对你有帮助,感兴趣的朋友可以买来此书详细学习。
|
架构师
架构师的自我修养
软件架构,指从宏观角度说明一套软件系统的组成和特性。 架构设计与需求分析,概要设计,详细设计最大的区别在于“宏观”二字。要去架构师必须具有大局观,从全局角度思考问题。
184 0
架构师的自我修养
|
设计模式 前端开发 JavaScript
10 - -位优秀前端的自我修养|学习笔记
快速学习10 - -位优秀前端的自我修养
177 0
|
编解码 程序员
程序员的自我修养:论代码规范的重要性
程序员的自我修养:论代码规范的重要性
178 0
程序员的自我修养:论代码规范的重要性
|
搜索推荐 程序员
程序员的自我修养
程序员的自我修养 10
163 0
程序员的自我修养
|
设计模式 算法 Oracle
成为优秀码农的十二项自我修养
  业界有着这样一个普遍的误解:要成为一名优秀的程序员,就必须掌握许多种编程语言和工具。实际情况是这样吗?也许下面给出的十二条建议会让您或多或少地改变对此的认同感。   1.研究数据结构   计算机科学家Niklaus Wirth曾经有过一个著名论断: “数据结构+算法=程序”。 可见,数据结构是计算机程序的基础,它们就像构造房屋的砖头一样。实际上,数据结构决定了程序将如何快速有效地解决问题。一旦使用了正确的数据结构,您的程序方案会变得既简单,又省时。
111 0

相关实验场景

更多