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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

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

C++

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

Q&A

解決済

5回答

752閲覧

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

aiue

総合スコア36

Java

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

C++

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

2グッド

5クリップ

投稿2017/11/12 08:26

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

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

shimitei👍を押しています

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

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

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

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

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

guest

回答5

0

ベストアンサー

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

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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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


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

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

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

投稿2017/11/12 10:42

LLman

総合スコア5592

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

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

aiue

2017/11/12 12:24

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

0

こんにちは。

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

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

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

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

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

投稿2017/11/12 10:12

Chironian

総合スコア23272

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

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

aiue

2017/11/12 12:27

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

0

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

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

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

投稿2017/11/12 08:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yatima

2017/11/12 09:13

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

2017/11/12 12:28

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

0

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

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

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

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

投稿2017/11/12 11:24

hmmm

総合スコア818

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

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

aiue

2017/11/12 12:23

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

0

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

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

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

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

投稿2017/11/12 09:07

編集2017/11/12 09:10
Yatima

総合スコア1159

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

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

aiue

2017/11/12 12:27

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問