如何提高計算機科學的邏輯能力?

題主這話可能有問題,需要解釋一下。

題主是一名學習微電子的學生,目前大一,始終對於計算機科學(Computer Science)保持一定的好奇心和觀察。答主自己編程的時候,總是感覺自己邏輯不好,比如遞歸這種東西,答主總是要把全部流程大致寫下來才能夠明白。覺得自己邏輯有一些欠缺,不夠抽象。

很多計算機畢業的學長們說,最重要的是自己的「邏輯能力」和「英文能力」。英文能力答主能夠理解,但是這個「邏輯能力」怎麼理解呢?學習哪些科目能夠提高呢?

答主想來想去,「演演算法」還是「編譯原理」呢?可是這些課都要在大三才能夠上到,題主怎樣儘快地大略地進入計算機的門道呢?

也許有人說,邏輯能力不是靠學習哪門科目而提升的,而是數學什麼的,但答主想夠有成效一點,因此加上了一個「針對計算機(具體而言,就是編程)的邏輯能力」。

還望海內外各位CS大神不吝賜教,幫一幫題主。

在此一併謝過。歡迎吐槽。不過更加希望看到針對資質尚可而不是天資過人的學生的實用建議。

不甚感激。


學學數理邏輯好了。

或者學學函數語言,然後玩玩coq或者acl2。


謝邀。辯論隊練個蛋的邏輯,讀你的數學去。


這個問題很難問清楚,也很難答明白。

我現在計算機專業讀博一,分享一下我的見解。

首先,邏輯思維能力是所有理工科共同需要的重要能力(其實社會科學也一樣需要)。計算機技術本身就是抽象加工出來的運算機器,所以邏輯思維能力用的更多一些。

然後,要說句不好聽的。IQ大家應該都知道,其中占很大比重的就是邏輯思維能力。研究顯示其主要是天生決定的,後天雖然能提高,但是比起天資聰穎的人,總還是差很多。

當然,還是可以通過努力有所提高的。下面來說一說如何提高。

一是掌握正確的基本邏輯方法。說起來很簡單,邏輯學教材拿一本出來你會覺得完全沒必要讀,全篇廢話。但是這的確是基礎。

二是進行思維訓練。思維訓練就是思考。看一些講演算法的書比較有利於快速提高。演算法類書籍難度各異,側重點也各異。有的注重形式邏輯,有的完全是符號推演。根據自己能力需求選擇吧。

三是注重知識應用。我們都學習了十幾年,積累了很多知識,但是教育體制畸形,我們學的好多東西單純被拿來應試,卻不會應用。像是數學,題主應該學完了高數,做題可能手到擒來。現實生活中能像做題那樣直接應用嗎?

邏輯思維能力在科學研究領域決定了一個人的成就上限。換句話講那些站在科學殿堂頂端的人都具備超凡邏輯思維能力。但是無奈,只能儘力去提高,卻不能保證必然成功。

——————————————————————————————

對於參加辯論,我個人認為對於邏輯思維能力提高而言並不算作用明顯。辯論對於人有著全方位的提升,語言表達,應激反應。高級辯論技巧很多與邏輯思維能力並不相關,辯論所強調的思辨也不等同於邏輯思維。

有些人有思考的習慣,時時刻刻都在思考,那麼他就在不斷的訓練提升。而對於有些人不樂于思考,即使做了一些專項訓練,效果也不見得明顯。

日常一些棋牌類遊戲、桌游對於邏輯思維是有益的,但前提是你確實在這當中運用邏輯思維去思考,如果只是不過腦子的玩,不會有明顯效果。

演算法類的編程實現可以多去實踐。數學建模也是個提升邏輯思維的好選擇。


還不加入辯論隊?


我也是非科班,除了上了C,其他全靠自己胡搞。

先說下自己的一點經歷:最開始我寫代碼只有循環能理解,其他全不懂。某天接觸到了斐波那契數的求解問題,發現程序在不斷調用自己,好奇怪。沒想太多,先會寫了再說,就這樣,我把這個程序大概記住了。有一次吹牛的時候給別人寫這個程序,死活都是stack over flow(當時看到這行紅紅的字,真想把屏幕吃了,因為我不知道IDE告訴我這幹什麼,反正程序錯了,很不爽,好丟人)那天下午或是晚上,我試著把報的錯翻譯了下,忽然意識到,原來它在幫我改錯啊,於是我又試著搜了這個錯,原來很多人和我的問題一樣,我參考幾個搜索結果,終於讓那段代碼不再發神經了。也知道了這個方法叫遞歸,搞了點資料,基本弄懂了。這算是我第一次弄懂了我的代碼是怎麼回事。

從我的這點經歷看,我有這麼一點經驗:英語不會可以查,查多了其實會發現簡單的很,沒有變態的語法,沒有高深的中心思想,沒有複雜的結構,大概就是幾個專有名詞而已。編程的邏輯能力我感覺更像是一種感覺吧,一個輸入為N的問題可以看成一個N-1的問題,那我最容易想到的就是遞歸,遞歸如果stackoverflow了,那我就試著把它改成迭代,大概就是這麼一種感覺,提高的過程嘛,無非就是多練,多想。


安利一本羅輯思維剛上的新書《智能時代》 你會喜歡的


遞歸呀,好辦,你可以嘗試一下Haskell呀,連個for都沒有,你每次都要用遞歸寫程序,遞歸不增強才怪


本渣也是本科學微電子,然後自學編程的。現在考研考了個軟體開發在實驗室吭哧吭哧的搬磚呢。在這瞎扯一下吧。

首先學長說啥能力重要大可以不太當回事,自己學的high就行,愛學啥學啥。

想理解遞歸的話可以看看the little schemer/the seasoned schemer。以本渣現在的理解,很多時候,遞歸就是把循環變數寫在參數列表裡。最近才讀到的a discipline of programming 里說,循環和變數是很自然和根本的東西,用遞歸來描述循環和變數就是殺雞用牛刀。這段的結論就是遞歸這個特性可以先放在一邊。能理解循環和變數,很多時候就夠用了。

"覺得自己邏輯有一些欠缺,不夠抽象。"邏輯欠缺我不太懂是啥意思。邏輯是指邏輯運算嗎?與或非?這有啥能欠缺的。。。你要是指不知道怎麼寫出一個演算法,那大可放心,大部分人都不知道怎麼馬上寫出一個演算法,這就是為啥面試之前都要刷題。編程的思路這種事一個回答根本說不完,那麼多問題,那麼多解決方案,各種編程語言提供著各種思路。這個只能多看書,不一定全都接受,你覺著哪部分有道理自己信了用了就行。另外不夠抽象我也不知道是啥意思,在初學階段,不用想太多抽象的事,理清思路,解決小問題就很好了。

另外微電大二的時候會學數電模電吧,數電可有意思了,模電可難了。大三就該學半導體物理啊,集成電路啥的了,總之就是離CS比較遠了。所以你要是真對CS特別感興趣,大二轉專業吧,不知道算不算一個學院,應該不難轉?

最後是我自學過程中看過的各種東西,因為是自學,很雜:

A discipline of Programming (中譯本 編程的修鍊,翻譯的略奇怪,看不懂譯文就看原文)

The C Programming Language

演算法導論(網易上有公開課)

計算機組成與設計-硬體軟體介面

The Little Schemer/The Reasoned Schemer/A Little Java,A Few Patterns

The Scheme Programming Language,4th edition

The Racket Language

C311/B521/A596 Programming Languages [Assignments]

Programming Languages: Application and Interpretation by Shriram Krishnamurthi

Kotlin Programming Language

答題很多時候就是個人經歷的體現,我見過什麼覺著好就放到這說,完全沒有道理,所以聽個樂就好,這些扯淡的東西你覺著沒意思也完全正常。

最後建議刷好學分績,大學很看成績的。。。

哦,對了,別忘了找個妹子。祝好。


編程里的邏輯。。

多練多想多上OJ做題應該就沒問題了吧。。

你要為了這個轉頭學數理邏輯什麼的個人感覺不是太必要 攤子太大最後容易一無所獲


推薦閱讀:

學編程真的好嗎?
我的c學習是不是出問題了?
最近刷完了leetcode,麻煩指導轉行IT的下一步怎麼走?
Delphi為什麼會沒落?

TAG:互聯網 | 編程 | 邏輯 | 計算機科學 | 編程學習 |