作者PTTDEMA (DEMA)
看板C_and_CPP
標題[問題] 學了七年但我不會寫程式
時間Mon Aug 9 14:09:19 2010
各位好,我是資工系畢業的學生,有個狀況困擾我很久,我想該來向各位求助
我從高中開始學電腦,一直到現在大學已經畢業了,但我認為我不會寫程式
求學的時候,如果考筆試,我可以看出程式碼是在做什麼所以可以通過考試
如果是上機考,藉由GOOGLE查一查需要的功能大概的實作方式,也可以做出程式
但如果要我由無到有自己寫出程式,我沒辦法,腦袋一片空白
一開始我以為是我不夠熟,所以不斷看書加上練習實作
幾年過去,版上出現過的書
從入門的C++教學手冊到經典的The C++ Programming Language我全都看完了
C++有那些東西,有哪些用法,STL有那些東西有哪些用途
物件導向有那些東西,有哪些用法,這些我都算熟悉,但我卻不會應用
以前老師上課時,問我們A、B、C三個函式是做什麼用的,我可以很輕易地回答出來
但要我用A、B、C三個函式兜出一個他所要的功能,我做不到
我甚至無法了解那些函式跟他要的功能有什麼關係
但如果是老師先做出功能之後,問我為什麼要用這些函式,我又可以回答得出來
我感覺就像是把書看熟考過SCJP但卻寫不出一行JAVA的那種考生
又像是經由左三圈右三圈的口訣考過駕照,但卻無法實際上路的駕駛
我把資料結構的東西拿出來複習,排序的步驟都很熟悉,用紙筆也都算得出來
但要轉成虛擬碼時我卻腦袋一片空白
很多人建議我去補習,但我看了課程,好像是在講解C++的語言而非程式設計的邏輯
我該如何訓練這個邏輯呢,多做題目或是ACM也是我目前嘗試的方法之一
但練了幾個月,卻還是沒有覺得我進步了
甚至於我自己解過的題目再看一次我都不見得還解的出來
我非常的痛苦與迷惘,不知道我該如何做會比較好呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.171.60.135
→ stupid2:整篇看了兩次~感覺好神奇~我是一個才大一學一年的學生 08/09 14:13
→ stupid2:我覺得我可以寫一些很小的程式,但板上的程式我看懂的不多 08/09 14:13
→ stupid2:一個問題出來,我總是想題目要的是什麼,怎麼達到 08/09 14:14
推 QQ29:你寫過最大的程式是什麼阿@@ 我也沒寫過ACM 資結的程式... 08/09 14:15
寫過最大應該是專題的嵌入式系統,不過當時有指導教授,基本上都是他說做法我實行
→ stupid2:我會什麼,可以怎麼解決,看法跟版大感覺很兩極@@ 08/09 14:15
→ QQ29:反正有遇到問題 再想辦法解決 你是毫無頭緒嗎 08/09 14:16
我是毫無頭緒,問我STL的東西我知道,問我哪時候用的到那些我卻不知道了
推 VictorTom:學校裡總寫過些比較大形的程式作業吧?? 寫過怎樣的東西 08/09 14:17
→ VictorTom:呢?? 看起來您是滿手工具而且都了解其用途, 就是不曉得 08/09 14:17
→ netsphere:除了看還要實際寫啦 從簡單短短的開始 08/09 14:18
→ VictorTom:遇到問題時不知道如何組合手邊現有的工具與發明還沒有的 08/09 14:18
→ VictorTom:工具. 每個人的學習曲線與習性不同, 適合自己的方式可能 08/09 14:19
→ VictorTom:還是要自己摸索/發明出來. 小弟以前會在學習過程中, 把 08/09 14:19
→ VictorTom:範例程式東修西改的玩看有什麼變化, 以既有的範例玩玩可 08/09 14:20
→ VictorTom:以加/改些什麼, 多變出一點自己想要的功能出來. 進一步 08/09 14:20
→ VictorTom:的就是有意義沒意義的題目多練習看看, 有時候工具練到反 08/09 14:21
→ VictorTom:設性的看到什麼就想到用什麼, 個人覺得也算是種進步:) 08/09 14:21
我就像你說得這樣,腦子裡學到的好像一團亂,不曉得怎麼應用
其實我也滿常修改範例,看看會產生什麼變化,但我會修改卻不會創造
其實單一用途的小功能還是寫得出來,但卻無法組合成大型程式
往往都需要有人告訴我組合方式,我才能寫得出來
→ ILike58:太神奇了,你有碰STL竟然組合不出你想要的功能,除非你是 08/09 14:32
→ ILike58:指軟體等級要用幾個function搞定,不過更神的是你竟然啃完 08/09 14:34
→ ILike58:The C++ Programming Language.......................... 08/09 14:34
這就是我困擾的地方,我知道STL有什麼東西,但我不會用,我知道他的單一功能為何
但我不知道當我遇到什麼問題需要用到他,應該說遇到問題時我並不會想到他
常常都是自己寫了很爛的function之後才想到這種東西STL裡面就有了
The C++ Programming Language是我最後看的一本,在那之前我已經看了10本以上的C++
很多東西都反覆閱讀了好幾遍,所以很多地方其實都學過
推 tyc5116:有沒有人覺得他只是謙虛PO文而已.....@@ 08/09 14:35
推 VictorTom:說不定唷XD 不過, 有些學習的結果造成會懂不會用的也不 08/09 14:36
→ VictorTom:少見, 基礎學科如數學英文, 生活技能如開車等也不少見, 08/09 14:37
→ VictorTom:工具總是要常常去使用, 才會熟悉什麼時候適合拿哪些組合 08/09 14:38
→ VictorTom:起來用吧....XD 08/09 14:38
推 horngsh:用看的方式學programming永遠不會進步,type and learning. 08/09 14:46
每一本的題目我都有試著做,但做完好像並沒有學起來,只是當下了解而已
→ stool100:你需要題目 08/09 14:47
→ ILike58:不過人本來就有學習模仿的能力,C++ Primer用心看完,起碼 08/09 14:49
→ ILike58:都會感染他的一些想法作法吧............................ 08/09 14:50
→ x000032001:你用背的嗎.................. 08/09 14:54
推 softwind:其實 雨人 就是像你這樣 要看你和他人接觸的情形 08/09 14:58
推 silveriii:要看是哪種規模的程式寫不出來吧 ... 可能只是不會拆解 08/09 14:59
→ silveriii:問題而已 08/09 14:59
→ softwind:如果你沒有自閉的現象 那就感謝老天給你超強記憶力吧.. 08/09 14:59
我記憶其實很差,會的東西都是反覆看了好幾本書都有提到才會記得,學校也有反覆教
→ xatier:while (1) { coding(); debug(); thinking(); } 08/09 15:13
→ x000032001:題目寫多應該能培養一點感覺才對..寫難一點的 08/09 15:17
→ x000032001:多想怎麼寫比較好 速度(程式跟coding皆然)比較快 簡潔 08/09 15:18
推 F23ko:你需要的是「組合工具」的能力 ..... 08/09 15:22
推 loveme00835:就是因為你覺得它是重複的東西,你才會學不起來,每 08/09 15:23
→ loveme00835:本書都有他切入的角度,還有著重的地方,心想「我讀過 08/09 15:23
→ loveme00835:過了」那麼哪怕是些微的新東西,你也會很容易帶過 08/09 15:24
其實我很想學好,所以每次看一本新的書我都當自己是新手,不會跳過任何章節
每看完一本書也越了解C++的用法與特性,就算是前一本就做過的題目,在下一本出現
我還是會從頭做一次,但一要我自己創造程式我就寫不出來,就算拋開語言
在不管語言的情況下要我把一個流程轉成虛擬碼,常常還是轉不出來
※ 編輯: PTTDEMA 來自: 218.171.60.135 (08/09 15:31)
→ loveme00835:先從口語表達開始, 不過要先了解問題本身 08/09 15:33
→ loveme00835:其實你需要揣摩的是作者的思考方式, 用法倒是其次 08/09 15:35
→ x000032001:找個老師引導式思考XD 08/09 15:37
推 bill42362:要不要試著練習畫流程圖之類...@@" 08/09 15:39
→ Yshuan:主要是演算法的範疇.. 第一章都很直觀 可以嘗試看看 08/09 15:56
→ Yshuan:題目完成之後 會有analsys比較 別人的想法跟自己的想法差異 08/09 15:57
推 abc1231qa:你就像打造了一個很大的地基 上面卻沒有蓋建築物 08/09 16:00
→ abc1231qa:哪天你找到融會貫通的方法 一定會變超級強 08/09 16:01
→ abc1231qa:變成一座 非常堅固高聳宏偉的"程式設計"之塔 08/09 16:01
→ abc1231qa:所以加油吧(這樣有沒有很熱血XD) 08/09 16:02
推 newstar2007:你有沒有試過 當你練習完一個程式 回想他的功能 08/09 17:13
→ newstar2007:然後不看書地把他寫出來 08/09 17:13
→ newstar2007:不要用背的 從小程式開始 08/09 17:13
→ tinlans:你只需要一個能把你逼到極限狀態又孤立無緣的逆境。 08/09 18:30
推 VictorTom:回一下目前edit的最後一段, 小弟覺得入門到學習的書可以 08/09 19:58
→ VictorTom:多看幾本沒錯, 但不需要後面每本都重新以新手的態度去看 08/09 19:58
→ VictorTom:而是語法熟析之後, 開始朝比如說資料結構或演算法之類的 08/09 19:59
→ VictorTom:方向去看. 比如STL已經是人家寫好的很多工具, 但資結演 08/09 20:00
→ VictorTom:算法裡有些也就是教這些工具的實作, 了解某些常用的東西 08/09 20:01
→ VictorTom:或者常遇到的問題, 自己練習思考/解決/實作這些東西, 會 08/09 20:01
→ VictorTom:比只是單純去看懂/知道有這些東西, 來的更有感覺吧:) 08/09 20:01
→ VictorTom:也因為自己真的接觸/了解/思考/解決過那樣的問題, 你才 08/09 20:02
→ VictorTom:會更有體會什麼時候來用什麼工具來拼你要的功能. 08/09 20:03
→ VictorTom:比如, 字元陣列, 靜態陣列, 動態陣列, 鍊結串列, 寫程式 08/09 20:04
→ VictorTom:時遇過一些麻煩的問題, 才更能體會, vector/VLA, string 08/09 20:04
→ VictorTom:等等這些東西為什麼好用....XD 08/09 20:05
→ yauhh:看起來,你只是沒記性而已.不要自找煩惱 08/09 20:05
→ tinlans:解決問題的時候不要想著依賴別人,也不要用搜尋引擎。就單 08/09 20:40
→ tinlans:靠你手邊現有的書,再試試看。 08/09 20:40
→ tinlans:搜尋引擎會讓初學者容易依賴跟現有問題關聯性最高的答案。 08/09 20:41
→ tinlans:指導你的人也可能因為不擅長引導你,而造成同樣的依賴。 08/09 20:42
→ tinlans:我比較好奇,國中時代原 po 遇到數學難題,會怎麼解決? 08/09 20:45
推 VictorTom:小弟我同樓上t大有同樣的好奇....@_@" 08/09 20:46
→ tinlans:馬上找人問?想辦法跟書商騙解答本?想說老師沒教方法所以 08/09 20:46
→ tinlans:大家都不會,直接放棄?還是花一整晚在解那一題? 08/09 20:47
→ yoco315:不要擔心,我學了十幾年,我現在也覺得我不會寫程式 08/09 20:52
→ loveme00835:當然是直接爆肝跟他拚了! ˋˊ 08/09 20:55
→ hilorrk:我從來就沒有覺得自己寫過程式...我一直在學寫程式- - 08/09 21:07
→ kikiqqp:書不是只拿來看的 主要是拿來查的 08/10 01:21
推 tabascobath:給你一個建議 以後寫程式之前 在紙上先把虛擬碼寫出來 08/10 07:27
→ tabascobath:語法都會 還是寫不出來 表示邏輯沒有架構 08/10 07:28
→ tabascobath:因此先寫虛擬碼 在紙上面把邏輯順序弄清楚 08/10 07:29
→ tinlans:樓上,他說他寫虛擬碼的時候腦袋一片空白啊。 08/10 08:28
→ gintan:剛開始工作的時候 我也不會寫C 自己買了本書來K 08/10 08:50
→ gintan:還有跟著做書裡面的練習題 才漸漸有寫CODE的感覺 08/10 08:50
→ gintan:你欠缺的只是多做題目多練習 多想多寫CODE 會有幫助 08/10 08:51