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