大家好呀,我是飞鱼。大家知道,在现实世界中,程序员间的水平往往都参差不齐。有些程序员水平是真的低,一天到晚不是在制造问题,就是在制造问题的路上。而一些程序员,工作几年就已然成为了团队的核心骨干,解决问题的能力也真的高。程序员之间的差距,说简单也简单,说复杂也复杂。
简单说,就像炒菜一样,同样一道宫保鸡丁,新手可能炒出来就是鸡丁大乱炖。而高手则能炒出色香味俱佳的佳肴。
复杂点说,就像写代码。同样是实现一个用户登录的功能,新手可能直接上手就写,写完发现一堆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;
}
转自:月伴飞鱼