一隻程式設計菜鳥對程式設計的思考
引言
程式設計,是一門實踐科學,意味著你學習程式設計的最好方式就是上手敲程式碼,但這意味著我們能因此輕視理論的學習嗎?
入門程式設計
上各大交流社群,提問該如何入門程式設計,五花八門的答案蜂擁而來。
但是總結一下,莫不就是一下幾種:
學院派:
推薦入門學習C語言,輔之修以資料結構、作業系統等科班課程,唯有這樣才能得到程式設計的真諦。
自由派:
推薦入門學習python,認為人生苦短,唯有python才是真正地解放雙手。
現實派:
推薦入門直接JAVA,畢竟JAVA常年盤踞TIOBE排行榜之首,是一個很火的就業語言。
那麼,身為程式設計小白,該如何選擇?
在這裡我們探討下各個派系。
學院派:
首先,作業系統、資料結構等課程都是需要C語言的基礎,所以這也就是很多學校把C語言排在第一個學期的原因。
學習C語言,是為了更好地理解計算機內部原理,我認為,現在的電腦科學這個專業分類其實還不夠明確,
應該分為計算機理論科學與計算機應用科學,一個研究計算的內部工作原理,一個則是去研究計算機能幹什麼事。
所以,如果你對計算機本身有興趣,就從C語言入手吧。
自由派:
python作為一門膠水語言,它很適合用來解決一些小問題,就像經常在各大資訊平臺上會刷到《10行程式碼實現一個微信機器人》
、《看我如何用python黑舍友U盤》等等文章,瞧,python最擅長做的是這些。
python是你提升工作效率的一個不錯選擇。
如果你將來並不打算這個行業,python會是你最好的選擇。
現實派:
可以說,是網際網路成就了JAVA,現在JAVA應用最多的,就是在企業應用方向,為什麼這個派別叫現實派,因為學了JAVA可以很容易找到工作啊!
但是這是因為這樣,很多外行看著這行業的高薪資,不顧一切轉行JAVA,於是這時,培訓機構應運而生了。
這些培訓機構向市場輸出了大量的初級JAVA程式設計師,那導致的後果是什麼?
初級人才供過於需,高階人才供不應求。
但即使是這樣,如果是身為在校生的你,把JAVA作為你的就業選擇,你仍有優勢,你的優勢就是學校教授的那些計算機基礎知識,掌握好這些,
你就能在百萬大軍中穩步向前。
如果你想依靠以程式設計為生,就學JAVA吧。
當然這裡的C、python、java只是各個領域程式語言的代表,主流程式語言可不止這些。
實踐OR理論?
正如之前所說,程式設計是一門實踐科學,這意味著你需要上手敲程式碼才能獲得最好的學習效果。
但,在學習的過程中,請記住:千萬不能捨本逐末。
在這裡談談我,我的第一語言是JAVA,跟很多新手一樣,都是從SE學到jsp、servlet再到三大框架,以及最近兩年流行起來的spring boot到spring cloud微服務、
隨著一個個專案的完成,我產生了一種自己很厲害的錯覺,殊不知,我所取得的這些成就,只是建立在別人造好的輪子之上,往下深挖,我的理論基礎幾乎為0.
拿spring舉例,其核心內容就是AOP以及IOC,那麼它們是怎麼實現的?學習java的你,肯定會知道,反射嘛。
反射是怎麼實現的?基於JVM?
那JVM又是怎麼一回事?
JVM的具體實現又和作業系統有何聯絡?
隨著這樣的一層層深入,我發現所謂自己先前建立起來所謂的知識體現,實在是少的可憐。
當然如果你說,我只要會用就行了,原理什麼的不重要。知其然而不知其所以然,程式設計這條路註定走不遠。
這說明:理論與實踐二者之間相輔相成,互不可割。
軟體開發與程式設計
乍一看,這兩個詞說的好像都是一回事,就是寫軟體敲程式碼嘛?
這只是外行的片面理解。
伴隨著計算機的誕生,就已有為計算機開發程式的人了,那個時候,程式還是一種硬體,
並且是隻有天才個人才能玩的東西,這也就導致那個時候很多的軟體專案都失敗了。
上世紀的軟體危機,讓人們意識到只有工程化,才能取得更好的效益。
於是軟體工程誕生了。
70~80年代,流行著這樣一個東西:程式=演算法+資料結構,這足以說明兩者是程式設計的核心內容。
但到了90年代以後,工程化思維對軟體開發的重要性超過了兩者。
但,為什麼各種企業招人都是喜歡考各種演算法和資料結構?而不考工程化思維?
這被稱為白板測試,工程化的思維無法在面試內的短時間內考察出來,這就跟很多企業喜歡985 211的學生一樣,
只是為了快速地篩選人才罷了。
當然,以上只是我的一些個人看法,如有錯誤,懇請指出,反正我也不會改的。