## 概要
編程是信息科學,處理對象是抽象出來的數據;
編程是抽象科學,處理對象是前輩已經抽象好的數據;
編程是解決問題的科學,分為兩步:
* 用現有數據定義描述問題
* 根據描述的問題藉助計算機計算得出結果
描述問題又分兩種情況:
* 自己從頭開始創造數據模型(造輪子)
* 或使用別人抽象好的數據模型(輪子)來描述問題
### 自己造輪子
解決問題時自定義一套描述問題的數據模型,同時根據該模型提出相應的解決問題方案,要求具備以下基礎:
* 計算機底層知識(計算機體系結構、數據結構與算法、具體的一門編程語言)
### 使用別人的輪子(大多數時候是這樣)
在前人已完成的基礎上進行工作,需要熟悉前人提供的接口,並熟悉其處理和解決問題的模式,效率高,但自主性較小,一般可定製程度不高。
一般現在網絡上所說的編程多為在前人基礎上進行工作,很少有造輪子的。(開發成本高,耗時長,收益見效慢)
## 編程的目的
* 興趣
* 解決問題
* 處理複雜度
* 管理
## 基礎
基礎是指一些計算機基礎知識,如計算機組成原理、數據結構、操作系統、C語言等基礎知識。
### 計算機模型
主要是**CPU-內存-文件**模型。即程序保存在文件中,cpu將其讀入內存,再從內存中讀取程序進行執行。
編程就是把代碼寫到文件裡保存。
cpu執行程序、讀取文件到內存,操作系統和專門的編程語言已經寫好,編程時調用編程語言或操作系統提供的接口就行。但需要對cpu和內存有一個簡單的認識:
* cpu本質是順序執行,即0到1,1到2
* 內存本質也是順序,即0號宿舍,1號宿舍
* 程序執行也是順序,即張三去倒垃圾,李四去打水
* cpu每次執行一條指令,這些指令可以認為從上到下排列,cpu裡有一個指針從上到下指向指令,被指向的就會執行
### 數據結構
解決如何高效的存儲數據和管理數據之間的關係。重點掌握如下結構:
* 數組(基礎)
* 鏈表(基礎)
* 隊列(有用)
* 棧(常用)
* 樹(常用)
* 圖(複雜算法會用到)
### 操作系統
主要是[進程]和[文件]系統。
* 進程是程序執行的實體,瞭解程序的運行就必須瞭解進程。
* 編程始於文件,也終於文件,如何和讀取文件、寫入文件等文件操作是編程上層最基礎的操作
### 編程語言
編程語言的本質是抽象和封裝,原則是快速、高效、簡潔、容易理解。所以哪種語言不重要,即使表面的東西不同,但一層層剝開,最終都是一樣的——操作計算機(模型)。語言有一個基礎就好,如
* 變量
* 函數
* 對象
* 流程結構(順序、條件、循環)
至於具體用哪一門語言,可以根據具體的實際用途去考慮。如
* (底層)系統級編程用C或C++
* (中層)用java或C#
* (上層)數據分析、數據抓取用python
## 進階
在編程基礎打好後,即對計算機系統有一個完整的認識,對一個程序如何運行有一個完整的理解,或者說能控制自己的計算機。接下來的事情就是組織程序,維護程序以及花費時間。具體為:
* 設計模式
* 軟件架構
* 編程框架
* 業務邏輯
* 問題建模
## 網絡
以上的基礎和所進行的編程僅僅是控制自己的計算機,除此外還有最重要的一環就是[網絡]。
### 網絡基礎
* TCP/IP
* HTTP
* 服務器
* web編程
前面的基礎和進階掌握和熟練後,後續的網絡也只是時間問題。
閱讀更多 程序員術與道 的文章