這一段和後面聯繫不大,但寫這個東西的第一目的是做爲本身的想法和筆記,首先要跟隨本身的思路走,因此隨意吧。我小學的時候第一次見到微機時,覺得那個大電視纔是本體——由於畫面都在上面。之前的遊戲,受限於性能,畫面是像素風格的:javascript
一個「採蘑菇」裏的小人,分辨率只有20×10,而如今出的筆記本電腦,分辨率最低也是1366×768,因此即便是一個對話框,也有100×50以上的像素。放大以後,纔會發現顆粒感。從電影到電視機再到電腦,原始的像素遊戲到視網膜屏幕,原理其實一直都沒變,只是量變給觀感帶來了質變。html
順便提一下,3D畫面是這樣實現的:前端
在 320x200 的解析度下,從攝像機中心射出 320x200條光線,屏幕上每一個點對應一條光線,首先碰撞到的物體的位置顏色,就是屏幕上這個點的顏色:java
代碼以下:python
for (int y = 0; y < 200; y++) { for (int x = 0; x < 320; x++) { DWORD color = RayCasting(x, y); DrawPixel(x, y, color); } }來源:256字節3D程序是如何實現3D引擎的呢?程序員
一樣的一個馬里奧
,在玩家眼裏和在計算機的存儲裏,是不一樣的格式。這是由於,在計算機內部,圖像是以數據的形式表示的。其實不止圖像,全部的信息都以數據的形式在計算機內部表示。玩家不用關心馬里奧
在計算機裏是怎麼表示的,但開發者須要瞭解。ajax
抽象是程序開發裏很是重要的概念,咱們用Mario
來指代剛纔的那個像素小人,而後直接讓Mario
作動做。而矩陣的每一個點(x,y),左移一步座標從(x,y)變成(x-1,y)...交給計算機就好:算法
#這裏是僞代碼 Mario = 矩陣[[x1,y1,red],[x2,y2,green]...] #初始化每一個點的座標和顏色 Mario.MoveRight() #任一x+1 Mario.MoveLeft() #任一x-1 Mario.Jump() #任一y+1 Mario.Down() #矩陣變化爲蹲的狀態 ...
之因此提到抽象,是爲了引出:sql
這裏是完整的薯片生產流水線,若是有興趣能夠點進連接,下面只貼一下必要的工序數據庫
![]() |
![]() |
清洗 | 去皮 |
![]() |
![]() |
切片 | 去澱粉 |
![]() |
![]() |
油炸 | 調味 |
把這條生產線用程序員經常使用的時序圖(sequence)抽象一下,就像這樣(sf太坑了,不支持時序圖):
那這個和程序有什麼關係呢?舉個例子,雖然淘寶
和百度
的首頁風格不一樣,但在程序員看來都是類似的:
固然,實際過程當中會根據需求有所不一樣,好比服務器會有負載均衡、用戶驗證、信息驗證等中間過程。
這個過程的實際代碼是這樣的:
前端:
$.ajax({ url: "www.innate.com/search", //服務器地址 data: "keyWord", //搜索關鍵字 successful: function a(){}, //成功的處理方式 error: function b(){}, //失敗的處理方式 });
服務器端:
@RestfulController @RequestMapping("/search") //接收傳給www.innate.com/search的請求 public String search(String keyWord){ String result = sql.Search(keyWord); //在數據庫中查詢 return result; //返回查詢結果 }
數據庫:
select table.col1, table.col2, table.col3 from table where table.col1 = keyWord -- 查詢table中col1爲keyWord的記錄
這些代碼也能夠看做各個API
的流水線處理
ajax() -> @RequestMaping -> (select語句) -> 返回到ajax()處理
在程序員的眼睛裏,這些API
就和薯片流水線上的各項機器同樣,並且能夠自訂規則,比現實裏的設備更靈活。
知乎上有個問題頗有意思:程序員作到什麼程度纔不會被算做 API caller?
拿WEB開發來講,大部分的功能都已經肯定了:首頁、導航、文章、帖子、搜索、圖表報表、上傳、下載、發送郵件...有一些框架(好比說SpringMVC)把這些功能已經整合封裝成ajax這樣的API了,開發的時候根據須要調用就能夠了——大部分IT培訓機構就是教你怎麼用某套框架作一個項目出來——也是我如今的狀態。
但是爲了提高效率、安全、穩定,每隔幾年就會有新的框架或者版本出現,好比最近幾年出現的Vue/Angular/React,雖然都是JS,寫法和背後的原理卻有很大的區別。爲了使用這些新技術,大多數程序員都要不斷的學習。
三種不一樣JS框架輸出HelloWorld :
//Vue.js <body> <div id="app"> <p>{{message}}</p> <input v-model="message"> </div> <script> var exampleData = { message: "hello world" } new Vue({ el: "#app", data: exampleData }) </script> </body> //Angular.js <body> <div ng-controller="helloworld"> <p>{{1+1}}</p> <p>{{helloworld}}</p> </div> </body> //React.jS <body> <script> ReactDOM.render( <h1>Hello, world!</h1>, document.getElementById('root') ); </script> </body>
此外,既然程序
和工業流水線
能夠類比,那麼如今的程序員
和產業工人
也能夠類比。未來程序員這個職業,必定會發生分化:
API
寫一個小模塊的人,確定會泯然衆人程序工人與工程師之間的區分在於產品的穩定、性能、健壯等。好比我有一次須要清除某張1500萬表裏的1000萬條數據:
有個段子說:三流的程序員寫模塊,二流的程序員寫架構,一流的程序員寫算法,頂級的程序員種頭髮。算法是什麼呢?不聊OI/NOI/ACM這些算法競賽,說一個生活中簡單問題的建模:
編程到底難在哪裏
程序員:我今天要買一斤蘋果。由於我只喜歡紅富士蘋果,因此我只買紅富士蘋果。我能接受的最高價格是10元/斤。正常狀況下一斤蘋果用一個袋子能裝下,可是爲防萬一,我會帶兩個袋子。我知道附近的3家水果店,因此我會依次訪問這3家水果店。
連接裏的答案很長,可是頗有意思,上面提到不少系統的功能早已模塊化,多少人在工做裏也只是把分配下來的任務完成就好,下班以後從不研究技術,或是去寫一點本身想作的東西呢?
互聯網的冬天
,但以後,程序員們就沒怎麼過過苦日子吧,我想仍是能夠提早準備一下。提及來,也寫了幾年的程序,但對程序的意義思考還不多,只能勉強說一說
把信息數據化
程序很大一部分和IT(Information Technology)有關,計算機用數據來存儲信息,上圖裏的雜誌、字典、照片、打印、電話、地圖...無一不是信息的載體,30年間這些東西都已經變成了計算機裏的數據。這是不少程序設計的基礎:CAD軟件、MIDI音頻製做、Office套件、寫做、繪畫等等,轉化成數據以後記錄更容易,而且產生了新的形式,好比網絡小說。
信息沒有實體,但能夠做爲現實行爲的抽象,好比把流水線抽象成模塊;遊戲把現實裏的動做抽象爲技能/CD,並無讓人感到違和。
先主曰:「朕令吳班引萬餘弱兵,近吳寨平地屯住;朕親選八千精兵,伏于山谷之中。若陸遜知朕移營,必乘勢來擊,卻令吳班詐敗;遜若追來,朕引兵突出,斷其歸路,小子可擒矣。」
這一段能夠用「亞瑟在草裏蹲着,殘血后羿去線上浪一波,對面韓信來抓就反殺他」比喻。
看過馬親王的這篇怎樣讓大明變得透明,能夠詳細的瞭解歷代王朝是怎麼根據文書裏的數據進行管理的——就像今天的大數據同樣。數據,或者說把數據信息化,能夠發揮計算機的長處。
插入計算是什麼?加減乘除/移動數據/轉換/輸出信息
在計算機內部,一次操做就是一次運算。不限於加減乘除,讀取鍵盤的輸入、把數據從存儲裏讀取出來或是把信號輸出到顯示器都是運算。現代CPU的運行頻率廣泛在1GHz以上,也就是說一支筆從桌子上滾落,到接觸地面的時間裏,CPU已經進行了5億次以上的運算——即便人腦運算2+3只須要1次運算,計算機運行2+3須要1萬次運算,也比人腦快5萬倍。
因此在網頁或者記事本里,用Ctrl+F進行關鍵詞查找,必定比人肉搜索更高效。
再舉一個例子,不少同窗爲了考四六級、考研、雅思/託福都會背單詞,但只會從abandon,abortion...背下去,既不得要領,也堅持不下去。若是會寫一點小程序,統計歷年真題裏出現的高頻詞彙,重點理解,既提高了效率,也能隨時看到效果,事半功倍。
《魏略》說,孔明在荊州,與石廣元、徐元直、孟公威俱遊學,三人務於精熟,而亮獨觀其大略。有的時候,咱們應該把網絡、硬盤、搜索看成本身的記憶,而在大腦裏保存一份知識框架就好。即便最強大腦裏選手練習得再快,也比不上魔方機器人0.38秒還原,更別說思考還原步驟的時間了。
見識淺薄,難以歸納程序的意義,可是涉及到信息、重複的工做,就徹底能夠用程序來替代或者提升效率。並且IT行業一直在加速發展,20年前多少人有手機?10年前多少人有電腦?5年前多少人用手機購物?總之,做爲一個朝陽行業,雖然現下也存在泡沫,但長遠看來,至少還有20年上升期,這一代的程序員們,真的是處在了「黃金時代」。