我是霖哥阅束,一個因興趣入行的商學(xué)院畢業(yè)的程序員息裸。最近有不少人沪编,來問我,想學(xué)編程访圃,但是又不知怎么開始腿时。所以平绩,我想在我的公眾號“商學(xué)院畢業(yè)的程序員”中捏雌,把我自學(xué)編程的經(jīng)歷,毫無保留的分享出來纬傲。
現(xiàn)在的世界肤频,是互聯(lián)網(wǎng)科技的世界,人一天生活下來汁雷,從玩手機侠讯、購物暑刃、看新聞、聽音樂溜嗜,無處不在的都是編程代碼所編織出來的世界。
不論是工作中的人炸宵,還是學(xué)生土全,很多人都有自學(xué)編程的想法,但是卻不知道從哪里開始野哭。
上網(wǎng)搜集相關(guān)自學(xué)編程的學(xué)習(xí)資料幻件,什么C++绰沥、Java、Python一堆又一堆的術(shù)語零截,根本讓人無從入手秃臣。
如果去問相關(guān)的計算機的朋友:“學(xué)編程該學(xué)啥呢奥此?”
得到的答復(fù),一般是先學(xué)一門編程語言吧撤嫩,說學(xué)習(xí)C++或者Python吧序攘。
接著寻拂,你就跑去買了一本C++或者Python的語言書。
才翻了沒幾頁梦染,完全看不懂帕识,整本書都沒一點人話遂铡,又礙于面子扒接,不知道怎么問別人,擔(dān)心別人說自己笨碱呼。
最后宗侦,一本厚厚的編程語言書矾利,就這樣成為了家里的裝飾品。
霖哥沒有接受過傳統(tǒng)學(xué)校的編程教育舶斧,通過自學(xué)編程茴厉,用過11種編程語言做過項目什荣。
總結(jié)多年的自學(xué)經(jīng)驗溃睹,建議自學(xué)編程,先學(xué)習(xí)的編程語言——JavaScript泞辐!
JavaScript不是Java咐吼!
(圖:美國的Jordan品牌和中國的喬丹品牌商佑,是沒有關(guān)系的)
JavaScript(簡稱JS)跟Java,從編程語言技術(shù)上肌幽,沒有半毛錢關(guān)系,別被她的名字欺騙了格嘁。
之所以叫JavaScript廊移,是因為90年代Java大火狡孔,當(dāng)年JavaScript的發(fā)明者網(wǎng)景公司把自己發(fā)明的腳本編程語言,帶上“Java”的名號响禽,讓它更容易傳播芋类。
這就好比我們中國的喬丹界阁,山寨了美國的Jordan品牌名氣泡躯,其實它倆壓根沒關(guān)系......
在最初的十幾年里,JavaScript一般是用于做網(wǎng)頁上的動態(tài)效果的咕别。而最近幾年惰拱,有一個叫NodeJS的工具出現(xiàn)啊送,它賦予了JavaScript全方位的應(yīng)用能力馋没,不論網(wǎng)頁、App勾怒、后臺服務(wù)器......總之笔链,JavaScript語言幾乎無所不能。
當(dāng)然了,今天我們探討的是幔妨,新手自學(xué)編程的第一門編程語言误堡,我們不多介紹NodeJS雏吭,來關(guān)注用JavaScript用來做網(wǎng)頁的部分杖们。
奧巴馬學(xué)編程
2015年的時候摘完,奧巴馬參加了一個“編程一小時”活動,呼吁世界上的所有人都應(yīng)該學(xué)習(xí)編程列粪,并以身作則岂座,編寫了一段很簡單的計算機代碼杭措,在屏幕上畫了一個正方形手素。
這也讓他成為了美國歷史上首位編寫計算機程序的總統(tǒng)!
那么氯质,那時候闻察,奧巴馬學(xué)習(xí)使用的,是什么編程語言呢灶?
答案是:JavaScript鸯乃!
奧巴馬寫了啥跋涣?
據(jù)說陈辱,當(dāng)時奧巴馬學(xué)編程,曾寫了這么一段代碼陋守。
moveForward(100);
在上一篇霖哥自己的經(jīng)驗水评,「我是如何用10天自學(xué)編程之碗,改變一生」里季希,霖哥提及過式塌,英語能力不能太差。因此偏窝,只要你英語不差的話武学,看到奧巴馬的這一句代碼祭往,你應(yīng)該能明白它的意思:
移動向前(100);
(圖:奧巴馬的編程學(xué)習(xí)網(wǎng)站)
沒錯火窒,他執(zhí)行了一個函數(shù)硼补,叫moveForward(100)。 因為奧巴馬當(dāng)時使用的是code.org編程學(xué)習(xí)網(wǎng)站熏矿,它使用這個函數(shù)已骇,促使屏幕上的卡通人物离钝,向右(卡通人物的前方)移動了100像素!
理解「函數(shù)」
這里提及了霖哥認(rèn)為編程中最最最最重要的概念——函數(shù)卵渴。
函數(shù),很多時候鲤竹,又會被叫著“方法”浪读。所以要注意了,跟別人溝通時辛藻,“方法”碘橘、“函數(shù)”,很可能是同一個意思揩尸,它們英文是Method和Function蛹屿。 (兩者嚴(yán)格學(xué)術(shù)定義有一點差別屁奏,這里先不追究岩榆,認(rèn)為一樣的就好了)
所謂函數(shù),學(xué)術(shù)上來定義坟瓢,是一個統(tǒng)一的代碼塊勇边;而霖哥的理解,函數(shù)就像一個別人生產(chǎn)好的工具折联。
看看你現(xiàn)在桌子上的杯子粒褒,我們知道,喝水要用杯子喝诚镰,杯子是別人生產(chǎn)好奕坟,我們買回來的。“函數(shù)”清笨,就像是一個生產(chǎn)好的杯子月杉,我們拿過來直接用。
上面抠艾,是站在“喝水者”的角度來說的苛萎,假如換個角度來說,“我”是杯子的生產(chǎn)商呢检号?那么腌歉,要做一個杯子,我們還需要各種各樣的“函數(shù)”——比如齐苛,陶瓷翘盖、玻璃、包裝盒...等等等凹蜂。如果我是包裝盒生產(chǎn)商呢最仑?我還需要紙皮藐俺、綁繩等等等。
你想要生產(chǎn)某個商品泥彤,但是不可能說欲芹,所有的零配件都是自己生產(chǎn)的,部分零配件需要從外部獲取吟吝。 而零配件菱父,就是“函數(shù)”。 同理剑逃,你要開發(fā)一個軟件浙宜,不可能所有函數(shù),都是自己寫的蛹磺,大部分(甚至是絕大部分)的函數(shù)粟瞬,也是需要從外部獲取的。
所以萤捆,霖哥建議自學(xué)編程的第一課裙品,一定要搞清楚“函數(shù)”的意義! 編程的本質(zhì)俗或,大部分時候市怎,就是對“函數(shù)”的操控;而對函數(shù)的操控辛慰,它就像我們的生活那樣区匠,商品是從別人那里獲得的!
這引申出霖哥自學(xué)編程的第一定律:
任何編程技術(shù)帅腌,都可以從生活中找類比驰弄!
搞清楚“函數(shù)”的意義,你就能理解大部分的軟件工程了速客。
你要做一個網(wǎng)頁戚篙,你需要調(diào)用“瀏覽器”的函數(shù);你要做一個瀏覽器挽封,你需要調(diào)用“網(wǎng)址解析”的函數(shù)已球;你需要做一個游戲,你需要調(diào)用“游戲引擎”的函數(shù)辅愿;你需要做一個游戲引擎智亮,你需要調(diào)用“顯示器顯示畫面”的函數(shù);.....................無數(shù)的“函數(shù)”点待,一環(huán)扣一環(huán)的阔蛉,組件了我們各種各樣的計算機軟件。
這又回到「我是如何用10天自學(xué)編程癞埠,改變一生」里談到的話題了:自上而下的學(xué)習(xí)過程状原。這里對軟件工程的思考聋呢,也是一個自上而下、從高到低的思考過程颠区,先思考要做一個這樣功能的程序軟件削锰,然后再思考,使用什么“零配件”去堆砌我們軟件毕莱。
為什么霖哥推薦JavaScript作為初學(xué)編程語言器贩?
開發(fā)環(huán)境到處都是
JavaScript的開發(fā)環(huán)境很容易弄起來,同時它是一只易入門的編程語言朋截。
它是唯一能運行在瀏覽器網(wǎng)頁的編程語言蛹稍。因此只要有瀏覽器運行的地方,它就可以運行起來部服,試問一下唆姐,現(xiàn)在還有哪一臺電腦或者手機是沒有瀏覽器的嗎?
而常見的Java廓八、C++語言奉芦,就沒有這樣的好處。要學(xué)習(xí)他們瘫想,你就必須經(jīng)過復(fù)雜的安裝仗阅、編譯過程昌讲,好不容易地才能運行一個小小的程序国夜。這對初學(xué)者來說是一個不小的門檻。很多的初學(xué)者光在安裝開發(fā)環(huán)境短绸,就被折騰得半死车吹。
JavaScript用途廣
我們也經(jīng)常看到醋闭,微信里經(jīng)常出現(xiàn)的各種各樣的所謂H5的活動網(wǎng)頁窄驹,其實,就是用JavaScript開發(fā)的证逻。
不論是做活動宣傳乐埠、企業(yè)宣傳、企業(yè)網(wǎng)站囚企,經(jīng)常需要工程師來做網(wǎng)頁丈咐。做網(wǎng)頁需要用到什么編程語言?就是JavaScript龙宏。
隨著這幾年JavaScript的發(fā)展棵逊,JavaScript已經(jīng)不單只局限于網(wǎng)頁前端了,現(xiàn)在還可以使用JavaScript來開發(fā)后端服務(wù)器银酗、手機App甚至游戲辆影。
它是目前編程語言中應(yīng)用最全能的編程語言徒像,并且普及程度還在上升趨勢。
JavaScript職業(yè)需求量大
有一個職位蛙讥,叫Web前端工程師锯蛀。說白了,就是JavaScript工程師(另外還要有HTML次慢、CSS知識)谬墙。
直到今天,2017年经备,前端工程師的崗位還是有很大的需求拭抬。
為什么呢?
霖哥覺得侵蒙,因為大學(xué)計算機學(xué)科里造虎,一般都是讓你學(xué)Java和C++,就認(rèn)為JavaScript一個搞網(wǎng)頁的腳本編程語言沒有前途纷闺。然而算凿,時代早就在變化了。
教育供應(yīng)跟不上犁功,市場需求大氓轰,結(jié)果就是導(dǎo)致前端工程師工資水漲船高。
霖哥發(fā)現(xiàn)浸卦,很多學(xué)了幾手JavaScript的前端工程師署鸡,比不少寒窗苦讀幾年、科班出身的C++技術(shù)大牛工資還要高限嫌。沒辦法靴庆,供求關(guān)系決定了薪資。
來一點實戰(zhàn)
為了讓準(zhǔn)備自學(xué)編程的小白怒医,加深對編程和“函數(shù)”理解炉抒,我們嘗試來一段超級簡單的代碼,作為JavaScript的入門實戰(zhàn)吧稚叹。
在以往的計算機語言中焰薄,我們經(jīng)常會看見一個Hello World例子,其本質(zhì)就是使用“屏幕打印函數(shù)”扒袖,然后輸出“Hello World”文字塞茅。霖哥這里想弄個更復(fù)雜的例子,然后用擬人化的語言僚稿,來描述一遍機器的執(zhí)行凡桥。
以下代碼中,出現(xiàn)的英語單詞都比較簡單蚀同,能讀懂英語單詞缅刽,就能大概讀懂意思了啊掏。
你也可以自己動手試一試,創(chuàng)建一個文件衰猛,叫test.html迟蜜,把這些代碼放進(jìn)去,然后雙擊啡省,就會看到瀏覽器的執(zhí)行結(jié)果娜睛,輸出了“300”。
<script>
function add(a, b) {
return a + b;
}
document.write( add(100, 200) );
</script>
它具體是怎么運行的呢卦睹?
我們首先把它翻譯成中文方便理解:
<這里是代碼(開始)>
函數(shù) 加法 (參數(shù)a, 參數(shù)b) {
返回結(jié)果 a + b;
}
網(wǎng)頁.寫上( 加法 (100, 200) );
</這里是代碼(結(jié)束)>
我們再用擬人化的語言畦戒,來模擬這些代碼的操作:
你是一個上帝,
你創(chuàng)建了一個函數(shù)结序,叫add(加法)障斋;
你手下有一個家伙,叫document(網(wǎng)頁)徐鹤;
你說:document啊垃环,執(zhí)行你的write(寫) 函數(shù)! 稍等返敬,add(加法)函數(shù)會告訴你怎么執(zhí)行的遂庄!
你說:add函數(shù),給你100和200劲赠,把它們相加涛目,完了告訴write!
add函數(shù)說:JavaScript語言機经磅,把100和200加起來泌绣,返回結(jié)果钮追!
write函數(shù)說:輸出結(jié)果预厌!
這段代碼里,出現(xiàn)了兩個“函數(shù)”元媚,它們分別是add和write轧叽。
編程的本質(zhì)就是操縱代碼,也就是說程序員是代碼的上帝刊棕。所以很多時候編程只是使用英語炭晒,對一系列的“函數(shù)”進(jìn)行操作,各種各樣的的“函數(shù)”甥角,是程序員們的千軍萬馬网严。
所以霖哥會說,英語很重要嗤无,因為只要懂得英語單詞震束,并且愿意看怜庸,就能很容易看得懂很多的程序代碼執(zhí)行。
理解“函數(shù)”至關(guān)很重要垢村,程序開發(fā)當(dāng)中割疾,幾乎90%的代碼都在不斷地調(diào)用函數(shù)。當(dāng)程序員想做一件事的時候嘉栓,第一個要想到的宏榕,是“找函數(shù)”,而不是寫具體的函數(shù)侵佃。
所謂的大牛麻昼,就是那些知道很多各種各樣“函數(shù)”的人,他們利用各種自己所知道的“函數(shù)”馋辈,來滿足自己的需求涌献。
究竟怎么系統(tǒng)的學(xué)習(xí)JavaScript呀?
聽霖哥說了這么多首有,霖哥更著重的燕垃,是希望自學(xué)編程的人,能先理解“函數(shù)”思維這一編程的本質(zhì)井联。
如果現(xiàn)在就想具體地學(xué)習(xí)JavaScript卜壕,還是建議使用霖哥上一篇文章所說的《W3School:JavaScript》,快速學(xué)習(xí)烙常、快速試驗轴捎、快速理解。
往后的日子里蚕脏,霖哥也會更多地講解一些編程概念侦副,希望把一些抽象化的編程理論,用具象化驼鞭、擬人化的方式敘述出來秦驯。
下一篇文章,霖哥想說說建房子與編程的關(guān)系挣棕,能讓你更好的理解“函數(shù)”思維译隘。
作者相關(guān)系列文章:
我是霖哥旗闽,一個商學(xué)院畢業(yè)的程序員黍瞧,通過自學(xué)編程成為一家大型上市公司的資深軟件工程師匾嘱。
在《商學(xué)院畢業(yè)的程序員》專欄中活合,我想持續(xù)分享我自學(xué)編程的經(jīng)驗和心法闯捎,用通俗的話提煉我的技術(shù)思維和對科技世界的理解妖碉,希望可以幫助到你忽肛。
如果覺得有用就分享給你的朋友,轉(zhuǎn)載請注明出處《商學(xué)院畢業(yè)的程序員》损敷。
如果在了解或?qū)W習(xí)編程的過程中有迷惘户辫、或?qū)σ恍┥鷿目萍几拍畹牟唤猓昧α粞裕?/p>