読者です 読者をやめる 読者になる 読者になる

NEGAKULIFE

ネ学生のQoLを上げるブログ

ネ学生のQoLを上げるブログ

課題が終わらないのは仕様

SD攻略決死隊 - 水泡と化す過去の軌跡 前編

こんにちは。お久しぶりです。
今回はSDの最終課題についての話をします。

ヤバい人が多い

SDの最終課題である「チャットクライアント」ですが爆死者が続出しています。
前回(2016/07/07)では、定時に帰れる人はほとんど居ませんでした。
それに対して、自分は定時より前にタスクを終えることが出来ました(自慢では無いよ!)

今回は、「なぜ自分は早く終われたのか」という所を自己分析しつつ、プログラミングをしていく時に「このように考えるとスムーズなのでは?」という点を 考えて示していけたらと思います。
直接的な問題に対する答えを示す訳ではないので、ご留意ください。

爆死原因を考える

爆死した人を見てみると、様々な原因が考えられます。

  • プログラムの構造を理解出来ていない
  • 色々なWebなどを参考にしすぎてヤバい
  • 追加したプログラムがゴチャゴチャで整理できていない
  • ロジックがヤバい

一方、Javaの書き方には流石に慣れてきており、そこはあまりネックになっていないように感じます。(ここが大事で、Javaの書き方すら怪しい人はマジでヤバいです。)

一貫して言える事は「その書いてるプログラム、ほんとに理解できてんの?」っていうのが根底にあると思います。
ここでの理解とは、「読むことができ、やってることを他人に説明できる」までを含みます。結構大切だと思います。

プログラムの構造を理解する

チャットクライアントの動作を追ってみる

SD最終課題は、ステップバイステップで進んできています。 つまり、出発点は皆一緒で、教科書に載ってる「カウンセラーとのお話をするプログラム」を改造していく課題であるとも言える訳です。 この段階で、「やべえ、チャットクライアントいきなり作れって言われてもわかんねえ、ググるか」って言ってる人はすぐ死にます。

対話?チャット?どう動いてる?

最初は、対話プログラムの動作を理解する必要があります。教科書と課題の順を追って理解してみましょう。

最初は、教科書16.3までです。これは「サーバー」と「クライアント」が一対一で対話を行います。図示すると以下のようになります。

f:id:ne5oku:20160710184307p:plain それぞれサーバーとクライアントには、出口と入り口(outとin)があります。例えば、クライアントからサーバーに情報を送りたかったら、クライアント側の出口(out)に情報を渡して上げます。そうすると、不思議なことにサーバー側の入り口(in)に情報が流れ着きます。逆も然りです。これが今回の課題の超大切な部分です。

しかし、これだと一対一で不便だよね!って事で次が教科書16.4です。スレッドってのを使うことで、複数のクライアントとの接続を可能にします。図示すると以下のようになります。 f:id:ne5oku:20160710184817p:plain 先ほど、出口と入り口を持っていたサーバーですが、今回は出口も入り口も持ちません。サーバーは、クライアントが接続してきたら、それぞれのクライアントとの通信を行う部分(つまり、出口と入り口)を持つ「スレッド」をぬるっと作り出し、それに情報のやりとりをさせます。サーバー一人だと大変だから、自分の分身みたいのをもりもり作って、そいつらに仕事をさせてるような感じです

鋭い人はここで気付くと思います。対話プログラムもチャットプログラムも、本質的にやってる事は変わらない訳です。

短くなりましたが、前編はここまでで。中編だか後編だかは、夜ご飯を食べた後に上げたいと思います。