自我实现 —— Node Web 学习

这是《我的产品技术之旅》的系列文章,每篇文章,我都尽量保证是一个完整的故事,但不可避免会有些前后关联,毕竟这是一个成长的过程。

这篇文章开始介绍学习 Node Web 的过程。毕业之前学过 Java 和 Objective-C,但仅仅是学过,并没有产生实际的用处。

后来入职做了一名产品经理,学习了一个新的技术 —— Node,它不是一门新的语言,而只是 JavaScript 语言的运行环境,却帮我解决了很多实际问题。


岗位职责之外,给公司做的那个知识库站点,是第一个跟开发技术相关的项目。虽然不需要很高深的技术,但涉及到的知识点还是比较多的,从前台最基础的网页,到后台服务器的部署,都有涉及。例如:Markdown、Hexo、HTML/CSS/JavaScript、Nginx 以及 Linux 等。

如果完全没接触过这些零散的知识点,还是需要一些时间去了解的。而对于我来说,却比较轻松,因为我更擅长对整个概览的掌握,而不是精专某一个技术点。

做这个事情,让我尝到了一丝的甜头,在部门内,也渐渐有了「技术男」的标签,毕竟我那个岗位是几乎不需要啥技术的。

我在其中找到了「内在价值肯定,外在成就认可」的感觉,满足了我的「尊重需求」,于是,我开始寻求「自我实现」。

重新捡起开发

那段时间,我接触了一个新的开发技术 Node,它是 JavaScript 语言的后台运行环境。它诞生于 2009 年,创立之初,是为了获得一个高性能的 Web 服务器,并提供一套库。

前端由于它的诞生,大放异彩,逐渐发展出了大前端的概念。在我接触 Node 的时候,它就已经很火了。

像之前提到的 Hexo(静态博客框架),就是基于 Node 开发的,虽然 Node 很火,但是与 Java, PHP 等相比,还是显得小众了些。但我觉得很酷。

除了酷,它还有很多优点,例如简洁、开发效率高,使用 Node 开发一个 Web 站点,非常快,写一个 HTTP 服务,只需要短短几行代码就搞定了,简直是全栈开发必学的技能之一。

貌似,全栈开发这个词,就是在 Node 诞生之后,才慢慢火起来的,因为前端开发者常用的 JavaScript 语言,借助 Node 的环境,也可以做后台开发了。

前端工程师可以一个人解决前后端的开发,后来又渐渐出现「大前端」的概念,那个时候,前端真的是火得不行。

在选定 Node 之后,我开始做一些小的系统用来练手,什么需求都做,有时可能是别人的一句抱怨,也有可能是自己 YY 出来的需求,只要有机会,我都去尝试开发,毕竟是学习的过程,不能放过任何练习的机会。

当然,在一个传统的制造企业里,从来就不缺信息化的需求。有那么一段时间,我只要看到某些效率低下的工作方式或流程,我就在想,能不能通过线上协同的方式去提高效率。

练手的那些系统

姑且就叫「系统」吧,虽然大多都只是简单的「增删改查」,根本就称不上所谓的系统,但从这些项目的开发中,我学到了很多东西。

这样的「需求」真的是应接不暇,只是个人精力有限,毕竟还有一堆岗位职责的工作需要去处理。

按照时间顺序,大概分为 3 个阶段:

  • 第一个阶段:练习开发。学会把一些零散的知识点,拼成相对完整的项目;
  • 第二个阶段:解决问题。从单点实际问题出发,规划系统功能,提升效率;
  • 第三个阶段:产品化。从业务流程出发,做信息化平台;

下面介绍第一个阶段:练习阶段。这个阶段开发了 3 个系统,每个系统较之前一个都有很大的进步,这个过程要学习的东西实在太多了。

1. 评分系统

这应该是我使用 Node 开发的第一个 Web 站点,它甚至连最基本的用户管理都没有,但它让我学会了很多基础的概念。例如:

  • 了解了页面模版的概念
  • 学会使用 bootstrap 样式库去搭建页面
  • 学会使用 express 框架作为后台服务
  • 学会使用 Node 访问 MySQL 数据库

这个在部门内用了几周,就没再用了,非常简陋的一个站点,仅仅满足了投票打分的核心需求。

专门找到了当时写的几篇介绍文章:标签: 评分系统 | 个人学习,读完后,还挺有感触,这就是那时的自己。把时间维度拉长,觉得写作是件非常有意思的事情。

2. 需求收集系统

这是个半成品,甚至都没有部署到线上,只是存在于我的电脑里,在这个项目里,我开始学会使用一些开源的前端组件,例如常用的有:

  • bootstrap-fileupload 上传插件
  • bootstrap-table 表格插件

随着后面系统的开发,使用的第三方库也越来越多,后来,我还专门创建了一个开源项目,用来收集以及总结这些开源组件的使用方法。

GitHub 地址:https://github.com/pengloo53/js-plugin-example

在这个项目的练习上,除了学习组件的使用之外,开始逐渐学习模块化的开发,例如将数据库相关配置独立,再抽象出业务调用数据的模块。

当时也写了几篇介绍文章,只是不完整,就写了 3 篇,标签: 需求收集系统 | 个人学习,这里,大多数精力都花在了前端组件的使用上了。

3. 考核系统

这是我第一个完成程度较高的系统,这个系统的需求不是我自己 YY 的,是我们做客户拜访的时候,领导接回来的。

这原本也不是我们的岗位职责,接这个任务,是因为客户有非常明确的需求,而我们部门恰好又有能力去做这个事情,另一方面,部门领导也想给部门的工作找些亮点。

和前面不一样,这个项目,我只是负责开发,前期的需求沟通是部门另外一个同事做的,还有一个同事帮忙写 SQL,所以,这个项目中,我的角色只是程序员。

经过前面几个系统的练手,做这个项目的时候,还算得心应手,况且我只负责开发,所以,我记得差不多两周的时间,我就完成了所有的开发工作,功能并不复杂,花时间最多的是前端页面布局和样式。

做完这个项目,发现了两个问题,也就是改善点吧。

  • 一个是前端页面太费时间了,如果有现成的页面模板的话,就省事多了
  • 数据库的调用太 Low 了,这个项目的数据库调用都是采用字符串拼接 SQL 的方式

当然也有很大的收获:

  • 了解了完整的项目结构搭建
  • 各种前端第三方组件的学习和使用

不出意外的话,这个项目应该还跑在公司的内网服务器上,相关的业务参数是动态配置的,所以,如果没有大的调整,应该还能跑上一阵子。

学习 Node Web 的过程,就是在这样的状态下,不断的迭代,每开发一个新的系统,都会针对性的解决前面一个系统的问题。

所以,感觉这个过程,还是比较扎实的,我相信,每一个技术的学习都应该是这样的过程,就是不断的练习,练习,再练习。