編程世界通識(shí)地圖 - 上篇 - 入門(mén)指南

送你一張編程世界的通識(shí)地圖

對(duì)于一個(gè)剛?cè)胄械某绦騿T來(lái)說(shuō),你會(huì)發(fā)現(xiàn)你越往前走越感覺(jué)這是一個(gè)非常復(fù)雜的領(lǐng)域,會(huì)碰到很多很多不懂的東西饺蔑。

當(dāng)一個(gè)人去到一個(gè)非常復(fù)雜的而又陌生的世界的時(shí)候变泄,多多少少都會(huì)感到恐懼,解決這種恐懼的辦法是什么呢心傀?

就是你要有一張地圖屈暗,你知道往前走是什么,哪些是比較淺的脂男,哪些是比較深的养叛,這樣你才可以去制定你的學(xué)習(xí)路線。

編程地圖

制定你的地圖

程序設(shè)計(jì)其實(shí)就是解決問(wèn)題宰翅,它需要發(fā)明弃甥、創(chuàng)造和靈感。

對(duì)于我們來(lái)說(shuō)汁讼,最重要的就是思維方式淆攻,你必須得學(xué)會(huì)對(duì)復(fù)雜的問(wèn)題,進(jìn)行分解嘿架。

那分解的辦法是什么呢瓶珊?一般就是分層和分類(lèi)兩種。

從水平的角度去對(duì)事物或信息進(jìn)行判斷和歸類(lèi)耸彪,就叫做分類(lèi)伞芹。如果是層次上有差別的,我們進(jìn)行垂直劃分就叫做分層蝉娜。

我們今天的這張地圖是垂直劃分的唱较,共五層。

這種越基礎(chǔ)召川,越樸實(shí)绊汹,越一般性的東西,我們就把它放在下面扮宠。

這種越具體西乖,越特定的東西,我們把它放在上面坛增。

按照這個(gè)標(biāo)準(zhǔn)获雕,我們一共把它分為五層。

分別是:思維方式收捣、基本原理届案、通用工具、基礎(chǔ)技術(shù)和領(lǐng)域技術(shù)罢艾。

分類(lèi)法

下面我們分別展開(kāi)來(lái)聊一聊

1.思維方式

分解和隔離:分而治之楣颠,創(chuàng)建獨(dú)立的解決方案并黏合起來(lái)尽纽。

一個(gè)好的分解方法是對(duì)分解出來(lái)的每個(gè)子問(wèn)題都可以單獨(dú)去創(chuàng)造解決方案,同時(shí)這些解決方案最后可以聯(lián)合起來(lái)解決這個(gè)問(wèn)題童漩。

要想達(dá)到這種效果弄贿,需要將子問(wèn)題分解得足夠開(kāi),子問(wèn)題與子問(wèn)題之間沒(méi)有足夠多的耦合矫膨,同時(shí)我又能夠?qū)⑦@些解決方案聯(lián)合起來(lái)差凹,最后串聯(lián)起來(lái)形成一個(gè)解決方案。

抽象:從特殊到一般侧馅,解決越來(lái)越通用的問(wèn)題

在編程領(lǐng)域抽象思維非常重要危尿,它將決定你在以后的工作中是否可以偷懶。

當(dāng)你解決完一個(gè)問(wèn)題后馁痴,不要滿足于此谊娇,而要去探索越來(lái)越通用的解決方案。

假設(shè)和驗(yàn)證:大膽假設(shè)罗晕,小心驗(yàn)證邮绿,正確歸因

這個(gè)其實(shí)并不是編程所特有的,這是非常常見(jiàn)的科學(xué)方法攀例,但是他在編程的工作當(dāng)中會(huì)十分重要船逮。

舉個(gè)例子,比如當(dāng)我們?cè)谡{(diào)試程序時(shí)遇到一個(gè)問(wèn)題的時(shí)候粤铭,同樣的代碼挖胃,別人執(zhí)行沒(méi)問(wèn)題,換你執(zhí)行就不行梆惯,到底是怎么回事呢酱鸭?

這個(gè)時(shí)候你就需要做一些假設(shè),要有辦法去一點(diǎn)點(diǎn)的驗(yàn)證你的假設(shè)垛吗。如果不知道具體是哪一行代碼有問(wèn)題凹髓,就一行行打印出來(lái),看看到底是哪出了問(wèn)題怯屉,再根據(jù)你的結(jié)果去歸因蔚舀,到底哪里錯(cuò)了。

學(xué)編程就是學(xué)思維方法锨络,但是思維方法實(shí)在是太多了赌躺,光聽(tīng)不練沒(méi)有用,只有在實(shí)踐中遇到了羡儿,去反思礼患,去琢磨,才能悟到其中的關(guān)鍵點(diǎn)。

2.基本原理

基本原理從字面上理解就是隱藏在具體事物下面的本質(zhì)和原理缅叠。比如:面向?qū)ο蠛芏嗳苏J(rèn)為只有object悄泥,class,其實(shí)也不一定肤粱。

比如:我們常用的Rest架構(gòu)風(fēng)格弹囚,就是那種REST API的格式,它也非常的面向?qū)ο罄欠福驗(yàn)樗举|(zhì)就是以資源為中心而不是以操作為中心。

面向?qū)ο缶褪前褜?duì)象作為中心领铐,而把對(duì)象的屬性和它做所的事情圍繞它來(lái)組織悯森,這就是面向?qū)ο蟮乃季S方法。

理解關(guān)鍵的原理有助于觸類(lèi)旁通绪撵,舉一反三瓢姻。

引用第一屆圖靈獎(jiǎng)主席Alan Perlis的一句話:

如果一門(mén)編程語(yǔ)言,不能影響你對(duì)編程的一些思維方法的話音诈,那么你就不值得去學(xué)幻碱。

所以我們學(xué)習(xí)一門(mén)語(yǔ)言或者一個(gè)技術(shù),絕不能只是學(xué)習(xí)表面上的東西细溅,而要去學(xué)習(xí)它的一些特色褥傍,這樣在以后碰到相關(guān)的技術(shù)時(shí),學(xué)起來(lái)就會(huì)輕車(chē)熟路喇聊。

有一些原理是可以在實(shí)踐中去學(xué)習(xí)的恍风,但是如果你打算在編程這個(gè)行業(yè)深耕,那么系統(tǒng)化的原理學(xué)習(xí)誓篱,是遲早都要學(xué)的朋贬,否則你學(xué)任何技術(shù)都很難突破。

這里我分享三個(gè)比較重要的原理給大家窜骄,一起學(xué)習(xí)锦募。

計(jì)算機(jī)系統(tǒng)

它是了解計(jì)算機(jī)硬件的抽象模型,以及學(xué)習(xí)如何用程序來(lái)調(diào)用這些硬件資源邻遏。只要你想編一些原生應(yīng)用(Native Apps)糠亩,無(wú)論是桌面應(yīng)用、手機(jī)應(yīng)用准验、Windows削解、Mac OS、iOS沟娱、Android或者任何其它的智能設(shè)備氛驮,這些都是關(guān)鍵的基礎(chǔ)。

這里推薦《深入理解計(jì)算機(jī)系統(tǒng)》這本書(shū)給大家济似,我們需要從程序員的視角去看計(jì)算機(jī)系統(tǒng)矫废,學(xué)完這本書(shū)盏缤,計(jì)算機(jī)系統(tǒng)就通了。

算法理論

算法和數(shù)據(jù)結(jié)構(gòu)蓖扑,這個(gè)主要是了解計(jì)算機(jī)程序的開(kāi)銷(xiāo)唉铜,可能不同的程序?qū)ν粋€(gè)問(wèn)題都能夠給出同一個(gè)結(jié)果,可是這個(gè)程序占用的系統(tǒng)資源與花費(fèi)的時(shí)間是不同的律杠。

這塊骨頭很難啃潭流,我也一直沒(méi)有突破。

學(xué)習(xí)算法理論柜去,最重要的是灰嫉,它提供了一套完整的體系來(lái)分析一個(gè)程序的時(shí)間和空間復(fù)雜度。

學(xué)完這個(gè)才具備程序性能的概念嗓奢,而不僅僅是實(shí)現(xiàn)一些具體的功能讼撒。

對(duì)于算法的學(xué)習(xí)是一個(gè)長(zhǎng)期的過(guò)程,在學(xué)校學(xué)習(xí)的只算是入門(mén)的第一步股耽,今后在進(jìn)入特定領(lǐng)域時(shí)根盒,要去學(xué)習(xí)特定的算法。比如:人工智能中的統(tǒng)計(jì)物蝙,數(shù)據(jù)分析等等炎滞。

網(wǎng)絡(luò)協(xié)議棧

現(xiàn)在完全不碰網(wǎng)絡(luò)的軟件已經(jīng)很少了,基本上都會(huì)跟網(wǎng)絡(luò)有一些關(guān)系诬乞。

所以至少你得了解TCP/IP厂榛,HTTP以及相關(guān)的安全協(xié)議。搞清楚計(jì)算機(jī)網(wǎng)絡(luò)是如何分層運(yùn)作的丽惭。

比如:當(dāng)你在瀏覽器中輸入一個(gè)URL击奶,然后回車(chē),到底發(fā)生了什么责掏?

每一層的協(xié)議是如何對(duì)話的柜砾,跟我們寫(xiě)的程序有什么關(guān)系?

搞清楚網(wǎng)絡(luò)協(xié)議棧之后换衬,你就會(huì)知道哪些問(wèn)題是要在網(wǎng)卡痰驱、路由器、電信交換機(jī)這一層去解決的瞳浦;哪些在操作系統(tǒng)担映;哪些在Web服務(wù);哪些在我們的程序去解決叫潦。

3.通用工具

熟悉自己的操作系統(tǒng)蝇完,積累專(zhuān)屬工具箱,不斷提升效率

通用工具跟我們講的基礎(chǔ)技術(shù)其實(shí)挺像的,但是它更偏工具層面短蜕。

這里面包括不論你學(xué)什么技術(shù)都離不開(kāi)這些工具氢架,比如:命令行界面、軟件包管理朋魔、各種IDE岖研、git和GitHub等很多很多,還有的人直接在GitHub上寫(xiě)書(shū)警检,大家一起修訂一起共同編寫(xiě)孙援。

每個(gè)優(yōu)秀的程序員都會(huì)積累一套屬于自己的專(zhuān)屬工具箱,將自己的工具技能打磨得越來(lái)越好扇雕,這樣可以始終將自己保持在一個(gè)高效的狀態(tài)拓售。

我們都知道不論是Windows、Linux或者是Mac OS 都可以去編程洼裤,所以你需要熟悉自己的系統(tǒng)邻辉,至少需要精通一個(gè)領(lǐng)域溪王,打造自己的工具箱腮鞍。

Docker

這里有一個(gè)最近特別火爆的工具值得一提,那就是正在發(fā)展中的Docker莹菱,也就是所謂的容器化技術(shù)Container移国。

它的原理就是把一整套系統(tǒng)環(huán)境定義成一個(gè)Container,這個(gè)Container包含了最底下的操作系統(tǒng)核心道伟,也包含了所有的系統(tǒng)配置和要安裝的服務(wù)軟件迹缀,還有你開(kāi)發(fā)的軟件。

你定義的時(shí)候只需要寫(xiě)一個(gè)腳本蜜徽,然后把它發(fā)布出去祝懂,別人拿到之后,就運(yùn)行這個(gè)腳本拘鞋,從操作系統(tǒng)底層開(kāi)始配置安裝砚蓬,最終生成一個(gè)容器,從理論上來(lái)說(shuō)盆色,這個(gè)容器運(yùn)行起來(lái)最終跟你的開(kāi)發(fā)環(huán)境就是一致的灰蛙。

這個(gè)方案現(xiàn)在已經(jīng)得到所有主流云服務(wù)廠商的支持。

現(xiàn)在DevOps越來(lái)越火隔躲,這也是因?yàn)檐浖慕桓逗筒渴鹉ξ啵恢倍际擒浖袠I(yè)的一個(gè)挑戰(zhàn),容器化技術(shù)的普及宣旱,很有可能會(huì)讓這個(gè)挑戰(zhàn)變得沒(méi)那么難仅父,DevOps會(huì)變得前所未有的簡(jiǎn)單和標(biāo)準(zhǔn)化。

Docker近兩年來(lái)越來(lái)越成熟,也越來(lái)越容易被普通開(kāi)發(fā)者所使用驾霜,所以建議你用起來(lái)案训,我也在學(xué)習(xí)使用。

搜索引擎

搜索引擎是非常非常重要的通用工具粪糙。

你最好懂英文强霎,英文的閱讀和篩選比較快,這樣你會(huì)有很多的優(yōu)勢(shì)蓉冈。

很多人沒(méi)有意識(shí)到城舞,自己用搜索引擎的效率沒(méi)有別人高。搜索引擎用的好與不好寞酿,在效率上會(huì)有非常大的區(qū)別家夺。

同樣一個(gè)問(wèn)題,不同的人得到的答案就是不一樣伐弹,有的人就走的是彎路拉馋,被帶偏了,有的人卻能從紛繁的網(wǎng)絡(luò)素材中找到答案惨好。

4.基礎(chǔ)技術(shù)

基礎(chǔ)技術(shù)是你無(wú)論從事哪個(gè)領(lǐng)域的開(kāi)發(fā)工作都離不開(kāi)的技術(shù)煌茴。

熟練掌握2~3種主流編程語(yǔ)言,其中之一是JavaScript

主流編程語(yǔ)言:C日川、C++蔓腐、Python、Java龄句、Switf回论、Go、Javascript等等

為什么是JavaScript呢分歇?我們下面會(huì)講

Web技術(shù)

現(xiàn)在主流的互聯(lián)網(wǎng)應(yīng)用里面傀蓉,最底層的后端技術(shù),比如:集群职抡,異地災(zāi)備葬燎,流控等等,五花八門(mén)繁调。這些技術(shù)通常都是需要根據(jù)你的具體場(chǎng)景萨蚕,你的業(yè)務(wù)需求去設(shè)計(jì)實(shí)現(xiàn)。你要去做非常復(fù)雜的研究和取舍蹄胰,這個(gè)是少數(shù)架構(gòu)師和非常高階的程序員的樂(lè)園岳遥。

比如:像阿里云這樣的大型云廠商,在最底層的后端服務(wù)這一塊都已經(jīng)給你產(chǎn)品化了裕寨,你只需要購(gòu)買(mǎi)他的服務(wù)浩蓉,按照他的要求去配置派继,對(duì)接,使用就好了捻艳。核心的技術(shù)難點(diǎn)驾窟,都不需要你來(lái)操心,使用起來(lái)已經(jīng)非常方便认轨。

所以說(shuō)大部分程序員是不需要去做這件事情的绅络,也是沒(méi)有機(jī)會(huì)去做這些事情的。

大部分偏前一點(diǎn)的后端程序員主要是在做業(yè)務(wù)服務(wù)嘁字,也就是REST API的開(kāi)發(fā)恩急。這部分的重點(diǎn)是API的設(shè)計(jì),尤其是復(fù)雜的業(yè)務(wù)模塊之間的聯(lián)動(dòng)耦合如何設(shè)計(jì)纪蜒。

這也意味著所有前端應(yīng)用面對(duì)的都是REST API衷恭,從這一點(diǎn)也可以看出,瀏覽器技術(shù)使得Web前端的技術(shù)開(kāi)發(fā)跨平臺(tái)的優(yōu)勢(shì)越來(lái)越大纯续。

現(xiàn)在比較流行的一種方案就是在原生應(yīng)用中嵌入Web技術(shù)随珠,這會(huì)帶來(lái)開(kāi)發(fā)工作量的下降,測(cè)試也容易猬错。

另外一方面窗看,就是當(dāng)你有一些基礎(chǔ)的想法,還沒(méi)有產(chǎn)品化時(shí)兔魂,使用Web前端技術(shù)來(lái)開(kāi)發(fā)烤芦,是成本最小举娩,實(shí)現(xiàn)最快的析校。這也是為什么,不管什么領(lǐng)域只要你會(huì)前端铜涉,都會(huì)極大的提升你的效率智玻。

這也是我為什么說(shuō),每個(gè)人都需要熟練掌握J(rèn)avaScript的道理芙代,所有領(lǐng)域只要你會(huì)前端都能提高你的效率吊奢。

關(guān)系型數(shù)據(jù)庫(kù)和SQL

為什么我們要學(xué)習(xí)關(guān)系型數(shù)據(jù)庫(kù)?

因?yàn)槲覀冞@個(gè)世界纹烹,對(duì)數(shù)據(jù)的依賴會(huì)越來(lái)越重页滚。而對(duì)數(shù)據(jù)的使用會(huì)逐漸變成越來(lái)越通用的技術(shù),就像你會(huì)使用WPS軟件一樣铺呵。

而這個(gè)時(shí)候裹驰,你懂關(guān)系模型,你懂關(guān)系原理片挂,你會(huì)用SQL來(lái)操作一些數(shù)據(jù)幻林,你會(huì)擁有極大的優(yōu)勢(shì)贞盯。甚至你不是程序員,你是一個(gè)運(yùn)營(yíng)人員沪饺,財(cái)務(wù)人員都會(huì)有很大的優(yōu)勢(shì)躏敢。

5.領(lǐng)域技術(shù)

領(lǐng)域技術(shù)涉及的面很多,這一篇文章篇幅太長(zhǎng)整葡,我們下次再講幾個(gè)我比較關(guān)注的領(lǐng)域方向件余,分別是:移動(dòng)app開(kāi)發(fā)、Web前端開(kāi)發(fā)遭居、后端業(yè)務(wù)開(kāi)發(fā)蛾扇、數(shù)據(jù)相關(guān)、人工智能相關(guān)以及運(yùn)維和DevOps魏滚。

領(lǐng)域技術(shù)

Ps:本文整理自李駿老師的口頭分享

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末镀首,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子鼠次,更是在濱河造成了極大的恐慌更哄,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腥寇,死亡現(xiàn)場(chǎng)離奇詭異成翩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赦役,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)麻敌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人掂摔,你說(shuō)我怎么就攤上這事术羔。” “怎么了乙漓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵级历,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我叭披,道長(zhǎng)寥殖,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任涩蜘,我火速辦了婚禮嚼贡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘同诫。我一直安慰自己粤策,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布剩辟。 她就那樣靜靜地躺著掐场,像睡著了一般往扔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熊户,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天萍膛,我揣著相機(jī)與錄音,去河邊找鬼嚷堡。 笑死蝗罗,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蝌戒。 我是一名探鬼主播串塑,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼北苟!你這毒婦竟也來(lái)了桩匪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤友鼻,失蹤者是張志新(化名)和其女友劉穎傻昙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體彩扔,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妆档,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了虫碉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾惦。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖敦捧,靈堂內(nèi)的尸體忽然破棺而出须板,到底是詐尸還是另有隱情,我是刑警寧澤绞惦,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布逼纸,位于F島的核電站洋措,受9級(jí)特大地震影響济蝉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菠发,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一王滤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧滓鸠,春花似錦雁乡、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)曲饱。三九已至,卻和暖如春珠月,著一層夾襖步出監(jiān)牢的瞬間扩淀,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工啤挎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驻谆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓庆聘,卻偏偏與公主長(zhǎng)得像胜臊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子伙判,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容