我的2020回顾——技术篇
看着笔记里写了一半的「2019年总结」,总觉得莫名喜感,然后我又想说时间过得真快了,又到了每年写总结复盘的时候,2020年是我长这么大以来经历过最魔幻的一年,疫情、金融危机、世界格局“百年未有之大变”……巨大信息量的冲击下人很难有独立思考的空间和意识,还好本文只是对2020年技术方面的总结,不然不知道要写到什么时候才写完。
首先看一下我主要使用的两个代码托管平台上的代码提交概览,分别是Github和Gitee。
第一季度的代码提交集中在Github上,在这之前我只是把Gitee作为一个国内的备份,随着美国的制裁不断收紧,Github又几次宣布封杀某几个国家之后,我就觉得国外的东西始终还是不那么靠谱,转而把代码提交到Gitee,并把GitHub作为备份,而且后来在公司也开始使用Gitee的企业版,所以后半年在Gitee的提交特别多~
我看了一下,今年主要涉及的技术(语言)按代码量排序:Python -> C# -> Flutter(Dart) -> 前端(JS) -> Kotlin -> Go -> Java -> PHP
下面挑几个说说相关的应用和心得吧~
Python
Python排在第一位毫无悬念的,我一直的主力语言都是Python,今年用到的主要领域是Web后端、机器学习(深度学习)、数据分析处理、爬虫、桌面程序等,都是工作生产上赚钱的东西,用Python又快又稳,比如Web开发,用上Django半天可以完成静态类型语言至少一天的工作,事半功倍,人生苦短,我用python这句话真不是说说而已~
Python Web
Python的Web后端方面主要是用Django框架,在之前简单使用的基础上深入了一些,读了一部分的框架代码(大呼牛逼),然后今年也用上了做RESTFul Api标配的DRF框架,同样啃了一部分框架代码(PS:drf很多功能不看代码根本不知道咋用,文档有待提高)
因为在工作中做后端服务主要用Django的缘故,今年对这个框架的学习和研究比较多,还自己做了一个快速开发模板,功能包括:Docker部署,缓存,自动业务代码生成器,接口限流,DjangoAdmin验证码,登录次数尝试,屏蔽了RestFramework默认的API主页等,代码也开放出来了~
- 项目主页:https://deali-axy.github.io/DjangoStarter/
- 代码:https://github.com/Deali-Axy/DjangoStarter
- Gitee代码主页:https://gitee.com/deali/DjangoStarter
部分关于Django的折腾研究记录我发了专栏,这里整理一部分出来:
- Django开发精选专栏(知乎):https://www.zhihu.com/column/c_1270023754924769280
- Django-Filter使用:https://zhuanlan.zhihu.com/p/291336772
- 经验总结之drf-yasg接口文档几个细节的自定义方式:https://zhuanlan.zhihu.com/p/269499888
- 给Django的Admin添加自定义Action 并移除需要选择对象的限制:https://zhuanlan.zhihu.com/p/163467332
- Django中间件之实现Admin后台IP白名单:https://zhuanlan.zhihu.com/p/163455319
- Django快速开发实践之Drf框架和xadmin配置指北:https://zhuanlan.zhihu.com/p/100135134
- 一小时完成后台开发 DjangoRestFramework开发实践:https://zhuanlan.zhihu.com/p/113367282
- 在Django中「强行」使用MVVM设计模式:https://zhuanlan.zhihu.com/p/136571773
- Django应用的容器化部署实践:https://zhuanlan.zhihu.com/p/128500053
- Django的信号机制:https://zhuanlan.zhihu.com/p/135361621
- 给Django Admin添加验证码和多次登录尝试限制:https://zhuanlan.zhihu.com/p/138955540
- 聊聊Django应用的部署和性能的那些事儿:https://zhuanlan.zhihu.com/p/152679805
- 配置Django-TinyMCE组件 实现上传图片功能:https://zhuanlan.zhihu.com/p/162915134
篇幅关系只整理关于Django这一部分,看更多文章可以在我公众号或者知乎上搜一下……(偷懒)
除了Django之外,我还试用了今年很火的异步开发框架 FastApi,一个要和Go语言比速度的框架,而且还把静态类型(100%类型注解覆盖)作为卖点,emm用起来感觉就像Flask一样简单方便,不过和Flask一样,这个框架本身提供的功能不多,拿来开发的话需要搭配一大堆第三方库使用,可以用Flask的生态,前景应该蛮好的~ 不过还是Django全家桶用着舒服hhh
机器(深度)学习
今年在机器学习这一块也做了一些小东西,年初继续做我的NLP,包括情感分析、对话预测这类…没啥特别好说的,值得一提的是我入坑了BERT,果然是挺强的,做了一个中文文本分类项目(主要是新闻文章的分类),效果蛮好的,同样是开源代码自取
除了完善之前开坑的NLP之外,今年还入坑了推荐系统,搭配上爬虫、元搜索引擎、上面提到的文本分类,做了一个类似今日头条那样的聚合阅读 & 推荐的App,帮我拿了毕设全级第一和优秀毕业生,发现四年大学也不算白读了~
(此处插播这个App的视频)
后面在工作中又做了一些计算机视觉的东西,调研了人脸检测识别这块的几个技术栈,因为我们的服务要分两个部分部署,一个部署在GPU服务器上,一个要部署在NVIDIA的那个嵌入式设备(Jetson),服务器性能够随便用,主要看准确度,嵌入式设备只能用轻量的算法,不追求准确了,但求性能不要崩~
然后就MTCNN、FaceNet、ResNet还有OpenCV的几个机器学习的检测器都用上了,搭配着使用,还有同事用YOLO做另外的目标检测部分,我就打打酱油~
剩下的数据分析、爬虫、桌面(PyQt),大部分都跟工作有关,也比较容易没啥值得记录的,我当时没写博客,(或许接下来有时间再来水一水)
C#
开始说C#篇啦,这是优雅的好语言,netcore平台今年的发展也很迅猛,年底已经推出了正式版的 net5平台打算一统天下了,不过好像今年一年的时间生态也不见有什么大的进步,所以在生态没有大发展之前我暂时不会把netcore这一套拿来当主力。不过会持续关注学习~
netcore这块主要就都是Web开发的东西了,年初本来打算用ASPNetCore来做毕设的后端框架,后面因为时间关系还是换了Django,不过我倒是认真做了一个练习项目放在Github,代码在下面。
当时接触ASPNetCore不久,很多东西都不熟悉,不过中间件、依赖注入这些跟Spring那套差不多(你问我为啥跟Django不一样?动态语言可以不需要依赖注入,懂的都懂),后面我继续学习和用了这方面的技术做了一些东西,主要是熟悉了MVC的那套,虽然现在MVC没啥用了,不过架不住一个人开发快啊,ASPNetCore的MVC多好用也说不上,不过功能挺丰富的,整体性能也还可以(虽然我还是觉得Django的MVC顺手)
然后跟着杨旭大佬学了一些ORM、RPC、WebAssembly这类的,最重要是还比较系统的复习了一下C#基础,感觉受益匪浅,可惜没那么多时间去刷完所有课程,希望接下来的2021年把杨旭大佬的课都赚下来~
后面又接触了一下下Abp vNext框架,并且学了一些关于gRPC、微服务网关、认证中心、监控系统的东西,算是对整个netcore体系有所了解了,后面我也在生产环境用了一些netcore,比如公司的新版数据中台和一个小程序的后端+PC端,感觉还不错啦,就是我还不是特别熟练,开发效率上不如Django……
一样的,学习和使用过程中我写了一些文章,这里也列一些:
- (这一篇是在“.net开发者之家”——博客园被首页置顶推荐的)花一周时间整理的六千字长文!深入思考技术本质,跨平台开发框架AspNetCore的简单实践杂谈:https://zhuanlan.zhihu.com/p/267938409
- Asp.Net Core学习笔记:入门篇:https://zhuanlan.zhihu.com/p/105443116
- Asp.Net Core学习笔记:(二)视图、模型、持久化、文件、错误处理、日志:https://zhuanlan.zhihu.com/p/105953794
- Asp.Net Core学习笔记:(三)使用SignalR实时通信框架开发聊天室:https://zhuanlan.zhihu.com/p/106321863
- Asp.Net Core学习笔记:(四)Blazor WebAssembly入门:https://zhuanlan.zhihu.com/p/107262924
- Asp.Net Core学习笔记:(五)构建和部署:https://zhuanlan.zhihu.com/p/203298625
因为工作日常各种爬虫、数据分析、机器学习的缘故,C#我也拿来做爬虫和数据处理了,效率还蛮高的,Python写爬虫虽然是最快最方便的,但是架不住部署麻烦啊,C#就不一样了,写完直接全平台可部署,我用WinForm做个界面也行,Windows系统啥也不用安装直接打开就能用,Linux或者Mac也有相应的UI框架,通过 .Net Standard标准,底层可以共用一套代码,很舒服。
不过dotnet项目有一个很麻烦的地方就是只能有一个main入口,虽然说起来是理所当然的事情,但是这对爬虫来说根本不方便,经常要写一个单独执行的东西来验证的时候,往往就得在 solution 里面新建一个project来测试,依赖什么的都要重新导入,比较麻烦…… 虽然也有其他代替方法比如单元测试、LinqPad、dotnet script等,不过总归不像Python、Java、kotlin、dart这类一样方便~(话说go也是这样)
PS:今年爬虫这块,selenium用得很多,C#+selenium搭配IE driver,上古老系统全都被安排得服服帖帖的~
.NetCore 未来可期~
Flutter
时间来到0202年,如果评选开发人员最喜爱的前端技术,那么Flutter绝对榜上有名… 虽然我们一直在吐槽坑多不稳定啥的,但是架不住大家对Google家技术的热情,flutter现在的生态很不错了,中文社区、教程、交流群遍地都是,可能搞得单纯学原生App开发(Android / iOS)的人越来越少了……
今年的Flutter应用主要放在了毕设那个聚合阅读&搜索App的开发上了,综合运用了很多我之前积累的东西,除此外就是做了个Flutter爬虫框架放在github开源了(地址下面有),emmm还有把19年做的极简诗词例行更新了几个小版本……
- Flutter爬虫框架:https://github.com/Deali-Axy/flutter_spider_fx
做那个爬虫框架虽然最终的效果不是很完美,不过还是收获了不少,主要就是深入了一下DartVM的EventLoop和Isolate,当时(20年初)Dart的Isolate还是有不少缺陷的,导致这个爬虫框架实际上没法实现真正的多线程爬虫… 也不知道现在dart团队改进了没……
因为我以前是从Android原生开发接触Flutter,所以很多Android有的东西我就会想flutter上找替代品,比如EventBus、ORM、OKHttp这类,现在是Flutter的ORM好像还没找到比较成熟好用的,其他的还OK,简单点的可以直接用原生的来调用。坑人的地方就是Flutter框架更新太快,经常会有Break Changes,很多第三方库往往跟不上Flutter的更新速度,所以……谨慎升级吧(能用就凑合一下)。
Flutter方面的文章整理:
- 把爬虫放到手机上跑!Flutter爬虫框架初探~:https://zhuanlan.zhihu.com/p/108028434
- Flutter跨平台App开发中设置Android和iOS的启动页:https://zhuanlan.zhihu.com/p/262251346
- 极简诗词开发背后:Flutter移动应用快速构建实践——状态管理、国际化、数据持久化、性能优化(一):https://zhuanlan.zhihu.com/p/100235769
- Flutter移动应用快速构建实践——状态管理、国际化、数据持久化、性能优化(二):https://zhuanlan.zhihu.com/p/100763432
前端
前端这块虽然是经常写的(代码量还不少),但还不是很熟练,可能是我没有系统的学前端,经常被js坑到,还好有大师带飞~
今年接触了不少新的前端的东西,一开始想搞个简单的后台管理,发现了上古的LayUI,用起来甚至还挺简单顺手的,不过在知乎看到很多专业的前端对其有抨击,基本都是说模块化的问题,不过我觉得这个LayUI确实和它官网说的一样,是对后端开发很友好的一个框架,不需要很多的前端知识,cv操作就完事了~
发现了一个类似Bootstrap的前端样式框架叫SemanticUI的,语义化的class确实有点意思,看腻了Bootstrap的默认样式,这个SemanticUI的界面也让人眼前一亮,不过我还没深入使用,也就大概看了一下,用习惯了Bootstrap突然换成这种语义化的class还有点不习惯的,不过我有感觉这是个不错的东西,接下来持续关注。可以把一些Bootstrap的网站用这个SemanticUI重写一下,工作量应该不是很大~
然后因为接了个项目要做小程序,时间比较紧只有三天,我就用了很有名的uni-app肝了出来,期间遇到了不少坑,这个uniapp虽然广告说支持七八个端多多方便啥的天花乱坠,但是文档写得却不怎么样,很多东西文档内并没有写明,要靠搜索他的论坛什么的,挺麻烦的,而且不同端上也有不同的坑,还好我只做了微信小程序,如果要做其他的不知道还会遇到什么奇奇怪怪的问题,恐怖。
后面在网上逛了下发现有个叫Taro的小程序框架也还不错,不过我还没用上,有机会可以看看。
年底在大师的安利下开始入坑React,真不错,有Flutter的基础学React简直不要太容易,响应式的界面开发真不戳,现在就差一个好用点的样式框架来搭配使用,接下来继续关注趴~
哦对了,还有vue,双向绑定很适合做管理后台这种需要大量表单的东西,不过感觉相关的东西太多了,我还是喜欢React~
PS:前端的东西实在太多了……
Kotlin
Kotlin是19年开始接触的,说是要取代Java,也不知道在Java被淘汰之前能不能实现这个目标。
Kotlin的语言设计真不戳,函数变成一等公民,我喜欢这种设计,比C#高多了~
今年用Kotlin+Springboot做了一个网站,ORM用了Ktorm,还是有不习惯的地方,后来我写了一篇总结的推文,里面吐槽了一下,结果被ktorm的作者看到…… 后面加了微信接受大佬教育…
整理了两篇文章:
- 使用Kotlin搭配Springboot开发RESTFul接口:https://zhuanlan.zhihu.com/p/146733027
- 使用Kotlin搭配Springboot开发RESTFul接口(二)自定义配置、跨域、分页:https://zhuanlan.zhihu.com/p/147523200
除此外就是用Kotlin来写Android,自从Android可以kotlin写之后就很舒服了,不用写繁琐的Java代码也可以开发Android真好~
Go、Java、PHP
关于语言技术栈的最后说一下这三个,Go语言之前接触过,今年继续学了一些,因为编译成原生代码之后部署很方便,所以有时拿来做一点小东西很方便,不过要拿来写业务还是不如Java、C#、Python这些…
Java这块主要还是写写Android,维护一下我之前上架的App,那时候Kotlin还没学,只能Java…
关于Android开发我还想写几篇文章,但是年底状态差有点懒,差不多两个月没发新文章了…… 不过关于Android开发的我已经基本写好一篇了,等完善后就发出来。
PHP本来是很久没用了,不过最近要魔改WordPress的一些插件主题,也就小用了一下下~
其他
今年利用空闲时间刷了一些算法题,之前我都是做各种落地应用,并没有把注意力放在算法上,今年有空就刷了一些,感觉还蛮有趣的,累了的时候可以放松。
同时今年参加了几次培训和比赛,虽然也收获了几个奖,不过就比不上在学校的时候了……
培训还是让我接触了很多以前不了解的东西,10月份参加了网络安全的培训(虽然我学得不是很好),不过简直打开新世界的大门,加密解密、逆向、渗透,这些都是以前我很憧憬的东西,现在有半个月的系统学习确实受益匪浅,不过感觉这次学得还不是很充分,有大量的知识得继续补充……
12月又参加了大数据相关的培训,系统学了云计算基础、分布式存储、分布式计算、高可用架构各方面的知识,这个对实际工作的帮助更大,不过还是得在工作中继续实践才可以形成自己的知识框架~
写在最后
2020年过得太快了,过去这一年各方面离我的设想还是有点差距,不是特别满意,感觉自己越来越懒,效率也不高,很多计划做的事情都没有动力去完成……
不过也有改善一些的,今年没花那么多时间在技术上了,开始读书、看各种社评,中间也参加了几个考试,收获了一些不一样的东西,当然遗憾也是挺多的,比如公众号运营得不是很好,今年增长量不高(自媒体之梦破灭),各种各样,最后总归是自己的原因,只能说:接下来继续努力吧!
PS:最近很久没有更新文章了,(这篇总结花了一个多星期的时间),我已经完成了好几篇技术记录的文章,这篇总结发完之后就会陆续发布~
欢迎交流
程序设计实验室专注于互联网热门新技术探索与团队敏捷开发实践,在公众号「程序设计实验室」后台回复 linux、flutter、c#、netcore、android、kotlin、java、python 等可获取相关技术文章和资料,同时有任何问题都可以在公众号后台留言~