學習代碼是要多記還是要多敲?

wobushinv


作為一個寫了十幾年程序的老碼農,寫代碼靠的是邏輯思維,加上穩固的編程語言基礎。編程其實和學習英語有一定的相同之處,但又有不同之處,英語的學習可能夾雜著記憶成分,編程百分90以上靠的是邏輯思維加上強大的實踐動手能力,很多人覺得先把理論掌握透徹了再去學習編程會快很多,有過幾年編程經驗的人可能對自己剛入行的時候多少都會有點記憶,真正讓自己徹底能開始寫代碼絕對不是從一次次理論得來的,主要還是經歷一次項目實戰而且開始都有一種無形的壓力,隨著時間的推移發現特別是項目進行到一半的時候,發現編程沒有想象的那麼難,還是完全可以搞定的,甚至對於自己來講也是能負擔一部分的自信,這就是實戰的威力,很多人基礎很差但是經歷了一次這種項目的磨練,成長的也會快速很多。

編程玩的就是邏輯思維,很多人說學習編程數學好的會佔據點優勢,這句話本身是有道理的,因為數學邏輯強直接切入到編程學習中具有天然的優勢,這都不是主要的,編程入門學習的過程其實是培養編程語感的過程,一旦有了感覺寫代碼或者設計模塊就會變得快很多了,編程能力的提升只靠多記是不可能有多大進步,在軟件企業裡面會有這樣一種現象,培訓出來的學生遇到在機構裡面學過的就會做的非常快,有新的模塊出來就容易變得手足無措,自學出來的會好很多,畢竟自學的過程就是一種自我尋找編程語感的過程,培訓大部分屬於灌輸性質的,甚至很多極端的企業直接對參加培訓的學生排除在外。

代碼的學習在沒有項目的情況下,要找一些練手題目,練手的時候不要在紙上謝謝而已,還要在電腦上形成真正的代碼實現,不能僅僅是做一些模擬代碼,要強迫自己拿出最好的學習狀態,才能真正突破,只是學習理論只會在水上漂著永遠學不到真正的編程能力,很多理論學的很棒的學生在考試的時候成績很高,一旦上機就抓瞎,因為在真正實現代碼的感覺和直接理論的學習是完全兩碼事,曾經有個同事寫代碼特別費勁,後來覺得自己真的不適合寫代碼就去複習考研去了,結果真考上計算機系的碩士成績還特別好,寫代碼就是不停在機器上實踐操作。

還真見過背誦常見的代碼的大學生,後來發現稍微一變通就不行了,最後選擇了放棄代碼從來不是背誦出來的,編程代碼的變化概率太高了,沒有邏輯變通系統很難掌握的全面,但不能因此走極端放棄理論的學習,直接上機亂搞一通,這也不是學習代碼的好習慣,首先有理論基礎然後構建自己的理論體系,然後帶著自己的想法去用代碼實現,越是有經驗的程序員在花寫代碼的時間長越短,主要在前期的設計上以及後期調試,最後是不斷的代碼的優化重構。

反而是一些剛入行的程序員就是擔心自己不能實現功能,花費大量時間研究如何實現代碼,一般過了幾年的時間之後基本功上來之後,就會迴歸到設計和調試上來,到了這個層面更加和以及沒有什麼關係了,優秀的程序員就是在不斷的提升編程基本功,修煉自己的編程思想和實際解決問題的能力,每個人都會經歷這個過程。

希望能幫到你。


大學生編程指南


有人認為,學習代碼一定要多敲代碼,這當然是沒錯的,但是我認為【多記】也很重要,下面請聽我的詳細分析。


學習代碼是一個不斷循環的過程

不管你是一個新手,還是一個有著多年經驗的老鳥,在學習代碼/新技術的時候,都要經歷這樣的過程:

  1. 學習理論知識,對你要學的內容一定要有個基礎的概念。

  2. 照著別人的代碼敲,特別是新手在入門的時候,甚至可以“抄襲”別人的代碼,一行一行地敲到電腦裡面(不是大段代碼的複製粘貼),並調試通過,加深對理論的理解。

  3. 等熟練了以後,才是可以根據自己的理解,把代碼敲出來。

  4. 當遇到問題的時候,再反覆地做1、2、3步,不斷加深理解,迭代完善自己的代碼。

【多記】,到底是記什麼

有人認為【多記】,就是背別人的代碼,這個觀點是錯誤的,除非你能做到過目不忘、腦容量無限,不過就算這樣,需求稍加變化,你就可能就“歇菜”了。那麼【多記】到底要記哪些內容呢?


  • 上面提到的理論知識,這個一定要記憶。比如一項技術的概念、優缺點、適用場景,這些需要記憶。

  • 不要記具體的代碼,可以記住方法的知識點、偽代碼的步驟。例如你要記憶單例模式的寫法,那麼就要記住:單例模式有幾種寫法;每種寫法各自有什麼弊端;比較推薦使用哪種寫法,例如餓漢式的寫法,構造函數不暴露、提供一個方法讓客戶端可以獲得、定義一個靜態變量來存儲創建好的類實例(直接創建,因為構造函數不暴露,所以只會創建一次);但是缺點也顯而易見:沒有懶加載的效果,從而降低內存的使用率。

  • 【多記】不是【只記】,最後依然是在反覆敲代碼的過程中,加深記憶。

為什麼要多敲代碼

學習代碼和唱歌、做飯一樣,只聽歌、背歌詞不一定能唱好;只會吃、背菜譜不一定會做飯,道理都是一樣的;理論重要,實踐更為重要。

那麼【敲代碼】就是學習代碼的最佳手段麼?

  • 看書、聽音頻、看視頻、聽講座這些都是被動學習,通常來說被動學習的知識,最終留在記憶中的會比較少,大部分都被遺忘掉了;

  • 敲代碼屬於主動學習,效果會比以上的途徑好很多;

  • 比敲代碼更優的途徑是什麼?寫書、錄音頻、錄視頻、做講座,這些看起來是知識輸出,但實際上都是主動學習,這些途徑和被動學習相比,效果會好很多,另外一方面,當你的技術能力達到了可以做“輸出”的水平時,說明你對其細節已經瞭解地非常透徹了;或者說,你為了能做知識輸出,“逼不得已”讓自己更深入的學習。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


會點代碼的大叔


在學習編程的過程中,早期需要記的內容會比較多,越往後學習越要注重實驗,也就是說需要多敲代碼。

學習編程可以按照以下步驟進行:

第一:首先建立一個基本的編程思想。編程思想的建立需要一個系統的過程,首先要從概念的理解開始,然後再一步一步深入,這個過程首先就是要多看和多記。所以,對於初次學習編程的人來說,首先要做的事情就是把編程語言的基本概念記住,進而理解編程語言處理問題的基本思路。在這個過程中,也要輔助一定的實驗,這樣可以加深對於概念的理解。

第二:實驗加總結。當對編程語言的基本概念有了一定的認知之後,接下來要做的事情就是通過大量的實驗來加深對於概念的理解,並逐漸建立相應的編程思想。實驗應該循序漸進,同時要注重對於實驗的總結,總結的過程對於理解編程語言是非常重要的。做實驗最好制定一個階段性的目標,通過不斷完成階段性目標來增強自己的學習信心。

第三:選擇一個主攻方向。不少編程語言都有較多的應用方向,比如Java語言可以從事Web開發、大數據開發、Android開發和後端服務開發等,而Python語言可以從事Web開發、大數據開發、人工智能開發、嵌入式開發和後端開發等。不同的開發方向需要具備不同的知識結構,所以學習編程語言一定要選擇一個主攻方向。有了主攻方向就可以制定系統的學習計劃,同時也可以在某個領域進行深耕,從而提升自己的就業競爭力。

最後,學習編程一定要多交流,交流的過程本身也是學習的過程,目前不少編程語言都有較為活躍的開發社區,通過開發社區能夠獲得大量的編程經驗,同時也會提升自身的眼界。

我從事互聯網行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智能領域,我會陸續寫一些關於互聯網技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收穫。

如果有互聯網方面的問題,也可以諮詢我,謝謝!


IT人劉俊明


在學習初期,毫無疑問應該多記,在有了一定的基礎之後,就應該多敲了。

這其實已經跳出了代碼學習的侷限性,進而體現了一種學習理念。

在學習初期,我們要通過多吸收信息來鞏固自己的基礎知識體系,同時伴隨著練習來輔助理解,也就是要保證足夠的輸入。到了學習中後期,我們就要學會利用已有知識開始自我發揮,也就是我們常說的可以開始輸出了。

落實在代碼學習上,我們來舉例幫助大家理解。

比如你要學習Java編程。

首先,一定要做的是學習Java的基礎知識,這個過程可以通過讀書,也可以通過上視頻課的方式來進行,此時也不著急立刻敲代碼。但是,僅僅看過一次書或者視頻是不夠的,無數經驗表明,只看不反覆咀嚼是無法真正掌握知識的。這個時候就需要你在尋找一些練習,從最初的開卷測試,到閉卷測試。現在一些教編程語言的網站,通常都會提供這種隨堂quiz,比如w3cschool,菜鳥教程一類的,它們在講完一章節之後,會有針對性的練習供你去自我測試是否真的掌握了這些知識。

當你對Java有了一定的瞭解後,你就要開始編寫屬於你的public static void main(String[] args)函數了,這就是輸出的第一步。第一次,你也許僅僅用了System.out.println(1+9*3+Math.sqrt(4)),但是當程序正確執行之後,也是對你的學習的一種肯定。

在學習初期,你需要大量的吸收各種Java的api,比如StringUtil.isBlank(), List.add,

Map.put

,Calendar.getInstance等等。在這個時候,想要走每一步可能都需要查閱資料,才能找到正確的前進姿勢。但是前進的過程,就是記錄姿勢的過程。

在你記住了各種api,各種走路姿勢之後,就可以自由的行走,自由的實現你想要做到的功能了。這個時候,就應該拋棄多記,轉而開始多敲代碼,從而鍛鍊自己的邏輯能力。這是凌駕於代碼能力之上的另一種能力。

如果您有興趣,歡迎到我的主頁,查看我之前的回答。

我是蘇蘇思量,來自BAT的Java開發工程師,每天分享科技類見聞,歡迎關注我,與我共同進步。


蘇蘇思量


學軟件開發?那可不是鬧著玩的。不從事這一行的永遠不知道這行的艱辛,還咋巴著小眼睛問編程好不好學?

不知道LZ看沒看過聖鬥士星矢這部動漫,首先你得問問自己,想學編程,你有沒有像星矢一樣持之以恆百折不撓一步一個腳印忍受常人無法想象的困難和痛苦的品質,沒有?你說我開玩笑逗你,那好,下面的不用看了,因為你確實不適合學。

如果你只想著掙大錢,勸你別碰這行,一句話,別來找虐。為什麼?你看到的手機APP,各種應用,要想開發出來,不知道需要多少種技術。拿最常見的網站開發,需要後臺數據庫mysql,數據格式json,xml,各種網絡協議,還有網站開發語言PHP, JSP,ASP.NET,等等不下十幾種技術。而每一種技術都是一本厚厚的五六百頁的書,需要最少一年多時間掌握一門技術。最要命的,每種技術互不交叉還跨度很大,每種技術都有自己的設計理念和很多很多“天坑”在等著你攻克,你問問你自己,你有這個恆心和意志力天天捧著本大部頭的書天天看,天天上機操作學嗎?你說有,那好,你看電視上那些富二代天天瀟灑地到處遊玩泡妞基本於你無緣了,因為你根本就沒時間,談個戀愛都困難,還想打網遊玩王者?那算了,你還是別碰這行了,別耽誤你玩遊戲享受生活了。

程序員加班很恐怖,工作制通常是996,即早9晚9週六還要上班,晚9下班還是早的,一般到晚上十點。你想那時夜深人靜了人家都休息抱著老婆孩子睡覺了,你還在工作中,是不是很崩潰?

第2,程序員耗腦太嚴重。工作中需要十幾個小時大腦不停地運轉。需要設計算法,不斷地把代碼改來改去來適應客戶一天幾變的需求。很多功能沒有現成的解決方案,還經常遇到一些天書一樣的疑難問題,bug,實際工作中突發狀況千奇百怪,你可能見都沒見過的bug,崩潰,需要一點一點查幾萬行的log日誌。而且也需要百度,google,英文論壇尋求幫助,理解錯誤信息是什麼意思。所以英文不好的沒耐心的還是算了吧,不適合這行。

第3. 程序開發首先是非常難學的,任何一門編程語言都有自己獨到的思想,概念設計,很多情況下一門語言與另一門語言沒有多大關係,知識經驗無法串用。而且工作中你還不得不用到這些技術你不得不去學。而且程序技術日新月異,新類庫新SDK每天都會推出,你需要日復一日不斷地學習新技術。如最新視頻解碼技術,遊戲引擎等等,而這些新技術可是國內沒有書和任何資料的,需要你到英文官方網站去找實例看文檔去學,更要命的,新的技術和老的還沒太大關聯,你得重頭去學。而且老闆急趕項目不會給你什麼時間,一般三天就是極限了,你需要這麼短的時間快速掌握一項新技術...

綜上,你明白程序員為什麼總要加班了吧,也知道這行不是人乾的吧。為什麼說程序員幹到三十干不動。很簡單,以這種消磨人生所有時間狀態,你生命中只有加班加班工作工作學習學習,你將不能顧家不能跟朋友聚會不能再有自己一點點休閒時間,更別說談女朋友戀愛了,以這種狀態你能堅持到三十歲?我想那簡直是個奇蹟了


呆呆座的小宇宙


毫無疑問,多敲,代碼是敲出來的


堅守63395981


不是你敲出來的代碼,是你的嗎?


AngryRED


多敲,我建了一個交流群,平時有問題都可以問我的,學習方面的問題我覺得我可以幫助到你們。


小頁說情感


要多敲代碼,不能重複的敲。

通過書籍,網絡學習到了新知識,新框架,新想法要多實踐,時間久了,信手拈來。


HTT8888


程序語言是有嚴格語法定義的語言。

如果你理解不了語法定義,你可以嘗試通過示例去體會一下。不過敲代碼不是必須的。


分享到:


相關文章: