自學編程的六點技巧

有一天,我的一個在學編程的朋友問我:“我想快速學習編程,你有什么好的推薦嗎?我曾在上大學的時候自學過編程,這么多年過去了,我意識到我或許是在用最困難的方式去學習和了解編程。本來我完全可以用更快的速度學習。因此,在回顧了過去之后,我寫下了這些年來我漸漸掌握到的關于如何學習編程的一些事情。

4418040-ee7ad0ff468ad548

“快速”

對于“如何快速學習編程”這個問題,其實我真的不知道何謂“快速”。我覺得,通過遵循以下建議,你將很快地學習編程(至少你的成長/進步會快)。但你真的不應該眼中只有“快速”。只追求速度反而會拖你的后腿,讓你自食其果。“快速”學習的唯一可持續方法或許是采用浸泡式教學法。找到一種方法讓自己沉浸在編程中很長一段時間(幾個月?)。為了讓它奏效,你需要不斷推動自己去學習新的東西,并迅速抽身離開。這是編碼訓練營的一個優點。當你出來時,盡管你還不是專家,但你會學得更快。這也可以通過專門的導師教導或與專門的初學者一起學習來實現。

01、讀>寫代碼>讀>寫代碼(日復一日)

關于如何高效學習編程我要給出的第一條建議是在閱讀代碼和編寫代碼之間循環往復。閱讀代碼(書籍,博客文章,開源代碼)將幫助你查看解決方案,了解最佳做法,并大致了解語言或系統。但是在你這樣做之后,你需要自己實際去寫代碼。可以是任何東西。可以是小的編碼練習或業余項目,但確保你能將之付諸于實踐,并用某種方式使用你學到的東西。如果你不這樣做,那么你會發現自己面對編輯器會無所適從無從下手。

這方面的訣竅是讓自己感到不舒服。這是相當痛苦的,但就應該這樣。編碼遵循80/20規則。花80%的時間在20%的代碼或20%你所學的東西上。習慣于這種不舒服的感覺并克服它是關鍵。

這個迭代周期不應該以周為周期或以月為周期發生,而是應該以日為周期。知識等待使用的時間越久,知識這把斧頭就越鈍。等待學習新知識的時間越長,你就越難以將其融入到代碼中。

我推薦閱讀關于通用編程主題的網站是lobste.rs。上面有許多關于許多編程主題的文章。另一個好的網站是Hacker News,但網站時常偏離話題。

02、不要陷入僵局,必要時去請教大神

我最大的錯誤是在學習編程陷入僵局的時候用了太長時間。在被卡住時,我會花很多時間在一些愚蠢的東西或一些我根本上不明白的東西上。有時候我需要花費好幾天時間才能完成這些工作,而原本我可以用這些時間做更多的事情和學習更多的東西,如果我能找到更好的解決方法的話。卡在一個東西上面超過一個小時基本上就是在浪費時間了。

我推薦三件事情以避免僵局。第一是試著總是關于你使用的技術,并總體掌握正在發生什么。通常,當你陷入困境時,意味著你對需要澄清的事情做出了不正確的假設。第二是咨詢互聯網。這一點很顯然,但依然值得一提。在網上查找并詢問有過這個問題的人是一個非常重要的技能。Stackoverflow可以說是互聯網上最好的網站。不要害怕在那里問自己的問題。通常,只要盡力正確地闡述你的問題就OK了。我真的希望以前我能多問些問題,但總是因為害怕會顯得愚蠢而止步。我的第三個建議是向你認識的人請求幫助。通常,你或許已經理解了技術,而且有了問題,但是你可能需要更高層次的上下文才能真正解開謎團。不要膽怯,大著膽子上前去問吧。

例如,當學習Docker時,我花費了大量的時間從頭開始重新構建圖像。我從根本上不明白docker緩存,并用20分鐘時間來等待單個更改到Dockerfile通過。我可能花了8個小時就用在等待構建上。如果我讀過更多關于Docker或問一個知道的人,那么可能我早就搞明白了,還可以在更短的時間內學到更多。

03、為項目而工作

在我的經驗中,沒有什么可以與工作于自己的項目以學習編程更有用的了。除了一些例外,我所知道的所有真正優秀的程序員都有一個習慣就是工作于業余項目(這也可能發生在工作中!)。有了一個點子并試圖實現這個點子是非常具有挑戰性的。它需要很強的自律心。但是,通過嘗試實際做一件事情,你可以學到如何分解問題并應用技術。你面對的各種問題,以及你如何解決它們才真正是所謂的編程。知道編程語言的每一個古怪細節的確是有幫助的,但它只會讓你越來越落伍。此外,想要完成項目的驅動力是繼續學習的動力。從業余項目獲得的滿足感遠遠超過你在抽象中學習東西的滿足感。

我對于選擇業余項目的建議是,選擇你感興趣同時你也有想法如何實現的東西。能夠在開始之前表達實現總是有助于保持我的動力。在此旅途之中你一定會學到很多!

04、多鉆研技術,不要總是復制粘貼

有兩種類型的程序員:完美主義者和搬運工。有些人希望一切都是正確的,他們希望完美,他們希望遵循所有的最佳實踐,并寫出漂亮的優雅代碼。他們想要理解每一行代碼。有別于那些不管三七二十一,只要自己的代碼能工作即可,即使對代碼庫有損害的人。平衡這兩種技能是非常重要的。有時你應該深入鉆研一個問題或項目,看看發生了什么。有時你應該讓它工作即可,即使你不知道發生了什么。

每當你花費太多時間在某個東西上時,那就問問自己:我應該采取哪種方法?在大多數情況下,你會想取中間值。你想提供一個好的、堅實的解決方案,同時你可以自信地理解和修改,但沒有耗費荒謬的時間。隨著你作為開發人員的成長,你會更好地明白什么時候就此離開就可以,以及什么時候需要以某些方式完成。

就個人而言,我喜歡我的項目80%完美。如果你的項目是絕對100%完美,沒有一行代碼讓你覺得尷尬,那么很有可能你已經花了太多的時間。

05、多和別的程序員進行溝通交流

學習編程的一個很好的方法就是和其他的程序員交談。不必談論任何特定的內容。可以是你正在學習的東西,可以是你認為很酷的東西,可以是你正在工作的東西,皆可。你會發現很多程序員并不喜歡只是聊編程。這樣做可能會讓你學到很多關于庫,服務,編程語言和模式方面的知識。但是,最重要的是,你將了解到其他人是如何看待編程的。你會發現,你認為理所當然或從來沒有考慮的事情在人與人之間是非常不同的。

如果你沒有什么可談的,那就回到編輯器戰爭或tab vs space的話題。

06、嘗試一切。如果搞不懂的話,那就等6個月。

最后,我要說的是,一直以來在我身上發生著這樣的事,我嘗試過很多東西,但我就是不理解。在用30分鐘嘗試新的東西后,我會停下來。我想這在起步時是很正常的。但是,我記得很多次,在6個月后(或3個月或9個月),我會回到同樣的問題或技術上,弄清楚如何使用它。這是因為我又掌握了一些我以前不具備的知識,或者因為它只是另一種方式的框架。等待一段時間,然后回去,總是一種最有用的方法。

這方面的一個例子是學習如何使用終端。我記得很長一段時間我都害怕碰到終端,因為我不知道如何使用。我花了一段時間并按照步驟定期地使用它和理解它。當然,如果我認識可以向我解答的人,或者找到一個好的資源來學習,這樣的事情就不會發生!

結語:

這些事情可以幫助新手在他們漫長的旅程中學習編程。我知道我還有更多東西需要學習,并將繼續學習如何永遠地學習。最重要的事情說三遍,請繼續,不要放棄,不要放棄,不要放棄。當然,說說容易,因為學習編程有時可能會令人非常沮喪!不要擔心。這是正常的。每個人都經歷過這樣的心情。

歡迎關注我的公眾號(同步更新文章)DoNet技術分享平臺

閱讀原文

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272715.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AngularJs $anchorScroll、$controller、$document

$anchorScroll 根據HTML5的規則,當調用這個函數時,它檢查當前的url的hash值并且滾動到相應的元素。 監聽$location.hash()并且滾動到url指定的錨點的地方。可以通過$anchorScrollProvider.disableAutoScrolling()禁用。 依賴:$window $loca…

Jquery操作復選框總結

1、獲取單個checkbox選中項(三種寫法)$("input:checkbox:checked").val()或者$("input:[typecheckbox]:checked").val();或者$("input:[nameck]:checked").val();2、 獲取多個checkbox選中項$(input:checkbox).each(function() {if ($(this).att…

java對五排六列考生隨機排座,Java入門第三季6-5擴展練習-隨機字符串排序

原課程地址https://www.imooc.com/video/4254* 擴展練習要求* 利用Collections.sort()方法對泛型為String的List進行排序版本2* 1.創建完List之后,往其中添加10條隨機字符串* 2.每條字符串的長度為10以內的隨機整數* 3.每條字符串的每個字符都是隨機生成的&#xff…

信息安全系統設計基礎第十周學習總結

第八章 異常控制流 (1)控制流:控制轉移序列。 控制轉移:從一條指令到下一條指令。 異常控制流:現代操作系統通過使控制流發生突變來對系統狀態做出反應,這些突變稱為異常控制流。 (2&#xff09…

MVC、 MVP、 MVVM之間的區別

一、 簡介三者的目的都是分離關注,使得UI更容易變換(從Winform變為Webform),使得UI更容易進行單元測試。二、MVC/MVP1 、MVC1、View接受用戶的交互請求2、View將請求轉交給Controller3、Controller操作Model進行數據更新4、數據更…

java散列法的運用實例,Java HashMap compute() 使用方法及示例

Java HashMap compute() 使用方法及示例Java HashMap compute()方法計算一個新值,并將其與哈希映射中的指定鍵相關聯。compute()方法的語法為:hashmap.compute(K key, BiFunction remappingFunction)compute()參數compute()方法有兩個參數:ke…

team geek

1. 轉載自http://book.douban.com/review/6007037/,版權歸丸子(^.^)v所有。 New Google employees (we call “Nooglers”) often ask me what makes me effective at what I do. I tell them only half-jokingly that it’s very simple: I do the Right Thing for…

程序員經典語錄

1.A good programmer is someone who always looks both ways before crossing a one-way street. (Doug Linder)好的程序員即使在過單行道時也總是會環顧兩邊。2.Don’t worry if it doesn’t work right. If everything did, you’d be out of a job. (Mosher’s Law of Soft…

數字圖像處理應用matlab,數字圖像處理與應用(MATLAB版)

第 1章 緒論 1n1.1 圖像的概念 1n1.2 圖像的分類 2n1.3 圖像的表示 2n1.3.1 圖像信號的表示 2n1.3.2 數字圖像的表示 3n1.3.3 顏色模型 4n1.4 …

HDU 3948 不同回文子串個數

集訓隊論文中有求不同子串個數的做法,就是掃一遍height數組,過程中根據height數組進行去重。對于本題也是雷同的,只是每一次不是根據與排名在上一位的LCP去重,而是與上一次統計對答案有貢獻的后綴進行比較去重。 幾組數據 abacaba…

如何成為一名優秀的程序員?

1、理解技術債務技術債務就像信用卡一樣,會有很高的利息率,時間越長,修復所花的代價就越大,程序員對這個要有深刻的認識。同時團隊應該培養一種保證設計質量的文化,應當鼓勵重構、同時也應當鼓勵其它有關代碼質量的實踐…

php 發郵件附件pdf,php – 使用TCPDF發送電子郵件附件 | 碼農網

我有一個簡單的課程申請表,填寫完成后,會向申請人發送一封電子郵件,并附上他選擇作為pdf附件的課程的費用報價.我正在使用TCPDF并使用會話變量將數據從表單傳遞到庫.內容采用 html 格式.生成PDF并根據需要作為附件發送.問題是它是空白的..只有頁眉和頁腳在文檔中.在 linux 中尤…

數據庫同步傳輸軟件

Navicat轉載于:https://www.cnblogs.com/jizl/p/4995959.html

DoNet 高效開發必備開發工具

工欲善其事,必先利其器,沒有好的工具,怎么能高效的開發出高質量的代碼呢?本文為 ASP.NET 開發者介紹一些高效實用的工具,包括 SQL 管理,VS插件,內存管理,診斷工具等,涉及…

php eval 語法錯誤,PHP eval和捕獲錯誤(盡可能多)

我找到了一個很好的替代方案/答案 .首先,讓我首先說當我設置error_reporting(E_ALL)時,nikic的建議有效;通知顯示在PHP輸出中,并且由于OB,它們可以被捕獲 .接下來,我發現了這個非常有用的代碼:/*** Check t…

防止表單重復提交的解決方案整理

用戶在操作表單Post數據時往往會出現表單數據重復提交的問題,尤其在Web開發中此類問題比較常見。刷新頁面,后退操作以前的頁面,單機多次按鈕都會導致數據重復提交。此類問題是因為瀏覽器重復提交HTTP請求導致。下面列出了四種比較常用的解決方…

免費字典api ,查詢漢字完整信息

最大最全的新華漢語詞典,字典api根據接口列表返回的漢字id,查詢漢字完整信息。 接口名稱:字典api 接口平臺:第三方api 接口地址:http://v.juhe.cn/xhzd/queryid 支持格式:json/xml 請求方式:htt…

python正則去除換行符,關于python:用于刪除換行符的正則表達式

我是Python的新手,我遇到了正則表達式問題。 我正在嘗試刪除文本文件中每行末尾的換行符,但前提是它跟在小寫字母后面,即[a-z]。 如果該行的結尾以小寫字母結尾,我想用空格替換換行符/換行符。這是我到目前為止所得到的&#xff1…

收集一些程序員勵志經典名言

1、作為一個真正的程序員,首先應該尊重編程,熱愛你所寫下的程序,他是你的伙伴,而不是工具。2、程序員可以讓步,卻不可以退縮,可以羞澀,卻不可以軟弱,總之,程序員必須是勇…

Android develop 國際化

轉自別人的一片文章,出處以找不到了,覺得寫得不錯,記錄一下 一、概念 1.Internationalization(I18N) 國際化 使得App在不改的源碼、資源文件的情況下,能夠適應各國、各文化、各語言 是L10N的基礎 2.Localization(L10N) 本地化 為A…