1.從硬件到軟件
? 曾幾何時(shí),電腦的整合、構(gòu)造和銷售業(yè)務(wù)在數(shù)十年時(shí)間里一直都是一棵搖錢樹(shù)氮兵。但后來(lái)利潤(rùn)空越來(lái)越小了。我們看到戴爾(Dell)重新私有化歹鱼,捷威(Gateway)則被弘基(Acer)收購(gòu)泣栈。這兩家世界領(lǐng)先的硬件公司過(guò)去一直不碰軟件,然而弥姻,現(xiàn)在如果你能賣軟件南片,能把屏幕點(diǎn)亮,那你就是在賣可以無(wú)限再生的“無(wú)物”庭敦。無(wú)物的利潤(rùn)空間是很大的——除非另一個(gè)人在以更低的價(jià)錢出售“無(wú)物”疼进,甚至無(wú)償贈(zèng)送。事實(shí)也正是如此秧廉,Linux之類基于自由軟件的系統(tǒng)開(kāi)始蠶食并最終鯨吞服務(wù)器市場(chǎng)伞广,Google Apps等基于Web的免費(fèi)應(yīng)用也漸漸具備了取代桌面軟件的能力。
2.什么事算法疼电?
? ? 人們通常用“算法”(Algorithm)這個(gè)詞來(lái)表示自己對(duì)科技很在行嚼锄。記者喜歡說(shuō)“Facebook的算法”或“Google的算法”,通常都是不準(zhǔn)確的蔽豺,他們?cè)谡f(shuō)的實(shí)際上是“軟件”区丑。 ? ? ? 算法不一定要用到電腦,就像幾何不一定要用電腦一樣。算法是解決問(wèn)題的沧侥,偉大的算法有自己的名字可霎,就像艾茲赫爾·戴克斯特拉(Edsger Dijkstra)算法,它的作用是在網(wǎng)絡(luò)圖中確定最短路徑宴杀。
? ? 一種算法可以被轉(zhuǎn)譯為一個(gè)函數(shù)癣朗,該函數(shù)可以在軟件執(zhí)行時(shí)被調(diào)用。有的算法關(guān)系到圖像處理旺罢,有的是為了提高數(shù)據(jù)存儲(chǔ)效率旷余,有的是為了對(duì)一個(gè)列表中的要素進(jìn)行快速檢索。多數(shù)算法是免費(fèi)的主经,已經(jīng)嵌入到編程語(yǔ)言里荣暮,或者輯錄成庫(kù)庭惜,放在互聯(lián)網(wǎng)上供人下載罩驻。你可以在完全不考慮算法的情況下進(jìn)行大量的編程工作——你可以通過(guò)代碼的剪切、粘貼實(shí)現(xiàn)數(shù)據(jù)存入數(shù)據(jù)庫(kù)护赊,或打印一個(gè)網(wǎng)頁(yè)等操作惠遏。
? ? 戴克斯特拉說(shuō):“計(jì)算機(jī)科學(xué)不是關(guān)于計(jì)算機(jī)的科學(xué),就像天文學(xué)不是關(guān)于望遠(yuǎn)鏡的科學(xué)一樣骏啰〗谒保”
計(jì)算機(jī)科學(xué)有相當(dāng)一部分是在于理解算法的效率——運(yùn)行起來(lái)需要多長(zhǎng)時(shí)間。電腦很快判耕,但是會(huì)被拖慢——比如在一張巨大的地圖上尋找兩點(diǎn)之間的最短路徑透绩。Google、Facebook壁熄、Twitter等公司就是建立在基礎(chǔ)的計(jì)算機(jī)科學(xué)之上的帚豪,非常在意效率,因?yàn)樗鼈兊挠脩舨僮鲾?shù)量十分驚人草丧。它們完全有必要去尋找優(yōu)秀的計(jì)算機(jī)科學(xué)家狸臣,包括很多博士,這些人知道是什么地方在拖累效率昌执。計(jì)算機(jī)科學(xué)家是一個(gè)優(yōu)秀的數(shù)學(xué)家烛亦,而一個(gè)有能力的程序員在數(shù)學(xué)上只要中等水平就夠了。
編程最困難的工作是處理那些無(wú)法計(jì)算的東西懂拾,設(shè)法把不可能的任務(wù)分解成細(xì)小的煤禽、可行的組件,從而營(yíng)造出一種電腦在做事的印象岖赋,實(shí)際上它并沒(méi)有在做呜师,比如和人對(duì)話。這部分內(nèi)容原來(lái)叫做“人工智能研究”贾节,現(xiàn)在可能更多被歸入“機(jī)器學(xué)習(xí)”或“數(shù)據(jù)挖掘”汁汗。
3.標(biāo)準(zhǔn)程序庫(kù)的魅力
要衡量一門語(yǔ)言的優(yōu)劣衷畦,關(guān)鍵不在它如何使用分號(hào);要看每門語(yǔ)言的標(biāo)準(zhǔn)庫(kù)知牌。編程語(yǔ)言是用來(lái)寫(xiě)軟件的軟件祈争。標(biāo)準(zhǔn)庫(kù)是一系列可以重用和再運(yùn)用的預(yù)置軟件。想要高效的利用一門語(yǔ)言角寸,深入理解他的標(biāo)準(zhǔn)庫(kù)是一個(gè)辦法菩混。以Python為代表的許多語(yǔ)言準(zhǔn)備了大量預(yù)先寫(xiě)好的代碼模塊,可以通過(guò)“軟件包管理”工具隨時(shí)下載扁藕。模塊(或庫(kù)沮峡、包)使用來(lái)擴(kuò)展一種編程語(yǔ)言能力范圍的代碼。
圖像處理亿柑、音頻處理邢疙、遇特殊的硬件互動(dòng),與數(shù)據(jù)庫(kù)對(duì)話——這些都有專門的包望薄。但你需要知道怎么找疟游,知道他們叫什么名字。代碼不只是存放在文件里的一堆費(fèi)解的命令痕支。它需要你在腦子里有一張地圖颁虐,知道哪里有好用的庫(kù),哪里的文檔最出色卧须,哪里的論壇最有幫助另绩。如果你不知道這些在哪兒,時(shí)間就會(huì)浪費(fèi)在信息搜索上花嘶,而不是去創(chuàng)造有價(jià)值的新東西笋籽。
4.不同編程語(yǔ)言有什么用?
如果所有的電腦語(yǔ)言功能是一樣的(讓電腦做你想做的事情)察绷,那何必還要挑三揀四的呢干签?原因就好比你會(huì)選擇自行車去運(yùn)冰箱,或是找心理醫(yī)生做身體檢查拆撼。有的工具特別適合完成某種特定的任務(wù)容劳。比如,讓C語(yǔ)言和JAVA語(yǔ)言的程序員合作就很困難闸度,因?yàn)镃和Java使用不同的方式去呈現(xiàn)世界竭贩、構(gòu)建數(shù)據(jù)、與電腦對(duì)話莺禁。團(tuán)隊(duì)里的人全都用一種語(yǔ)言是有好處的留量,在指示電腦去處理數(shù)據(jù)的時(shí)候,大家會(huì)有相同的思路,而一個(gè)大型機(jī)構(gòu)的所有團(tuán)隊(duì)都使用一種語(yǔ)言就沒(méi)有必要了楼熄。
——· 各種語(yǔ)言代表作品 ·——
匯編語(yǔ)言:《吃豆人》忆绰、《蜈蚣》
C: Unix、Linux內(nèi)核可岂、Python错敢、Perl、PHP
C++: Windows缕粹、Google Chrome稚茅、 F-35戰(zhàn)斗機(jī)使用的軟件jets
Python:Instagram、Pinterest平斩、Spotify亚享、You Tube
PHP:Facebook、Wikipedia绘面、WordPress欺税、Drupal
Perl:BuzzFeed
Java:Google、eBay飒货、LinkedIn魄衅、Amazon
Ruby:Twitter峭竣、GitHub塘辅、Groupon、Shoptify
Linux 內(nèi)核是用C寫(xiě)的皆撩。將你打印機(jī)和電腦連接起來(lái)的軟件可能也是C寫(xiě)的扣墩。帶給你Web頁(yè)面的Web服務(wù)器很多是用C寫(xiě)的。它還是一門用來(lái)寫(xiě)其他語(yǔ)言的優(yōu)秀語(yǔ)言——Python扛吞、PHP和Perl等等呻惕。C是用來(lái)創(chuàng)建系統(tǒng)的語(yǔ)言;它在電子計(jì)算中的作用滥比,相當(dāng)于文藝復(fù)興學(xué)者的拉丁文亚脆。
5.面向?qū)ο缶幊蘋(píng)OP——object-oriented programming
面向?qū)ο缶幊陶Z(yǔ)言的原型是Smalltalk,出自施樂(lè)帕羅奧多研究中心(Xerox PARC)的一幫天才之手盲泛,當(dāng)時(shí)這家研究機(jī)構(gòu)正值鼎盛濒持。而C語(yǔ)言是在一個(gè)產(chǎn)業(yè)巨頭AT&T下屬的新澤西研究機(jī)構(gòu)(貝爾實(shí)驗(yàn)室)誕生的,為的是解決手頭的問(wèn)題寺滚,而Smalltalk來(lái)自另一個(gè)產(chǎn)業(yè)巨頭Xerox設(shè)在遙遠(yuǎn)加州的機(jī)構(gòu)柑营,為的是解決未來(lái)的問(wèn)題。因此村视,Smalltalk對(duì)事物的呈現(xiàn)跟C是不一樣的官套。C讓你對(duì)整臺(tái)電腦有一個(gè)概念;Smalltalk讓你對(duì)整個(gè)現(xiàn)實(shí)世界抽象,讓你把世界按類和方法等概念進(jìn)行區(qū)分奶赔。C語(yǔ)言試圖簡(jiǎn)化對(duì)電腦事務(wù)的處理惋嚎,Smalltalk試圖簡(jiǎn)化對(duì)人類事務(wù)的處理。
6.代碼與數(shù)據(jù)
數(shù)據(jù)管理正是編程要來(lái)解決的問(wèn)題≌拘蹋現(xiàn)在到處都是電腦瘸彤,我們不斷在產(chǎn)生數(shù)據(jù),需要更多的編程工作笛钝。這是一個(gè)看不到出路的大難題质况,這就是為什么科技業(yè)的人掙錢這么多。他們不僅在賣可以無(wú)限復(fù)制的“無(wú)物”玻靡,而且由于賣出的的無(wú)限復(fù)制的無(wú)物實(shí)在太多结榄,他們要?jiǎng)?chuàng)造一個(gè)無(wú)限復(fù)制無(wú)物的新門類,專門負(fù)責(zé)處理新產(chǎn)生的數(shù)據(jù)囤捻。這個(gè)門類現(xiàn)在叫做“大數(shù)據(jù)”臼朗。
大型規(guī)模的工作很少能離開(kāi)數(shù)據(jù)庫(kù)。亞馬遜蝎土、谷歌视哑、雅虎、Netflix誊涯、Spotify都擁有強(qiáng)大的數(shù)據(jù)庫(kù)挡毅。最常見(jiàn)的是關(guān)系型數(shù)據(jù)庫(kù),使用一種叫做SQL(Structured Query Language)結(jié)構(gòu)化查詢語(yǔ)句的語(yǔ)言編寫(xiě)的暴构。人們?cè)谡務(wù)摂?shù)據(jù)庫(kù)的時(shí)候經(jīng)常會(huì)用到CRUD這個(gè)縮寫(xiě)跪呈,即創(chuàng)建Create、讀取read取逾、更新update和刪除delete耗绿。關(guān)系型數(shù)據(jù)庫(kù)是在70年代出現(xiàn)的,一只存活到現(xiàn)在砾隅。微軟有Server; IBMyou DB2误阻。SQL甲骨文的商業(yè)企業(yè)數(shù)據(jù)庫(kù)要價(jià)不菲,越來(lái)越多的地方開(kāi)始用自由軟件數(shù)據(jù)庫(kù)晴埂,比如PostgreSQL和MySQL究反。還有一種叫做SQLite的小數(shù)據(jù)庫(kù),由于輕巧邑时、穩(wěn)定和自由的授權(quán)條款奴紧,如今幾乎所有的智能手機(jī)都在用它。