我国程序员数量突破 940 万,开源参与者增速全球最快

大家好,我是苍何。

就在上个月的 20 号,在武汉举行了「2024开放原子开发者大会」,会上工业和信息化部负责人宣布了一项重要数据:

我国软件开发者群体规模已历史性突破940万大关,其中武汉地区有40万

而且在开源上,我国已经成为全球开源参与者数量第二多的国家,其增长速度更是全球第一。

好家伙,940 万什么概念?白俄罗斯一整个国家的人口也才约 915 万。

这个数据可谓是相当的庞大,统计口径就得先明确什么是软件开发者?我问了下 AI,他给的解释是:

软件开发者(Software Developer)是指那些从事软件开发工作的专业人士。他们的主要职责是编写、测试、维护和更新计算机程序和应用程序。

这 940 万中有 Java 开发、安卓开发、IOS 开发、C++开发、前端开发等等,种类很多。

我们再来看看全球开发者数量有多少呢?按照 Evans Data Corporation 预测统计,2024 年全球开发者预计 2870 万。

按照换算的话,940 万占据了约全球的 32.75%。

当然了,这种计算方式没有意义,因为两者的统计口径会有出入。

你以为这个数据就已经很多了,但我估计 2025 之后这个数据会更多,为什么呢?因为新的程序员即将来临

他们或许是不写代码的产品经理,或许是只会写小说的小说家,又或许是路边摆摊的大爷。

用上了 AI 后,人人都变得会设计 APP,开发网站,他们甚至不用写一行代码也能成为新时代的程序员。

我记得前段时间很火的产品经理花生,通过一个简单的不能再简单的 APP 一度爆火。

很多程序员,技术大佬,觉得就这么简单的产品有什么好吹牛的。

但恰恰相反,人家抓住了用户痛点和需求,借助 AI,上线产品,满足了很多人的需求。

所以,理论上,我们也应该把花生这样的产品经理也算是程序员,

未来,程序员不一定只会写代码,只会写代码的不一定是程序员

我的读者中也有很多的程序员,在 AI 来临的时候,外界都在高喊,AI 第一个要革的就是程序员的命,很多人和我反馈说:

不可能。我有经验,我不可能会被取代。

现在的 AI 编程能商业化落地一整个项目的几乎没有,大部分还在起到辅助的作用,所以很多人认为短期内,取代程序员不大现实。

但现在没有,并不代表未来没有。

我很喜欢罗振宇老师今年跨年演讲中引用任总的这么一段话:

蓝军存在于方方面面,内部的任何方面都有蓝军。在你的思想里面也有红蓝对决,我认为人的一生中从来都是红蓝对决的。

什么意思呢?从企业的角度来看,我们需要成立专门的「蓝军」团队,专门来想办法干倒这家公司,发现存在的不足和问题。

于个人而言,我认为更需要蓝军。你看似引以为傲的技术技能,你曾经引以为傲的大厂光环,这些在 AI 时代下,都可能颠覆你的认知,他们或许都将被取代。

我们需要在思想层面组建蓝军,先去各种体验 AI,去想办法为我们提效,想办法去替代我们现在的工作。

自己先革自己的命,总比哪天别人革你的命好吧。

好啦,又说多了,一点小小的认知,如果和你想法有出入,欢迎评论区讨论,不许锤我,长得好看也不行🐶

回归主题。

今天来一道简单的面试算法题,给枯燥的牛马生活加加油😂。

题目描述

平台:LeetCode

题号:3

题目描述:无重复字符的最长子串

给定一个字符串 s,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 **子串** 的长度,"pwke" 是一个子序列,不是子串。

提示:

  • 0≤s.length≤5×1040 \leq s.\text{length} \leq 5 \times 10^4
  • ss 由英文字母、数字、符号和空格组成。

解题思路

这个问题可以用 滑动窗口 技巧来解决:

  1. 定义滑动窗口:

    • 窗口是一个动态范围,初始时窗口为空。
    • 我们用两个指针 leftright 来表示窗口的左右边界。
  2. 维护窗口内的无重复字符:

    • 用一个哈希集合(set)存储当前窗口内的字符。
    • 如果遇到重复字符,就移动 left 缩小窗口,直到窗口中不再有重复字符。
  3. 更新结果:

    • 每次移动 right 扩大窗口时,检查当前窗口的长度是否大于之前的最大长度,并更新结果。
  4. 复杂度分析:

    • 时间复杂度:O(n)O(n),每个字符最多被访问两次(一次由 right 扩展窗口,一次由 left 缩小窗口)。
    • 空间复杂度:O(k)O(k),kk 是字符集的大小(ASCII 字符的数量为 128)。

代码实现

Java 实现

import java.util.HashSet;

public class LongestSubstringWithoutRepeating {
    public int lengthOfLongestSubstring(String s) {
        HashSet<Character> set = new HashSet<>();
        int maxLength = 0;
        int left = 0;

        for (int right = 0; right < s.length(); right++) {
            // 如果有重复字符,则移动左指针缩小窗口
            while (set.contains(s.charAt(right))) {
                set.remove(s.charAt(left));
                left++;
            }
            // 添加当前字符到集合并更新最大长度
            set.add(s.charAt(right));
            maxLength = Math.max(maxLength, right - left + 1);
        }

        return maxLength;
    }

    public static void main(String[] args) {
        LongestSubstringWithoutRepeating solution = new LongestSubstringWithoutRepeating();
        System.out.println(solution.lengthOfLongestSubstring("abcabcbb")); // 输出: 3
        System.out.println(solution.lengthOfLongestSubstring("bbbbb"));    // 输出: 1
        System.out.println(solution.lengthOfLongestSubstring("pwwkew"));   // 输出: 3
    }
}

C++ 实现

#include <iostream>
#include <unordered_set>
#include <string>
using namespace std;

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> charSet;
        int maxLength = 0;
        int left = 0;

        for (int right = 0; right < s.size(); right++) {
            // 如果遇到重复字符,缩小窗口
            while (charSet.find(s[right]) != charSet.end()) {
                charSet.erase(s[left]);
                left++;
            }
            // 将当前字符加入集合并更新最大长度
            charSet.insert(s[right]);
            maxLength = max(maxLength, right - left + 1);
        }

        return maxLength;
    }
};

int main() {
    Solution solution;
    cout << solution.lengthOfLongestSubstring("abcabcbb") << endl; // 输出: 3
    cout << solution.lengthOfLongestSubstring("bbbbb") << endl;    // 输出: 1
    cout << solution.lengthOfLongestSubstring("pwwkew") << endl;   // 输出: 3
    return 0;
}

Python 实现

def length_of_longest_substring(s: str) -> int:
    char_set = set()
    max_length = 0
    left = 0

    for right in range(len(s)):
        # 如果有重复字符,缩小窗口
        while s[right] in char_set:
            char_set.remove(s[left])
            left += 1
        # 将当前字符加入集合并更新最大长度
        char_set.add(s[right])
        max_length = max(max_length, right - left + 1)

    return max_length

# 测试
print(length_of_longest_substring("abcabcbb"))  # 输出: 3
print(length_of_longest_substring("bbbbb"))     # 输出: 1
print(length_of_longest_substring("pwwkew"))    # 输出: 3

复杂度

  • 时间复杂度: O(n)O(n)
  • 空间复杂度: O(k)O(k),其中 kk 是字符集大小(最多 128 个字符)。

ending

一个人可以走得很快,但一群人才能走得更远。苍何的编程星球已经有 6800 多名球友加入了,如果你也需要一个优质的学习环境,戳链接 🔗 加入我们吧。这是一个 编程学习指南 + Java 项目实战 + LeetCode 刷题 + 简历精修 的私密圈子,你可以阅读星球专栏、向苍何提问、帮你制定学习计划、和球友一起打卡成长。

两个置顶帖「球友必看」和「知识图谱」里已经沉淀了非常多优质的学习资源,相信能帮助你走的更快、更稳、更远。

欢迎点击左下角阅读原文了解苍何的编程星球,这可能是你学习求职路上最有含金量的一次点击。

引导图

最后,把苍何的座右铭送给大家:我举手向苍穹,并非一定摘到星月,只是想保持这个永不屈服的姿势。共勉 💪。

更多更全更热门的「笔试/面试」相关资料可访问排版精美的 合集新基地 🎉🎉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员苍何

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值