写在前面

嗨,大家好,我是江涛同志,今天跟大家分享的是程序员转业的故事和想法。由于国内内卷的就业环境,“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的解决方案-源码

  1. // 倒入相关的包
  2. const xlsx = require('node-xlsx');
  3. const fs = require('fs');
  4. // 解析对应的xlsx文件
  5. const sheets = xlsx.parse('Performance Report .xlsx');
  6. // 定义缓存每个sheet里的内容变量
  7. const cach = {};
  8. // 定义缓存根据Device Sub ID拆分子sheet的变量
  9. const deviceSubIdCach = {};
  10. // 定义清洗后的数据
  11. const freshData = [];
  12. // 缓存读取所有的表
  13. for (const sheet of sheets) {
  14. // 检测原表格哪些数据有值
  15. // if (sheet.data.length > 0) {
  16. // console.log(sheet['name']) // 1 2 3 20 Performance Report
  17. // }
  18. cach[sheet['name']] = sheet['data'];
  19. }
  20. // console.log(cach['Performance Report'][1]); // [ 'Device Sub ID', 'Performance Parameter', 'Parameter Value', 'Time' ]
  21. // 读取sheet Performance Report里的内容
  22. for (const rowId in cach['Performance Report']) {
  23. // console.log(cach['Performance Report'][rowId]);
  24. if (Number(rowId) > 1) {
  25. const [index, ...rest] = cach['Performance Report'][rowId];
  26. if (index !== '0') {
  27. if (deviceSubIdCach[index]) {
  28. deviceSubIdCach[index].push(rest);
  29. } else {
  30. deviceSubIdCach[index] = [rest];
  31. }
  32. }
  33. }
  34. }
  35. // console.log(deviceSubIdCach['1']);
  36. // 清洗表里面的内容
  37. let round12 = [];
  38. for (const key in deviceSubIdCach) {
  39. deviceSubIdCach[key].sort((a, b) => {
  40. return new Date(a.slice(-1)) - new Date(b.slice(-1));
  41. });
  42. freshData.push(
  43. JSON.parse(
  44. JSON.stringify({
  45. name: key,
  46. data: [
  47. [
  48. 'ID',
  49. 'CPU (average',
  50. 'CPU (max)',
  51. 'Radio Module 7 DL Output Power',
  52. 'Radio Module 6 DL Output Power',
  53. 'Radio Module 5 DL Output Power',
  54. 'Radio Module 4 DL Output Power',
  55. 'Radio Module 3 DL Output Power',
  56. 'Radio Module 2 DL Output Power',
  57. 'Radio Module 1 DL Output Power',
  58. 'Radio Module 8 DL Output Power',
  59. 'TIME',
  60. ],
  61. ],
  62. })
  63. )
  64. );
  65. for (const data of deviceSubIdCach[key]) {
  66. const [parameter, value, time] = data;
  67. if (round12.length === 10) {
  68. round12.push(value, time);
  69. if (round12[0] === key) {
  70. freshData[key - 1]['data'].push(JSON.parse(JSON.stringify(round12)));
  71. }
  72. round12.length = 0;
  73. } else if (round12.length === 0) {
  74. round12 = [key, value];
  75. } else {
  76. round12.push(value);
  77. }
  78. }
  79. }
  80. // console.log(deviceSubIdCach['1'])
  81. console.log(freshData[16]);
  82. // 生成清洗后的文件
  83. const buffer = xlsx.build(freshData);
  84. fs.writeFile('result.xlsx', buffer, (err) => {
  85. if (err) {
  86. console.log('Write faill: ', err);
  87. return;
  88. }
  89. console.log('Write completed');
  90. });

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

人生感悟

身体是革命的本钱

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

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

尽可能多地去寻找快乐

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

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

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