很多人學了C語言,C++,Java仍然不會編程;而有些人沒有學過計算機語言,但有編程的天份;這中間到底缺了什麼?
我們來研究一下3個問題:
1.首先我們要了解計算機能完成的工作;
2.瞭解每種計算機語言在做什麼;
3.如何通過計算機語言讓計算機替我們做什麼;
1.電子計算機最直接能做什麼工作:
電子計算機能直接完成的工作如果細化看,就是在玩二進制數;
a.把二進制數按位進行左右移動;
b.對二進制數中的位進行<與,或,非,異或>4種操作;
c.讀地址空間內的二進制數當指令動作;
d.讀地址空間內的二進制數當數據操作;
e.保存二進制數到內存空間
f.對二進制數進行算術操作,結果存到內存空間
g.......
總結一下,計算機的工作=數據輸入->計算和操作->結果輸出
2.計算機語言在做什麼?
計算機語言只是爲了方便書寫命令計算機動作的語法;
機器語言,把命令計算機做原始動作的指令,轉換成二進制碼形式,不容易看懂;
彙編語言,把機器語言,轉換成英文單詞,方便閱讀識別,但仍不容易看懂;
面向過程語言,把彙編語言,轉換成數學表達式的形態,
面嚮對象語言,把數學表達式,封裝成獨立的輸入數據輸出結果的模塊;
面向應用語言,把對象模塊,按照需求自動組合成應用組件;(正在發展中)
3.怎樣讓有限的計算機完成無限的工作?
計算機只能夠保存和計算無符號二進制整數,但我們還是把有符號10進制數,浮點數,文字,聲音,圖片,視頻保存到了計算機裏;這其中的關鍵,就是轉換;
計算機所能保存的數據是有限制的,想辦法統統轉化成二進制;
計算機的容量是有限的,想辦法把相同的數據進行無損壓縮滿足容量;
計算機的字長是有限的,把超長的數據分解,給計算機分段計算滿足字長;
計算機的計算速度是有限的,研究一個快速的數學邏輯高效計算;
計算機的xxx是有限的,總有辦法可滿足;
軟件開發的編程思想
計算機的工作是有限的=數據輸入->計算和操作->結果輸出
1.跟據程序的需求,將輸入的數據轉化成計算機能接受的數據類型;
2.跟據計算機有限的工作能力,將計算和操作通過邏輯思維按步驟轉化成計算機的動作;
3.將結果按照要求轉化成輸出格式。
第1步,轉化數據類型,計算機語言已經準備了很多基礎數據類型和API;
第2步,邏輯思維養成;
第3步,逆轉數據類型,計算機語言也已經準備了很多基礎數據類型和API;
第1步和第3步,只要百度查找,看例子就能很快掌握,大多可以分享和拿來主義,但第2步邏輯思維並不能一步登天,思想的養成需要勤奮和努力,和學習寫作文的方法是一樣的,要多看別人的代碼,嘗試着多寫代碼,計算機語言好學,但編程不是學出來的,是花時間寫出來的;好比會寫中國字,並不一定能寫出好作文。
程序:是爲實現特定目標或解決特定問題而用計算機語言編寫的代碼;
以計算機的角度講,程序=算法+數據結構
數據結構:指計算機保存數據的方法(順序,鏈式,散列,索引)
算法:在計算機有限的結構下,解決問題的具體方法和步驟
過程化語言程序基本流程
1.輸入數據
2.檢查數據合法性
3.數據計算和處理(算法)
4.輸出結果
開發的難點,就是算法(邏輯思想)
計算機算法可分爲兩大類別:
數值運算算法:求數值解,例如求方程的根、求函數的定積分等。(真正難)
非數值運算:包括的面十分廣泛,最常見的是用於事務管理領域,例如圖書檢索、人事管理、行車調度管理等。(說難不難,但也不易)
總結:
軟件開發的編程思想,是一種邏輯轉化思想,並不是學計算機語言能學會,但可以從寫代碼中間領悟;首先要熟記和理解計算機語言的語法規則,才能將程序計算的邏輯準確的轉化成計算機語言的語法;最後要勤加練習,慢慢養成(極少數最強大腦除外);
原文鏈接:
http://http://www.xcore.icoc.cc/nd.jsp?id=15&_np=0_322_2