90后在技术上开始被00后嘲笑了,90后该何去何从?

11,099 阅读15分钟

首发公众号:【赵侠客

前言

事情是这样的,最近我正在做一个项目需要用到Elasticsearch做全文检索,我们组刚好进了一个00后新人,这个项目需求是在原来的搜索上增加很多新的字段,他说:新增加的字段他一会整理下然后添加到老索引上,我当时说:我们Elasticsearch索引里面有好几千万的数据,有一套添加字段的流程,需要重建索引比较麻烦的,大致流程是:先创建一个新的索引,然后reindex老数据到新索引中,然后再将别名重新指向新索引,具体流程可以参考我之前的文章《EalsticSearch添加字段后重建索引方法》。他说不需要这么麻烦啊,直接添加就好了,当时我就愣住了,我说你这有点超出了我的认知,在我的认知里Elasticsearch添加字段都是需要重建索引了,你确定索引里添加新字段不需要重建索引也能被检索到,他被我这么一问也有点不自信,然后我就实际求正了一下,在Elasticsearch7.10里添加字段确实不需要重建索引,就和Mysql添加字段一样,可能是我的知识有点落伍了,所以这里也学习、记录、反思一下。

一、添加索引

1.1 创建索引

第一步我们创建一个user索引,里面添加一个id字段:



PUT /user
{
  "mappings": {
    "properties":
    {
      "id": {
        "type": "long"
      }
    }
  }
}

然后我们添加一条数据:



POST /user/_doc/1
{
  "id":1
}

1.2 添加字段

现在我们需要为user索引添加一个userName字段,类型为keyword



PUT /user/_mapping
{
    "properties": {
        "userName": {
            "type": "keyword"
        }
    }
}

然后 GET /user/_mapping 发现字段已经添加上了



{
  "user" : {
    "mappings" : {
      "properties" : {
        "id" : {
          "type" : "long"
        },
        "userName" : {
          "type" : "keyword"
        }
      }
    }
  }
}

为了验证添加字段是否能补检索,我们添加一条数据



POST /user/_doc/2
{
  "id":2,
  "userName":"赵侠客"
}

▲可以搜索出添加的字段

验证完全没有问题,字段添加上了,也能搜索,事实证明我的知识确实需要更新了,我也不知道为什么我的认知里添加字段是需要重建索引的,而且我身边的开发者也是这么认为的,可能是最初使用者用了这个方法,后来留给我们了,然后大家都觉得添加新字段需要重建索引,也就一直这么用下来了!!!

1.3 历史数据处理

新加字段后新数据都有了userName字段,但是老数据是没有userName字段的,处理方法有两种

  • 老数据从数据库批量同步一下
  • 老数据可以通过_update_by_query设置个默认值

POST /user/_update_by_query
{
    "script":{
    "source": "ctx._source['userName'] = "公众号:【赵侠客】""
  },
  "query": {
    "range": {
      "id": {
        "gte": 0,
        "lte": 1
      }
    }
  }
}

_update_by_query还有很多其它参数,比如异步执行、查看执行任务、取消任务等等,具体可以参考官方文档: Update By Query API

二、修改|删除索引字段类型

2.1 修改索引字段类型

在 Elasticsearch 中,一旦创建索引,就不能更改现有字段的数据类型,因为Elasticsearch是构建了倒排序索引,试想一下比如userName现在是keyword类型,如果我想改成text类型并且使用ik_max_word分词器分词,如果Elasticsearch能支持修改,那么它需要 将所有的历史数据都使用ik_max_word分词一下再重建索引,如果数据量巨大这个过程是非常缓慢,就像Mysql大表修改索引是非常慢的,所以就不支持了。想要修改字段类型,最好的方法应该是按我之前写的使用别名+reindex方式《EalsticSearch添加字段后重建索引方法》

2.2 删除索引字段

Elasticsearch已经建立好的索引数据是无法直接删除一个字段的,不过可以有两种方式来解决:

  • 第一种:是和修改字段类型一样,使用别名+reindex方式重建索引,
  • 第二种

是通过_update_by_query将历史数据中的字段删除掉,这种方法只能删除数据中的userName 字段值,mapping中的userName还是存在的,不过只要数据中没有userName字段其实和删除字段效果是一样的



POST /user/_update_by_query
{
  "script": "ctx._source.remove("userName")",
  "query": {
    "bool": {
      "must": [
        {
          "exists": {
            "field": "userName"
          }
        }
      ]
    }
  }
}

2.3 批量删除数据

既然有了_update_by_query,那肯定就有_delete_by_query,我们可以批量删除数据



POST /user/_delete_by_query
{
  "query": {
    "match_all": {}
  } 
}

同样_delete_by_query也有很多其它用法,可以参考官方文档: Delete by query API

最后总结:

  • 索引可以添加字段
  • 索引字段类型不能修改
  • 索引字段不能删除

三、焦虑的原因

前面写Elasticsearch不是本文的重点,只是我的引言,我是想让真正爱学习、有耐心看到最后的人能看到接下来的内容,本文的重点我是想聊聊对程序员这个行业的一点看法,为什么这个行业大都数人都非常的焦虑,刚工作的焦虑自己技术差,工作几年的焦虑自己要非升即走,工作很多年的焦虑自己会被裁。我觉得主要的原因就和上面写的案例有点关系。数学老师为什么不焦虑,越老越吃香?因为数学老师的教学经验会随着工作年限的增长而不断积累。比如三角函数有很多很难记的公式如:sin(A+B)=sinAcosB+cosAsinB,对于老师来说在刚工作可能25岁的时候下功夫记住,探索出一套自己的教学方法,在他65岁的时间照样可以用,如果每年还能优化一下教学方法,那么他会在教学岗位上干的越来越顺,教学效果也会越来越好,自然越老越吃香。反观我们这个行业,10年前你可能对SSH框架(struts+spring+hibernate)非常精通,可是现在呢?完全没人用了,不仅不能帮助你,写在简历上别人肯定觉得你比较落后,也就是说你的经验是不能一直积累的。就好比今天上面这个添加字段的案列,可能今天来看Elasticsearch不支持修改字段类型,但是5年后你还敢说Elasticsearch不支持修改字段类型吗?你现在学习的知识也许只能使用5年,5年后现在学习的知识很可能不但不能帮助你 还可能拖累你,而且随着年龄的增长,你的学习的时间、精力和效率还在不断的下降,这放在谁身上都会焦虑的。还拿数据老师教三角函数来说,如果每年都有几个三角函数公式被证明是错误,然后会有新的公式来取代,老的教学方法就不适用了,要探索新的教学方法 那我觉得老师可能比程序员更焦虑。

四、破解之法

4.1、职业选择

选择大于努力,第一步我觉得要认清程序员这个行业的现状,不能因为初期工资高就一门脑袋往里扎,就像最近比较火的太原理工大学2024软件工程招60个班,近2000人,有多少人是了解这个行业的,现在不清楚自己是不是适合这个行业,一门脑子扎进去,以后会随着时间的发展会陷的越来越深,想跳出来也会越来越难。所以我觉得前期要定位自己适不适合这个行业非常重要,我觉得有以下特点的人是非常适合这个行业的:

  • 逻辑思维强:编程工作需要严谨的逻辑推理,能将复杂问题拆解成简单的步骤,并用代码实现。
  • 耐心 和专注:编程过程中常遇到调试错误、修复bug等琐碎但关键的工作,这需要有足够的耐心和专注力。
  • 好奇心和学习 能力:技术更新快,编程语言和框架不断变化,适合做程序员的人通常对新知识感兴趣,并有较强的学习能力。
  • 解决问题的能力:编程本质上是解决问题的过程,适合做程序员的人喜欢面对挑战,乐于通过逻辑推理和分析找到解决方案。
  • 自我驱动力强:编程项目通常需要独立完成或长时间集中开发,具备自我激励、主动学习的能力尤为重要。
  • 注重细节:代码中的小错误可能会导致程序崩溃,适合做程序员的人往往对细节有高度敏感性,善于发现和修复问题。
  • 抽象思维:编程需要将现实问题抽象成数据结构和算法,适合做程序员的人通常能在高度抽象的层次上思考问题。
  • 沟通与协作能力:尽管编程看似是独立工作,但在实际项目中,程序员需要与产品经理、设计师、其他开发者等团队成员密切合作,清晰的沟通能力是关键。
  • 抗压能力:程序开发过程中难免会遇到紧急需求、临时修改或技术难题,良好的抗压能力能够帮助程序员在高压环境下保持冷静。
  • 结果导向:编程工作最终是为了实现功能或解决业务需求,适合做程序员的人能够以目标为导向,高效达成任务。

同时我觉得有以下特点的人是不适合干程序员:

  • 不喜欢学习新技术:程序员需要不断学习和适应新技术、编程语言、框架等。如果对新知识没有兴趣,或排斥学习,那么很难跟上技术发展的步伐。
  • 缺乏耐心和细心:编程需要大量的调试和修复错误,这些过程往往繁琐且时间长。如果缺乏耐心或不注重细节,容易导致代码质量低或频繁出错。
  • 逻辑思维较弱:编程本质上是逻辑的工作,如果无法清晰地理解和推理复杂的逻辑问题,或者在面对问题时感觉思路混乱,可能会在编程中遇到较大困难。
  • 不喜欢长时间独立工作:程序员的工作常常需要长时间独立思考和编码。如果不喜欢独处或静心工作,可能难以适应编程的工作节奏。
  • 抗压能力差:程序开发中常会遇到紧急需求、项目延期、复杂的技术难题等高压情况。如果在压力下容易崩溃或无法保持稳定的心态,可能会影响工作效率和结果。
  • 缺乏责任感和自律性:编程工作需要高度的自律和责任感,特别是在解决bug、优化性能时。如果没有足够的责任心,容易出现偷工减料或敷衍了事的情况,进而影响项目的整体质量。
  • 不擅长沟通和团队协作:尽管编程常被认为是独立工作,但在实际项目中,需要与团队中的其他角色(如产品经理、测试人员等)频繁沟通。如果不善于沟通或抗拒与他人合作,可能难以融入团队工作环境。
  • 厌恶重复性工作:编程虽然涉及创新和解决问题,但也有大量重复性的编码、调试、测试等工作。如果对这些重复性任务感到极度厌烦,可能会降低工作热情和效率。
  • 缺乏结果导向:编程最终是为了实现功能和解决问题。如果过于追求完美或沉迷于技术细节,无法在规定时间内交付有用的结果,可能会影响项目进度和团队合作。
  • 对电脑和技术无兴趣:程序员需要长时间与电脑打交道,对技术本身的兴趣是持续发展的动力。如果对电脑操作、技术细节等完全无感或厌烦,难以在这个行业长期坚持。

4.2、职业规划

如果你已经选择进入了这个行业,那我觉得必须要有一个清晰的职业规划,毕竟程序员的职业生涯是比较短暂的,黄金时期可能也就十年左右,我觉得程序员的职业规划主要分为三部分,前期工作三年内、中期工作四到七年,后期工作八年以上,这三个阶段的工作重点或者说目标是不一样的。

  • 前期(三年内)

这个阶段我觉得是:面向技术开发。因为是刚参加工作,技术能力比较差的,工资也是非常低的,所以我觉得这个时期的工作重点是快速提升自己的技术能力,你所做的一切必须要快速的提升你的技术能力,要快速的多做项目、多学习,如果公司升职加薪通道比较窄,我觉得要果断跳槽, 因为你的技术在快速的提升,如果你的工资和职位增速与你的技术增速不匹配,唯有跳槽。

  • 中期(四到七年)

这个阶段我觉得是:面向履历开发。拥有一个好的履历将会受益终生,比如你在BAT待过,比如你参加了某某公司的双十一架构设计,这些写在简历上都是浓墨重彩的一笔。这一时期你的技术基本稳定成长,如果有去大厂的机会,建议还是去大厂。如果没有,我觉得需要在当前公司找到属于自己的位置,要有自己的核心负责产品,能帮助自己稳步晋升,如果没有而且技术也增长不上去、自己学习也没什么动力,我觉得这个时期转型是比较明智的。因为在这时期你大概三十不到,可能没有结婚,没有房贷,不需要养娃,也不用养老人,自己应该也有点积蓄,是工作后最没有压力的时期,所以有大把的时间和精力来寻找机会。如果到了后期,可能有房贷、车贷、养娃、养老人,压力是非常大的,没有太多的空窗期让你转型,你很可能就只能向生活低头,在公司一直苟着,担心自己终于有一天被裁,也会越来越焦虑,这就是所谓的中年危机,这一时期也是避免后期中年危机的最好时间段。

  • 后期 (八年以上)

这个阶段如果还能做技术,我觉得是:面向管理开发。因为这个阶段你在技术方面,如果不是那种不断学习进步,你的技术可能慢慢不如新人,你的技术慢慢变的没有优势,你对公司的价值也在慢慢变小,但是能在公司项目组留下来的都是元老级人物,对公司的环境、 业务、领导、同事、甚至行业都非常的了解,公司是需要一个有经验和公司一起成长的人来管理、带团队的,所以这时期我觉得工作重点是要了解公司的整体业务、行业的发展,要提升自己管理能力,向管理岗位不断靠近。但是管理岗位毕竟是少数,如果自己没有管理能力该怎么办?破解之法 就是:副业。我有很多同事都是副业转正,现在赚的可不是打工人每月这点工资了。作为程序员具体的副业就太多了,常见的如:做外包、做开源、做自建站、写工具、做自媒体,还有一点要重点说的是:程序员一定要关注海外市场,还记录承德的程序员Github接单被没收百万收入并处以罚款的新闻吗?国内是个小市场,只有打开国际视野你才能看到一个更大的市场,会有更多的机会。

最后

以上仅仅是我个人的一些浅薄观点,不一定适合你,需要根据自己的实际情况多加思考,今年的整体行情非常的差,在可预见的几年内可能都不会有太大的转变,未来程序员这个行业可能会越来越卷。我也在一直思考自己在这个行业的定位,和未来的发展方向, 其实也没能找到自己的答案,也是走一步,看一步,再想一步。未来行情是卷的,但是中国在未来十年内随着人口的减少,必须要加大数字化和智能化建设,所以只要你不断的学习,哪怕学习一项新技术生命周期只有五年,未来十年内这个行业找口饭吃还是不难的, 如何互联网赛道太卷,也可以换个赛道,比如去传统行业做数字化,目前传统行业对程序员需求量非常大,互联网过去的都算是高级人才,而且很有可能比在互联拿的更多!!!关注我的公众号:【赵侠客】一个有思想的开发者