程序員術與道:道—如何學習編程

## 概要

編程是信息科學,處理對象是抽象出來的數據;

編程是抽象科學,處理對象是前輩已經抽象好的數據;

編程是解決問題的科學,分為兩步:

* 用現有數據定義描述問題

* 根據描述的問題藉助計算機計算得出結果

描述問題又分兩種情況:

* 自己從頭開始創造數據模型(造輪子)

* 或使用別人抽象好的數據模型(輪子)來描述問題

### 自己造輪子

解決問題時自定義一套描述問題的數據模型,同時根據該模型提出相應的解決問題方案,要求具備以下基礎:

* 計算機底層知識(計算機體系結構、數據結構與算法、具體的一門編程語言)

### 使用別人的輪子(大多數時候是這樣)

在前人已完成的基礎上進行工作,需要熟悉前人提供的接口,並熟悉其處理和解決問題的模式,效率高,但自主性較小,一般可定製程度不高。

一般現在網絡上所說的編程多為在前人基礎上進行工作,很少有造輪子的。(開發成本高,耗時長,收益見效慢)

## 編程的目的

* 興趣

* 解決問題

* 處理複雜度

* 管理

## 基礎

基礎是指一些計算機基礎知識,如計算機組成原理、數據結構、操作系統、C語言等基礎知識。

### 計算機模型

主要是**CPU-內存-文件**模型。即程序保存在文件中,cpu將其讀入內存,再從內存中讀取程序進行執行。

編程就是把代碼寫到文件裡保存。

cpu執行程序、讀取文件到內存,操作系統和專門的編程語言已經寫好,編程時調用編程語言或操作系統提供的接口就行。但需要對cpu和內存有一個簡單的認識:

* cpu本質是順序執行,即0到1,1到2

* 內存本質也是順序,即0號宿舍,1號宿舍

* 程序執行也是順序,即張三去倒垃圾,李四去打水

* cpu每次執行一條指令,這些指令可以認為從上到下排列,cpu裡有一個指針從上到下指向指令,被指向的就會執行

### 數據結構

解決如何高效的存儲數據和管理數據之間的關係。重點掌握如下結構:

* 數組(基礎)

* 鏈表(基礎)

* 隊列(有用)

* 棧(常用)

* 樹(常用)

* 圖(複雜算法會用到)

### 操作系統

主要是[進程]和[文件]系統。

* 進程是程序執行的實體,瞭解程序的運行就必須瞭解進程。

* 編程始於文件,也終於文件,如何和讀取文件、寫入文件等文件操作是編程上層最基礎的操作

### 編程語言

編程語言的本質是抽象和封裝,原則是快速、高效、簡潔、容易理解。所以哪種語言不重要,即使表面的東西不同,但一層層剝開,最終都是一樣的——操作計算機(模型)。語言有一個基礎就好,如

* 變量

* 函數

* 對象

* 流程結構(順序、條件、循環)

至於具體用哪一門語言,可以根據具體的實際用途去考慮。如

* (底層)系統級編程用C或C++

* (中層)用java或C#

* (上層)數據分析、數據抓取用python

## 進階

在編程基礎打好後,即對計算機系統有一個完整的認識,對一個程序如何運行有一個完整的理解,或者說能控制自己的計算機。接下來的事情就是組織程序,維護程序以及花費時間。具體為:

* 設計模式

* 軟件架構

* 編程框架

* 業務邏輯

* 問題建模

## 網絡

以上的基礎和所進行的編程僅僅是控制自己的計算機,除此外還有最重要的一環就是[網絡]。

### 網絡基礎

* TCP/IP

* HTTP

* 服務器

* web編程

前面的基礎和進階掌握和熟練後,後續的網絡也只是時間問題。


分享到:


相關文章: