今天写完年度工作总结之后,才想起快有两个多月没有更新博客了,主要是因为从十月末开始,我的生活和工作环境都有比较大的变动,索性来一篇所谓的年度小结来概括一下2017这一整年值得纪念的点点滴滴。

python相关

其实说来也巧,在学校的时候,从来没想过以后会用python来作为主要的开发语言,但是在接触python之后,就逐渐明白了人生苦短,我用python这句话的含义。在我看来,python之所以优秀,很大程度上还是整个python社区环境相对来说比较优秀。从科学计算、网络爬虫、web开发、界面开发再到2017年炒的火热的机器学习,哪里都有python身影的出现。而在这些背后,那些默默为整个社区无私奉献的开发者们的功劳不可磨灭。
2017年,python相关的内容,我又有哪些成长呢?

夯实python web技术栈

在实际工作中,我主要的开发任务是做web开发。而python的web框架,我比较擅长的是flask。常用的技术如下图所示:

  1. 我会选择使用mongodb作为数据存储,因为通常情况下使用mongodb就可以满足我的需求,并且在开发过程中会有比较流畅的感觉。
  2. redis可以作为数据缓存,而我更多的是使用它作为消息队列的一环,利用它的pub/sub来广播和接收消息,结合celery可以完成很多需要异步执行的任务
  3. 在流行前端后端分离的今天,直接通过flask写jinja模版渲染已经是越来越少。更多的情况是后端提供数据接口,前后端直接通过ajax进行数据交互。所以,flask-restful就可以用来完成基于flask的rest api编写。
  4. 在前端需要后端主动推送消息的时候,基于http协议请求/响应模式无法满足需求,所以引入flask-socketio就是为了完成类似这样的任务。
  5. 前后端分离,数据接口访问权限问题如何解决?我常用的方法是使用JWT来进行用户身份识别。

Django尝鲜

django2.0发布之后,我还是尝试了一番。
尝试Django的主要原因有几个:

  1. 深受正则表达式毒害的我很开心看到django路由语法简化:

    1
    2
    3
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
    转变为:
    path('articles/<int:year>/', views.year_archive)
  2. 以往通过flask进行web开发,底层数据库多是使用非关系行数据库(有一次需要使用oracle就体验了一把sqlalchemy,感觉还行),如果是关系型数据库如mysql或者postgresql可能直接拿django会更方便一些。

  3. django-admin还是很不错的,能省下不少力。
  4. django自身的开发文档很不错(当然flask的也不错)。

flask vs django

结合这篇文章,感觉flask和django在实际应用中适用的场景是有所不同的:

  1. 数据库方面:如果系统采用的都是关系型数据库,直接使用django可能开发效率会高一点,因为自带的orm比较好用;如果使用nosql,那么就没有必要使用django,flask+nosql扩展会更加灵活好用,同样,如果项目结构不是很大,完全可以通过flask+SQLAlchemy进行数据库操作;
  2. 业务需求:如果业务需求仅仅是restful api,那么使用flask可能会是个更好的选择,如果项目需要一个比较完善的后台管理模块,django自带的admin模块应该能够满足需求。

python爬虫

和很多人一样,最开始接触python是从爬虫开始,由于我都是比较小型的爬取数据,所以requests+bs4+mongodb就可以满足需求:

目前爬取的时候可能会遇到两种情况:

  1. 网站后端渲染好html:这种情况可以使用requests爬取网页,交由bs4提取目标内容;
  2. 前后端分离:这种情况需要仔细分析该网站的ajax请求,找出并分析其中规则,通过requests模拟ajax请求,获取目标数据。

反防爬措施:

  1. 伪造请求头
  2. 使用ip proxy
  3. 使用像Selenium这样的浏览器工具模拟人为操作。

机器学习

其实很早之前就有这方面的兴趣,无奈数学基础不好,一只没付诸行动。在年底,我们这样的一个公司居然都准备采用机器学习进行视频检测,我觉得是时候补一补数据基础,把这个技能点上了。
初步打算:

  1. 复习《线性代数》《统计学习方法》
  2. 机器学习相关python基础库numpymatplotlib
  3. 学习tensorflow相关demo

前端相关

还是那句话,前后端分离的开发方式,让以往只会用bootstrap、jQuery的我都不好意思说我是做python web的。

初识vue

上半年接触了目前比较火的前端框架vue。一开始我是拒绝的,因为用惯了jQuery,在开发思路上一时半会儿转变不过来。在初步理解了它的数据驱动页面的思想之后,发现原来前端开发也可以这么爽。
使用vue,不可避免的会接触es6:箭头函数、迭代器、生成器、模块、promise,我只能说“学习使我快乐”。另外,webpack、npm、yarn这些工具加速了前端工程化的进程。其实差不多可以完全改变了我之前对于前端开发的认识。

浅尝react

年末,女朋友也来武汉工作,公司前端主要使用react,她也一直怂恿我一起来学react(其实vue学了半吊子的我一开始也是拒绝的)。相比来说,react上手要比vue慢很多,我也是断断续续用了两周时间看react相关的文档。在真正用来做点东西的时候,才发现仅仅会用react是根本不够的:你会遇到管理前端路由的react-router,管理组件状态的redux。在初步理解了redux的store、action和reducer之后,你又会发现redux-thunkredux-orm等等相关的一系列轮子都可能会用到,这真的是在做前端开发吗?

2017年,也可以说是恰好赶上了前端迅速发展的一年,加入前端开发,才会真正发现前端开发很可能已经不是你印象中的样子。2018年,我猜我会投入更多的时间在前端。

其他技术栈展望

语言方面

  1. go语言,想要在2018用go做一个web应用
  2. java,之前用springboot做过开发,比较有好感,可以尝试在一些快速开发的项目中使用
  3. node,尝试使用koa做一些事情

数据库

  1. postgresql,使用postgresql作为数据存储开发项目,结合postgregis完成一些gis应用
  2. mysql,毕竟目前使用很广泛,学习一下也是很不错的
  3. neo4j,之前只是尝试,希望可以和机器学习相结合,做一些有趣的事情

总之,作为技术人,我希望在2018年投入更多的时间来夯实现有技术栈,多读书、读好书,拓阔视野,多与人交流分享想法。

相对于技术方面的成长,2017年我在其他方面的成长可能更大。

西安之旅

2017年是在西安开始的。我和三哥相约来西安开始了吃吃吃之旅。看看我们都去过哪就知道啦:

那几天可以说是非常开心啦。一起去去大雁塔,上明城墙骑行,看钟楼夜景。假期很短,相见有点难。

南下求职

在完成出差任务后,一天从承德来到武汉找工作:

面试过程比较顺利,顺便和之前的同学、师弟师妹聚餐,感叹时光匆匆。

好友结婚

从之前的单位辞职之后,回家参加从小到大的好朋友婚礼。

第一次当伴郎,衷心祝愿他们能够幸福。

领养二狗

在微博上领养的二狗:

这个名字没白起,二狗真的是像狗一样的猫。

见家长

幸亏可爱的女朋友的渗透工作,这次见家长可以用“大吉大利,今晚吃鸡”来总结啦:

来我家

哈哈哈
用一句话总结“王叁很优秀,我们很满意“
由于恰好是十一假期,还跑洛阳玩了一趟。

王炸

盼星星盼月亮,三哥也来武汉工作了,一起度过了艰难的找工作阶段、辛苦的学习阶段,现在算是相对稳定了,我们还一起布置了我们所谓的”工作间“(游戏厅?):

希望可以在里面读更多的书,学更多的知识,看更多的好片儿还有玩更多的游戏。


最后,希望在2018年自己的工作能够更加满意,生活可以往自己理想的方向更近一步,希望家人健康平安。