普通本二生渴望做出的改變 :編程語言從 “學一而通十” 到 “學十而精一”

前言

直接切題,在我看來,大多數人學習語言都會經歷這兩個階段。
其一,從學一而通十,也就是從第一門入門語言開始不斷學習新語言的過程,
其二,學十而精一,也就是在日常學習實驗中,或被動或主動的接觸了不少的語言,雖然技多不壓身,但是奈何精力有限,在對於未來的規劃下,我們開始選擇自己感興趣一個領域,深耕其中的一門語言。

從大一接觸編程語言到如今大二下,將近兩年的時間裏我前前後後學習的編程語言有python,c,javascript,php,java,這些語言都是按照接觸時間排序的,學習這五門語言我不敢說有多深入的研究,畢竟接觸時間不夠長,和正真的程序員從業者一定是沒法比的,不過好在我學生的身份,可以從學生這個角度切入,總結一下自己學習語言的一些的經驗和誤區,希望對一些正處在迷茫期的計算機大學生有所幫助。

學一而通十

第一階段,從學一而通十,當你第一次接觸編程語言,或許是家裏有互聯網的從業者,可以從小就學習到一些語言,但大多數人應該都和我一樣到了大學並且選擇了互聯網的專業,從大一開始在學校的課程安排下才學習了自己的第一門編程語言,絕大多數是c,java,少數有python,我第一門語言就是python

在這個階段下,當你第一次接觸這個領域,無非是三種情緒

對編程一見鍾情,覺得我天生就是幹這行的,鍾愛獨立思考和鑽研問題。
對編程深惡痛絕,討厭碼代碼的感覺,一看到密密麻麻的代碼就頭大,在一些普通的二本三本(包括我的學校)討厭代碼的同學大有人在。
最後,就是對代碼即不討厭也不喜歡,就是不感冒,跟着學校的學習進度完成學校的任務,慢慢的過日子。

我就屬於最後一種,絕大多數人都不是天生,或者說在大學之前就喜歡編程喜歡計算機的(這裏的喜歡計算機不包括打遊戲),在大學之前我甚至都沒怎麼碰過電腦,碰了也是在4339打洛克王國(這是在初中,高中幾乎沒玩過電腦),就是我這樣一個平凡的人,怎麼可能就對編程一見鍾情,我說出來就問你信不?

一開始,我對編程真的不感冒,即使我學的是號稱最容易上手的python,對於其中的知識完全是跟着老師走,說什麼就是什麼,比如元組值不可變,不可變就不可變唄,那我用列表,不考慮元組存在的意義(保護數據,充當dict的key,較list遍歷速度更快,自動打包解包的特性等等),人的本能就是用自己熟悉的,我也不例外

這樣子的情況一直持續了小半個學期,我感覺自己什麼都沒學到,學校python課程的進度已經到了文件讀寫,界面圖形化,我還停留在縮進報錯的水平(python編程作業喜歡到網上搜,複製黏貼,可是python有縮進,所以每次複製別人的代碼都一堆報錯)。

第一次編程有玩遊戲的感覺,那是在大一的寒假,實在是在家閒得無聊,剛剛退出steam,望着電腦裏的idle心裏靈光一閃,反正python都學了這麼久了,應該能做個什麼東西出來了吧,那就做個遊戲唄,可是這半年還真感覺沒學到啥,圖形界面用的也不行,那就做一個交互式的文字遊戲吧,就像課上講的猜數字遊戲demo一樣,在此基礎上擴充成一個生存遊戲,嗯,就叫它殭屍世界大戰吧(果然,男孩子的中二不需要理由)。

我是真的沒想到,這不是三分鐘熱度,我竟然能堅持下來,對自己的第一個遊戲作品像對孩子一樣上心(真是奇怪的想法,我那是還小),遊戲迭代了三個版本,總代碼數接近一千行,開發週期長達兩週,每天都是像打了雞血一樣的碼代碼,那種感覺就像是,像是在肝副本。

編程原來可以給我帶來這種奇妙的感覺,我就像是,像是一個上帝,一個造物主,我不是在編程,我是在創世!(中二到了極點,但的確是我的真心感受)

我開始主動學習編程了。

因爲我發現,我的python語法學的太爛了,從頭到腳都是if,elif,嘖嘖,難以想象這樣的代碼我寫了一千行,我開始覺得我是一個不負責任而且技術賊爛的上帝。(我甚至還覺得自己是個上帝,歐,我的上帝)

之後,我去了菜鳥教程,我到了b站刷python視頻,我去把學校教材重新自學了一遍,我開始買書,啃pdf。我不斷地碼代碼,我可能是有點上癮了。

我認識到了自己的渺小,認識到除了python還有其他很棒的語言,像c,它更接近底層,而且跑的賊快。像java,它結構簡單安全而穩定,應用也很廣泛。像php,這個被成爲是世界上最好的語言,的確有自己的長處,在建站方面,又快成本又低。像javascript,它運行在瀏覽器,是前端必學必會的語言。

我知道了語言有動態,靜態,python是一個動態語言,它可以像膠水一樣粘合c。我開始知道解釋型語言和編譯型語言的區別,並且疑惑java這種先編譯成字節碼而後又用jvm虛擬機逐行解釋的語言,到底是編譯型還是解釋型。

當我接觸到的語言越來越多,我開始思考,語言是種類繁多的,光光是比較火,使用基數比較多的編程語言就多達十幾門甚至更多,我要是一門一門學不累死了,還有我學的多了,把它們搞混了怎麼辦。

我慢慢認識到編程語言始終只是一個工具,一個各有優缺點的工具,它們火不火,有多少人用,是會隨着市場來波動的,我不可能專門學一門語言學到老(我之前有一直學python,學個30年成爲業界大佬的想法,現在想想,着實幼稚,語言學到深處,那就不僅僅是一門語言了,而是整個計算機思想理論的結晶)。

在以後的工作學習中我必然會突然接觸某一新的編程語言,或許只是作爲一箇中間件使用,無需深究。但是我該如何以最快的時間,學習它的語法招式呢。

我猛然發現,編程語言是有共性的,編程不就是獲得數據,處理數據,返回數據,最終解決現實中問題的麼。

那麼什麼是數據呢,編程語言必然有對於數據的定義吧,那不就是數據類型嘛,在python中,包括了int,float,complex的數字類型,str的字符串類型(本質還是字符數組),bool類型,list,tuple,set,dict,frozenset等容器類型。在java中,包括了type,short,int,long,float,double的數字類型,boolean類型,char字符類型,string,array,class等引用數據類型。數據類型無非是兩大類嘛,基本數據類型,複雜數據類型,複雜數據類型就是基本數據類型的集合。

對於數據類型,各個語言都是大同小異的,本質不會變,你可以用自己的標準分個類,可變類型和不可變類型,容器類型和非容器類型,有序類型和無序類型…

數據來自哪裏又如何反饋呢,每一門語言必然都有output和input,也就是輸入輸出,你可以用戶輸入,或者隨機數據,或者讀取文本,數據庫等一切數據的載體。需要反饋給用戶,最簡單的就是控制檯打印,複雜一點就是寫入文本,存到數據庫(由此引申出一系列內置庫或者是已經封裝好的組件用來收集和反饋數據)。

再者到了數據的作用域,全局作用域和局部作用域,你敢說哪一個語言沒有這類區分的麼。

有了數據又如何操作呢,那麼只要是編程語言,那必然都有基本邏輯語句吧,有if,else的判斷,有while和for的循環(由此引申出各種複雜數據類型的方法,java的.length,.size();python的len()函數)。

有了大量的數據操作代碼,那麼考慮到代碼的複用,資源的避免浪費,必然會有函數式編程思想吧,函數是幾乎每個語言都會出現的結構吧,有了函數式編程怎麼可能沒有面向對象編程呢,現在火熱的編程語言幾乎都是支持面向對象思想的,這個思想幾乎在各個語言中都是通用的吧。

最後,每一個語言都有自己的生態圈吧,都有前人給我們封裝好的各種方法組件吧,像date日期,random隨機數,re正則表達,等等之類的,你敢說哪個語言沒有麼。

以上這些東西你完全可以通過一門語言的學習牢牢掌握,這些語言的互通性你只要瞭解了,那麼不管你今後遇到什麼語言,你都心裏有底,就單純的語法招式基本思想基本類庫,學起來自然是很快的。這就是學一而通十,每一門語言都有讓我們熟悉的影子

學十而精一

學一而通十,爲的是讓剛接觸編程的同學,把握編程的核心本質,培養自己的興趣,你掌握了方法學的比別人快,新語言的接受能力更加強,自然會慢慢對編程有好感,人總是偏向於自己熟悉的東西和領域,當你發現你在編程領域更加得心應手,只要不是特別討厭編程,這種感覺會讓你慢慢接受編程,熱愛編程

但是,學一而通十,通的僅僅是招式,以及一些基本思想,一門語言的內核是博大而精深的,牽一髮而動全身,一門語言牽扯出的是整個計算機思想的結晶,當你想更加深入編程的領域,你能從中看到,數據結構與算法,數據庫,計算機網絡,操作系統,計算機原理,等等基礎學科的影子。這些是我們需要精通的內功。

從學一而通十到學十而精一。

編程語言是計算機思想的產物,計算機本質爲了服務於人,爲人解決實際生活生產中的問題。就像面試中常出現的一個問題,業務和技術你更看重哪一個?

問題的本質是,業務和技術的關係,技術是爲了給業務服務的,否則你技術再好也沒有施展的地方,技術服務業務,反過來,業務的發展推動技術的進步,因爲業務中的數據越來越多,所以人們改進數據庫,讓它讀寫更快,所以人們研究網絡,減少信息傳輸的時間,所以人們調整算法,用更少的資源計算更多的數據。

技術服務業務,業務推動技術。編程語言和計算機思想又何嘗不是這樣一種你中有我,我中有你,循環互利的關係?

所以學十而不精一,你始終只能在編程的外圍遊走,是個只會招式的門外漢。知其然不知其所以然

學十而精一,這個一,不單單是一門編程語言,更是一個突破點,是你藉助編程語言向計算機核心領域進發的突破點。這個一就是計算機基礎學科,基礎的纔是最重要的。

在大學,千萬不能只扎深於所謂的技術,矇頭編程,這些始終是招式,沒有內功的招式就是花架子,千萬不能忽視了基礎學科的重要性,因爲這些東西是幾乎不變的本質,當你工作十年二十年後,它依然深遠的影響着你。

我看到社會上各種各樣的編程語言的補習班,4個月或者6個月就能將一個領域的知識灌輸給你,它們源源不斷的向互聯網行業輸送人才,這讓不少大學未畢業的計科生倍感壓力。

然而,這些培訓結構教給學生的始終只是招式,因爲思想的灌輸是潛移默化,是需要時間的,這不能在短短几個月裏讓你有所悟。

這也是大學生相較於他們的優勢所在,大學四年,學的不是也不應該是花花綠綠的招式,更應該是計算機基礎的沉澱,這是讓你今後幾十年工作學習都受益的好東西。

學十而精一,當你深耕這個一,語言就不僅僅是一門語言了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章