為什么學編程要從Web開始?
本文來自Neo的投稿,已獲得獨家授權
大多數大學生接觸的編程課便是C語言,這對于一個完全不懂計算機的人可能是噩夢。
不少人初次上C語言課都會被指針繞得暈頭轉向,然而大部分編程工作并不需要你關心指針的使用。此外,C語言對可視化編程并不友好,用C語言編寫圖形化界面十分繁瑣。在這種情況下,很多大學生都會問C語言能做什么?
C語言看似簡單,實則無比強大,它主要的用途是系統級編程,操作系統,數據庫,編譯器,虛擬機等等,可是,并不是每個人都愿意去嘗試或者有機會接觸。
這會導致大多數人學了C語言并沒有多少成就感和興趣,甚至因為這門課懷疑自己能不能學好編程,或者拿到計算機專業的畢業證。
事實上,這樣想是多慮的。并不是每個計算機專業的學生將來都要去搞操作系統,編譯器或嵌入式開發,應用型人才大有可為。你完全可以先從應用層入手,獲得成就感和興趣,再深入鉆研底層開發。
在我眼里,編程是世界上不錯的工作。既可以憑此獲得報酬,還可作為興趣愛好,享受解決問題的那種成就感。所以,當你第一次學編程或者對編程開始失去興趣時,不妨從Web入手,先做一個網站。Web開發所用到的語言大多數都是所見即所得類型,學了馬上可以做出一個可視化的作品,很有成就感。
Web開發是最簡單的,而且開發語言也多種多樣,比如JavaScript、PHP、JAVA、Ruby、Python等。互聯網上關于Web開發的學習資料是最多最豐富的,大多數問題都可以通過搜索引擎找到解決方案。這對初學者十分友好,降低了編程的挫折感。
盡管受到移動互聯網的沖擊,但不可否認,網站是互聯網最普遍的應用形式,并將長期存在下去。如果你想做Web開發,Just do it!
Web開發分為前后端,前端包括HTML、CSS和JavaScript等,后端包括Node.js、JAVA、Python、PHP、Ruby等。如果你想做一個靜態網站,只需要學習前端技術即可。
前端技術本身難度不大,但瀏覽器適配和響應式布局稍微有點棘手。初學者完全不必理會,先做出一個靜態網站即可。當你做出第一版靜態網站時,你一定會興奮,因為這是你自己的作品。
網站做好后,你可能想更新網站內容,但手動更新又比較麻煩。這時你可以選擇一門簡單的后端語言,嘗試下服務器搭建、前后端數據交互和Linux命令行操作等等。后端技術優先推薦Python、PHP和JAVA,三者選其一即可。
人生苦短,我用Python。Python內置了大量豐富的函數供你直接調用,有些語言寫很多行的函數,Python一行代碼搞定。此外,Python作為程序員必備的腳本語言,在爬蟲、科學計算、AI等領域也很出彩。利用這個機會學習下,技多不壓身。
除了Python,PHP效率也不低。作為世界上最好的語言(:-D),PHP為Web而生,PHP可以直接嵌入HTML標簽,十分方便。經典的LAMP或者LNMP搭配更是世界上絕大多數網站的標配(L:Linux,A:Apache,N:Nginx,M:MySql,P:PHP)。
推薦的當屬老大哥JAVA,在國內可能就JAVA程序員最多了,所以學了就業肯定不愁。不過,JAVA的難度要Python和PHP稍高點。
學了后端語言后,你可以做一個動態網站了。不過,還差一個數據庫,推薦MySQL。如果你不想學SQL語句,可以尋找后端語言對應的MySQL圖形管理應用。但是,當你的數據量較大或者經常存取數據時,建議學習下基本的SQL語句以提高效率。
當你前端和后端都學完了,你就可以隨性所欲的做你想做的網站。做出來后,記得分享給你的好友和家人,他們的鼓勵是你前進的動力。
這就完了嗎?萬里長征才剛踏出第一步。
為什么我的網站這么慢?可能是因為前端靜態資源CSS或者JavaScript太大或者加載方式不對。你得學習下代碼優化、靜態資源壓縮打包和頁面渲染原理吧。
為什么查詢數據怎么慢?你得學習下數據庫優化吧。
有小伙伴想和你一起開發網站,怎么讓別人快速看懂你的代碼?你得學習下代碼模塊化(低耦合,高內聚)和接口設計吧。
為了使你網站穩定,你還會遇到很多問題。但通過前面學習,相信你已經學會了如何獨立排查和解決問題了。獨立解決問題的能力是程序員最基本的能力之一。
網站穩定了,你可能想設計出類似于熱門內容和推薦內容等。一看需要用到排序算法和推薦算法,恍然大悟,數據結構和線性代數被你學成了狗屎。不停的責罵自己,當年上課的時候干啥去了。
不要著急,相信你現在回頭再去看時,一定能學進去。因為學了,你馬上就可以用。現在你終于明白,數據結構中的時空復雜度、線性表、棧和隊列、樹、圖、排序和查找是怎么用的。
誒,課本里的C代碼怎么和我寫的Python和JAVA這么相似。仔細搜索發現,C語言才是這些語言的祖師爺。頓時心生悔意,要是當年好好學C語言,現在也不會這么吃力。種一棵樹,最好的是十年前,其次是現在。趕緊學吧,少年!
現在網站也像模像樣了,想知道瀏覽器怎么運行的嗎?HTTP協議是啥?不用搜了,趕緊回去看計算機網絡,”三次握手”必須爛熟于心。
終于有一天,服務器死機了。這下你得學習下服務器運維,了解下服務器工作原理吧。世界上絕大多數服務器系統都是Linux,Linux系統你得學習下吧。
多線程多進程貌似見過?你已經學過了,就在操作系統那本書里,老師講的時候你沒認真聽。這下你恍然大悟,原來學校里的課是有用的,只是自己沒發現。這樣你又回去把計算機組成原理和微機接口原理復習了下,了解了Byte和Bit的區別,了解了二進制編碼,了解了匯編語言等等。
大道至簡,心中有劍于無形。現在你明白了,編程語言只是術,而計算機基礎課才是心法。萬變不離其宗,你不再恐懼編程,也不再把自己限定在某一種語言。你開始不滿足于只做網站,你想做APP、游戲、編譯器或嵌入式開發等。
通過之前的學習,你學會了如何用項目去驅動學習,學會了獨立解決問題,學會了快速上手一門編程語言,學會了前后端如何交互等等。即使你以后不做Web開發,這些能力都是通用的,伴隨你一生。
現在,恭喜你,你已經是一名軟件工程師了!
【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】