程序员转业指南 – 当文员

写在前面

嗨,大家好,我是江涛同志,今天跟大家分享的是程序员转业的故事和想法。由于国内内卷的就业环境,“996是福报”的恶魔理论,加之对大龄程序员的就业不友好,特别是遇到例如疫情、金融危机、公司财务状况不佳的时候,就可能爆发裁员之类的事情(这个笔者亲身经历过一次,2020年6月入职兔狗科技,7月因为公司业务不行被暴力裁员,是的社会就是这么残酷,当它抛弃你的时候,的确不会说再见的,这对笔者职业生涯造成了毁灭性的打击,心中的阴影挥之不去),居安思危,就引出了今天的话题,有一天,我不做程序员了,我还能干啥? 这个问题是个开放性的答案,说啥都对,但是在很多解里面寻找一个适合自己的最优解,这是我们后面要做的事。我今天的观点是,程序员转业做文员,有一定的优势。

背景故事

最近,有朋友在微信求助涛哥,大致的需求是有一个excel里面有若干个sheet,需要根据其中的一个sheet中的Device Sub ID去进行分类合并到新的按照Device Sub ID命名的sheet里面, 并将其扁平化输出。
1.jpg2.jpg
这里通过找规律,我发现按照时间的顺序,10个为一组追加对应的id和时间并且扁平化的输出到对应的sheet是可以试试写写看的。

这里一共有43144行,假如以工具人的视角,在不考虑人机疲劳的情况下,这位选手处理一条完成的记录需要12秒,那么其大概需要12个小时左右完成这项任务,但是当你以编程的视角去审视这个问题,几秒钟就可以跑出一个我们想要的结果,而且答案是比自己一个个去复制粘贴不容易出错的,这就是我今天想举的一个例子。麻烦社会上的好心的叔叔阿姨大伯大婶,如果你们缺文员,可以考虑一下年龄大的老程序员,他们在处理数据方面,有着得天独厚的优势,谢谢!

解决方案

这里笔者提供一种基于Node.JS的解决方案-源码

// 倒入相关的包
const xlsx = require('node-xlsx');
const fs = require('fs');

// 解析对应的xlsx文件
const sheets = xlsx.parse('Performance Report .xlsx');

// 定义缓存每个sheet里的内容变量
const cach = {};

// 定义缓存根据Device Sub ID拆分子sheet的变量
const deviceSubIdCach = {};

// 定义清洗后的数据
const freshData = [];

// 缓存读取所有的表
for (const sheet of sheets) {
  // 检测原表格哪些数据有值
  // if (sheet.data.length > 0) {
  //   console.log(sheet['name']) // 1 2 3 20 Performance Report
  // }
  cach[sheet['name']] = sheet['data'];
}

// console.log(cach['Performance Report'][1]); // [ 'Device Sub ID', 'Performance Parameter', 'Parameter Value', 'Time' ]
// 读取sheet Performance Report里的内容
for (const rowId in cach['Performance Report']) {
  // console.log(cach['Performance Report'][rowId]);
  if (Number(rowId) > 1) {
    const [index, ...rest] = cach['Performance Report'][rowId];
    if (index !== '0') {
      if (deviceSubIdCach[index]) {
        deviceSubIdCach[index].push(rest);
      } else {
        deviceSubIdCach[index] = [rest];
      }
    }
  }
}
// console.log(deviceSubIdCach['1']);

// 清洗表里面的内容
let round12 = [];
for (const key in deviceSubIdCach) {
  deviceSubIdCach[key].sort((a, b) => {
    return new Date(a.slice(-1)) - new Date(b.slice(-1));
  });
  freshData.push(
    JSON.parse(
      JSON.stringify({
        name: key,
        data: [
          [
            'ID',
            'CPU (average',
            'CPU (max)',
            'Radio Module 7 DL Output Power',
            'Radio Module 6 DL Output Power',
            'Radio Module 5 DL Output Power',
            'Radio Module 4 DL Output Power',
            'Radio Module 3 DL Output Power',
            'Radio Module 2 DL Output Power',
            'Radio Module 1 DL Output Power',
            'Radio Module 8 DL Output Power',
            'TIME',
          ],
        ],
      })
    )
  );
  for (const data of deviceSubIdCach[key]) {
    const [parameter, value, time] = data;
    if (round12.length === 10) {
      round12.push(value, time);
      if (round12[0] === key) {
        freshData[key - 1]['data'].push(JSON.parse(JSON.stringify(round12)));
      }
      round12.length = 0;
    } else if (round12.length === 0) {
      round12 = [key, value];
    } else {
      round12.push(value);
    }
  }
}

// console.log(deviceSubIdCach['1'])
console.log(freshData[16]);

// 生成清洗后的文件
const buffer = xlsx.build(freshData);
fs.writeFile('result.xlsx', buffer, (err) => {
  if (err) {
    console.log('Write faill: ', err);
    return;
  }
  console.log('Write completed');
});

也可以访问项目地址: https://gitee.com/taoge2021/study-nodejs/tree/master/03-media/excel

人生感悟

身体是革命的本钱

健康永远是第一位的,连命都没了,赚钱还有甚么意思呢?所以我们的原则应该是,找一份不太会对身体健康有很大影响的工作,争取在岗打工50年。如果一份工作是每天加班到11点 12点甚至半夜,那我觉得这种是严重危害到身体健康的,不建议也不倡导在这样的资本家环境打工。

我们应该每天抽点时间去锻炼身体,例如程序员这个职业吧,吃完就坐那里敲键盘,缺乏运动就很容易胖,颈椎容易受损,眼睛容易近视度数加深,我也是今年去报的健身房,经过合理的训练和饮食,最终创下一个月8斤的佳绩,希望能保持一种工作和生活的平衡,健康生活哈哈。

尽可能多地去寻找快乐

你快乐了,你做事情的积极性以及你接收事物的能力会好一点,那么怎么去寻找快乐呢? 比如说吃、吃很多你没有吃过且有兴趣的事物,帮助别人你也会收获快乐,运动后洗个澡你也会很快乐,呆在房间唱首歌你也会很快乐,画一幅画你也会感到快乐,打一会儿游戏也会产生快乐。。。。。。

用编程的思维去解决生活问题

传统的思路去解决问题,容易受限于时间、人的精力等制约,但是如果你思考后发现,可以通过编程的思路去解决问题的话,本身是一个获得快乐的过程,同时也收获了成长!