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