看着筆記里寫了一半的「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 等可獲取相關技術文章和資料,同時有任何問題都可以在公眾號后台留言~