五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

雜談 - 近兩個月的編程學習與其他

2022-07-04 02:49 作者:ZeromaX訸  | 我要投稿


有一段時間沒有用文字記錄一下自己的學習及其他的思考了。前段時間(5 月到目前)主要雜七雜八學了不少東西,學習過程中總感覺自己初學不久掌握不深,就不太好意思把相關東西寫下來。但兩個月的時間下來,就發(fā)現(xiàn)因此輟筆就更加不想寫了。還是需要不論如何都多多輸出,才能在寫作的過程中去梳理自己的思想和積累經(jīng)驗吧……

閑言少敘,進入正題:下面將相關的一些思考簡單歸類,然后每條線按時間線流水賬式地聊聊自己最近的一些想法吧。

一、Java 17 -> Scala -> Haskell

之前在各路平臺的文章里面看到這樣一個事實:Spring 6、Spring Boot 3、Elasticsearch 8、Kafka 3 這些框架的最新版本的都不再支持 Java 8,而普遍需要最新的 LTS(長期支持)JDK 版本——Java 17。當時二月份也整理了一下 Java 從 8 開始直到 17 的新特性,但由于自己一貫的惰性,并沒有真正安裝 JDK 17 試一下。

然后借著學習 FXGL 的過程(后面會提到 FXGL,簡單來說就是一個基于 JavaFX 的游戲引擎,最新版本需要較高版本的 Java),就把 Java 17 給裝上了,實際使用了一下。說實話,感覺版本號增加了不少(現(xiàn)在其實最新的已經(jīng)是 2022 年 3 月的 ?Java 18,只是不是長期支持版本),但因為 Java 現(xiàn)在是六個月一個版本,所以其實從 9 開始只是過了五年不到,其間的對于程序員可感的新特性其實并不多。其實想來印象深刻的也就是:模塊系統(tǒng)、var 類型推斷、switch 和 instanceof 表達式加強、Record 類密封類、一些 Stream 和 Optional 流的加強、集合類庫 API三引號文本塊之類的修改,其余很多就是內存回收器方面的更新了。

當時學完 Java 17 的新特性,自己就想撿起原來學 Java 8 函數(shù)式編程時順便簡單學的 Scala 再研究研究。因為很明顯的:單就 Scala 的 match 模式匹配這一點,歷經(jīng)好幾個版本 switch 語法上的不痛不癢的優(yōu)化,類似 Scala 的模式匹配守衛(wèi)之類比較實際的強化 switch 功能在 Java 到 18 還處于第二次預覽狀態(tài)。類似元組這些功能則根本還沒有。那我為什么不試試再深入學習一下 Scala,了解一下它更多的特性和函數(shù)式用法呢?

Scala

于是說干就干,直接搞到一本 Scala 語言締造者 Martin Odersky 的《Scala 編程(第四版)》,對著書邊敲邊學。因為之前有過看《Scala 函數(shù)式編程》學習的經(jīng)歷,所以上手還是比較快的,差不多一周時間就把主要部分都基本看完了。學習完一些深入的特性之后,就更加感覺 Scala 的簡潔和設計上的巧妙,只是自己功力還不夠,很多深入的特性——特質混入、提取器、函數(shù)式編程的一些高級概念之類的——還不是很熟悉。但簡單上手拿 Scala 刷了一段時間力扣題目,感覺確實比 Java 簡潔不少。

至此就不得不感嘆只學一門 Java 也許確實會限制自己的眼界。不提其他語言的話,單是 Java 就很容易受困于一個現(xiàn)實:業(yè)界因為生產(chǎn)環(huán)境求穩(wěn)或者 Oracle JDK 的商用許可證問題,而普遍使用的 Java 8(網(wǎng)上看甚至有的老項目還用的是更老的版本……)。那么新的特性就很難在工作環(huán)境接觸到,如果自己沒有探索的精神,那視野就很可能限制在此了。更不用說很多人在提到新特性的時候就是有種不愿意了解、不愿意學習的心態(tài),甚至 Java 8 的 Stream 都談之色變,一提起就是以可讀性差、速度慢、容易出 bug 之類的說法拒絕,但其實有時候原因卻只是不肯面對認知范圍以外的新事物,在對新技術還不甚了了的時候就先做出了先入為主的判斷。不知道我自己將來會不會變成這樣?不過個人感覺大概率不會——就算日后學不動了,起碼我可以做到不對自己不了解的東西妄斷結論或者人云亦云。

之后可能進一步去學習一下 Scala 吧,有什么心得也順便分享一下。然后在學習 Scala 函數(shù)式編程時,就看到很多人提 Haskell,因為自己到現(xiàn)在也不太熟悉函數(shù)式編程的寫法,加上也比較好奇純函數(shù)式編程是什么樣的,就把 Haskell 的開發(fā)環(huán)境搭了一下,按照《Haskell 函數(shù)式編程入門(第二版)》按部就班地學習。目前還在學習過程中,之后有什么感想再分享一下吧。

Haskell

不過搭 Haskell 環(huán)境的過程倒是讓我感覺有種回到過去剛開始學習編程的感覺——以前是自己啥都不懂,折騰環(huán)境安裝就是兩眼一抹黑按照網(wǎng)絡上的教程一步一步來,其實自己做了什么都不理解。雖然現(xiàn)在編程經(jīng)驗有了,但 Haskell 需要面對的問題其實也不少。因為自己選擇的環(huán)境和書上直接使用 REPL 不同,想要建一個 Git 倉庫一邊學一邊記,不想再和以前學習過后什么都不留下來的情況一樣(這樣日后不方便復習或者查看);所以 IDE 采用的是 IntelliJ IDEA + IntelliJ-Haskell 插件的組合,因為插件的原因,所以也就是基于 Stack 安裝的 Haskell 環(huán)境。這一系列的安裝過程,因為中文互聯(lián)網(wǎng)上資料較少或者過時了,就只能自己慢慢趟坑了。

安裝好了環(huán)境以后,寫代碼其實也很像以前剛學 C 語言時候。當時硬是要求我們 Visual Studio、(甚至老舊些的) VC、 Dev-C++ 這些 IDE 都不要用,讓我們這些初學者直接用 Turbo ?C (這個名字我回憶不起來還搜了半天才找到)這種 DOS 時代的編輯器來學……所以硬是把編程上手門檻抬高了。Haskell 則是因為本身不算大眾,所以相應 IDE 發(fā)展不算特別充分,讓我這個被 IntelliJ 全家桶慣壞的 Java 開發(fā)感覺有點再回到從前。不過后來發(fā)現(xiàn) Stack 上面安裝不少包后配合插件,還是可以補充不少功能,只是都需要自己折騰罷了。有空也整理一下自己的經(jīng)驗分享一下(挖坑),目前其實也可以直接看我 GitHub 上面的 HaskellProject README,簡單寫了一下自己的過程,只是沒有整理成文章。

以上就是自己近段時間語言學習相關的內容啦,其余還有些 C# 相關的內容后續(xù)再提。有些人說,程序員有必要每年學一門新語言。這話可能有點絕對,但道理我感覺確實如此。有對比才有思考,不然就容易固步自封。這里說的新語言,還一定得是在思路、設計上有獨到之處的地方,自己也必須學習到深度才行。不然其實很多語言的基礎語法其實都是大差不差的,而它們各自獨特于其他語言的優(yōu)勢才有啟發(fā)性。

二、Guava -> JUnit -> Mockito -> 日志框架

五月份的時候其實也算是沉下心來整理了不少細節(jié)東西,主要就是工作中會用到(或者沒有用到,但我感覺有意義)的一些邊邊角角的知識,之前一直沒有系統(tǒng)化地去學習一下。具體來說就是圍繞著軟件工程實踐過程中的一些工具庫、單元測試、日志相關的學習。

先是撿起了之前學了一半的汪文君的 Guava 教程啃完了。其實目前也只是作為自己一個知識儲備,實踐的話,不得不說不算深入。單論工具庫,很多人都說沒必要深究,只用些簡單的功能,用到的時候看看就可以了。暫不論這些觀點到底正確與否,不過我學習的目的主要還是感覺自己缺少這方面對類庫的“審美能力”——如何區(qū)分一個庫的設計的好壞;以及更進一步的——如何自己去設計一個使用方便、可讀性優(yōu)秀、設計良好的庫的“落地能力”。而對于這些能力的學習,我個人經(jīng)驗只是靠自己思考或者讀書、看教程視頻之類的方法是很難的。一方面是這些資料確實也相對較少,另一方面就是這些經(jīng)驗也許又必須通過源碼閱讀看得多了才有感覺。自己目前只是暫且在這塊留下一個相對深入的足跡吧,日后如果想進一步學習,也就有了一個對比的標桿。

JUnit 5

然后就是把汪文君的 JUnit、Mockito 教程也學習了一下。自己之前一直有在想項目重構過程中的問題:工作中體系化的單元測試基本就是沒有,導致就是開發(fā)過程中很多問題;而沒有單元測試這個事實又和整個架構形成一個循環(huán),導致代碼沒有按照可測試的方向發(fā)展,螺旋向下增加后續(xù)想添加單元測試的難度。學習的目的就是希望能經(jīng)過這些學習,慢慢加強自己對這個領域的思考。有機會的話,可以在自己個人的項目里面進行實踐。不過因為自己沒有真正經(jīng)歷過完善的單元測試下開發(fā)的過程,很多東西也還是在個人學習、摸索的過程中,不得不承認會有很大的限制性;如果沒有這樣的工作機會的話,日后有機會還是得寫寫大點的個人項目,然后把這些學習融入進去,才能體會到這些規(guī)范對于開發(fā)過程的幫助吧。編程嘛,實踐才是最重要的,只是目前的自己還是很難找到一個讓自己長期投入進去的項目。

而學習日志框架也是出于工作中遇到的各種找日志難、爆磁盤等問題后,想系統(tǒng)地學習一下日志框架本身提供哪些功能供開發(fā)者使用。自己以前對于日志框架的認識確實很淺薄,不得不說,就算不學太深,明白框架本身的能力范圍也很有意義。知道框架能做什么,才能夠在遇到相應問題時想到,然后深入去學習。

總體來說,這部分學習主要的目的還是給自己在工程實踐過程中的查缺補漏吧,感覺自己這方面能力還是相對較弱,還是得多在寫代碼實際的磨練中成長。

三、JavaFX -> FXGL -> LibGDX -> Unity 和 C#

接下來就是一些自娛自樂的學習了——關于游戲開發(fā)的學習。

其實因為自己玩游戲比較多,現(xiàn)在也逐漸走到了一個俗話叫做“電子 ED”的階段,很難對自己感覺沒有新意的游戲打起興趣,就一直想能不能自己在業(yè)余時間可以把一些有意思的想法落地實踐一下。那么要落地的話,就得學習一些游戲開發(fā)的技術了。

以前有嘗試過直接上手 Unity,感覺主流的教程和自己的目標不太一致——一般網(wǎng)上的教程都是帶你把常用的工具功能跑一遍,常用 API 使用過一遍。這樣跟教程操作下來,大部分的內容都很散(游戲本身就涉及多個方面——代碼、建模、動畫),自己腦海空空,留下了印象但是還是很難自己從零開始,真正寫一個自己的游戲。我自己的想法其實還真不是去游戲行業(yè)就業(yè)什么的,就是想自己寫點代碼,在游戲機制上做點創(chuàng)新的嘗試罷了。其實我理想中最簡單的形式,那就是類似放置類游戲(Idle Game)那種,只需要實現(xiàn)基本游戲本身的游玩邏輯即可。

這個時候自己就感覺到自己缺少的,可能還是和客戶端(不管是移動端還是網(wǎng)頁端)相關的開發(fā)經(jīng)驗。因為缺少這些,在界面開發(fā)過程中就很迷?!绾闻c后端交互,如何實現(xiàn)界面效果等等——完全一無所知。所以自己就想了一下大致的學習方向應該如何:雖然安卓、iOS 之類的沒學過,但之前也試過學習前端的知識來實現(xiàn)(甚至用 js 寫過一個網(wǎng)頁掃雷),同樣感覺大量知識糊臉的感覺很容易讓自己迷糊。于是就大致在 Java 體系內尋找解決方案,因為之前也接觸過一些 Swing 的開發(fā)(用《Java 核心編程》上教的 API,拼湊了一個五子棋的游戲),所以就想能不能用更加新近的 JavaFX 來開發(fā)練練手。

Java FX

于是之前就在嗶哩嗶哩上找了 aimls 的那套超長的 JavaFX 教程(200 多集)啃,啃到七八十集的時候(學完綁定再加幾集)就沒學下去了。今年五月份就是從這里重新?lián)炱饋砜?,老老實實?200 集以內的內容學完了。后面一些音效相關的感覺和我自己目的距離較遠,就暫且沒看,以后有用到再具體看。不得不說,這樣一番折騰下來,倒是確實讓自己心態(tài)平靜不少。之前多多少少有些急功近利的思想,總想著短時間內“整個大的”;但真正踏踏實實每天花些時間跟著敲完代碼,最后真正學完的感覺,真的讓我體會到了“千里之行始于足下”的感覺。

不得不提,其實五月到今天以上所有其他的學習,都是在這個學習 JavaFX 經(jīng)歷之后的。正是這之后我才更愿意多寫寫代碼。之前很多時候是寧愿讀編程相關的書、敲讀書筆記或者看視頻學習,也不愿意按書上、視頻里的內容寫代碼(雖然有過,但是相對來說更不情愿)。

學習了 JavaFX,就從它 API 的使用過程中,體會到了 GUI 系統(tǒng)的一些基本的設計要點。接著就是想要學習游戲引擎相關的內容了,我就在 Java 體系中找到了 LibGDX 和 FXGL。LibGDX 是 Java 游戲引擎中比較知名的一個了,Steam 上大火的卡牌 rougelike 游戲《Slay the Spire》(殺戮尖塔)就是使用的該引擎。而 FXGL 則是基于 JavaFX 的游戲引擎(正因為它我的 JDK 升到了 Java 17)。

最一開始是考慮從 LibGDX 入手的,因為相對來說更成熟,有完善的文檔和開源商業(yè)級案例,以及許多配套的開發(fā)工具。但是因為六月初網(wǎng)絡的原因,libGDX 的那個項目初始化工具一直下不下來,就先用 FXGL 學習了(直接 Maven 導入依賴還是方便)。后來正常下載了 libGDX 的項目初始化用的 jar 后,就也開始學習 libGDX 相關的內容。目前還在學習過程中,中文互聯(lián)網(wǎng)上感覺也是相關教程比較少。相比成熟的 LibGDX,F(xiàn)XGL 反而在 B 站有 LeeWyatt 個人出的一套教程。

最終工程實踐上,那肯定還是 Unity、Unreal 這些引擎社區(qū)規(guī)模最大了。因為自己之前簡單學過一點 Unity,所以目前也在一邊學些 C#,為之后進一步學習做準備。學習 C# 的過程,又是進一步感覺 Java 語言本身特性發(fā)展緩慢…… 不過畢竟語言的使用規(guī)模和整個技術棧、社區(qū)的發(fā)展都密切相關,所以倒也很好解釋為什么今天的中文互聯(lián)網(wǎng)上,C# 教程大部分都和 Unity 掛鉤……

四、關于八股文和工作實踐

流水賬寫了這么多,基本聊完了這段時間技術方面的學習,談談這段時間的一些想法吧。

在五月份之前,其實自己在做的事情主要就是整理這些年來學習的面試八股文相關的知識。前面也提到自己以前更傾向于讀書、看視頻學習,所以也不得不說,看了不少和編程相關的書籍。但是“讀萬卷書,行萬里路(寫萬行碼)”卻沒做到,看了一堆八股文的知識,卻填補不了我內心里的很多迷惑。

孔子有云:“學而不思則罔,思而不學則殆”。自己之前的經(jīng)歷正是看了許多偏向面試相關的內容(虛擬機、各種數(shù)據(jù)庫底層實現(xiàn)),而這些又不太方便在實踐過程中加深印象,就因為看得多寫得少忽略了很多細節(jié)。所以就得一遍一遍去讀,從此給自己留下一個和自己認知范圍斷層的空中樓閣,然而這些知識和自己的實踐過程卻顯然存在一個落地的斷層。不得不說,自己如今愈發(fā)感覺這般下去危害無窮。所以前文也提到,感覺未來終究還是需要自己從零開始打磨一個個人項目出來。

這問題一方面是剛才說的思學結合的問題,還一方面就是感覺到在這樣的過程中,自己的視野也就被互聯(lián)網(wǎng)主流內容限制住了。當前編程相關的資料,大部分都是面向初學者(比如培訓班教學或者面試題),要想專研深入一點,那就得看書。而對于很多新興的或者相對不熱門的技術,中文書籍又是相當稀缺甚至沒有的。所以總得讓自己沉下心,去閱讀英文文檔或者書籍,然后親自實踐出真知,這樣才可能打破這層邏輯給自己打造的信息繭房。

前幾天剛好在工作過程中也碰到了 Redis 大 key 的刪除操作超時的問題,之前正好在面試題整理時也寫過相關的,但只是看書和博客,沒有太深入的體會。線上排查這些問題才更加切身感受到這些設計的目的,就更加感覺到以面試為目的學習這些知識未免過于功利,還是需要多結合實際代碼過程,去慢慢把知識內化成自己的認知體系一部分。

編程學習也是需要“但行好事,莫問前程”的心態(tài)啊~

五、游戲以及游戲相關

文章進入尾聲了,也聊聊最近這周末的個人的一些思考和實踐吧。

前面學習的過程中,倒是也一邊打了不少游戲。之前基本就是每日打打《戰(zhàn)爭雷霆》《原神》,其實快到游戲末期,發(fā)現(xiàn)走到游戲性被數(shù)值消磨掉的時候,基本就是我退坑的時候了。

《戰(zhàn)爭雷霆》是打到空戰(zhàn) IV 發(fā)現(xiàn)飛機最少也需要 40000 多研發(fā),而我沒氪金幣機和高級賬戶玩街機空戰(zhàn)上加成卡也就最多幾千(不想玩得太累,就沒去打歷史模式),這樣算也要打十幾局才能解鎖新飛機,實際只會更久。更不要說買飛機和改裝需要的銀獅幣,要形成戰(zhàn)斗力起碼就得幾十局了。頓時感覺自己沒那么多時間耗在這上面,然而如果讓我自己氪金,又感覺氪金也是爬科技線很慢的樣子,性價比不高……所以最近也玩的少了,也就每天簽個到,偶爾興致來了就打一局守衛(wèi)或者街機。游戲倒是還留在電腦上,也沒卸載。

戰(zhàn)爭雷霆

《原神》則主要是游戲內容基本被我消耗光了,剩下就是我認為無意義的肝極品圣遺物刷深淵的過程,所以直接卸載了。當初原神剛出后一段時間的時候其實試了下,但畢竟也玩過《塞爾達荒野之息》,蒙德早期的體驗相比之下還是差點意思,就沒玩下去。春節(jié)時候看幾個表弟在玩,就發(fā)現(xiàn)幾個新地圖的機制還是有點意思,春節(jié)過后剛好有段時間沒啥想玩的游戲,就又下回來試了一下,雪山那邊的探索感覺游戲設計上確實有進步,就玩下去了。然后就玩到現(xiàn)在,主線任務,支線任務,角色任務都做了許多(當然,不可能是 100 % 的),角色的一隊(雷國)二隊(凌華+夜蘭+羅莎+砂糖永凍)也基本成型,就感覺可玩的東西基本都差不多接觸過了,再用漫長的時間去每天用完體力換經(jīng)驗摩拉和圣遺物,以及清空每日委托,在我看來已經(jīng)沒有太大的意義了,不過是類似“1 級的時候用【破損的木棍】打【小龍蝦】,100 級的時候用【傳說級(你想加的各種定語)奔雷法杖】打【史詩霸王無敵巨鉗蝦】”之類的把戲罷了。于是為了避免浪費時間,這周末就卸載了。

現(xiàn)在玩游戲的心態(tài)也確實和以前不一樣了,總是考慮不能太花時間。之所以《原神》《戰(zhàn)爭雷霆》這兩個游戲最近玩的比較多,也正是因為《原神》是 PC、手機雙端游戲所以可以利用一下通勤時間,而《戰(zhàn)爭雷霆》守衛(wèi)模式和街機模式一局就二十分鐘不到。而耗時間的游戲倒也不是不玩,只是需要對于我來說足夠新穎或者說有意義。結果有趣而又讓我深思的就是——這些我以不花時間為目的玩的游戲,反而吃掉了最多的時間。

現(xiàn)在來回想,《戰(zhàn)爭雷霆》可能是因為對我而言屬于擬真和娛樂性結合比較好的載具戰(zhàn)爭模擬游戲,相對有價值一些(雖然玩到被數(shù)值卡脖子的感覺還是很不爽);那《原神》游玩過程中的時間到底有多少算是真正給我?guī)肀容^新奇的體驗呢?可能是一些地圖上的任務,或者地圖設計本身的機制,抑或是不同角色技能的新鮮感,但不得不承認,大部分的時間還是消磨在了每日任務、體力換資源的過程中。重復地去打區(qū)域 BOSS、地脈之花、特定怪物去收集升級所需的材料,才是主要的時間去向。

這也許就是我暫時退坑的原因吧,未來也許有時間會下回來看看,但估計也是像自己玩《Warframe》那樣,到了內容耗盡之時也就到了隔多個版本才看看的階段。這也許就是數(shù)值驅動 RPG 的游戲在我這里共同的結局吧。

不過話又說回來,在對這種游戲的吸引力分析的過程中倒是也給我不少啟發(fā)。網(wǎng)絡游戲很傾向于使用的手段,就是需要合理利用每日任務之類的手段使沉浸到游戲有趣部分而開始關注最大化游戲收益的你愿意在其中消耗時間與精力。那么,吃了游戲策劃喂的那么多的 * ,我們能不能找到一個類似的手段,讓自己去吃學習過程的艱難困苦呢?我想應該也是可以的,之所以我現(xiàn)在又重新開始寫點文章發(fā)一發(fā),一部分也是出于這個目的??赡懿荒軋猿痔?,其實也無所謂,寫下來的東西就是收獲,就像游戲里面漲的經(jīng)驗一樣,只是現(xiàn)實世界你得自己綁定一個你想要的目標,設計屬于自己的任務,讓你的生活成為感興趣的有意義的游戲。

我自己主動建立類似游戲的正反饋機制的過程其實就是之前 Git 上面盡量每天寫點代碼或者讀書筆記,然后就是 LeetCode 上天然的每日一題。也不要求自己真的就必須每天去做,重要是要建立自己一個小而頻繁的習慣。當你習慣了小量時,就可以慢慢加量了。目前來說,Git 倉庫堅持相對較好,LeetCode 馬馬虎虎也刷了近 800 多道題了。這個過程必然會有失敗,注意力稍微變換目標,可能之前你想做的事情就中斷了,但這次的失敗未嘗不是下一次的嘗試的經(jīng)驗呢?其實用來打卡的 Git 倉庫我就建了 3 個了,最近這個才培養(yǎng)了我寫代碼的習慣。

所以希望自己能夠把最近這股勁頭持續(xù)下去吧。本文也是臨時起意,本著簡單上手先做起來的想法寫的,結構或者行文多少凌亂,能看到這里的話,也是辛苦了~ 籍此整理一下最近的思緒,如果能對讀者有所幫助就再好不過啦~


雜談 - 近兩個月的編程學習與其他的評論 (共 條)

分享到微博請遵守國家法律
镇平县| 浦县| 灵寿县| 社旗县| 乌兰察布市| 安西县| 乌苏市| 博客| 鸡东县| 青海省| 凤凰县| 双流县| 丹江口市| 盐山县| 凤山市| 封开县| 伊川县| 彩票| 南郑县| 利辛县| 汝州市| 栾川县| 陇南市| 禄丰县| 嵊泗县| 蒙城县| 交城县| 金山区| 阳泉市| 泰宁县| 茌平县| 包头市| 菏泽市| 德惠市| 安陆市| 全南县| 德令哈市| 兴安盟| 六安市| 三河市| 确山县|