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

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

ただいまの
回答率

90.98%

  • Java

    12200questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C++

    2941questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

分からない事が分からない状態の解決法

解決済

回答 5

投稿

  • 評価
  • クリップ 4
  • VIEW 558

aiue

score 27

1年目のプログラマーです。
今新しい現場で開発業務をしているのですが、現場経験もあまりなくテストしかしたことがないので、度々分からない事が何かということ自体分かっていない状態に陥ります。先輩からは、分からない所は質問して欲しいと言われますが、仕様書の内容が分かってないのかプログラムの書き方が分かってないのか、何が分かってないのか分からない為、中々質問できません。
このような事態になった時、どうすれば良いのでしょうか?また、こうならないようにするにはどう努力すればよろしいでしょうか。

プログラミングとは関係の無い質問で大変恐縮ですが、ご教授頂ければ幸いです。
よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+5

プログラミングとは関係の無い質問

まさにそこが盲点になっているかもしれないので、
あえて今回は精神論ではなく、プログラミングに関係させて答えます。

プログラミングでは、デバッグやエラー処理、
つまり、上手く行かないときの対処が一番大変です。
テストをしていれば、実感する部分もあるかもしれません。

そこで、どこまで分かっていて、どこまで分からないか、
問題の切り分けが重要です。これができないと泥沼にハマります。

しかし、具体的に何をすればいいの、という疑問が出るでしょう。
じつは、コード上で問題を切り分ける方法があるんです。


ご質問のタグにJavaがありますが、
とくにJavaは大規模開発を想定して作られているので、
そういう問題への対策が考えられている言語です。

Javaはクラスベースのオブジェクト指向言語です。このOOでは、
SOLIDに「単一責任の法則」があるので、クラスは責務の単位です。
変更理由を単一化、局所化していきます。処理の単位ではない。

DDDでもドメイン(問題領域)をモデリングしていきます。
やはり、処理ではなく、問題領域、業務知識で分けていきます。
逆に、手続き的に処理の流れで書いていくと、問題が混ざってしまう。

しかし、抽象的で分かりにくいでしょうから、もっと具体的に言います。


責務に沿ってクラスが上手く切り分けられていれば、
変更やテスト、リファクタリング、文書化、質問など、
何をするにしろ、単位がまとまっているのでやりやすいのです。

とくにJavaは静的言語なので、違う型は処理が混ざらないし、
IDEで自動化できる部分もいろいろ出てきます。

どうやって処理していくか、すぐには分からなくても
クラスという形に問題を切り出していくことで、
分からない部分が分かれていくので、対応しやすいのです。

この仕組みが一番分かりやすいのが、デザインパターンのアダプターです。
外部のAPIを利用する際、ベタ書きするとプログラム全体に散らばっていく。
アダプターだと、他の部分でAPIのことを知らないまま使えます。

そしてもちろん、アダプターだけがたまたまそうなってるんじゃなくて、
ファクトリにしろ、ストラテジーにしろ、責務の切り分けです。
さらに、インターフェイスも、例外処理も、責務の切り分けです。


OOでは、抽象化、疎結合、カプセル化して、一度に知る必要があることを減らします。

逆に、Javaが多重継承を禁止したりするのは、問題が混ざるからです。
また、UMLは実装を書かないので、責務単位で問題を考えやすいです。
それから、「名前重要」というのは、たんに名前を上手くつけることではなく、
名前が表現している責務に沿うように、オブジェクトを分割することが真に重要です。

最初の話に戻ると、こうなるのは必然で、Javaは大規模開発向きの言語で、
大規模だと分からなくて当然の部分も出てきます。むしろそっちの方が多い。

だからJavaの仕様は、ボイラープレートが増えるとか、不満もあるでしょうが、
(というか、私自身はRubyなどのLLの方が楽なので好みですが)
分からない部分があっても、分業できるようにする仕組みなんです。


どんなベテランでも、新しい問題に対して、最初から全部分かるのは無理です。
一度に全部分かるようになるのではなく、分からない部分の切り出し方が
上手くなっていきます。そのとき、頭の中だけでやるのは難しいので、
プログラミングしているのだから、まずコード上で分けていきます。

コードと別々の形で問題を言語化すると、翻訳する手間が掛かります。
だからなるべく、プログラム自体が問題を表現するように書いていく。
オブジェクト指向の仕組み、とくにJavaの仕組みはそれに向いています。

最初のうちはOOの部分がかえって分かりにくいかもしれませんが、
学習を重ねていくと、分かりやすく、使いやすくなっていきます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/12 21:24

    ありがとうございます。
    教えていただいた方法を出来るだけ使うよう心がけていきます。

    キャンセル

+5

こんにちは。

開発業務を担当されているということであれば、ゴールは「仕様書に書かれているプログラムを提出すること」ではないでしょうか? そのゴールに至るルートの何が分からないのかを言葉で表現することに成功すれば、質問を出せる可能性が高いです。

この「課題を言語化する」ことって意外に難しくどれだけ経験しても「課題を言語化できていない状態」になることは当たり前のようにあります。ですので、これができていないことは恥ずかしいことではありません。
ですので、今やるべきことはまずはゴールに対して何ができないのか分析することです。

状況にもよりますが、仮に仕様書を理解できていないと仮定します。すると次の質問は仕様書を全く理解できないのか? それとも理解できている部分と理解できていない部分があるのか?ですね。日本人が日本語で書かれた仕様書を読む時は多くの場合後者です。

後者の場合、次の質問は明らかと思います。理解できていない部分はどこか?です。まずはそこを明らかにしましょう。恐らく複数の理解できていない部分があると思いますが、それが非常に多いようでしたら、逆に理解できるのはどこか?を明らかにすると理解できていない部分を浮き彫りにできます。
そして、一度に解決するのは無理です。1つ1つ解決しましょう。多少なりと雰囲気だけでも掴めている部分から聞けば、質問を形作り易いと思います。

何か取っ掛かりを見つけることに成功すれば、それを突破口として質問を広げていくことでだんだんと理解出来ている範囲を広げていけるので、最終的にゴールに到達できるようになると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/12 21:27

    ありがとうございます。
    取っ掛かりをまずは見つけて、そこから分かる部分を広げていきたいと思います。

    キャンセル

+3

わからない時に何が問題になっているのかは、逆に、わかっている時、という状態について考えてみられるとよいかと思います。
仕様書の内容が理解できており、その内容についてプログラムのコードが書けているのではないかと思います。

そのような状態になれない時、手が止まっている時は、それを邪魔している要因があるのではないかと考えることはできるかと思います。
何が解決したらコードが書けるようになるでしょうか。

仕様書にAという状態の時の処理が書いてあるがBの場合はどうすればいいか記載されていない、画面に出力する項目がどんなフォーマットで表示されるのかが仕様書からはわからない、こんな処理を書きたいがどうプログラムすればいいか文法がわからない、ライブラリを把握できていない、等、何がわかれば次に進めるのか、ということを考えてみられると、逆説的に現状で何がわからないのか、ということはおのずと見えてくるのではないかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/12 18:13

    良いアプローチですね!
    初学者に勧めるにはやや酷な気もしますが,純粋に問題解決能力の一つとして高評価付けさせていただきます.

    キャンセル

  • 2017/11/12 21:28

    ありがとうございます。
    初めは難しいかもしれませんが、出来る限り逆算して考えていきます。

    キャンセル

+2

質問せずに作業が進むのであれば、質問する必要はありません。
作業が進んでいないのであれば問題です。

何が分からないかも分からないというのであれば、
現状行っている作業に関する知識がほぼないからでしょう。
例えば、足し算が分からなければ、掛け算はわかりません。

この質問のタグにJavaとC++とついていますが、
この言語は勉強したことはあるんでしょうか?
ないのであれば、何かしら入門書で勉強する必要があります。

とはいっても、おそらくスケジュールがあると思うので、
まずは先輩に現在の状況を話してみるほうがいいでしょう。
その際、今までのプログラミングを行ったり仕様書を読んだりした経験を
話してみるのがいいんじゃないでしょうか?
まったくないのであれば、まったくないといいましょう。
「新しい現場で」と言っているくらいだから、先輩もあなたがどの程度できるのかも知らないんじゃないでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/12 21:23

    ありがとうございます。
    先輩には、僕のこれまでの経験などをきちんと伝えていこうと思います。

    キャンセル

+1

とりあえず調べてみるのも良いかもしれません.

とりあえず仕様書を斜め読みして,今困っている部分のあたりだけ詳しく読む.
とりあえずGoogleで,今困っていることを検索してみる.

それで解決しなかったのなら,努力したけど自己解決出来なかったことを伝えれば,先輩も喜んで教えてくれるはずです.
自分なりでいいので,努力したという姿勢を見せることが(最初は)一番大切だと思います.

あるいは時間のある時に,お使いの言語をドットインストールなどで軽く学んでおくだけでも違うかもしれません.
ドットインストールは数分の動画で手軽に学べるのでおすすめです.

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/12 21:27

    ありがとうございます。
    積極的に調べていきたいと思います。

    キャンセル

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

  • ただいまの回答率 90.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Java

    12200questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

  • C++

    2941questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

閲覧数の多いJavaの質問