今大学でプログラミング系の研究をしている者です。どこを支援すべきなのかを模索中です。
そこで、プログラミング教育の支援を行おうということで、一般的な本に書かれているここが難しいというのではなく、プログラミングを学ぶ学習者がプログラミングのどこが難しいと感じているのか知りたいのです。
言語はC言語なんでも構わないのですが、どういったところが難しいと感じているのかといったことを調査した論文等があれば教えてもらいたいです。いろいろ検索してみたのですがこれといったものがなくて・・・。また、論文等じゃなくてもホームページとか、個人の人がこう言ってるみたいなものでも多く集めて参考にしたいと思うのであればよろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

難しいと感じるところ、と言うのはいろいろ難しいですが、いくつか上げます。


まずループなど、関数の仕事。正直、プログラムが何をするかとか、ループが何をするか分かっても、何かに例えることができなければ、理解できずにわけが分からなくなる。(初心者に多いのが、if文はすぐに覚えても、ループは覚えられない。ifは選択として日々使っていて、例えも利くが、ループを何かに例えることができていない証拠。)
ループはプログラマーにとって朝飯前の処理ですが、高校生でも、何をしているか理解できず、苦しんでいるクラスメイトを何人も見てきましたし、自分もループが意味不明で一時プログラムを挫折しました。
次に、理論でしょうか。何故こうなるのか。何故ここでこんなことをするのかと言う、処理の並べ方です。

プログラムの文法は英語より簡単です。perlとかでも大体基本的な文法は三つくらいですし、Cでも文法なんて片手で数えられるはずです。
どこが難しいかと言えば、数IIIの微分積分を解く時のように、どこでどの関数を使い、どの処理をどこで行い、値を変え、範囲を変えるという理論の組み立てや関数の働きです。実際、慣れた人には簡単でも、コツをつかめていない人はいつまで経っても解けませんよね?プログラムの難しさはそれと同じだと思います。

以上、プログラムを一度挫折した人間の意見でした。役に立てば嬉しいです。
    • good
    • 0
この回答へのお礼

大変参考になりました。ありがとうございました。

お礼日時:2007/07/28 15:27

論理的な考えができない人に論理を説明すること


四則計算や数字の比較ができない人に1次方程式(不等式)を解いてもらうこと
1次方程式がわからない人に、連立方程式を解いてもらうこと

プログラムは所詮連立方程式の集まり。
連立方程式を解くと言うよりは、その解を導き出すための連立方程式を作り出す、というのがプログラマーの仕事ですけどね。

学問に難癖をつけるつもりはありませんが、こういうのって、研究対象になるんだろうか、という疑問が、、、

> どういったところが難しいと感じているのかといったこと
感覚を論理的に(コンピューターに)説明することじゃないですかね?

自動車のアクセルを踏めばスピードが出て、ブレーキを踏めばスピードが落ちる。
どのくらいの圧力でブレーキを掛ければ、何秒でスピードが何km/h落ちるというのを論理的に連立方程式で説明できれば、レースゲームが作れるんじゃないでしょうか。
    • good
    • 0
この回答へのお礼

ふむふむ・・・。いろいろ参考になりました。
ありがとうございました。

お礼日時:2007/07/28 15:28

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q分数のかけ算が難しいという職場の先輩への対処方法

僕は大学生の時に近所にある工場へアルバイトに行きました。
レンズを作るラインの仕事で、機械がレンズをつくっているのを監視、不良品がでたときだけ、機械を止めて治具の取り替えをするという誰でもできる単純な仕事です。
当時僕は、一般教養科目のデータベース設計論で数学の部分がわからなくて困っていました(ちなみに法学部です)
そのことで職場の先輩(社員で主任、高卒)と数学の話になりました。
先輩は数学が得意だと言います。
ところが話がかみ合わない。僕が話しているのは回帰行列の話なのです。一方先輩が話しているのは、分数のかけ算程度の話なのです。

先輩の話です。
「数学が苦手なんだって、お前本当に馬鹿だなぁ~。俺は数学が得意だ。分数のかけ算だってできるぜ。お前に分数のかけ算ができるのかよ」
つまり先輩にとっては分数のかけ算は難しくて他の人にはできないと本気で思っているのです。

これに対して貴方ならどんな返事をしますか?
1.「分数のかけ算の話なんてしてませんよ。それぐらいできて当然です」と本音を言う。
2.「いや、本当に分数のかけ算手難しいですね。僕も分数のかけ算ができなくて困っています」と相手のレベルに合わせる。
そのほかうまい返事の仕方があれば教えてください。

ちなみに僕は、「分数のかけ算なんて小学校で習う算数じゃないですか?それぐらい誰だってできる簡単なことですよ」と答えて、その後先輩に睨まれました。

要点、先輩は分数のかけ算が難しいと本気で思っている。それを新人に簡単だといわれて侮辱されたと感じた。一方僕は普通に喋っただけで侮辱する気持ちはない。人間関係をうまく保って行くにはどう返事をしたらよいかを教えてください。

なおこの質問は僕が昨日質問した
http://okwave.jp/qa2529264.html
がわかりにくかったようなので、実話に基づいた具体例として再度質問させていただきました。

僕は大学生の時に近所にある工場へアルバイトに行きました。
レンズを作るラインの仕事で、機械がレンズをつくっているのを監視、不良品がでたときだけ、機械を止めて治具の取り替えをするという誰でもできる単純な仕事です。
当時僕は、一般教養科目のデータベース設計論で数学の部分がわからなくて困っていました(ちなみに法学部です)
そのことで職場の先輩(社員で主任、高卒)と数学の話になりました。
先輩は数学が得意だと言います。
ところが話がかみ合わない。僕が話しているのは回帰行列の話なの...続きを読む

Aベストアンサー

世の中には、分数のかけ算が本当にできない人がいます。「分数の計算は誰にでも出来る」という判断は誤りです。

分数のかけ算が誤らずにできることと、上のような判断が誤らずにできることとは、比較の対象とはならないかもしれません。

しかし、何事においても、正しく物事が出来るということは、すばらしいことだと思います。

「数学が苦手なんだって、お前本当に馬鹿だなぁ~。俺は数学が得意だ。分数のかけ算だってできるぜ。お前に分数のかけ算ができるのかよ」

「すごいですね。私はときどきまちがうことがあるんです」とでも言えばいいのではないですか。

自分にできる範囲のことを正しくやれる自信を持っている人のほうが、自分にできない範囲のことで自信を持っていない人より、賢いと思います。先輩が「お前本当に馬鹿だなぁ~」というのも一理あると思います。

Q工学系の研究の為のプログラミング

当方工学系の大学一年生です。
工学系の研究をするためには、どのようなプログラムを
学べば良いのでしょうか。
例えばエクセルでもVBAができなくてはいけません。
研究にはエクセル以外にも使うはずです。その為に
必要なプログラムはなんでしょうか・・・。

プログラミング言語だと思ってくださって構いません。

Aベストアンサー

 あくまでもプログラミング言語はツールなので、
専攻が決まり、その分野で使われていそうな
言語(※)が分かってからそれを勉強し始めるの
でも遅くありません。多くの研究者はそうしています。

ただし、何かプログラミング言語をやっていたほうが
後々の役に立つのは確かです。学部1年の段階で
したら、いろいろ試してみて、好きな言語を
学んでください。どうしても何か薦めろという
ことでしたら、Ruby・Python・Perlなどの
スクリプト言語がいいです。これらは学習が容易かつ
汎用的なので、どの分野を専攻したとしても
「第二言語」として便利に使えるでしょう。
学んでおいて困ることはありません。

 なお研究の現場では、Excelはグラフ描きツールと
しては良く使いますが、研究そのものの計算に使う
ことってあまりありません(制限が大きすぎるから)。
VBAに興味を持って深入りすることは止めません
(それも後々も糧になりますので)が、無理に
やるようなものではないと思います。
課題なら仕方ないですが。


(※)
同じ理工系(応用理工ですか?)といっても、
専門によって研究に使われるプログラミング言語
はかなり違っていて、
例えば流体力学などの大規模数値計算系はFORTRAN、
画像処理や符号処理などの小規模数値計算系はMATLAB・C/C++、
分散協調システムなどのシステム系はJava・C/C++、
記号処理などの人工知能系はLISP, ML, Haskell等の関数型
が良く使われている、という具合です。
もちろん、これに限りません。C/C++で記号処理
やってる人もいるし、LISPで画像処理やってる人も
います。また、質問者の方が研究を始めるころに
なったときは状況が変化するかもしれません。

 あくまでもプログラミング言語はツールなので、
専攻が決まり、その分野で使われていそうな
言語(※)が分かってからそれを勉強し始めるの
でも遅くありません。多くの研究者はそうしています。

ただし、何かプログラミング言語をやっていたほうが
後々の役に立つのは確かです。学部1年の段階で
したら、いろいろ試してみて、好きな言語を
学んでください。どうしても何か薦めろという
ことでしたら、Ruby・Python・Perlなどの
スクリプト言語がいいです。これらは学習が容易かつ
汎用的なので、どの...続きを読む

Q超~難しい英訳

私の父は優しく、母は怒りんぼです。

 う~ん英語むずかしいいいいいいい。誰か教えてくださいいい<(_ _)>

Aベストアンサー

My dad is genial.
And my mom is short-tempered and tends to get angry easily.

「優しい」って単語が難しい。

Q研究のためのプログラミングスキル

自分は今大学で、電気電子を専行しています。
先日教授から、4年生になって研究室に配属されたときに、プログラミングスキルが必要だと言われました。
授業ではほとんどプログラミングについて学ぶ機会がないため独学でスキルをみにつけなければなりません。
おそらく、電気電子に関する実験をした際に、そのときのデータの処理を行えるプログラムを書けるようになっておけということだと思います。
しかし、プログラミングといっても種類が豊富にあり、どれを学んでおくとよいのか分かりません。
現在は一応C言語を独学中です。
電気系の研究室に配属された際に、プログラミングのことで困らなくて済むようにするには、どの言語を学んでおけばよいでしょうか?
アドバイス宜しくお願いします。

Aベストアンサー

実際にどの言語を使うかは、分野や研究室の文化にも依ると思います。

私の居た研究室は信号処理の理論とシミュレーションをやっていたので、MATLABがメインでした。
個人的にはC/C++の方が好きだったので併用してた。

制御系の実装とかだと、Cがメインだろうし、電磁波の数値解析をやっていた人達は、過去の資産の都合でFORTRANも使っていました。

人口知能関係の文献を読むとLISP(S式)が断りもなく出てきたり、ハードウェアよりならVHDLを使ってみたり、何かのシミュレーションをJAVAで可視化している人もいました。


ただ、Cを勉強しておくのは悪くないと思います。

Q折り紙が家にいっぱいあるので 難しいものを作ろうと思います。 phizzユニットというものの作り方

折り紙が家にいっぱいあるので
難しいものを作ろうと思います。

phizzユニットというものの作り方を
教えてください!

Aベストアンサー

その画像とは少し折り紙の模様が違いますが、このサイトを見ればわかるかなと思います。英語で書いていてありわかりにくいですが、そこはすいません...http://mattersofgrey.com/phizz-unit-origami-torus/

もし良ければ、難しそうなのを、見つけました!
https://iemo.jp/46223

Qお勧めの資格(プログラミング系)

いろいろなプログラミングを勉強したいと思っています。
資格習得を目指した方が勉強の効率も上がるのではと思い
プログラミング系の資格を探しています。
なるべくなら、社会に出て役に立つ資格であればと思っています。
あと、これはできればですが現在学んでいる言語が
C言語とjavaなのでこれに関係した資格だとありがたいです。
よろしくお願いします。

Aベストアンサー

プログラミング系の資格が無くてもプログラムは作れます。
料理を作るのに調理師免許がいらないのと同じです。
調理師免許がないのに、調理師学校の校長先生をしてる人もいます(笑)

閑話休題
会社によっては社員に
「Sun Certified Programmer for the JAVA 2 Platform」
あたりを取らせるところもあるようです。
ただ、残念なことに基本的に、プログラミング系の資格はあまり役に立ちません。
資格が無くてもプログラムは組めるからだとおもいますが。

Q告白とキスとどっちが難しい?

男の人は、好きな子に対して、告白するのとキスするのとどっちが
むずかしいと思いますか?
どっちが勇気いりますか?
(付き合う前で良い感じの関係だったとして。)

Aベストアンサー

人によるんじゃない?

その状況だと
むずかしいのは キス
勇気がいるのは 告白


なんでって?
告白は相手の意向無視して一方的にできる。だけどそうでないキスは難しい。
キスは雰囲気でもっていけるかもしれないけど告白は雰囲気が良くても否定の可能性を拭えないから勇気が要るでしょ。

Q8085系プログラミングについて

ついこの前、同じを質問したのですが、私の理解不足と説明不足により質問の仕方が悪いと回答され、自分なりにアセンブラ言語について学習してみました。学習してみるとたしかに私は何も理解しておらず、8085系のプログラミングということも書き忘れていました。ここでのスレでまずお詫びしたいと思います。誠に申し訳ありませんでした、こんな私ですが、もしよければアセンブリ言語での8085系のプログラミングでこの質問に対する回答と解説のご教授お願いします。

9000H番地の1バイトデータをa、9001H番地の1バイトデータをbとしたとき、axbを16ビットで求め、下位1バイトを9002H番地、上位1バイトを9003H番地に格納するプログラムを作りなさい。またこのプログラムの実行時間をデータがA=65H、B=0AEHのときに計算しなさい。実行時間の計算では各命令の実行回数を示し、計算式を詳しく書くこと。

8085系のプログラミングでは、掛け算の関数がないので、掛け算についての表わし方だけでもいいので教えてください、お願いします

Aベストアンサー

私が駆け出しの頃は、下っ端仕事でよくやらされました。
30年くらい前の経験なので、ニモニックが違ってたらゴメン。

    LXI H,9000H ;HL←9000H
    MOV E,M   ;E←a
    MVI D,0   ;D←0 要するにDEレジスタにaをセット
    INX H    ;次のアドレス(9001H)
    MOV A,M   ;A←b
    LXI H,0   ;HL←0 これが積になる
LABEL1:
    CMC      ;Cyをクリア
    RRC      ;CyとAを右にローテイトする
    JNC LABEL2  ;Cyが出なければ加算しない
    DAD D    ;積に加算
    PUSH H    ;積を退避
    PUSH D    ;HL←DEとするための処理
    POP H    ;ここでHL=DEとなる
    DAD D    ;HLを2倍する(HL←HL+DE)
    XCHG     ;DEとHLを交換
    POP H    ;積を復帰
LABEL2:
    ORA A    ;A(乗数)が0かどうかを確認する
    JNZ LABEL1  ;乗数が0でなければ繰り返す
LABEL3:
    SHLD 9002H  ;積を格納

例えば、b=0AEH=174を2進値で表すと、10101110です。
これを掛けるということは(a×128)+(a×32)+(a×8)+(a×4)+(a×2)ということです。
aの値を1倍、2倍、4倍、8倍・・・とし、上記bのビットが1の時だけ加算してゆけば答えが得られます。

処理時間は
(1)LABEL1までと、LABEL3以降は1回しか実行されないので、各命令のクロックを加算します。
(2)LABEL1直後のCMCとRRCは8回実行されますので、クロック数合計×8を加算します。
(3)次の条件分岐は2回分岐し、6回は分岐しません。分岐時と非分岐時のクロックをそれぞれ加算します。
(4)DAD~POP H(LABEL2の直前)は6回実行されます。各命令のクロック数合計×6を加算します。
(5)LABEL2以下はORAが8回、JNZは分岐が7回、非分岐が1回です。各クロック数、分岐時と非分岐時のクロックをそれぞれ加算します。

クロック数が求められたらクロックレートから時間を計算できます。
但し、割り込みが無いとしての理論値ですが・・・
P.S.
aとbの値は符号なし(0AEH=174)ですよね?符号付だと、符号の判断、2の補数化という操作が入ります。

私が駆け出しの頃は、下っ端仕事でよくやらされました。
30年くらい前の経験なので、ニモニックが違ってたらゴメン。

    LXI H,9000H ;HL←9000H
    MOV E,M   ;E←a
    MVI D,0   ;D←0 要するにDEレジスタにaをセット
    INX H    ;次のアドレス(9001H)
    MOV A,M   ;A←b
    LXI H,0   ;HL←0 これが積になる
LABEL1:
    CMC      ;Cyをクリア
    RRC      ;CyとAを右にローテイトする
    JNC LABEL2  ;Cyが出な...続きを読む

Q国際公務員は難しい?

こんにちわ。
色々な仕事について、
毎回質問させていただいています。

国際公務員はやはりむずかしいのでしょうか?

どんなことでも良いので、教えてください。

Aベストアンサー

 難しいようです。昔、本屋で国際公務員についての本を立ち読みした事があるのですが、まず半端ではない高学歴が要求されるそうですよ。著者曰く、世界各国から人材が集まってくる為、能力を客観的に評価する事が難しい為、結果として学歴によって評価する事になるそうです。
 ただ、随分昔の話ですので、今はどんな風か知りません。

Q8085系プログラミングについて

私は、現在情報工学科の学生です。現在学校で8085系プログラムの授業を受講しているのですが、私が作成したプログラムで、axbの部分でどうして[01x00]が動かないのかがわかりません。ちなみに[00x01]は動きました。また、他の数字でaxb(02x03等)を試してみましたが動きました。
もしよければアセンブリ言語での8085系のプログラミングでこの質問に対する回答と解説のご教授お願いします。

問題:データa,bをキーボードから入力すると計算結果が表示素子に表示されるようにしなさい。a,bを入力後、両方を同時にいったん素子に表示して、[STEP]キーで積を表示すること。
・私が考えたプログラミング・
.8085
ASEG
DISPEQU0040H
DHEX1EQU0043H
DHEX2EQU0046H
KEYINEQU004FH
ORG 8000H
CALLINITIALIZATION
L1:CALLKEYIN
JNCL1
CPI14H
JZL1
MVIC,4
CALLDHEX1
CALLDISP
RLC
RLC
RLC
RLC
MOVD,A
L2:CALLKEYIN
JNCL2
ORAD
MVIC,5
CALLDHEX2
CALLDISP
STA9000H
STAaa
LDAdd
STA0FF4DH
;
L3:CALLKEYIN
JNCL3
CPI14H
JZL3
MVIC,2
CALLDHEX1
CALLDISP
RLC
RLC
RLC
RLC
MOVD,A
L4:CALLKEYIN
JNCL4
ORAD
MVIC,3
CALLDHEX2
CALLDISP
STA9001H
STAbb
;
ANS:CALLKEYIN
JNCANS
CPI15H
JNZANS
;
LDAaa
MOVE,A
LDAbb
MOVC,A
;
LOOP:DADD
DCRC
JNZLOOP
SHLD9002H
MVIC,3
MOVA,L
CALLDHEX2
CALLDISP
MVIC,5
MOVA,H
CALLDHEX2
CALLDISP
;
LIGHT_OFF:
CALLKEYIN
JNCLIGHT_OFF
CPI17H
CALLCLEAN
JNZLIGHT_OFF
HLT
;
CLEAN:LDAdd
STA0FF4DH
STA0FF4EH
STA0FF4FH
STA0FF50H
STA0FF51H
STA0FF52H
STA0FF53H
CALL0040H
RET
;
INITIALIZATION:
LDAdd
LXIB,00H
LXID,00H
LXIH,00H
STA9000H
STA9001H
STA9002H
RET
;
aa: DB 00H
bb: DB 00H
dd: DB 00H
;
END
私は自分で考え、もし9001番地などが0ならば、強制的に0を4桁出すプログラムを考えました。しかしどこでそれを入れれば良いのかがわかりません。ヒントだけでもいいので教えてください。

私は、現在情報工学科の学生です。現在学校で8085系プログラムの授業を受講しているのですが、私が作成したプログラムで、axbの部分でどうして[01x00]が動かないのかがわかりません。ちなみに[00x01]は動きました。また、他の数字でaxb(02x03等)を試してみましたが動きました。
もしよければアセンブリ言語での8085系のプログラミングでこの質問に対する回答と解説のご教授お願いします。

問題:データa,bをキーボードから入力すると計算結果が表示素子に表示されるようにしなさい。a,bを入力後、両方を...続きを読む

Aベストアンサー

Tacosanさんが#2で回答されていることを試してみてください。

問題となっているところは乗算をしている58行目から66行目までにあります。ほかは(概ね)問題ありませんのでこの部分に集中してください。

61行目のMOV C,Aまで実行したとき、各レジスタに入っている値の意味を整理しましょう。それぞれのレジスタにはどういう値が入っていてどういう役割を持っていますか。HLレジスタペアはどうですか。DEレジスタペアは?。そしてCレジスタには何が入っていますか?

63行目のループに入った後、66行目で結果を格納するまでこのプログラムはどうやってかけ算を実行していますか?

一ステップずつプロセッサの動きを追ってみましょう。
うまくいっているときの動きの追い方はこんな感じです。
うまくいっている例として、03 02を入力したときです。
61行目まで実行すると各レジスタはこんな値になっているはずです。
HL=0000, DE=0003, C=02
あなたが考えたのと一致していますか?
次に63行目にすすみ、DAD D命令を実行します。レジスタは
HL=0003, DE=0003, C=02 (HLにDEの値が加算された)
あなたの想定通りですか?
64行目に進んでDCR Cを実行します。
HL=0003, DE=0003, C=01 [NZ]
Cレジスタの値が1減ります。フラグはNZです。
65行目に進むとZフラグが立っていないのでJNZ命令を実行してLOOP:ラベルに戻ります。
63行目に戻ってDAD Dを実行します。レジスタは
HL=0006, DE=0003, C=01
64行目、DCR Cを実行
HL=0006, DE=0003, C=00 [Z}
65行目、フラグがZなのでJNZでのジャンプは行われず66行目へすすみます。
66行目、SHLDを実行してHLレジスタに入っている0006が9002H,9003H番地のメモリに書き込まれます。
どうですか?あなたが想定した動きでしょうか。

これと同じことを問題の「うまく動かない」という状況の時にどうなっているか考えてみてください。61行目に達したときレジスタの値はどうなっていますか?そこから63行目、64行目と実行を進めてください。

ところで、#1への返答で「01x00のとき0100と表示されてしまう(0000となって欲しいのに)」ということを書かれていますね。"0100"と表示されるのはなぜか、この値はいったいどこからやってきたのか、というところからデバッグするという考え方もあります。でも、今回はまず上に示したようなステップを追う方法で考えてみてください。
動作を丁寧に追っていけば、「なぜ0100と表示されるのか」もわかると思います。

=========
ここからkfd03077さんへ:(質問者の方済みません。ちょっと貸してください。)
このアセンブリ言語で用いている"DB"命令は「カレントロケーション(メモリ)にオペランドで示す値を格納する」という疑似命令です。"DB 0"で、メモリ上に1バイトの空間を確保し、それをオペランドの値0に初期化します。
DB命令で確保した空間にaa:, bb:などといったラベル(アドレスを示す)をつけているわけですのでこのコードで問題ありません。
つまり、メモリのどこかの1バイトに0(DBのオペランド)が格納され、aaとかbbとかはそのアドレスの値になっています。
おそらくほかのプロセッサ(8086など)のアセンブリ言語にある型付き定数定義と混同されているのだと思います。

Tacosanさんが#2で回答されていることを試してみてください。

問題となっているところは乗算をしている58行目から66行目までにあります。ほかは(概ね)問題ありませんのでこの部分に集中してください。

61行目のMOV C,Aまで実行したとき、各レジスタに入っている値の意味を整理しましょう。それぞれのレジスタにはどういう値が入っていてどういう役割を持っていますか。HLレジスタペアはどうですか。DEレジスタペアは?。そしてCレジスタには何が入っていますか?

63行目のループに入った後、66行目で...続きを読む


人気Q&Aランキング

おすすめ情報