1. 程式人生 > >系統學習Java和無基礎自學python的一些感受

系統學習Java和無基礎自學python的一些感受

  最近,我在學習JAVA,是跟著培訓班系統學習的那種,負責上課的老師也是學校裡的老師,不至於像某些培訓機構一樣那麼坑,口碑也很好,我試聽了接近一個月也感覺還行。
所以這是一篇軟廣?顯然不是,並不會有人跑到我這裡來找一個二本的計算機系的老師培訓JAVA。我之所以提這些,是因為我最近想的這些全是在在學習JAVA時想到的。

  一個簡單的帶登入和驗證碼識別的爬蟲的文章我發了2個月才發完。最初做完這個程(腳)序(本)時,我是非常高興的,畢竟第一次手上有了一個能用的成品,而不是照著教程敲啊敲那些範例,於是決定發幾篇博文水一下。
但由於我懶,在我發完最後一篇的時候已經是10月11日了,與第一篇文章差了整整2個月。在這期間,我在JAVA培訓處開始系統的學習一門程式語言。那邊照顧到二本大學狗們平日上課全是划水的現實,從最基礎的部分開始教起:int、long、if、while……最開始的一個月我完全就是覺得:真尼瑪慢!這也用教?
(倒是MOOC上浙大的資料結構把我虐得死去活來)

  這種感受一直持續到了培訓班的進度到了面向物件程式設計為止。並不是說我不知道面向物件程式設計,python的物件抽象程度遠在java之上,廖雪峰的官方網站上的python教程很詳細的講解了類和麵向物件,除了元類我實在是理解不能。但一開始接觸到這個詞的時候,我是完全不明白麵向物件程式設計這個詞的意義的,甚至完全是覺得:搞這麼個東西出來幹啥?函式不好嗎?——我那個沒有分散式、沒有自動續爬、沒有代理、沒有隨機UA、沒有資料庫、沒有多執行緒、沒有迭代遍歷的爬本就全是靠函式實現的(起碼有了分塊思想是吧(笑)),除了用自帶的MyHTMLParser模組時,使用了最基礎的面向物件知識,此時我的腦中仍然沒有任何面向物件的思想。

  而當我開始系統的學習java的類、java的面向物件時,我意識到了面向物件的思想是多麼重要而偉大的思想,當我發最後一篇那個爬蟲的博文時,我意識到了我之前寫的那根本不叫程式,那只是一個300多行程式碼的指令碼罷了。

  我並不是想在這裡討論面向物件思想有多偉大、面向物件開發有多好用、面向物件開發有哪些缺點 ,我暫時沒有這個能力,我還沒有做過什麼有點規模的專案,迄今為止的程式碼總量估計不超過一千行,這樣的我是沒有能力和資格來討論面向物件的。

  我最早接觸的語言是VBS,大概是高一時,從某本黑客教程上看到了一點入門教程。玩了2個月左右就棄掉了。
  高二時發現了按鍵精靈,按鍵精靈裡含有標準VBS庫,同時添加了一堆別的外掛和命令庫,其中的大部分都是為了方便按鍵精靈模擬鍵盤或者滑鼠按鍵而準備的。
之後就沒有再學習過程式設計,如果學二本的那種只教到if、while、i++、i–的C語言也算學的話,我還可以說我學過C,呸,我才沒那個臉說我學過C……

  也就是說,我勉強算學過的語言,全是簡單的指令碼語言。VBS有一點點面向物件的成分,然而我顯然不可能學到,按鍵精靈就更不可能了,它就是奔著指令碼化去的。

  • 我用這兩個東西寫過什麼呢?
  • 黑客教程上的若干整蠱程式
  • 對某資料夾下的檔案批量重新命名的指令碼
  • 雙11時模擬滑鼠鍵盤操作自動搶天貓的網頁紅包的指令碼
  • 一個完全模擬人工操作的的艦女人的自動遠征指令碼(從沒被ban過!雖然我現在已經不玩了)
  • 構建某些一次性使用的複雜(高中級別的)函式,用完後存都懶得存
  • ……

諸如此類的
  裡面的各類判定器都是用的按鍵精靈的顏色判定模組(這個模組模擬人工操作簡直完美)。

  這類小東西都有一個共性:面向流程開發。
  幾年間我大概寫過十幾個指令碼,其中最長的就是艦女人的那個自動遠征指令碼,2700多行,這麼長完全是因為大量的程式碼重複和按鍵精靈自身的某些特性,以及完全的面向流程開發。那個指令碼最後結束的幾行全是end if。我完全是在暴力模擬人工操作。
  這幾年間的面向流程開發的過程使得面向流程開發的思想在我的腦海裡根深蒂固,以至於我學完python的基本語法後完全沒有理解到面向物件開發意味著什麼、有什麼用。同時做的第一個程式仍然是一股子面向流程開發的指令碼味。

  另一方面,我開始在onenote上摘抄筆記:在java課堂上聽的東西先粗略的寫在本子上,回去後再靠自己的理解整理、摘抄到onenote上。
  之前有提,我在上java課時想的最多的不是這裡java怎樣怎樣,而是python這裡怎樣怎樣,某天我在onenote上寫筆記時,突然想到:我把自己想的那些python的“怎樣怎樣”也寫進去如何,另開一個新分割槽即可,真好最近沉迷於java,很久沒用python了,就當複習一下python吧。

  當我開寫之後,問題來了,我發現某些細節我記不太清了,好吧,重新回到廖雪峰的官方網站上去看看。而這一看,我就發現了我之前的那段自學根本不配叫做學習,哪怕是一個list,我之前也漏掉了很多細節,即使是每節的作業我基本都完成了。無基礎自學的結果就是這樣,其實別人該講的都講了,但是沒有任何程式設計基礎的人其實根本注意不到某些細節,而一旦自己掌握了一門程式語言後,學其他的語言就會相應的變得容易。

  另外裡面某些細節他是預設你懂,略過不講,而且也沒必要在python教程裡面講不相干的內容,比如XML。講到XML解析的時候,這教程就是預設你懂,結果我就去了W3C學XML。但W3C的XML教程要求先學JS,結果JS教程又要求先學HTML和CSS,我就這麼把前端三件套給過了一遍…

廖雪峰的python教程一開始有這麼一段

如果你是小白使用者,滿足以下條件:
- 會使用電腦,但從來沒寫過程式;
- 還記得初中數學學的方程式和一點點代數知識;
- 想從程式設計小白變成專業的軟體架構師;
- 每天能抽出半個小時學習。
不要再猶豫了,這個教程就是為你準備的!
準備好了嗎?

然而根本不是。

認為這個教程對0基礎學習者有點跳躍的人不少。
然而這仍然不妨礙廖老師的python教程成為目前最好的中文線上python教程。
(正好現在教我java的老師也姓廖)

  我沒有任何婊人的意思,我只是想表示,沒有人帶路的自學就是這樣,以為自己學懂了或者完全懶得深入,事實上連學到皮毛都不算。
當我一邊按照java的學習筆記寫python的學習筆記,一邊重新過一遍廖老師的python教程的時候,我發現了當初0基礎自學時的無數漏洞,在面向物件的部分甚至是幾乎完全重學了一次。(然而我還是沒看懂元類……)

  0基礎自學只能學到語法罷了,開發模式、程式設計思想、資料結構,這些東西才是一個程式設計師的核心,核心技術過關的程式設計師切換到另一種語言只需要過一遍語法即可,而一般人自學是難以學習到這些東西的,還好,我現在開始系統學習一門程式語言了,不至於拿著自己拙劣的程式設計思想寫一輩子指令碼,複製貼上一輩子程式碼。

  廢話這麼多,我到底想表達什麼?胡適說寫文章需言之有物,所以我到底想表達什麼?
並沒有什麼想刻意表達的,純粹是一種面對巨大反差的感想罷了,想自己高中寫了幾年低階指令碼,大二又擼了個爬蟲,就覺得自己能寫程式了,呸!你也配姓…哦不..你也配說自己會寫程式?

  “別廢話了,實驗室的雙螺桿擠出機還等著你去修呢!”
  你說我當初怎麼就選了個高分子?