程序員們怎麼理解各種計算機書里抽象的概念呢?

1.抽象就是看完後在現實里一下子想不到類似的東西,在腦海里想不出那個東西的形狀。題主是個小白痴。

數據結構還好有圖形,但有很多是沒有圖形又長篇大論的概念和演算法。

看看我問的另一個問題,我有看了幾篇介紹這兩個概念的文章,還是連向別人描述這兩個是什麼都做不到。什麼是surfaceview?和surface有區別嗎? - Android


對程序員來說,可抽象的,才是可理解的。

給他五個西瓜,十個菠蘿,程序員也不能變出切水果的遊戲。只有把現實中的事物,關係,抽象成電腦能理解的邏輯,才能寫出程序來。

書上看到的抽象結構演算法,往往是分析現實問題後的結果,你覺得難,是因為跳過了分析的過程,好像還沒看題目,就先看到了答案。

嘗試應用書上所學的東西,不要硬想,用幾次,不但能理解了,還可能感受到美感。


其實說實話,只有極少數人第一次看演算法書里的演算法,在純粹文字跟數字的情況下一次就懂,大部分人都是多看幾次,外加自己手動把演算法寫出來或者用代碼表現出來,多用幾次就懂了,抽象的概念,在腦子裡想是永遠無法運用到實際的代碼中的,一定要自己把代碼寫出來,大部分演算法書都有偽代碼,第一次可以照著偽代碼去寫,後面熟了之後就寫成實際的簡單程序(非圖形,要是有圖形實現就更好了)。

總之,就是多讀,多碼代碼,這個是我的方法,當然也可以寫blog或者去github上操練


空談抽象理論,常常難以消化。盡量製造,重現理論和概念的應用場景,實在無法模擬就多思考吧。

對於抽象概念的理解關鍵就在於多實踐了。來,我們把大象拉過來,再找根鞭子。


surface view和surface那篇文章完全沒有演算法,只是描述一個數據結構而已。如果理解不了的話,自己寫點代碼試一試咯……


題主好學之心是極好的,不過天分略缺,如若不肯換了專業,多啃啃源代碼,亦或通讀些源碼分析之書,必是極有幫助的。


數學要學好,邏輯思維要好.


涉及較多抽象概念的書和《XXX權威指南》,《深入淺出XXX》這類時效性比較差且樂於羅列API的書不同,需要反覆的看


謝邀.

學&<&<離散數學&>&>就是為了增進這方面的理解力呀.

啃書要有好牙口,打鐵還需自身硬.


我認為計算機里很少會有抽象得難以理解的東西。如果有的話,多半也是因為踏到了數學的世界裡。


抽象,換成比較容易了解的名字來說應該叫模擬。

那麼如何才能成功模擬呢?

常規的工程抽象的過程是:

寫個demo-&>總結合併相同重複的代碼-&>精簡一些設計不合理的地方-&>重新變成一個demo

不斷重複的過程,然後代碼會從小變大,再從大變小,不斷重複,如果你重構足夠多的次數的話。

當然這是極限情況,因為經驗和能力的問題,你不可能一次就抽象到位(恰恰抽象能力是我認為評定程序員的唯一標準),所以你會經歷幾次抽象和小改動。

然後,以上說明了抽象大概是什麼,那麼為什麼要抽象

對於軟體來說,人工的工作量是有限的,那麼你如何在有限的代碼中創造出無限的可能?

你不可能在所有情況下都寫一個 if..else..這個當然是不可能的,所以我們有了規(chou)則(xiang)這麼一門。

打個遊戲項目中的比方:坦克大戰中吃了船坦克怎麼過河?

簡單的做法,就是當坦克在遇到河的時候檢查當前是否有個船狀態,然後不碰撞。

然後第二步,我們希望坦克有個技能,能夠躲避子彈,讓子彈穿過去。

重複以上,子彈在遇到坦克時,進行檢測狀態,如果有則穿過去。

~~等等,我希望在有這個狀態的時候,子彈在邊上爆炸依然無法被傷害。

恩,好的,我們在爆炸時再檢測一下,如果有這個狀態,我們就不造成傷害。

恩。。看起來不錯。。

等等。。想想我們之前,我們遇到水這個子彈應該什麼處理?

然後,當我們的需求增加的時候,這樣的東西寫到後面是進行不下去的。

1.抽象出一個碰撞列表(示例)

子彈,坦克,爆炸物,水,量子

子彈 1 1 1 0 0

坦克 1 1 0 1 0

只要在有buff的時候,把坦克類型改成量子,那麼就可以穿過子彈和爆炸物。

哦。。對的,還可以過水。

增加個船類型

子彈,坦克,爆炸物,水,量子,船

子彈 1 1 1 0 0 1

坦克 1 1 0 1 0 1

船 1 1 1 0 0 1

好了我們就有一個船了。我們要做的就是在有船這個道具的時候把坦克值為船類型即可。

從以上例子可以看到,我們擁有2個東西。

1.基礎碰撞規則

2.碰撞規則表

然後把規則賦予我們的物體就可以創造出無限可能的物體來。

ps:如果原子是最低層級的物質,我只要寫一個原子規則,理論上就能創造一個宇宙~~~~


跟數學關係不大,主要是理解面向對象編程。特別是搞懂多態。總覺得面向過程搞得越熟練,就越難理解面向對象編程。


程序語言所用抽象的功能:

提取事物的共性,共同的屬性,共同的行為。抽象描述了對象(也就是模擬現實的物體)的最基本的特徵,抽象提供了一個對象的輪廓,是外部看到的視圖。外部基於抽象可以區分實例。


當年我看小說的時候,每次看到這樣的話:

那個紅臉修士怎麼怎麼,

一名鍊氣6層的修士站出來怎麼怎麼,

某某身後一名手下站出來怎麼怎麼,

我都會想,

恩~,這裡使用了匿名對象。


書讀百遍其意自現。

紙上得來終覺淺,絕知此事要躬行。


抽象這東西其實一開始就是為了方便程序員或者計算機科學家應用或者研究才發明出來的,我指的是計算機科學裡面的抽象,這個和日常生活中的不同。

在CS中,通俗地講,抽象就是把複雜的東西簡單化理解


我們啊,都是是從鏈表和二叉樹開始的。


抽象?沒有關係。

我不是智商爆表的人。但我有我的辦法。具體過程如下。

抽象——&>偽代碼(描述)——&>代碼——&>根據認知具象搞個小模型——&>學通徹了再抽象出來。

腫么樣?似不似很麻煩?但是我覺得很好用啊,很省時間吶.....


唯有二字:操練


丟...不懂演算法的!


不理解。


代碼里的所謂抽象和我們平常所說的抽象是不一樣的,

比如java裡面有個抽象類,用了abstract聲明就叫抽象類,因為裡面包含抽象方法,而抽象方法之所以叫抽象方法是因為沒有方法主體,只是聲明這是一個方法,

面對對象的語法中,如果一個類里沒有足夠的信息去描述一個對象,就會產生這種東西。

還有我不太能理解你說的抽象是什麼,我學了這麼久也沒覺得書里有什麼東西是難以理解的抽象……我看到你這個問題只想到了抽象類抽象方法…

不過也可能是我還沒學習到那種地步。


數據結構我看過三本書,另外還有一本《離散數學》,題也做了不少,嗯,做題很有用。


推薦閱讀:

c++大作業怎麼用windows API 做個窗口程序?不用MFC或者是QT這些工具。
如何評價noip2016初賽題?
如何練習編程的手速?
開發一款手游的工作量是怎樣的?
親戚找你做網站你是明碼標價還是送人情免費做?

TAG:程序員 | 編程語言 | 編程 | 計算機科學 | IT行業 |