質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

8回答

3016閲覧

理解するのに苦労した概念はありますか?

argius

総合スコア9390

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

2グッド

8クリップ

投稿2015/09/27 02:23

編集2015/10/01 03:40

プログラミングを学習するにあたって、つまずきやすいポイントがありますよね。
よく知られたものに、(主にC言語の)ポインターやオブジェクト指向、モナドなどがあります。

私は、プログラミング歴が浅かった頃に、雑誌のPerl講座やWebページなどで登場する
「汚染」という概念の理解に苦しみました。
「汚染」があると何が問題なのか、という解説を見つけることができなかったのです。
今思うと、手当たり次第に読んでいたのが問題で、ちゃんと体系的に学んでいればそのようなことは起こらなかったのではないかと思っています。

こんな感じで、プログラミングを学習する際に理解するのに苦労した概念というのがあったら、どの辺が苦労したのかを詳しく教えていただけるとうれしいです。

よろしくお願いします。


追記:あと2,3日受け付けています。回答お待ちしております。

stereo_code, ps13zier👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答8

0

最近ではJavaEEの「依存性注入」でしょうか。原文はCDI(Contexts and Dependency Injection)なので、そのまま訳した感じなのですが、和名だけ見ると敷居が高く感じてしまいます。

私としてはアプリケーションとは別体のサービスがbeanを生成・保持し、アプリケーションはそのbeanをアクセスする仕組みと解釈しています。実際には使いやすくWebプログラミング初めての方でも利用できるのではないかと思えるぐらいです。
2冊目に買った参考書でやっと理解できた(理解し始めた)感じです。本代は掛かってしまいましたが理解できて、使えそうと感じたときの喜びは大きかったですね。

投稿2015/09/27 23:36

BlueMoon

総合スコア1339

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/09/28 06:56

回答ありがとうございます! JavaEEはまだまだ不勉強なので間違ったこと言ってるかもしれませんが... 依存性注入が主流になって、EJBの時代から格段に使いやすくなった感じですね。 バックエンド的には似たようなものだと思うんですけど。 この辺はやはり「疎結合」というキーワードが重要になるのでしょうか?
BlueMoon

2015/09/28 07:44

「疎結合なので(結合テストの際の?)コード変更量が少なくて済む」「未完成のClassをnewしなくて済む」などの説明記事は良く目にするのですが、私は実績不足なのでそのように感じたことが未だ無いのです。実感しているのはCDIによってページ間のデータ共有がとても簡単にできる点です。 多分EJBから使いやすくなっているのはアノテーションの導入で、web.xmlなど殆どの定義ファイルの編集が不要となった点ではないかと思っています。
argius

2015/09/28 08:38

まあ、疎結合というのはいまや当たり前すぎてありがたみはあまり無いかも知れないですね。 それよりも、SessionとEJBの良いとこ取りになったのが重要、というべきでしょうか。 > 多分EJBから使いやすくなっているのはアノテーションの導入 これは大きいですね。
guest

0

苦労したのは「関数型プログラミング」かな。

「関数型プログラミング」がわからない、書けない、できないというわけではなくて、「『関数型プログラミング』とは○○である」という決まった定義がないから、いまだに人に説明するのに苦労します。Haskell等の「関数型プログラミング」でしか書けない言語で遊んで、ああ、こういうスタイルや考え方でコーディングするのが「関数型プログラミング」なんだ・・・って理解するしか無いような気がしました。モナド?ああ、あんこがはいったあれね、おいしいよね。

投稿2015/09/27 03:09

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/09/27 03:28

回答ありがとうございます! 関数型プログラミング、説明するのは難しいですね。 私はちゃんと人に教えられるほど関数型プログラミングを理解できていませんが、人に説明するとしたら ・文でなくて関数の組み合わせでプログラミングする ・デフォで状態が無い(代入でなく束縛) ・ラムダ的な何か あたりから話を発展させていくのが良いかなと思います。
guest

0

「継続(continuation)」、「コルーチン(coroutine)」、「スレッド(thread)」は、最初のハードルを越えるのが難しかった記憶があります。色々な説明を読んで、やっと自分自身が納得できるモデルが脳内に出来上がったという感じです。

どれも古典的な手続型&構造化プログラミングから離れるものだからでしょうかねぇ。

投稿2015/10/01 03:57

yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/10/01 04:10

回答ありがとうございます! パラダイムシフトよりももっと小さな言語固有の機能でも、頭の切り替えが難しいですね。大昔、BASICしか知らない頃に、他の言語は行番号(エディター上のそれではない)が無くてどうやってプログラミングするのだろうと思ったことがありました。 継続は、私はいまだにはっきりとしたイメージができていないです...
guest

0

Javaのワイルドカード総称型、しばらくなんだこりゃってわからなかったです。

投稿2015/09/28 03:07

yuba

総合スコア5568

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/09/28 07:23

回答ありがとうございます! ワイルドカード総称型はいまだにちゃんと覚えられてないですね...ちゃんと使えてないです。 共変性とか反変性とかの用語もまた難易度を上げているように見えます。
guest

0

ベストアンサー

もともとBASICやCからプログラミングを始めたもので、「プログラムのソースコード」と「プログラムで操作するデータ」というように、世界を二分するような考え方をしていました。

JavaScriptを始めた時に、foo.barというような「ソースコード上に書いた識別子」と、foo['ba' + 'r']のような「プログラムで生成した結果」が同様に扱われる、ということをなかなか飲み込めなくて、しばらく戸惑った思い出があります。

もっとも、今となっては「プログラムコードも一種のデータ」という考え方に馴染んで、Rubyでループを回してメソッドを一気に生成する、なんてことも平然とするようになっています。

投稿2015/09/28 01:40

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/09/28 07:04

回答ありがとうございます! 私も最初はBASICでしたが、本格的にプログラミングをやり始めたのがPerlだったので、その辺は早いうちに受け入れられました。 でも、evalのようにどんな文字列でも評価できてしまう点は怖くもありますね。 メタプログラミングというのも、一般的に理解するのに苦労するもののひとつと言えそうです。
guest

0

遅延静的束縛

説明を読むと分かりにくいのだけど、
実例を見るとどういう機能なのかはわかる
だがなんでそれがこういう名前なのかわからない
難しく感じるのは多分名前のせい

投稿2015/09/27 06:52

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/09/27 09:06

回答ありがとうございます! PHPにはこういう機能があるんですね。(≧PHP 5.3.0) どういうときに使うのかは思いつきませんけれど... 確かに名前は理解の妨げになってそうです。
KazuhiroHatano

2015/09/29 07:34

interface以上Class未満の拡張を前提としたクラスの定義とかですかね 基本的な処理手順は同じなんだけど、具体的な処理内容が違うみたいな 同じじゃないけど似た処理がたくさんあるとか、そんなときに使えそうです
guest

0

C言語から入った方はCOBOLのMOVE命令がわからないといいますね。

投稿2015/09/27 05:42

maiko0318

総合スコア876

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/09/27 05:56

回答ありがとうございます! COBOLはほとんど分かりませんが、 MOVE命令とC言語の代入は全く違う、ということでしょうか。
maiko0318

2015/09/27 06:04

COBOLでは10進数(小数点も使えます)と2進数、それに文字型もあります。 これらを相互にMOVEできます。 10進→2進 2進→2進 10進→文字型 内部形式が全く違うのにそれを解析し、変換して代入しています。
argius

2015/09/27 06:07

なるほど。 C言語では明示的な変換が必要になりますからね。
maiko0318

2015/09/27 06:20

2進→2進  間違えました、 2進→10進 ですね。 単に10進と書きましたが、パック10進、ゾーン10進があります。 これらも自動変換で代入できます。 文字型を10進に入れることもできますよ。 01 a. 02 b pic 9(5). aという項目と同じ場所をさす。cでいうunionに似ています。 と定義しておけば、 move '12345' to A. ここは文字代入 でbを取り出せば数値になっているので計算にも使えます。
argius

2015/09/27 06:44

業務アプリだとこういう機能が欲しくなるんですよね。
guest

0

締め切られていますが、ただいま絶賛「モナド」に苦戦中でございます(笑)

そもそもモナドとは何なのか?概念的なところを調べてみても、サイトによって様々、多種多様で未だに概要が掴みきれていません汗

それ以外のところだと、オブジェクト指向を学び始めた時はポリモーフィズムに苦戦した記憶がありますね。
よくある「動物クラスと犬、猫クラスがあって・・・」のような解説をされたのでチンプンカンプンでした。
なんとかボンヤリと理解していましたが、後に、デザインパターンを独学している時に「これがポリモーフィズムの用法なのか」ってハッとなった経験があります。(アハ体験っていうんですかね?)

投稿2015/10/05 04:53

k.tada

総合スコア1679

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2015/10/06 06:59

回答ありがとうございます! 私の考えでは、オブジェクト指向は比喩的なアプローチのための概念なので、例え話が(適切かどうかは別として)し易い特徴があるのだと思います。 一方、モナドについては、私も完全には理解していませんが、よく「モナドはモナドである」と言われるように、数学や計算機科学を土台にした概念なので、何かに例えることが本質的に難しいのだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問