程序员之间靠什么拉开差距?

大家好呀,我是飞鱼。大家知道,在现实世界中,程序员间的水平往往都参差不齐。有些程序员水平是真的低,一天到晚不是在制造问题,就是在制造问题的路上。而一些程序员,工作几年就已然成为了团队的核心骨干,解决问题的能力也真的高。程序员之间的差距,说简单也简单,说复杂也复杂。

简单说,就像炒菜一样,同样一道宫保鸡丁,新手可能炒出来就是鸡丁大乱炖。而高手则能炒出色香味俱佳的佳肴。
复杂点说,就像写代码。同样是实现一个用户登录的功能,新手可能直接上手就写,写完发现一堆Bug,还得回头改。高手呢?先分析需求,画流程图,设计数据库,写测试用例,然后才动手写代码。

今天就一起来盘点一下程序员之间的几大差异性。


一、段位划分:从青铜到王者的进化之路

1. 初级程序员

这一群体,一般参加工作没多久,工作经验较缺乏,平时工作中领导一般会给他们安排一些较为简单的增删改查功能。最终他们能在别人的指导下完成一个成型的作品。这个群体的程序员一般都是偏执行者或者被称为工具人。别人让他干嘛他就干嘛,很少自己独立思考和判断。

2. 高级或资深程序员

这个群体他们至少有了3-5年的工作经验,平时工作中能够独立承担起一些复杂的功能需求。可以担任某一块核心领域的Owner,是绝大多数公司的主力军。分到某些任务需求后,他能独立完成需求分析再到详细设计,最后发布上线,线上发现问题也能自己排查、修复。

3. 技术专家

这个群体,要求相对又要高的多。除了技术过硬和有较强解决问题的能力外,还往往需要具备沟通、协调、统筹能力。有时候面对复杂需求,往往需要横跨多个部门协同合作才能完成。而他这个时候也要承担起PM角色,做好链接,把控项目进度,最后成功落地交付项目,拿到结果。


二、差距本质:内功心法 vs 外功招式

程序员之间的差距,说白了就是 内功心法外功招式 的差距。要想拉开差距,就得勤加修炼,不断提升自己。

大家都知道,在国内,百分之90的程序员工作基本都是偏应用类软件产品开发,借助一些成熟的软件或框架。在此基础上,堆砌诸多业务功能,做的都是一些 CRUD 的工作。如果其他能力不精进,程序员的核心竞争力随着年龄增长,会不断减弱,这也充分说明了程序员越老越不吃香的道理。


三、算法实战:每日一题

题目描述

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1:
输入:nums = [2,2,3,2]
输出:3

示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99

解题思路

位运算
如果把所有出现三次的数字的二进制表示的每一位加起来,那么每一位都能被3整除。如果某一位的和能被3整除,那么只出现一次数字的二进制位中对应的那一位就是0,否则就是1。

代码实现

public int singleNumber(int[] nums) {
    if (nums == null || nums.length <= 0) {
        throw new RuntimeException("数组不合法");
    }
    int[] bits = new int[32];
    for (int j = 0; j < bits.length; j++) {
        for (int i = 0; i < nums.length; i++) { // 每一位数字对应的0或1加起来
            int num = nums[i] >> j;
            bits[j] += (num & 1);
        }
    }
    int result = 0;
    for (int i = bits.length - 1; i >= 0; i--) {
        result <<= 1;
        result += bits[i] % 3;
    }
    return result;
}

转自:月伴飞鱼