想做个小程序,但是走了两个月弯路是种怎样的体验?

2020-06-10 00:00:00 程序 都是 时间 事情 后端

大家好,好久没写扯淡文了,众所周知,前段时间TechFlow的留言板小程序上线了,点击文章末尾的图片进入。虽然到现在为止好像也没什么人评论(说明评论不重要嘛),但至少这个功能是有了。今天和大家聊聊,我做这个小程序的过程中的一些体会。

讨厌的事就是写前端

我这个人还蛮奇怪的,当年学C++的时候讨厌Java,觉得Java臃肿,速度慢,也不够灵活。后来学了Java之后又觉得C++很不规范,再后来学了Python,觉得Java和C++都不好用,一个库很少,一个写起来费劲。近学了golang之后,对于这些语言的看法又有了或多或少的变化。虽然我经常打自己脸,自己推翻从前的结论,但是有一点从始至终都没有改变过,就是我非常、极其讨厌写前端。当然,这个只是我个人的感受,诸位前端大佬勿喷。

讨厌前端的原因很简单,我想很多做前端的人可能也会有这样的感受。比如调试很麻烦,当我要调整一个页面的样式,每一次修改都要重新打开一次网页,非常不方便。比如前端的语法很多,要学的知识面很广。从HTML、CSS再到JavaScript,再到ES标准各种框架。这些内容没有一个是省油的灯,想要都搞明白头发不知道要掉多少。重要的是,我这个人可能天生审美不太行,费劲心思却搞出来一个很丑的页面,还要被嘲笑,这种感受真的很不好。。。

当你讨厌一个东西的时候,你是很难有兴趣去学习它,说什么即使讨厌也要做好它证明自己的念头更加是不会有的。大家都是成年人了,有这个时间较劲打一把游戏不香吗?

但不得不说,前端是一个很重要的技术领域,很多事情都无法离开前端。无论是想要搭个网站也好,想要做个app也罢,只要你想要做的是一个给人用的东西,就无法离开前端。小程序也是一样,虽然小程序是基于微信运行的,但是它的核心本质就是一个前端网页。只不过微信对于其中的一些组件做了一些封装和定制,使得写起来的时候会比网页稍微顺手那么一点,但是本质上它就是一个网页应用,所以小程序的代码和前端几乎没有任何分别。

也正是因为前端很重要,所以即使我讨厌它,即使我可以有现成的小程序使用,但我还是选择了亲手去把它做出来。让我坚持下来的主要有两个原因,,那个我想要成为的人是应该懂前端的。第二,想要走出自己的舒适区,去看看学一个自己不擅长也不喜欢的东西是怎样的。


踩坑的开始

从零开始做一件事情总是会踩坑的,这个是无可避免的。虽然我之前还是有学过基本的HTML和CSS语法,对于JavaScript也不是非常陌生,但是亲自上阵去写一个网页应用还是次。

初学乍练带来一个很大的问题就是不自信,这个不自信体现在会想要做很多很多准备工作上面,并且会倾向于专注那些比较简单或者是让自己没那么痛苦的准备工作。体现在做小程序这个事情上,就是因为我已经熟悉HTML和CSS了,所以一开始的时候我花了许多时间完整地将它们又复习了一遍,而不是去学新的知识。之后我又请教了一下一个前端大佬的朋友,在他的建议下我又把JavaScript仔细看了一遍。

再之后……就走偏了。

走偏的原因就出现在网页应用上,众所周知,网页应用有前端就必然有后端的。由于我之前做过一段时间Java后端,对于后端的内容还是有些了解的。然而Java做后端非常笨重,写代码非常不灵活,而且我这个小程序的请求量很小,没什么压力,不用考虑性能问题。所以我想要用Python来写它的后端。Python做后端有两个知名的框架,一个是Flask一个是django,不幸的是这两个我都不会。由于Python和后端我都很熟悉,本着从易到难的原理,所以我决定花点时间把Flask框架好好学一学

我在网上找了口碑不错的介绍flask的书籍,略读了两本,精读了两本,还根据书上的例子做了很多实验。然而坑爹的是,flask框架很多篇幅花在了介绍内嵌网页模板上。但是本质上小程序是一个前后端分离的应用,也就是说后端只需要实现api接口操作数据就好了,并不用操心前端路由的问题。其实不仅是小程序如此,现在很多前端流行的框架都是前后端分离的做法了。

其实这一点我是知道的,只是盲目的学习蒙蔽了视野,等有一天幡然醒悟的时候,已经过去快一个月了。与此相比,接下来的发现更加让我吐血。腾讯的小程序当中内置了云函数的功能,可以充当简单的后台实现一些增删改查的功能。也就是说只要愿意把数据放在腾讯端,并且没有复杂功能的话,其实可以不用自己另外做后端。后端都用不到了,那flask自然是白学了。

当然知识没有白学的,现在用不到,以后说不定还是会用到。这倒也没什么,而且从反面来看,可以不用写后端,也不用找服务器部署,其实是省了很多事的。理论上来说接下来应该一片坦途,但是又踩了另外一个坑。


踩坑的继续

我们拿到一个事情往往都会喜欢规划一下,这件事情按照当前的速度,大概几天能做完。我想很多人都有这样的习惯。我当时也是这么想的,我把所有要做的功能列了一下,留言板嘛,能有什么功能,无非就是写留言和点赞。然后我作为管理员管理一下大家的留言,给大家置个顶,回复一下什么的。列下来其实一共没几个页面。当时盘算了一下,觉得两周可以做完

当时想的挺好,一天要么做一个页面,要么做一个页面的增删改查的逻辑。按照这样的速度,两周绰绰有余。但是到了实际执行的时候,根本不是这么一回事。两周过去了,啥也没做出来。一方面是我的确抗拒这个事情,另外一个方面是因为无从下手。我对小程序不懂嘛,不懂自然就不知道怎么下手。应该怎么搭建一个小程序,页面应该怎么弄,每个组件都是干嘛的,这些都不明白。

也找了几本电子书看过,很多内容都已经过时了,而且写得极度无趣,几乎可以认为是官方文档的添油加醋版本。于是在朋友的建议下直接去看了官方文档,这次清楚了很多,但是官方文档也有问题,它只会说某个部件怎么做,并不会很清楚地告诉你该如何一步一步地搭建你的项目。可能写文档的人把大家都当做了有前端基础的业内人士,所以觉得这些内容大家是都知道的,或者说从已有的内容当中可以推测出来的。事实上,也的确不难,只是对外行来说并不容易,而且内心的确很抗拒这个事情,反应在很难沉得下心一点一点去思考。

这一抗拒又虚度了很多光阴,为了解决这个问题,我又转变了思路,准备去网上找一个现成的小程序来借鉴。花了几天时间,真的找到了一个,它是一个人写的模仿知乎的小程序,大概长下面这个样子:

我觉得它的结构和我想要的留言板的结构很像,只需要把其中的内容和样式改一下,成本应该会很低。而且有了一个现成的东西研究起来比啃文档容易多了,拿着它的源代码再去对照文档当中的内容,很快就大概搞清楚了其中的运行原理。知道一个小程序的骨架是怎样的,我又需要如何开发了。


逐渐脱坑

事情到这里为止仍然不是平坦的,虽然相比一开始的时候顺利了很多,但是对于前端的抗拒并没有减少。加上每天的时间的确有限,我还有很多其他额外的事情要做,并不能挤出太多时间来在小程序上面。有时候即使挤出时间,也会不愿意花在上面。一开始的时候还很顺利,没过几天就开始delay了。每次delay还会给自己找借口,我不是不愿意写,而是大部分时间都拿来写文章了XD。

眼看着完工的日期遥遥无期,两周的事情被拖到两个月,后来终于憋出来了一个大招解决了这个问题。内心的抗拒一时半会无法解决,但是我找到了一个做抗拒事情的终极方法。它不仅可以用在小程序上,也可以用在很多其他事情当中。

敲黑板,下面的话是重点。

一直以来我都有列计划的习惯,我曾经在其他的文章当中也提到过它的重要性。通过列计划,可以帮助我们明确目标,不至于闲下来不知道应该做什么。列计划本身是没有问题的,问题是我之前列的计划往往会特别宽泛。比如说我有一次列的计划是做完小程序中管理文章的页面。然而这个计划一拖再拖,好几天了也没有做完。其实那几天当中并不是真的没有时间,而是我实在不想去做这件事情。

从意志力的角度来分析,每个人的意志力都是有限的,当你实在做不了一件事的时候,往往说明这件事情的难度超过了你现在意志力的范围。这个问题只有两个渠道解决,个渠道是外界压力。比如老板威胁你做不出来就滚蛋,或者是房东催租了,你需要赶紧做出来赚钱。但是这个压力很多时候没有,我们也很难给自己这样的压力。所以只有第二个办法,就是降低事情的难度

我分析了一下,问题的根源就在这里,我列的计划的难度太大了。比如昨晚某个页面,这个页面当中包含若干个功能和很多样式的调整。这些都是我很讨厌的事情,并且整个工作量又不小,累加之下就会使得这件事情开始难度变得很高。事情本身的难度无法降低,就只能从工作量下手。于是我开始把计划列得很小,比如每天就做一个具体的细小的功能。比如在某个页面当中增加标题,或者是调整一下某个页面的样式,或者是实现某个数据查找的功能。一般来说都是拆到不能再拆的小单位,就好像产品经理给程序员提需求一样。

我发现这样一来轻松了很多,主要是心里压力解脱了。即使是我这样很菜的前端水平,做完一个细小的功能也不需要很多时间。找一个精力充沛的时间段逼自己一下,也就做出来了。慢慢熟悉了之后,心里压力也会逐渐降低,后来每天可以做两到三个小任务。再到后来一天做一个比较大的任务也是家常便饭,甚至有时候还会“加班”。

通过这样的方法,加上一些前端大佬的相助,虽然比原计划多花了很多时间,但总算还是把它做了出来。等做完的那一天,我回顾整个过程,我发现我已经没有那么讨厌前端了。


结尾

走出舒适区是一个很困难的旅途,更多的时候是和自己心里的怪兽做斗争。如果总是一次次落败,那么这个怪兽会越来越强大,相反,如果一次次成功,那么整个怪兽也会越来越弱小。面对困难,有时候只靠意志力是不够的,也需要从外界寻找一些适合自己的方法。

如果你也在为了困难的事情而痛苦挣扎,希望这篇文章可以帮到你。




相关文章