自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

『頭破血流』學(xué)編程語言(Rust 篇)

開發(fā) 前端
學(xué)習(xí) Rust 已經(jīng)有一段時間了,斷斷續(xù)續(xù)地在業(yè)余時間造了一些輪子。通過這一系列的練習(xí)和仿造,對于如何學(xué)習(xí)新的編程語言有一些新的感悟。這篇文章講的方式并非是捷徑,也不是什么 7 天精通,而是繼續(xù)使用笨辦法地方式來進(jìn)行學(xué)習(xí)。

 [[340170]]

學(xué)習(xí) Rust 已經(jīng)有一段時間了,斷斷續(xù)續(xù)地在業(yè)余時間造了一些輪子。通過這一系列的練習(xí)和仿造,對于如何學(xué)習(xí)新的編程語言有一些新的感悟。這篇文章講的方式并非是捷徑,也不是什么 7 天精通,而是繼續(xù)使用笨辦法地方式來進(jìn)行學(xué)習(xí)。

從我的角度來看,前者的介紹過于簡單,只是告訴了你應(yīng)該這么做,但是沒有說要怎么做。而后者則難度太大,對于大部分的人來說,幾乎是不會想著去做這樣的事情。而本文的難度呢,剛好介于兩者之間,至于是不是中間嘛,也不好說。難度,因人而異,因時間也有區(qū)別。

對于編程和計(jì)算機(jī)理解越來越深刻,那么原先難度適中的事情,因?yàn)樽鲞^會變得更加簡單;而原先復(fù)雜的事情,如果我們還沒做過,那么我們可能還覺得它依然相當(dāng)?shù)膹?fù)雜。

為什么學(xué)習(xí)新的編程語言?

工作多年,我們依然會和同事、朋友討論到:業(yè)務(wù)是永恒的,技術(shù)是永遠(yuǎn)在變的。所以,成為一個業(yè)務(wù)專家更容易、更持續(xù),成為一個技術(shù)專家更難、更需要持續(xù)提升。選擇很難,因?yàn)槲覀儾皇腔鹦侨?,也沒有上帝視角。所以,成為一個技術(shù)上的專家,我們需要不斷地接觸一些新的東西,接受一些新的概念。其中的一種模式便是,人們口中經(jīng)常說的:每年學(xué)習(xí)一門新的語言。

從個人的角度來看,這是一個非常 SMART (具體、可度量、可實(shí)現(xiàn)、相關(guān)性、有時限)的目標(biāo)。所以,它還會存在這么一些優(yōu)點(diǎn):

  1. 保持學(xué)習(xí)的習(xí)慣。
  2. 為技術(shù)熱情添到香油。
  3. 學(xué)習(xí)不同的編程模式。
  4. 拓展職業(yè)機(jī)會和前景。

除此,從職業(yè)雞湯上來說,就是:機(jī)會是留給有機(jī)會的人。如果你學(xué)習(xí)了一門新的編程語言,那么未來有相關(guān)的機(jī)會,你更有可能觸摸到。

若是你將學(xué)習(xí)新的編程語言,視為非?;馃岬氖裁磧?nèi)卷化、奮斗逼之類的說辭,那么我倒是沒啥好說的。有的人是真的在 “奮斗”,有的人是想了解各種有意思的東西。從我的角度來看,學(xué)習(xí)新的編程語言和上述的說辭是不存在關(guān)系的 —— 不存在競爭,只是加一條賽道,笑。

尋找語言學(xué)習(xí)的高效路徑

在上文中,我提及的第一篇文章《學(xué)習(xí)的藝術(shù)——如何學(xué)好一門技術(shù)、語言》在今天對于我來說,已經(jīng)是一個相當(dāng)浪費(fèi)時間的事情 —— 重復(fù)勞動。文中提到的方法,無非是造重復(fù)的輪子、重寫舊的應(yīng)用,這種方式和諸如在 30 天里去練習(xí)不同的項(xiàng)目,都只是在特定的場景之下,出于特定的目標(biāo)而練習(xí)的垃圾產(chǎn)物。隨著我們的成長,生活和工作上的一些事情,會占據(jù)我們更多的時間。盡管,我尚未被這些問題困擾著,但是我已經(jīng)有了一個又一個的方案。不過,我相信你們都會有這些問題。

簡單來說,我們需要即學(xué)好一門編程語言,又不重復(fù)勞動。所以,可行的方式是學(xué)習(xí)新的語言,并在新的編程語言里尋找新的輪子。諸如于《『如何同時學(xué)會兩門編程語言?』》就是一種不錯的方式,但是對于多數(shù)的人來說,它有點(diǎn)難。不過,從個人的角度來看,如果你是選擇從一個 XML 解析、JSON 解析開始的話,可能就沒有那么難。但是,就是在重復(fù)的造輪子。

這么一圈廢話下來,其實(shí)我們的結(jié)論就是:在語言的適合場景下,造適合的輪子 —— 這可能意味著一定的時間成本。比如,用 JavaScript 來處理非關(guān)系型數(shù)據(jù),用 Go 來開發(fā)跨平臺命令行工具,用 Rust 來開發(fā) WASM 應(yīng)用等等。

高效路徑

在我嘗試了一系列的造輪子工作之后,我有了一個初版的模型(基于 Rust 語言)。我暫時劃分了四條路徑:

  1. 工程實(shí)施。即使用該語言時,開發(fā)應(yīng)用時需要哪些實(shí)踐。
  2. 應(yīng)用開發(fā)。理解完整的開發(fā)應(yīng)用所需要的知識體系。
  3. 框架設(shè)計(jì)。使用該語言如何進(jìn)行各種抽象設(shè)計(jì)。
  4. 語言練習(xí)。要么用它來寫語法解析,要么來解析這門語言。
  5. 領(lǐng)域特定編程/場景編程。即尋找適合這門語言的場景。

作為初版,這條路徑可能不一定能 match 上你的需要,但是隨著我們不斷也提升,我們終將能形成一個更完整的路徑。

工程實(shí)施

從工程實(shí)施,這個角度來看,我們所要掌握的是一些基本的編程能力:

1.自動化測試。諸如于單元測試、集成測試等等,以幫助我們開發(fā)出高質(zhì)量的應(yīng)用,并節(jié)省 debug 的時間。

  • TDD(測試驅(qū)動開發(fā))。同上。從個人的角度來看,若是掌握 TDD 這一項(xiàng)技能,可以編寫高質(zhì)量的代碼。
  • 測試覆蓋率。
  1. 持續(xù)集成。真實(shí)的軟件開發(fā)需要持續(xù)集成,這也是我們學(xué)習(xí)編程語言時,要掌握的工程技能。
  2. 構(gòu)建管理。尋找適合于這門語言的構(gòu)建體系,以幫助我們構(gòu)建出可信的軟件。

如我們在使用 Rust 開發(fā)應(yīng)用時,就可以使用 GitHub + Travis CI 的方式完成對于持續(xù)集成的了解;結(jié)合 Justfile/Makefile 等,完成自動化的構(gòu)建。

應(yīng)用開發(fā)

應(yīng)用開發(fā)是基于真實(shí)項(xiàng)目的角度出發(fā),來完成對于語言的練習(xí)。這些內(nèi)容包含了:

  • 自動化部署。主要用于學(xué)習(xí)在真實(shí)項(xiàng)目下,如何提交效率。
    • 容器化部署。
  • 分層架構(gòu)。如何合理的劃分項(xiàng)目的目標(biāo)結(jié)構(gòu),常見的方式有兩種:
    • MVC 架構(gòu)。傳統(tǒng)的三層架構(gòu)
    • 整潔架構(gòu)?;诔橄蟮男问皆O(shè)計(jì)的架構(gòu)
  • DevOps 體系。根據(jù)需要,完成從需求到上線流程的支持。如:
    • 應(yīng)用性能監(jiān)控。
    • 日志。

不同的語言之間,或許存在一些差異,但是從最終的情況來看,它們都需要提供一致性的接口,或者是采用一致性的接口。如對于數(shù)據(jù)庫的訪問,使用的接口是一致的;提供 RESTful API,其對于消費(fèi)者來說,也需要提供一致地 API。

框架設(shè)計(jì)

框架設(shè)計(jì)是基于造輪子的需求場景下的路徑。它包含了:

  • 抽象。語言如何進(jìn)行抽象
    • 支持 OO。
    • 不支持 OO。如何使用諸如于 Rust Trait 完成類似的工作
  • 語言無關(guān)。如何進(jìn)行跨語言的設(shè)計(jì)支持。如:
    • 語言無關(guān)的數(shù)據(jù)格式。
  • 模塊化開發(fā)。如何完成跨團(tuán)隊(duì)、跨業(yè)務(wù)模塊的代碼、服務(wù)共享。
  • 包管理/依賴管理。如如何構(gòu)建,并發(fā)布到制品倉庫,實(shí)現(xiàn)復(fù)用。

框架設(shè)計(jì)從理論上來說是稍微復(fù)雜一些。至于有沒有必要,就看你想學(xué)習(xí)到什么程度了。

語言練習(xí)

語言練習(xí)是《如何同時學(xué)會兩門編程語言?》模式之下的一種路徑方式,相對會陡峭一下。

  1. 編寫其它語言/DSL 的解析器。
  2. 使用其它語言編寫該語言的解析器。
  3. 使用該語言解析該語言。

嗯,是不是有點(diǎn)意思了。從場景上來說,當(dāng)我們拿到了一個語言的 AST,然后就可以嘗試去做一些高端的事情。如我在 Coca 里做的自動化重構(gòu)、架構(gòu)可視化等等。

領(lǐng)域特定編程

領(lǐng)域特定編程是在該語言擅長的場景下,做該語言擅長的事情。如 Rust 里的

  1. 跨平臺
  2. WASM
  3. 一門應(yīng)用跨端運(yùn)行
  4. 系統(tǒng)級編程
  • 結(jié)合系統(tǒng)接口,如獲取用戶輸入,并修改輸出。

這依賴于我們識別場景,并知曉出什么時候才是合適的場合。

其它

沒有銀彈,如果有的話,那就不需要人類了。

本文轉(zhuǎn)載自微信公眾號「Phodal」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Phodal公眾號。

 

責(zé)任編輯:武曉燕 來源: phodal
相關(guān)推薦

2022-11-01 18:36:47

2017-05-10 10:54:06

編程CPU自旋鎖

2010-05-12 09:40:59

統(tǒng)一通信市場

2009-07-29 11:27:15

微軟Google云計(jì)算

2015-03-13 10:07:26

WatchAPP

2021-03-23 14:50:16

編程語言Rust漏洞

2018-04-26 10:29:15

白熊視頻

2021-03-18 07:32:51

Java面試項(xiàng)目

2022-03-02 09:49:14

Rust編程語言

2024-03-01 20:16:03

GoRust語言

2018-04-25 19:00:57

白熊視頻CTO脫口秀

2012-09-21 11:38:04

移動互聯(lián)網(wǎng)掙錢

2014-04-04 10:02:34

RustMozilla

2018-12-29 09:45:28

Linux編程語言命令

2023-12-15 14:38:00

GoRust編程語言

2020-10-20 06:48:24

架構(gòu)師CPU服務(wù)器

2019-08-05 14:34:41

編程語言技術(shù)Java

2021-09-18 14:59:58

語言PythonC語言

2024-11-07 10:04:48

2024-07-05 09:00:00

編程語言Rust開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號