Day 1 - 写「好」程序是什麽样的感觉?

前言

开赛啦!各位朋友大家好,我想会点进这系列文章的人,可能是以下两种:

  • 学习前端、Javascript 2~3 年,想看看 Javascript 可以到什麽更高的地方
  • Javascript 老司机,单纯想看看怎麽会有人敢谈论什麽叫「好」程序

其实,笔者也没有什麽显赫的背景,更拿不出什麽吓吓叫的作品,只是一个偶然在大四选修计算机中心的网页课程,并且努力走了四五年的人,现在在一家新创公司担任全端工程师。

在学习的过程中,其实常常发现,比起周遭的同侪,自己的表现很平凡,往往是下了很多苦功,才做到旁人的举手之劳,但也正是因为成长很慢,我才特别看重「成长」这件事,而学习 Javascript 的过程中,让我非常深刻体会到,成长与蜕变的过程

因为你有发现, Javascript 也在学习与蜕变吗?

Javascript 的神秘面纱

Javascript 算是公认「易学难精」的语言,因为语言本身宽松的特性,要上手并且写出能够运作的程序,比起其他语言快很多,再加上网页就像是一张画布,我们透过 HTML、CSS、Javascript 调和上色,写出来的程序都像是一幅幅绚丽的画,让人充满成就感,觉得自己能够迅速掌握这门语言。

而同时,Javascript 也因为语言宽松的特性,往往在型别(type)上表现得模棱两可,让我们觉得自己好像很了解它,却仍不清楚下一秒它会不会炸掉。再加上 Javascript 许多奇怪的特性,往往在我们写得顺风顺水时,从背後来一记回马枪。

「好」的定义是?

回到我们的主题,什麽叫做「好」程序?

  • 好理解(readable)?
  • 好维护(maintainable)?
  • 好重构(refactorable)?
  • 以上皆是?

看到这边,你不妨也好好想一下,什麽样的 code 会让你说很棒?什麽样的 code 是「好」的?

如果你心里有个答案,我们先换个角度,来看一下 Javascript 的非同步。

Javascript 非同步是如何迈向「好」的方向

XMLHttpRequest 登场时,我们搭配 callback function 做到许多 AJAX 的操作,在那个时代已经是很厉害的机制,跳脱了死板板的同步,局部更新部分画面,使用者用起来超开心!

接着随着时代演进,程序规模成长,callback function 渐渐难以负荷多层(nested)的 AJAX 操作,写起来不知道右括号该放哪,读起来看不出程序流程,更别提 error handling 加上去立马变成义大利面!

Promise

於是它来了!Promise,这个 ES6 崭新的物件改变了我们这些凡人对非同步的想像,它给出了承诺,Promise 可以被串接(chainable),让原本多层的 AJAX 被摊平,大幅提升了维护性与可读性。

但时代的演进是飞速的,程序规模指数型成长,Promise 写起来仍然就是一个非同步的感觉,穿插在同步程序码之间,阅读起来其实也没那麽轻松,对於不熟悉非同步的新手们来说,更是难以判断程序流向。

async await

於是它来了!async await,这一对摧毁非同步高墙的利器诞生,虽然其实也是基於 Promise 来的,但很好地简化了许多细节,将非同步的 function 同步化,穿插在同步程序码中一点也不突兀,程序码再度提升了可读性。

看到这里,你是否感受到非同步程序是如何朝向「好」的方向,随着时代前进,非同步也持续地在蜕变,你觉得会不会有下一个新技术来取代 async await 呢?

笔者没有特别研究,不知道是不是真的有,但可以肯定的是,Javascript 一定会继续进化

写「对」v.s. 写「好」

我心中的「好」程序就是像这样,是因应时代不断进化、蜕变的

我当然可以用 XMLHttpRequest 来写所有非同步程序,而且写出来的功能跟 async await 一模一样,使用者感受不出差异,但那就停留在把程序写「对」,而不算是写「好」。

写「对」程序是客观成果,我的功能正常、我的 PM 没贴我 ticket,我的 user 没打电话给我。

写「好」程序则是一种主观精神,我会尽我所能去尝试,磨练出让自己愈来愈满意,甚至团队成员愈来愈轻松的 coding 技能(more readable/maintainable/refactorable)。

因此,写 code 十年但每天做一样事的人,不一定能把程序写「好」,而刚开始学 Javascript 但天天都有所成长的人,才更能够将程序写「好」。

关於系列文

这系列的文章「不会」有:

  • 基础 Javascript 语法或使用
  • 程序刷题教学(但我的队友 Jen 有,欢迎跳坑)
  • Javascript 框架相关的语法(但我的队友 pjchender 有,欢迎跳坑)

这系列的文章「」有:

  • 偏向 Javascript 核心的一些观念与理解
  • 职场实战派会用到的实用解法
  • 不一定透过写 code,菜鸟工程师如何提升自己的「程序感」

结语

没有最好的程序(best),只有不断进步的程序(better)


<<:  [Day16] JavaScript - Promise 物件

>>:  【没钱买ps,PyQt自己写】Day 1 - 安装 PyQt,建立自己的第一支 PyQt5 程序

30天学会C语言: Day 27-指标当参数

函式没办法使用其他函式中的变数 #include <stdio.h> #include ...

TypeScript 能手养成之旅 Day 8 物件型别-扩充型别-元组(Tuple)

前言 今天要来介绍,Typescript 特有的类型 Tuple 、 Enum,到底会是什麽,有趣的...

Day-26 Process Synchronization

Process Synchronization tags: IT铁人 由於电脑同时会执行许多程序,不...

数位变革

在疫情爆发之前,一切的一切看似都非常的正常,但是在爆发之後,所有的一切都被疫情给打乱了,并且所有的秩...

Day 9 - 14 Must Know Dev Tools Tricks

前言 JS 30 是由加拿大的全端工程师 Wes Bos 免费提供的 JavaScript 简单应用...