【Day30】时间只是考验,心中信念丝毫未减

当你停止拿着别人的地图走在自己的人生道路上,那你的人生才算真正的开始。-Peter Su

因为在过去的铁人赛中很少看到从专案角度来分享技术的文章,所以我选择从这个角度出发,因为我认为了解专案中每个技术选择的动机,与学习一个新的技术一样重要;技术可能被淘汰,但经验会留下来,希望大家会喜欢我这个系列的文章。


/images/emoticon/emoticon42.gif 专案总结

1. 铁人赛的收获

1.1 了解技术文章与技术文件的差异
1.2 深刻体会以前写的程序有多烂
1.3 突破过去程序的盲点

2. 在铁人赛过程中遇到的挑战

2.1 在周末跟连假期发文
2.2 发现有专案有 bug,而且这个 bug 在好几天前的文章就有了
2.3 浏览人数太低,没人在你的文章留言跟按 LIKE

3. 完整专案程序码 & 基础设定说明


1. 铁人赛的收获

1.1 了解技术文章与技术文件的差异

在开赛前两周我将完成的 26 天备稿放在 github 上请朋友帮忙给意见,除了技术上的漏洞外,下面这些回馈让我一度思考到底要不要参加这个比赛

  1. 你分享的技术很有趣,但我有点消化不良
  2. 我现在还在上班吗?你这根本是技术文件吧?
  3. 排版好乱,阅读起来有障碍
  4. 你这个是草稿没错吧?

感谢身旁愿意说真话的朋友们,是你们让我意识到:过去自己写的是技术文件,能让合作夥伴看懂就好了;但是分享到一个平台上你除了要让人看懂外,你还要让人看得下去,与朋友深聊之後对文章做了以下改进:

  1. 加入个人经验分享让文章多一点人味
  2. 在实作的段落加上一些与读者的对话
  3. 多看别人的文章吸收经验,调整排版让阅读变得舒适

关於这方面的技巧大家可以参考 技术写作六步骤 让工程师撰写流畅的技术部落格


1.2 深刻体会以前写的程序有多烂

原本以为这次铁人赛会非常轻松,因为我是把以前写的专案拿出来分享;但开始写文章後就发现自己错的很离谱,因为写文章需要反覆思考每一行程序的意义,这时会发现下面的问题随处可见:

  1. 变数都在乱宣告
  2. 程序中有许多不必要的判断式
  3. 超冗长与意义不明的函式
  4. 注解乱七八糟,导致现在的自己看不懂以前为什麽这样写

针对这些问题,我有统整成一篇 Day3 努力写出更好的程序码,有时你不是一个人在战斗 给大家参考

因为是以专案的架构来写这系列铁人文章,所以我需要在每天都进行各种测试,并且深入的了解官方文件,在这个过程中我深深感受到以前专案的缺点:

  1. 程序稳定性不够,遇到错误时容易崩溃
  2. 对官方文件理解不足,导致执行程序时多了很多不必要的步骤

错误处理的部分可以参考 Day14 爬虫执行时又又又崩溃了吗?来点 try-catch 吧 这篇喔


1.3 突破过去程序的盲点

过去的我认为学习新技术、多写一些专案可以让自己的程序进步,但经过这 30 天的铁人赛磨练後我发现精炼自己的程序可以学到更多东西

  1. 当你每天都在看一样的程序时你才会去思考要如何让它变得更好,而你这些思考与尝试的过程会让你日後撰写程序时多一点 sense
  2. 因为不停的思考与尝试,你可能会发现有些工具打从一开始就选错了;像是 Node.js 发出 request 这个功能我原本是用 xmlhttprequest 来完成,但撰写文章时才惊觉当时选了一个古老的套件,只为了快速完成功能容易造成决策上的错误

2. 在铁人赛过程中遇到的挑战

2.1 在周末跟连假期发文

当身旁所有人都在吃喝玩乐的时候把专注力放在撰写文章上真的很违反人性,在这种内心斗争的阶段我会选择听一些励志的歌曲来提神:

每次听到 “我不怕千万人阻挡,只怕自己投降” 这段,我写文的速度跟意志力就爆发惹!


2.2 发现有专案有 bug,而且这个 bug 在好几天前的文章就有了

说出来不知道该是骄傲还是怕被人笑,我每篇文章撰写时间大约落在 4 ~ 20 小时,之所以会花这麽长的时间是为了处理之前的历史业障,我是一个有点偏执狂的人,所以发现 bug 後会把每天的文章跟 sample code 全部看一遍重新校订,并且全部测试一遍确保都能正常运行

专案的架构使得每篇文章关联性太大,遇到这种 bug 时真的万分想让人弃赛...

https://ithelp.ithome.com.tw/upload/images/20201015/20103256JpExWTlTjx.png

截至今天完赛,我的 github 已经有 400 多次的 commit,这系列的文章真的是我心血之作


2.3 浏览人数太低,没人在你的文章留言跟按 LIKE

我认为这是心理层面的挑战,当你用尽全力写文章而无人关注时你会开始自我怀疑:怀疑是不是自己写的不好、思考难道自己选错题目了吗?

我想这种负面想法应该在不少参赛者心中出现过,玻璃心的我也曾经自我怀疑了好一段时间,但最後我选择把自我怀疑的情绪转化成改善文章的动力,如果文章够好一定会有人来看并乐於分享,如果没人关注那一定是有什麽不足的地方

花若盛开蝴蝶自来,人若精彩天自安排


3. 完整专案程序码 & 基础设定说明

在文章的最後放上这次专案的完整程序码,你只要下载这个压缩档并依照下方的提示完成设定就能体验爬虫的乐趣噜

  • 在终端机下指令 yarn 安装套件
  • windows 需下载与你 chrome 版本相同的 chrome driver 放在专案根目录
  • 要在 tools/google_sheets 资料夹放上 Google sheets 的凭证,申请流程请参考 Day17
  • 调整 fanspages 资料夹内目标爬虫的粉专网址
  • 调整 .env档
    • 填上 FB 登入资讯
    • 填上 FB 版本(classic/new)
    • 填上 IG 登入资讯
    • 填上 SPREADSHEET_ID
    • 填上爬虫执行时间(CRONJOB_TIME)
    • 填上 LINE Notify 申请的权杖(LINE_TOKEN),申请流程请参考 Day27
  • 在终端机下指令 yarn start 执行专案(windows为 yarn win_start)
  1. 如果完全无法执行可能是开发环境没设定好,请参考 Day2 中笔者安装的版本
  2. 如果执行过程中失败请将 tools/initDrive.js 下面这行程序注解,直接看浏览器执行爬虫的过程比较容易确认是哪个步骤出问题了
    options.addArguments('--headless')
    
  3. 如果想帮专案加上排程请阅读 Day24Day26 的文章喔

/images/emoticon/emoticon41.gif 致谢

首先要感谢的是愿意让我分享这份专案的老朋友:Ray,没有他就不会有这 30 天的系列文章,更无法让我重新审视自己程序的缺点

接着感谢愿意看我那不堪入目的备稿并给予意见的工程师们:永远给予支持的凯霖学长、读书会的超强笔记男、爱用好想兔贴图的前同事...,你们的建议让我撰写技术文章的能力上升了一个台阶,至少现在读起来不会反胃了吧XD

特别感谢在撰写文章过程给我排版建议的朋友:部落格男,他是我心中真正的铁人,已经坚持每天写一篇部落格超过 400 天

其实我原本是打算一个人参赛的,但在报名後看到团体组列表中有北科大计算机,就向团长Peter学程序询问我能不能+1,感谢团长的收留,自从大学毕业後就没有这种组队参赛的热血了

最後感谢比赛期间陪伴在我身旁的可爱女友,拥有行销专业的她给我许多下标题的建议

虽然铁人赛在这里告了一段落,但对我来说:技术分享的旅途才刚开始呢


我在 Medium 平台 也分享了许多技术文章
❝ 主题涵盖「MIS & DEVOPS资料库前端後端MICROSFT 365GOOGLE 云端应用自我修炼」希望可以帮助遇到相同问题、想自我成长的人。❞

https://ithelp.ithome.com.tw/upload/images/20210720/20103256fSYXlTEtRN.jpg
在许多人的帮助下,本系列文章已出版成书,并添加了新的篇章与细节补充:

  • 加入更多实务经验,用完整的开发流程让读者了解专案每个阶段要注意的事项
  • 将爬虫的步骤与技巧做更详细的说明,让读者可以轻松入门
  • 调整专案架构
    • 优化爬虫程序,以更广的视角来撷取网页资讯
    • 增加资料验证、错误通知等功能,让爬虫执行遇到问题时可以第一时间通知使用者
    • 排程部分改用 node-schedule & pm2 的组合,让读者可以轻松管理专案程序并获得更精确的 log 资讯

有兴趣的朋友可以到天珑书局选购,感谢大家的支持。
购书连结https://www.tenlong.com.tw/products/9789864348008


<<:  这不是终点

>>:  [Re:PixiJS - Day45] 不同时期的学习 PixiJS 的过程与真完赛心得

Day18 React-Router(三)路由跳转

设置好route後,使用react-router-dom提供的方法,在画面上呈现连结跟操作,来让使用...

从 React 开始,让你的网页material-ui起来 [Day 4] 排版布局Grid

布局排板大板型左右留边 Container 接下来就是这个Container里头需要载运那些内容了 ...

完赛-结论与心得

终於第30天了! 两个连假还要读东西写文章真的痛苦XD 出去玩的回程路上还怕到家来不及 就半梦半醒的...

【前端效能优化】图片懒加载 Lazy Load

图片缓载入是为了避免第一次进到网页载入大量图片,造成网页载入速度太慢,因此非第一个画面看到的图片,可...

Day24 - 将台湾证券交易所的除权除息计算结果表存入 DB

前言 前面已经知道如何抓「台湾证券交易所」的除权除息计算结果表 CSV 档,接下来要处理资料,并存入...