Re: [請益] 怎麼練程式~~??
※ 引述《imtkd (風倩)》之銘言:
: 進研究所要用C或C++寫程式
: 之前有學過迴圈、變數定義etc
: 看是看的懂但要自已寫都不知怎麼開始或
: 下一步該寫什麼
: 要怎麼"練"程式阿??
: 感覺比數學還難>_<
學習寫程式至少可以分成兩個層次來討論:
1.熟悉程式語言(及相關的開發工具/函式庫等)
2.用來解決問題
(透過電腦)解決問題是我們學習程式語言的主要目的。事實上許多研
究顯示,程式學習的困難點不是在於「程式語言」本身,而是不知道如
何應用來「解決問題」。其實語言本身沒什麼特別的,大部分都是一些
死東西,查書都可以查得到。倒是「如何利用程式語言解決問題」確實
有點難學。
我不曉得您說的「看得懂程式碼」是什麼意思,是逐行的理解程式碼,
或是能夠摘要式的說明某個函式的用途、或某支程式概念上的結構?如
果只能夠逐行理解、合起來卻不知道在做什麼,可能有點見樹不見林,
此時建議試著用更宏觀的角度來閱讀程式碼,先了解他們要解決什麼問
題,如何做的、又為什麼這麼做。用概念式的理解能夠學到更多的東西
(像是程式的架構、某些問題的可能解決方法)
要善用一項工具前必須先熟悉那樣工具,我想您也同意這點看法。程式
語言是在電腦上執行的,所以了解電腦對您使用工具有絕對的好處。我
猜想您應該不是資訊本科的學生、而且應該只是用程式語言來做一些輔
助工具性的應用,儘管如此,我還是覺得至少應該要修習過/旁聽計算
機概論、資料結構、與演算法等基礎課程,這些都可以對您「使用程式
語言」、以及「如何將問題轉化成可計算的定義」有一定的幫助。
如果您對程式語言與電腦已經有一定程度的熟悉與理解,接下來就是「
練」程式--利用程式來解決問題。
解決問題首先要定義、分析問題,過程有點類似寫數學應用題,要領不
外乎是把問題映射到我們已知領域,透過已知領域中變數的相關特性計
算出我們要的結果。撰寫數學應用題時,我們是透過數學的方法、自然
是將問題轉化成可用數學解決的方式;在撰寫程式時,我們要利用電腦
的計算能力、自然是把問題轉化成可用電腦計算解決的方式。如何將問
題轉化成可計算的定義取決於您對問題、電腦與程式語言的熟悉程度。
程式語言教本上的練習題是一個很好的索引,可協助您理解程式語言的
某些特性與可用來解決哪些問題,換言之,如果您可將問題轉化成具備
那些特性的描述便可利用程式語言來解決。
程式語言的特性 |------> o <------| 問題的定義
上面那行我想表達的是,透過程式語言解決問題是兩個方向的探索:
一個是從語言的特性出發,試著想這些特性可應用來解決怎樣的問題
一個是從問題的定義出發,試著想這些問題如何轉化成可計算的定義
(符合語言特性的定義)
如果要工作順暢,我想需要對兩邊都有一定程度的了解。
或許您可以回想一下以前是怎麼開始學習數學應用題的,那些學習的技
巧應該也可套用到學習用程式語言解決問題這件事情。我記得那時的學
習方式是先對基本的數學做大量練習、然後學習如何解應用題(如何定
義問題),接著是開始大量模仿一些類似的應用題的計算方法,於是考
試時開始能解決相似的應用題。
您是問題領域的專家,所以可以就您對問題本質的理解、將之轉化成、
或重新定義成可透過計算的方式解決;而程式語言的特性,除了查書之
外,透過練習與模仿應該能協助增進熟悉的程度。我在此提供幾個可供
大量練習的網站,希望對您有所助益。
http://zerojudge.tw/Problems
http://axp1.csie.ncu.edu.tw/~rick/acmguide/
http://uva.onlinejudge.org/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.71.65
※ 編輯: foxzgerald 來自: 140.117.71.65 (11/08 08:56)
推
11/08 21:23, , 1F
11/08 21:23, 1F
推
11/09 01:10, , 2F
11/09 01:10, 2F
推
11/11 23:04, , 3F
11/11 23:04, 3F
推
12/25 20:56, , 4F
12/25 20:56, 4F
討論串 (同標題文章)