如何快速學習複雜事物的指南 - Baldau

banq發表於2021-04-09

在擔任軟體工程師的20多年裡,我一直被要求或期望我學習複雜的東西。卡爾·紐波特(Cal Newport)在他的《深入工作》(Deep Work)一書中談到知識經濟時說:“如果不學習,就無法繁榮。” 啟動了新的語言和平臺,專案提出了新的要求,庫和框架釋出了新版本⁠–在軟體中,唯一不變的是變化。
免責宣告⁠-我是一位經驗豐富的學習者。我嘗試一些東西,當它不起作用時,我嘗試其他方法,並在“可行”後立即進行下一步。這有助於我在每次迭代中建立一個更加清晰的思維模型。這對我有用,但是我知道學習風格很多,而且可能對您不大有用。
 

確定目標

  • 將您要嘗試學習的所有內容分解成用例。從耗時數分鐘的一口大小的塊開始,然後逐步增加它們。“學習python”太廣泛了。安裝python,列印hello world,安裝和使用依賴項,從檔案中讀取等內容的定義更加明確,完成後更容易知道,從而有助於增強進度。
  • 考慮一下您需要學習多少才能完成每一項。將事情歸類為“需要更多資訊”和“暫時跳過詳細資訊”可能會有所幫助。例如,我不知道python依賴性管理的工作原理,但是我可以依靠它的工作並在沒有這些知識的情況下取得進展。
  • 首先嚐試一些東西。您可能會擔心自己會搞砸,但是以我的經驗,計算機很難損壞。使用已經必須猜測的思維模型。如果不是,那麼您可以響應錯誤訊息。
  • 休息一下。如果您正處於起伏和巡航中,請務必放心⁠—保持順暢。但是,如果您發現自己失去了動力,側身移動或翻新了舊地面,請讓大腦休息一下。如果您以較小的增量來定義目標,那麼您應該能夠感覺到自己取得了一些進步,並騰出時間來處理所學到的東西。 

 

閱讀完整的手冊(RTFM),但不要嘗試將其全部內部化

  • 得到要點。如果您正在學習已釋出的文件,請閱讀介紹,每個節/章的第一和最後一段以及每個段落的第一句以及提供的程式碼示例。如果您感到困惑,請稍作備份,並在必要時進一步深入。
  • 注意標註。標註和提示可能會很有幫助。通常在容易出錯的地方提供它們。
  • 建立一個“稍後閱讀”列表。我經常會發現自己對系統相關部分的工作方式感到好奇,但是除非我需要了解完成我所關注的用例的知識,否則我會推遲。我在待辦事項應用程式中保留了一份閱讀清單,但是那裡有很多解決方案。 
  • 使用“入門”指南。這是“略讀”規則的例外。入門指南通常是針對人們剛剛開始他們的學習之旅,其目的是給你只是足夠的資訊來實現單次使用的情況。不要略過它們⁠-閱讀全部內容,並按照提供的示例進行操作。在GitHub上檢視樣板專案。
  • 不僅僅是docs。如果存在影片,播客和直播,則它們都是傳遞資訊的一種有價值的方式。嘗試使用其他媒體,然後找到最適合您的媒體。努力以2倍的速度觀看/收聽音樂,但放慢腳步,尋找有趣的部分。

 

學習深入(一點點)
因此,您已經信任自己的本能並剛剛開始,但是您立即遇到了障礙。可能是找不到命令,NullPointerException或 網頁上的404。您如何從系統中獲取更多資訊?

  • CLI幫助。大多數命令列介面(CLI)將返回部分內容,幫助,--help或-h。關於引數及其順序的線索可能有用。 
  • 潛入日誌。大多數系統會將某些輸出記錄到控制檯上或磁碟上某個位置的標準輸出中。閱讀日誌就像閱讀有關係統正在嘗試執行的操作的故事一樣。
  • 提高冗長程度。如果您已經閱讀了日誌,但不確定該如何處理,請嘗試增加輸出/日誌的詳細程度。您通常可以找到有用的線索和新的領域進行研究,這將使您更接近問題。
  • 搜尋錯誤訊息。其他人可能也遇到了同樣的問題,您可能會在Q&A網站上找到線索,例如Stack Overflow,討論或支援論壇,或者在GitHub中公開問題。確保引用錯誤訊息,並嘗試刪除特定於用例的部分,而不是更普通的部分。
  • 閱讀原始碼。如果您有權訪問系統的原始碼,那麼閱讀它可以幫助您瞭解系統期望如何使用您的用例。不要試圖理解每一行,而要使用類和方法名稱作為系統名詞和動詞的訊號。對於沒有良好日誌記錄,文件或幫助的內部工具,這可能是唯一的選擇。不確定程式碼是否是開源的?嘗試在您語言的程式包管理器(對於Node.js為npmjs.org,對於python為pypy.org)中搜尋庫,或者在您喜歡的搜尋引擎中嘗試“ GitHub {programming language} {package name}”。

 

不要害怕尋求幫助
首先做功課-以前可能有人遇到過,特別是如果您是這個主題的新手。以下是您尋找答案時的良好資源:

  • 文件(請參閱RTFM)
  • 常見問題
  • 社群論壇
  • 聊天記錄
  • 搜尋

透過記錄問題和一些相關的上下文,使其他人容易獲得幫助。
  • 你想達到什麼目的?
  • 您期望什麼行為,您觀察到了什麼?
  • 你嘗試了什麼?
  • 您的執行上下文是什麼?(作業系統,版本,外掛等)
  • 這是現實生活中的一個(較舊的)示例:https : //github.com/Kong/kong/issues/1186 

 

反思過程

  • 總結並分享您學到的知識-這是所有知識工作者的好習慣
  • 您在哪裡度過了無法幫助您達到目標的時間?
  • 是什麼讓您再次學習變得更容易?
    • 文件澄清?介面有變化嗎?
    • 您可以修復它們(內部或開放原始碼)或建議更改以使將來的學習者更容易嗎?

 

總結
學習是一個反覆的過程。首先定義您的目標,然後將它們分解為幾小塊。閱讀任何可用的文件,以獲取一定的背景資訊,但不要一口氣消化它們。不要害怕嘗試從系統中獲取更多資訊。預算用盡時尋求幫助,但要清楚自己的要求。建立反饋迴圈以改善您和未來學習者的學習過程。 



 

相關文章