2019工作总结——Python开发第一年,我都做了什么
文章目录
前言
2019年已经过去,但是却留下了很多东西,这一年或许并没有多少成长,但是确实努力了。难得有空闲,写篇文章,以此来回顾2019的工作。文章总体以时间顺序进行,太久没写作了,文笔太差,本想写个总结,结果写成了流水账,多多担待。公司信息不便透露,图片中虽然都是测试数据但还是打个码比较好
入职到第一个项目
本人是今年年初找的工作,相信2018年各大互联网公司裁员的事情大家都有耳闻,这里就不做过多的说明了。2018年底被辞,年初就到深圳找工作了。
2019年3月7日,我入职了现公司,所处部门是研发和工厂生产的中间部门,就是为工厂生产提供技术和自动化生产工具。我主要的工作内容是Python Web开发
,因为工厂将要采用自动化生产,因此会产生很多数据,我的主要工作就是搭建一个平台,收集所有的测试数据,并且进行分析,研究影响产品测试通过率的因素。
编程语言,框架和数据库的选型。
- 语言:
Python
。我使用的主要编程语言是Python,领导也是看中Python的快速开发才找的Python开发人员。 - 框架:
Django
。既然是Python,那么首选自然是Django
和Flask
。当时领导提出了一个Odoo
,说是基于Django开发的,可以很方便的做各种报表。我是第一次听说这个东西,然后花了几天时间看了一下,确实是可以直接生成报表,但是十分复杂,我对自己能力还是有自知之明的,在短时间内肯定无法根据需求定制开发。最后和领导商量后,选择了Django作为基础框架, - 数据库:
Mysql
。数据库领导一开始是建议使用MongoDB
。MongoDB我确实有过使用经验,但是考虑到测试数据之间有极强的关联性,后期的数据分析也会涉及到各种关联查询,我没有绝对的把握,还是决定使用Mysql,毕竟MySql数据库流行了那么多年,资料丰富,我对Mysql的查询语句也比较熟练。
第一个版本
项目是部门内部立的,没有产品经理,没有UI,所有内容都是凭着领导几句话描述的蓝图来自行脑补,再加上自己的一些想法构成。Django的好处我这里就不说了。使用Django,很快就搭建起了一个项目的雏形,还有完整的后台管理。但是其实这个项目对前端还是有一定要求的,因为要展示数据,还有分析之后的结果,那么肯定不能是几个简单的数字就行了。前面也说了,我并不是在技术部,整个部门除了我,其他都是做硬件相关的,这也就意味着我必须自己做前端,当然,在学Django的是有接触过,也勉强可以做,只是没有那么美观,这个在面试的时候有说过,领导并不介意。
前端方面,肯定不可能完全自己写的,毕竟我不是专业的前端开发人员,而且现在网上已经有很多现成的框架了,何必要自己造轮子呢。我选择使用Bootstrap3
作为前端框架,使用Jquery
库简化js操作,这些之前都有学过,也不算难事,css样式虽然不熟,但是简单的应用还是OK的。
- 登陆页面。这个是任何网站必备的,登陆页面就去Bootstrap官网找了一个【极简风格】的案例,然后自己瞎改一下,成就了下面这个神奇的界面(手动滑稽)
- 主页。主页也是找的模板,然后自己改改,整出了下面这个样子
- 图表。网站的主要功能就是数据分析,图表是一定少不了的。我并没有使用Python中牛逼轰轰的
Numpy
,Pandas
,Matplotlib
,因为我不会,理由就是这么简单粗暴。而且项目紧急,也不会给我时间慢慢去学的。图表使用的是js库Echarts
来绘制的,后台将数据处理好之后传给前端模板,然后通过js绘图。
至此第一个版本基本就算完成了,现在看起来真的是很简陋啊!!!
左边的菜单是刚入职时的原始需求,其实也不多,所有功能都已经实现。我看了下gitlab
提交时间,第一个版本的完成时间是2019年4月9日。我是3月7日入职(周四),大概3月11日开始进入开发,用时1个月。
这中间要感谢几个朋友,帮了不少忙,Echarts就是在他们的推荐和指导下学习使用的。
亲手安装【服务器】并部署项目
第一个版本完成了,但是并没有投入使用,因为工厂还没有准备好,我这边也只是和自动测试程序调试通过而已,连服务器都还没有架设,更别提部署了。
公司有技术部,也有机房。我向网络工程师申请了一台【服务器】,其实就是个电脑主机,因为没有服务器可以供我们部门使用,毕竟也不是技术部的人。电脑配置记不清了,只记得是奔腾双核处理器,DDR3 1333 8G。网络工程师把电脑插好线以后就是我自己安装了。服务器肯定是选择Linux
系统,因为我比较喜欢Ubuntu
,所以安装了Ubuntu18.04LTS
(某.NET程序员说Ubuntu是非常小众的系统,听都没听说过,咱也不清楚,咱也没反驳,反正是用了三四年了)。
以前用Ubuntu都是在虚拟机里面,安装也是安装带图形化界面的,这次是物理机安装,还是服务器版本,没有图形化界面一时间还真不适应,不过一路也没遇到什么障碍,只是到了最后网络配置的时候,因为公司机房用的是静态分配,所以第一次配置没成功。也是这次安装,我第一次见到了把子网掩码写在IP地址后面的写法【xxx.xxx.xxx.xxx/24】,本人不是网络专业,也没有学到过这种方式,所以一脸懵逼,还是搜索之后才明白的。
服务器安装好了之后极少去看它,都是直接通过xhell
远程连接过去的,所以我现在也不记得是那一台了,因为机房里面好多主机呀(/笑哭)
服务器搭建好了,就该部署项目了,作为一个即将用于生产的服务器,肯定不能直接使用Python manage.py runserver
来启动项目。
supervisor
:项目应该由守护进程来管理,这样便于服务进程结束后自动重启,而不至于服务停止,这里采用了supervisor来对项目进行管理,一旦服务程序被终止,立即会拉起新的进程来提供服务。(本以为这也算是考虑周到了,没想到还是漏了一件事:supervisor没有加入开启自启动。项目部署不到两个月的一个周末,我正在看着美剧,突然接到领导电话,服务器无法连接,我这才想起来手动开机后,守护进程不会自动启动,于是马上坐公交到公司处理去了。我这算是操这着运维的心吗?)Nginx
:Web服务器选用Nignx,网站所有的静态文件都通过它来处理,Django关闭调试模式后是不会处理静态文件的。
项目部署完了之后,在内部使用了一段时间,然后找同事申请了一个域名,因为要外部访问。
聚沙成塔
第一次版本迭代
第一个版本完成后,貌似已经满足了当时所有的功能需求,而且没有新的需求提出,于是我就开始写文档了。因为之前项目特别急,所以没有什么文档留下,第一个版本完成后,领导就安排我补文档,软件需求说明书、软件需求规格文档、软件接口文档等等一堆文档,我记得有一个星期都是在写文档。后来还对程序做了性能测试,然后我自己又写了一部分单元测试和接口测试脚本。
大概是4月下旬,项目部署一段时间后,新的需求就提出来了,至此开始第一个版本迭代开发工作。主要是增加一些小功能,修改一些之前的bug,然后顺便优化一下页面。之后的V1.1的登录页面长这样,是不是好看多了。
增加了几个功能,增加了菜单项。
这个版本完成后,已经是5月30号了。
新的工厂小工具,开启新征程
大概是五月下旬的时候,因为产品升级,需要制作一个小工具,部署到工厂服务器上,程序很简单,就是一个根据指定规则生成序列号的一个服务程序,带个管理界面而已。
程序很快就开发好了,工厂服务器上因为有别的项目,所以服务器安装的是Windows server 2008
,第一次在windows服务器上部署项目,找了些教程,不难,就是一堆坑。
Apache
:Web服务器,windows上部署都推荐使用这个,我也就跟着教程来咯。守护进程
:windows通过注册服务设置开启自启动来实现开机自启动
部署过程中出现了一些问题,需要修改python库文件中的内容才能正常使用,主要是因为windows有些机制和linux不一样,导致在windows下运行的时候报错。
部署不难,一劳永逸,难的是后面的维护,公司结构比较复杂,有三个工厂,每个工厂都要部署一个,还有公司内部测试用的,以至于后面每次有升级变更,都要远程登录到各个工厂去一一维护,远程方式还不一样,有的是windows远程连接,有的是teamviewer,有的是向日葵远程,后期的维护是真困难。从此开起来运维身份,前前后后加起来已经有5个服务器在运行项目了,都要进行管理。
使用阿里云服务器
时间来到6月,由于公司频繁出现断电,物业断电等问题,导致工厂测试经常无法连接到服务器,为了确保服务器的稳定性,决定使用云服务器代替本地服务器。于是将项目迁移到云服务器上,公司的本地服务器成了内部测试的服务器,也要管理,后来在上面部署了Odoo项目,现在管理6个了。
6月份开发量较小,都是些小功能,界面显示优化,bug修复,文件管理等常规维护开发,再从数据库导点数据出来,看看工厂服务器的运行状态等等。期间有空,学习了一下前端技术。因为无意间看到一个大数据展示的图,一时兴起,就找了一个模板,自己仿了一个,就是下面这个。完全是自己用一行一行代码手敲出来的的,当时可把我牛逼坏了(嘻嘻~)
遍地开花
为工厂定制专属模块
7月份,接到工厂需求,要扫码统计数量,还要做看板,于是根据提出的需求,做了一个看板,如下。看着还行吧,还有些细节没处理好,勉强可以看看。
由于工厂时常出现一些不规范的操作导致测试数据丢失,领导最终决定要把云端的服务程序下发到各个工厂,确保数据百分百可追溯,再顺便接过一个原本由其他部门管理的负责对接APP服务器的工具。从这里开始项目就一分为二,工厂端强调数据安全性,和对接APP服务器,云端的总服务器负责数据分析和工程文件管理,各有所长,但是工厂的数据是必须要发送到总部的。
工厂版本的服务程序因为要对接一堆APP服务器,测试时数据上传时会有延迟的情况,为了不阻塞主程序,在工厂段端是用来Celery
任务来发送数据,只有当程序执行到发送任务的时候就会被丢到队列中去执行。在windows下使用任务队列时会开启一个控制台,且不能关闭,而且无法以后台程序运行,这点很坑,需要使用一个工具,将启动任务队列的命令注册为系统服务才能达到效果。
完成这些工作已经是9月份,期间坚经常在多个工厂服务器之间切换,深感能力不足,应该有统一管理的方案,也有去了解docker
和自动构建部署的内容,但是还没来得及学完又被其他事情耽搁了。
兼职前端开发
正当我在学习docker
的时候,内部又立了个新项目,准备整合公司各个部门的数据,找了三个部门的的3个程序员参会,计划已经有了,只需各个部门配合即可,但是关键缺少一个前端,三个程序员都是后台开发,只有技术部有一个前端,但是没有时间,多次开会讨论,最后我承接了前端的开发任务。只有一个页面,但是我搞了一个多星期才写完,页面里的图表细节配置较多,需要一一查手册。最后就是下面这个样子。
这个项目结项已经十月中旬了
使用Vue开发
自从工厂和总部的服务器分离后,总部的服务器基本上除了导出数据没有什么操作。10月底开始学习了Vue
后,便萌生了重构前端的想法。11月初开始准备重构前端,想着凭借vue双向数据绑定的便利,应该可以在一个月完成,计划在2020年的时候可以用全新的界面来迎接新年,但是没有完成。中间改了一些后台,又花了一个多星期的时间为工厂开发了一个小工具,准备用于标签打印。最后用时两个星期,证明了一件事,浏览器不适合,标签打印机不同于普通打印机,用前端打印出来的额效果颗粒感太严重,最后还是由同事用C#开发了一个客户端工具实现打印功能,我写的服务只有接口能用上。
从2019年11月初到2020年1月10号,历时两个月对前端进重构。新的前端使用Vue全家桶 + ElementUI
开发,效果还算可以
在重构前端的时候,也发现了后台的一些不足,有很大一部分是之前的能力不足遗留的,虽然功能正常,但是代码不够优美,都是很原始的思路,于是又花了几天时间用djangorestframework
把后台大部分都重写了一遍。以前的项目是由django去渲染前端模板,现在已经是前后端分离,代码看起来比以前美观了很多,而且还支持手机端显示。最后的效果如下,看看是不是比之前的版本美观了很多。
总结
- 2019年最明显的进步就是前端开发能力了,从最初的拼命写css到最后几乎不写css反而达到了更好的显示效果。从Django渲染到使用vue完成前后端分离,也算是一种进步吧。
- 后端开发有一些进步,但是明显不够,心心念念的算法、
docker
、Elasticsearch
一直没学,Python还有一堆有趣的三方库在等着我,只能2020加油啦。 - 对于程序员来说自我能力的提升非常重要,坚决不做五年开发经验,一年实习水平的程序员。
- 现在看入职时写的代码,我都想抽自己两耳光。
- 2019更像是一颗螺丝钉,哪里需要就往哪里拧
2019感觉很累,我以为我每晚看视频敲代码到1点半就算努力了,但是看着公交车上拿着手机看老师敲代码的程序员,他们比我更努力