未経験からエンジニア目指し転職活動。伝えたいこと

こんにちは。のわです。

来年からエンジニアとしてスタートをきることになります。

 今回は、転職活動を通じて重要だなと思ったことをまとめました。
未経験からエンジニアを目指して転職活動をしている方の参考になれば幸いです。

未経験枠は少ない

 まず、未経験からエンジニアになりたい方へ伝えたい事です。
基本的に【未経験枠はとんでもなく少ない】です。
(これはどの業界でもそうだと思いますが…。)
エンジニアのような技術が求められる世界では特にそうだと思います。

 もし、エンジニアになりたい!と思っている方は今すぐにでも行動を開始するべきです。
少ないというだけで【まったくない】という訳ではありません。
継続して勉強できる力があれば必ず突破口は見えてきます。

 また、勉強開始前に求人サイトで行きたい企業の方向性を定めておくといいと思います。
SNSでよく言われる「Web系」エンジニアですが
Web系といっても沢山あるので自分は何をしたいのか明確にする必要があります。

プログラム言語はやりたい方向でよく使われている言語を選ぶのがベストかと。
そうすれば勉強意欲も湧きますし。



書類通過率は3割くらい

 次に伝えたいのが書類選考の通過率です。
私は18社応募。通過5社でした。
3割無いくらいです。

 他の方がどの程度の割合なのか分かりません。
参考程度にしてください。

ちなみに通過した5社の内訳です
 SES:3社
 自社・受託開発:2社




地方採用は一社落ちる度にメンタルダメージが大きい

 私は妻の仕事の関係上、仙台で仕事を探していました。
企業はあったものの、未経験だと書類でダメなパターンが多いです。
分かってはいましたが、東京に比べると求人数は圧倒的に少ないです。
そのため、一社落ちる度に選び先が少なくなっていく感覚があります。
当時はかなり落ち込みました…

 奇跡的に内定をいただけたので良かったです。
上手く行ってなかったらどうしよう…と思っていました

 前述していますが、地方で働きたい方は、勉強前にどんな企業があるのか、求人サイトで調べるのがおすすめです。
そこから採用情報に飛び、求めている人材を調べましょう。
そして、逆算して今の自分に足りない箇所を勉強するようにしていくのがベストだと思います。



面接で質問されたこと

 私は2社面接まで受けて、合計4回面接を行いました。

共通して質問されたことは以下のとおりです
 ・志望動機
 ・転職理由(なぜエンジニアを目指そうとしたか)

 ・入社してからやってみたいこと
 ・勉強中大変だったこと
 ・希望年収
 ・逆質問
 ・どの程度の事ができるか(プログラミングで)

印象に残った質問は以下のとおりです。
 ・プログラミング以外で興味あることはありますか
 ・リフレッシュ方法
 ・今チャレンジしていることはありますか

志望動機と転職理由は100%質問されます。
これは作り込んで望んだほうがいいです。



面接の雰囲気

 私が受けた2社から受けた印象になります。
とにかく【会話をする】こんなイメージです。
新卒採用にあるような一問一答、そして更問みたいな形式ではありません。
職務経歴書の中で気になったところを質問される。
たまに雑談をはさみつつ、お互いを知るような感じで進んでいきました。

 面接なので、最終的に内定を出すか出さないかはもちろん企業側にあります。
ただ、受ける側も見定める場でもあると思います。

 面接は【お見合い】みたいな感じです。
企業は経歴書・履歴書をもとに気になったところを質問してくる。
自分は聞かれていることを理解して答えを返す。
 企業の求めていること
 自分のやりたいこと
これが両者で合致すれば内定が出る
のだと思います。

 温かみのある、優しい印象の面接が多かったです。
私自身、緊張していたのでありがたかったなと感謝するくらいでした…笑



未経験に必要なのはスキルではなく、ポテンシャル

 内定をいただけた企業ですが、私以外にも現SEの方が何名か応募していたようです。
そして1名の採用枠に私が選ばれたわけです。…なんで???
内定をいただけた企業は最終面接担当が社長でした。
その方が私に伝えていたのが




「スキル・経験だけなら他の志望者の方が格段にある。」




ズバッと言われました。そりゃそうですよね…






「でも、君は今の仕事で大きな成果を出している。そして継続して本気で勉強している。
そういった自走力があるのが高評価だ」



つまり、私の採用理由はスキルではなくポテンシャルでした。



 これは考えたらわかることですが、未経験はどこまで勉強しても未経験です。
スキルで戦ったら間違いなく経験者に負けます

 じゃあ、何で戦うのか
私なりの答えは「現職での成果、勉強実績を見える化する事」です。

 まず、今の仕事の実績
企業がほしいのは活躍できる人材。
自分をアピールするために必要なのはスキルではなく、今の仕事の実績だと考えます。

今の仕事でこんな結果をだせた。
だから、エンジニアとしてはこの経験を活かして、こんなふうに活躍出来ます。

と実績をもとに話せれば納得感が生まれます。
更に現職の経験を組み合わせることで、周りと差別化出来る、個性のあるエンジニア像が浮かび上がります。

 次に勉強実績をみえるようにしておく。
これは資格かポートフォリオを作っておくのがベストだと思います。

資格は継続して勉強することで取得できるものを選んでいきましょう。
私は以下のものを取得しました。
 ・ITパスポート
 ・LPIC1
 ・Java Silver
 ・UMTP1

個人的に基本情報も取りたかったのですが時間が無く断念しました。

採用担当の方は
だいたいこの資格だとこのくらい勉強が必要だよな
とおおよその勉強時間を把握していると思います。
それなりの資格があれば
「お、頑張って勉強してるな」
と思ってもらえる可能性が上がります。(確実に思ってもらえるかは分かりません)

資格だけ取ればいいという話ではありません。
ただ、実績として見える化しておくと相手の目に止まりやすくなるという話です。



ということで、転職活動を通じて伝えたいことをまとめました。
皆さんの参考になれば幸いです。

最後に伝えたいことは



継続できれば必ず転職できる!

皆さんのご健闘をお祈りします。

今回も最後まで読んでいただき、ありがとうございました!

【備忘録】未経験からのエンジニア戦略【#2 エージェント編】

f:id:nowa0402:20211011061009p:plain
こんにちは。のわです。
今回は転職について考えていたことシリーズ2回目
内容はエージェントについてです。

ちなみに1回目は転職の軸について語っています。
興味のある方はこちらの記事を読んでみてください。
nowa-0402.hatenablog.com


未経験からのエンジニア転職でエージェントが必要なのか
私が実際に利用してみての感想・意見を述べたいと思います。

そもそも未経験転職でエージェントは必要なのか?

結論【基本的に不要】です。
なぜかというと、未経験転職でエージェント利用は圧倒的に不利だから。

エージェントは成果報酬型のビジネスモデルです。
企業はエージェントに対し高い単価を払って人材を雇うことになります。
このリスクを払ってまで未経験を雇いたくなるでしょうか。

しかし、全てにおいて不要という訳ではありません。
使い方次第で役に立つことがありあす。
実際私も利用しましたし…。
結果としてエージェントで内定をいただけました。

 ・企業からみるとエージェントを使ってまで未経験を採用するメリットが薄い
 ・要所要所で役に立つことがある。

これらのことから登録するのは損ではないと思います。
が、厳しい戦いになるのは覚悟しておく必要があります。





エージェント利用時に気をつけたこと

ここからは実際にどんなことに気をつけて利用していたか。
それを述べていきたいと思います。

複数社登録して比較する

私は2社登録して活動していました。
使用したのは
 ・リクルートエージェント
 ・マイナビエージェント
この2社です。
なぜかというと【比較】できるようにしたかったからです。

【比較】
第一の比較ポイントは
【自分と担当者の相性】を比較します。

エージェントも人なのでタイプがあります。
アドバイスが得意な方、親身に話を聞いてくれる方、はっきり意見を言う方…など
ここばっかりは人によって合う合わないがあります。
そのため、複数社登録して相性を見極めました。

第二の比較ポイントは
【求人の重複を確認】することです。

これはエージェントのヒアリング後からの話です。
ヒアリング終了後、おすすめ求人が送られてきます。
複数社登録しているとここで異変に気づきます。
同じ求人を出される場合があるのです。というかほぼ間違いなくあります。

この求人は申し込まないようにしました。
ダブっているということは、エージェントとして簡単に入れさせられる企業
ということだと私は判断しました。つまり楽に転職させられるということ。
エージェントさんに悪気は無いのだと思いますが…
私はこういった求人には申し込みませんでした。

他の応募方法も併用しながら進める

他の応募方法とはなんぞやという話。
例えば
 リクナビNEXTマイナビ転職などの求人サイトを利用する
 ・企業のHPから直接応募する

などがあげられます。

なぜ大切か
これは【いかにエージェントを本気にさせるか】に関わってきます。
このことは後述しますので一旦おいておきます。

書類・面接指導はとことん使い倒す

エージェントを利用するにあたって料金は発生しません。
そのため、指導・アドバイス関係は特に使い倒すのがおすすめです。

エージェントは第三者視点でアドバイスをくれます。
そのため、特に面接対策は十分活用したほうがいいと思います。

実際、私も面接対策でたくさん質問しました。
こういった点でフル活用するべきです。
エージェントも場数を踏んでいるため、対策関係はプロです。

それとエージェントは面接結果のフィードバックを企業からきいてもらえます。
次に向けた対策や、評価点も教えてくれるので心強いです。


エージェントを使った感想

ここからは実際に利用してみての感想を述べたいと思います。

基本的にSESしか求人紹介がない

これは未経験エンジニアという点では仕方ないと思います。
最初のヒアリングにでも言われますが

未経験は最初技術派遣からのスタートになるのが定石です。

みたいな話をされます。

SESがすべて悪いわけではありません。
人によっては様々な環境下で仕事できるのが楽しいと思える方がいます。
実際、私もSESでの働き方もありだと考えています。

勿論SES以外もあります。
個人的におすすめしたいのが
【非公開求人】にアクセスして求人を探すことです。

非公開求人はそのエージェント経由でしか応募できない求人です。
こういったのは大手求人サイトでは見ることができません。

実際、私は非公開求人から自分の軸にあった求人に応募し
そこから内定をいただきました。


どれだけエージェントを本気にさせられるかが重要

先程後述すると言った内容です。
これは要するに【エージェントはビジネスパートナーの関係】であることを忘れないということです。

最初に書きましたがエージェントは成果報酬型です。
どれだけ求職者をフォローしても、その人が内定承諾しない限り企業からお金がもらえません。

故に、求職者には何とか自分たちのエージェント経由で応募してもらいたい。
そういった思いがあると思います。

この場合、エージェント一本に絞って活動していたらどうでしょうか。
一本ということは、他に使っているものがないということ。
エージェントとしてはどんな対応をしていても内定承諾さえしてもらえればお金が入ってくることになります。

私は幸いにも
 ・エージェント経由での応募
 ・求人サイトでの応募
この2つがほぼ同時並行で選考が進んでいました。
また、どっちも魅力的で迷っている話はエージェントに伝えていました。

こうなると、エージェントとしては本気になります。
もし私がどっちからも内定が出て、求人サイト側に流れた場合に成果報酬がもらえなくなります。

本気になったエージェントは色々動いてくれるので転職活動を有意義なものにできます。
実際、内定後の調整やフィードバックはかなり頑張ってくれました。
いかにエージェントにやる気を出させるか。実感した瞬間でした笑

面接のフィードバックがもらえるのが良い

個人的にこれが有り難かったです。
エージェント経由で、企業からの面接評価をいただける場合があります。

私は下記のことを聞くようお願いしました。
 ・どんな印象を受けているのか
 ・高評価ポイントはどこか
 ・逆に懸念点はあるか

ここでのフィードバックは、当該企業だけでなく、他企業での選考でも役立てることができます。
そういった点では利用してよかったなと思います。

また、自分が普段意識していない、意外なところで評価されていることがありました。
こうした第三者視点での評価が素直に嬉しいです。



まとめ

今回は、エージェントについてまとめてきました。
ポイントです。
 ・エージェントは複数登録して相性や求人の質を比較する。
 ・他の応募方法を併用しながら進め、エージェントと程よい関係性を保つこと
 ・企業からのフィードバックや、面接対策でがっつり利用すること

最初の方で未経験にエージェントは不要と書きました。
ただ、転職活動を一人で、しかも初めてする方は不安がいっぱいだと思います。
こうした意味で、エージェントという頼もしい存在を活用するのは有りだと思います。

みなさんもとことん使い倒して、有意義な転職活動にしていただければと思います。
最後まで読んでいただきありがとうございました!

【備忘録】未経験からのエンジニア戦略【#1 転職理由】

f:id:nowa0402:20211001105258p:plain
お久しぶりです。のわです。

最初に報告となります。
この度、受託開発を行っている企業様より内定をいただくことができました!
来年よりエンジニアとして開発に携わることが出来そうです!
今後、自社開発も行っていくとの話もあり楽しみです。

この場をお借りしましてここまで応援していただきました皆様に御礼申し上げます。

今回からしばらくの間、転職において気をつけた事、考えていたことをまとめていきたいと思います。
第1回目は転職理由の考え方です。

私と同じく未経験からエンジニアを目指す方の参考になれば幸いです。

そもそも、なんでエンジニアなの?

今回のテーマで私が最も伝えたいことです。
【なぜ転職をしようと思ったのか】
ここをはっきりさせるのが転職理由です。

更にいうなら
【数ある職業から、なぜエンジニアなのか】
これを明確に、相手に納得のいくよう説明できることがゴールになります。


皆さんはなぜエンジニアになりたいと思ったのでしょうか
・リモートワークができるから
・手に職をつけたいから
・稼げるときいて…
・残業が嫌で…
上記のようなものは正直理由にはならないと考えます。
なぜなら【それってエンジニアじゃなくてもいいよね?】
という質問に答えられていないからです。
結果、相手に納得してもらうのは難しいと考えます。

自分の経験から組み立てる

では、どんなものがいいのか。
私は【自分の経験から理由を固める】ことを意識しました。

具体的に私がやったことをまとめていきます。

私は、現職でRPAを使った業務効率化の経験がありました。
実際にこの経験がきっかけでエンジニアを目指すことになります。
私はこれをストーリー仕立てにして理由を固めることにしました。


 今の職場でRPAツールが導入された
 ↓
 皆業務が忙しくて触らない
 ↓
 よし!なら自分がやってみよう!やったことないけど!
 ↓
 開発って難しいけど楽しいし、皆の役にたてるのが嬉しい!
 ↓
 沢山作っていきたいけど、本来業務の合間にやるのは大変…
 それに、あくまで社内で使うもので社外に展開、役立てていくのは難しい…
 ↓
 開発に専念したお仕事をやってみたいな
 ↓
 エンジニアになれば、開発をしつつ、たくさんの分野で働く方のお役にたてる!
 ↓
 勉強して転職しよう!


ざっくりこんな感じです。

私のストーリーですが、きっかけ⇒行動⇒結果⇒新たなきっかけ⇒行動
の構成になっています。

きっかけ:RPAが導入された
行動:よし!自分がやってみよう!
結果:業務効率化につながった。それと開発楽しい!
新たなきっかけ:もっとやってみたいけど、今の環境だと難しいな…
行動:ならば転職だ!

これだと明確な転職理由の軸になります。
更に開発経験からエンジニアなんだという根拠にも繋がります。

大企業や公務員の方が転職する場合

大企業や公務員など、ある程度安定が約束されているところで働いている方は
【なぜ今の企業を抜けてまで転職するのか】
をプラスαで考えたほうがいいと思います。
(私は大企業で働いていましたのでここはかなり準備しました)

実際、面接の場面でも
「なんで、今の企業を抜けてまでうちに?」
といった質問をほぼ100%受けました。

相手としたら
安定を捨ててまで、転職したい確固たる理由はなんだ?
ここが気になるのだと思います。

このときのポイントは
【ある程度のマイナス要素】
【プラス要素で切り返す】

この2点です。

私の場合
【今の開発は一企業の一職場の業務改善で終わってしまう】
これがマイナス要素です。

よく面接対策の記事で現企業のマイナス要素は話すなというものがあります。
私は、上記くらいのマイナス要素は話してもいいと思います。

そして、ここからプラス要素で切り返し、カウンターを決めましょう。
例えば上記理由から
【だから、今の職場にとらわれる事無く、より沢山の分野で働く方の支援を行っていきたい】
こう切り返しすることで、より納得がいくものとなると考えます。

実際の面接での評価

では、実際どんな評価をいただけたか。

内定を頂いた企業様との最終面接。
相手は社長でした。実際に上記お話をした際に


「確かにこの理由ならエンジニアになりたいのも理解できるなぁ!」


と笑顔で言っていただけました。
相手に納得してもらえたと感じました。

更に私の場合
・自分から進んで取り組んでいたこと
⇒主体性の高さ
・業務効率化につなげた(実績)
⇒職場の課題を見つけ、解決する力

この2点もプラス評価となり、内定に近づく大変嬉しい結果に繋がりました。


まとめ

今回は、転職活動における転職理由の固め方を書きました。
まとめると
 ・転職理由は【自分の経験】からストーリーにすること
 ・今の企業ではなぜ出来ないのかを伝えること

エンジニアになりたいと思った経験、きっかけ
これが強固であれば面接は通りやすくなると感じます。

正直、私みたいな転職理由は稀なパターンだと思います。
でも、皆さんにも必ずなりたいと思った経験・きっかけがあると思います。
これを掘り下げて形にすることが内定に近づくために必要だと考えます。

最後まで読んでいただきありがとうございました!

【合格体験記】UMTP_UMLモデリング試験(L1)合格しました

f:id:nowa0402:20210723144040p:plain
こんにちは。のわです。

f:id:nowa0402:20210723133635j:plain
UMTP

本日、UMLモデリング試験(L1)に合格しました!
簡単に受験までの流れについて記録したいと思います。

【はじめに】

UMLモデリング試験とは?

  UMLモデリング試験とは
  UMLによるモデリング技術を認定する試験』
  になります。

  UMLとは
  『ソフトウェアの成果物を仕様化・図式化する方法を規定したもの』
  モデリングとは
  『抽象化された概念をもとに、分析領域の全体像をビジュアルにわかりやすく表現すること』
  になります。

  つまり
  『モデリングの1つがUMLである』ということです。

  UML試験はL1〜4まであり、今回私はL1を受験しました。

私のスペック

 ・エンジニアを目指し現在勉強中
 ・今年に入ってから、ITパスポート、LPIC1、JavaSilverに合格
 
 LPIC、JavaSilverについて興味がある方は是非こちらの記事をご覧ください


 - LPIC合格体験記 - 
nowa-0402.hatenablog.com
nowa-0402.hatenablog.com


 - JavaSilver合格体験記 -
nowa-0402.hatenablog.com


【勉強期間】

 勉強期間は3週間程度
 平日は1.5時間、休日は3時間程度勉強していました。


【教材】

 私が使用したのはこちらの教材です。
 ・UMLモデリング技能認定試験<入門レベル(L1)>問題集 -UML2.0対応
 

 UMLの参考書ですが、発行年数が古いです。
 店頭に並んでいない場合があります。(というかある場合が少ない)
 そのため、教材はネットで買うことをおすすめします。


【勉強方法】

 ・参考書を1周終わらせる 
  ⇒参考書の内容はT1とT2があります。
   カテゴリ変更の関係上、L1の試験はT2の範囲から出題されます。
   ただ、前提知識としてT1の内容が必要なため、私は全章やりました。
   よっぽど時間がない人以外は全章やっておくといいと思います。


 ・T1の確認問題を2周、T2の確認問題を3周やる
  ⇒多重度や関係線の引き方、各モデルの特性について再確認しながら進めました。

 参考書の問題集で9割取れるようになったら十分合格できるラインだと思います。

【試験受験】

 試験はピアソンVUEかプロメトリック株式会社で申し込めます。
 私はピアソンで受験申し込みしました。
 ・ピアソンVUE
 ・プロメトリック株式会社

 私は今までの試験(LPIC、JavaSilver)はピアソンで受験申し込みしています。
 しかし毎度のこと申込み手順がちょっと難解で手こずります。
 受ける目処がたったら最初に申し込みしておくといいと思います。


 試験は30問選択式で24問以上で合格。
 試験時間は80分。
 8割以上で合格なので、凡ミスしないように見直ししましょう。

【感想】

 今回、UMLモデリング試験に合格しました。
 受験に関して一番不安だったことは『直近の合格ブログ』がほとんど無いことです。
 購入した参考書だけで足りるかとても不安でした。
 実際は購入した参考書だけで合格できたので、参考書選びは私と同じもの選んでおけば大丈夫です。

 アドバイスとしては、プログラミング言語を1つ勉強しておくと受験難易度は下がると思います。
 私はJavaを勉強していたため、オブジェクト指向での考え方、クラス図の説明はすぐ頭に入ってきました。

 
今回は以上となります。
最後まで読んでいただきありがとうございました!

【サーブレット&JSP】セッションスコープ

f:id:nowa0402:20210622123431p:plain
こんにちは。のわです。
今回は、セッションスコープの使い方を整理したいと思います。

スコープとは

 スコープはインスタンスを保存できる領域】のことです。
 スコープを利用することで
 サーブレットクラスで生成したインスタンスJSPファイルで利用する】
 ことが可能になります。

 インスタンス使用時はスコープを経由することになるということです。

 スコープに保存できるものはインスタンスのみです。
 intやdouble型などの基本データ型は保存できません。



セッションスコープとは

 セッションスコープはスコープの一種です。
 以下のような特徴があります。

  ・リクエストをまたいでインスタンスを利用できる
  ・有効期限は開発者で決めることができる

 なお、リクエストをまたげない、レスポンスが返されるまで利用出来るスコープもあります。
 (リクエストスコープ)



利用方法(サーブレットクラス)

 
 サーブレットクラスでの利用方法です。
 まずは、セッションスコープを利用するための準備です。
 利用には【javax.servlet.http.HttpSession】インスタンスのメソッドを使います。


HttpSession取得

 まずは、HttpSessionインスタンスを取得します。
 構文は以下のとおりです。

 HttpSession s = request.getSession();
 //javax.servlet.http.HttpSessionをimportしておく

 インスタンス取得時は【getSession()メソッド】を使用します。


保存

 次に、保存したいインスタンスを指定します。

 s.setAttribute("属性名", インスタンス名)
 //引数は、第1引数にString型, 第2引数にObject型を指定

 保存するときは【setAttribute()メソッド】を使用します。
 第1引数はString型、第2引数はObject型となっています。
 
 属性値はインスタンス管理用の名前です。
 JSPで利用する際に使用します。

 ここで注意したいのが第2引数です。
 第2引数に自分が保存したいインスタンスを格納します。
 引数の型はObjectのため、どんな型でも入れることができます。

 ただし、利用するときは型の変換(キャスト)が必要になります。
 注意しましょう。


取得

 
 次に保存したインスタンスを取り出す構文です。

 取得するインスタンス型 変数名 = (取得するインスタンス型) s.getAttribute("属性名");

 保存したものを取得するときは【getAttribute()メソッド】を使用します。
 引数には保存時に指定した属性名を入れます。

 また、取得するときは型変換(キャスト)することを忘れないようにしましょう。


削除

 最後に削除するときです。

 s.removeAttribute("属性名");

 
 削除するときは【removeAttribute()メソッド】を使用します。



利用方法(JSPファイル)

 次にJSPファイルでの利用方法です。
 JSPファイルではHttpSessionインスタンスを生成する必要はありません。
 暗黙オブジェクトである【session】を使用します。

 取得するインスタンス型 変数名 = (取得するインスタンス型) session.getAttribute("属性名");

 使用方法はサーブレットクラスのときと大差ありません。
 





今回は、セッションスコープについてまとめてみました。
Web上でJavaプログラムを動かせるようになりました。

今度は簡単なWebアプリケーションを作成し、ブログにアップしたいと思います!
最後まで読んでいただき、ありがとうございました。

【合格体験記】JavaSilver認定試験 -合格ロードマップ-

f:id:nowa0402:20210614164908p:plain
こんにちは。のわです。
f:id:nowa0402:20210614142116p:plain

本日、無事JavaSilverの認定試験に合格しました!
今回は、合格までの勉強方法、コツについてまとめます。

【はじめに】

 はじめに、私の勉強開始時のスペックについて述べておきます。
  ・Javaの経験はスッキリわかるJava入門編を終わらせたレベル
  ・他の取得資格は『ITパスポート』『LPIC1』
 Java入門編を終わらせた時点で、簡単なプログラムを作成しました。
 もし、興味があればこちらをご覧ください。

nowa-0402.hatenablog.com


 また、LPICに興味がある方はこちらの記事を参考にしていただければと思います。
nowa-0402.hatenablog.com
nowa-0402.hatenablog.com


【使用した教材】

 使用した教材は以下のとおりです。
 ☆徹底攻略Java SE 11 Silver問題集[1Z0-815]
  通称:黒本
 

 ☆スッキリわかるJava入門
 


 ☆スッキリわかるJava入門 実践編
 


 ☆dokojava.jp
 これは教材ではないのですが
 簡易的なJavaのプログラムであれば下記サイトを利用することで環境構築の手間を省けます。 
 https://dokojava.jp

【勉強期間】

 JavaSilver勉強開始から約1ヶ月
 Java自体の勉強を含めると累計約2ヶ月半

 勉強時間ですが
  ・平日2時間
  ・休日5時間

 でした。

【勉強方法】

 ここからは、日付を追って、実際どんな感じで勉強したのが述べていきます。

1日目〜20日目 -章問を解く-

 初日から20日間で、黒本の章問を2周やりました。
  ・1周目は全問解く
  ・2周目は1周目でわからなかった問題を解く
 のように進めました。

  スッキリわかるシリーズの使い方ですが
  ・ラムダ式、モジュールは実践編
  ・それ以外は入門編
 をそれぞれ活用していきます。

 また、わからなかった問題は自分で実際にコードを打って動作を確かめました。

21日目〜23日目 -総問題を解く-

 章問が2周終わったところで、黒本の総問題をやりました。
 ここが難所です。
 『総問題が章問より数倍難しい』
 私の1回目は正答率55%で、かなり焦った記憶があります。
 多分、みなさんもこういった状況になると思います。

 ただ、ここで落ち込む必要は全くありません。
 間違った問題を1つずつノートにまとめたり、コードを打って確かめていくことで確実に理解することができます。
 
 また、黒本の解説は基本優しい説明なのですが
 たまに難しい言い回しがあります。
 そこは、スッキリわかるシリーズを使って理解していきました。

24日目〜29日目 -章問、総問題を繰り返し解く-

 ここからは試験に向けて総まとめになります。
 基本的に各章問、総問題を全問題解くようにしました。
 この時点で、総まとめの正答率が9割まであがりました。

 問題を解く時に、自信がない問題にチェックをつけるようにして
 後で正解、不正解に関わらずまとめるようにしました。 

試験前日 -よく間違える箇所を復習・整理する-

 試験前日はそんなに勉強していません。
 黒本を読み返しながら、ランダムで開いたページの問題を解いたり
 よく間違えていた問題を再度解いていました

試験当日 -もう一度整理したい箇所を復習する-

 当日は総まとめの問題から、もう一度解きたい問題をリストアップして解きました。 

【試験の感想】

 試験当日、私が個人的に感じたことを述べていきます。

試験時間

   JavaSilverは180分で80問の問題をときます。
   私は全問解くのに100分、マークをつけた箇所の見直しに20分
   合計120分かかりました。

試験内容

   黒本の内容をちょっと変えた問題が半分程度という印象です。
   答えの見当がつかないような問題は1割もありませんでした。

試験難易度

   今まで受けてきた試験と比較すると
    ITパスポート < LIPC << JavaSilver
   という感想です。

   JavaSilverは今までの受けた中で一番難しいと感じました 。
   理由は即答出来る暗記物が少ないことです。
   理解して、考えないと解けない問題が多数あります。
   感想でも述べますが『集中力』が問われる試験かなと思いました。

感想

   前述の通り『集中力との勝負』。これに尽きるかなと思います。
   私の場合、1時間超えたあたりから集中力が落ちました。
   そのため、時々
    ・目を閉じて深呼吸する
    ・肩や腕のストレッチを1分程度行う
   等でリラックスしながら試験を進めました。
   また、パッと見で時間がかかりそうな問題は飛ばし、即答できる問題から潰しました。
   自分の集中力をどう継続させるか、これがミスを減らすポイントになると思います。

【合格するためのコツ】

 ここからは試験に合格するために、私が意識してきたことを述べていきます。

 アウトプットする環境を構築する

 JavaSilverに限らずですが、私はなにか勉強するとき
 『アウトプット前提』の環境を構築することを優先しています。
 
 学習方法で最も記憶に定着する方法は『誰かに教えること』
 誰かに教えるつもりで勉強すると、理解速度が明らかに速くなります。

 アウトプット方法はたくさんありますが
 私は
  ・得られた気づきをTwitterで毎日発信
  ・最も苦戦したところをブログで週一回発信

 することを実践していました。

 問題は『覚える』ではなく『理解する』

 問題集を何回も繰り返すと
 『この問題の答えはAだな』といった感じで、理解より先に答えを覚えるようになってきます。
 これだと、試験で応用問題にあたった時、何も考えられない状況になるので注意したほうがいいです。

 こういった状況を防ぐためにおすすめしたいのが、『間違えた問題は遊んでみる』です。
 例えば以下のコードの出力結果はなにか、という問題があったとします

public class Main {
    static int num = 10;
    
	public static void main(String[] args) {
    int num = 0;
    System.out.println(num);
    
	}
}

 この出力結果は『0』になります。
 例えば、この答えを『10』と答え、間違えたとします。

 そのときに、ただ答えをみて学ぶだけではなく
 『どうしたら自分が間違えた答えになるか』を考えるのが理解を深めます。

 例えば、上記コードなら、最後の出力を

    System.out.println(Main.num);

 このようにすると『10』にすることができます。
 
 ここまで自分で試して初めて、『あー!分かってきた!』という状態になります。
 
 答えを覚える近道ではなく
 理解を深めるための遠回り

 つまり、『コードをたくさんいじって遊んでみる、試してみる』のが一番だと思います。
 これを実践していくと合格にグッと近づくと思います。

【おわりに】

 今回の試験勉強を通じ、なんとなく理解していた概念を深く理解する、いい機会になりました。
 それと、たくさんのコードを打って実際に動きを確認してきましたが
 コードを打つたびに
 『あー、なるほど!!こう動くのか!...じゃあ、これならどうなるのかな?』
 といったように、試すことの楽しさも同時に得られたかなと思います。

 合格するだけなら、コツで述べたような色々試すことやアウトプット前提の学習より
 一日数時間、ひたすら勉強して、覚えてしまったほうが早く合格できるとは思います。

 ただ、せっかくなら、たくさんの気づきを得るのがいいと思っています。
 そのためには、コードに興味をもって、たくさん試すのが一番だと考えます。

 今回の記事で
 挑戦しようと思っている方
 挑戦中の方
 への参考になれば幸いです


 今回も最後まで読んでいただきありがとうございました!

【Java】ポリモーフィズム

f:id:nowa0402:20210613094057p:plain
こんにちは。のわです。
今回はポリモーフィズムについて整理したいと思います。

 ポリモーフィズムは『多態性』のこと
 ・フィールドは宣言する変数の型が採用される
 ・インスタンスを扱っている『型』によって、呼び出せるメソッドが決まる

実際のコードで確認してみます。
今回のコードは以下の構成です
 ・親クラス:Parent
 ・子クラス:Child
 ・呼び出し:Main

【Parentクラス】

public class Parent {
    int i;
    
    public void test() {
        System.out.println("親");
    }
}

【Childクラス】

public class Child extends Parent{
    int i = 10;
    
    public void test() {
        System.out.println("子");
    }
    
    public void test(String str) {
        System.out.println(str);
    }
    
}


ChildクラスはParentクラスを継承しています。
Childクラスには以下の特徴があります
 ・int i =10を定義している
 ・testメソッドをオーバーライド、オーバーロードしている

このクラスを呼び出すMainクラスのコードが下記になります。

【Mainクラス】

public class Main {
	public static void main(String[] args) {
	 Parent a = new Child();
	 
	 a.test(); //①
	 
	 System.out.println(a.i); //②
	}
}

Mainクラスの処理は以下のとおりです。
 ・Childクラスのインスタンスであり、Parent型の変数aを宣言(多態性の利用)
 ・test()メソッドを実行
 ・フィールドiの値を出力

このとき、結果はどうなるか

 多態性の特徴として
  ・メソッドは変数の型に定義されているものしか呼び出せない
  ・メソッドがサブクラスでオーバーライドされている場合、サブクラスのメソッドが呼び出される
  ・フィールドは宣言した変数のクラスのものが使用される

 があげられます。




①test()メソッドの呼び出し
 test()メソッドは以下のような状況です
  ・Parentクラスで定義されている
  ・子クラスである、Childクラスでオーバーライドしている

 このことから、呼び出されるのはサブクラスのtest()メソッドになります
 つまり、出力結果は『子』です。

②フィールドiの値を出力
 フィールドiは以下のような状況です
  ・Parentクラスで宣言している
  ・子クラスである、Childクラスで同一名のフィールドを宣言している

 このとき、フィールドは変数宣言で使用されているクラスのものが使用されます。
 今回の変数aはParentクラスで宣言しています。
 そのため、フィールド値はParentクラスが使用されます
 つまり、出力結果は『0』です。



次にMainクラスにコードを書き加えます。

【Mainクラス】

public class Main {
	public static void main(String[] args) {
	 Parent a = new Child();
	 
	 a.test(); //①
	 
	 System.out.println(a.i); //②

   a.test("A"); //③
	}
}

新たに③が追加されました
③test(String str)メソッドの呼び出し
 ③のコードではString型の引数を指定しています。
 このとき
  ・Childクラスでtest(String str)メソッドをオーバーロードして定義している
  ・親クラスのParentクラスでは定義していない

 という状態です。
 変数aの型はParent型です。
 親クラスで定義されていないメソッドやフィールドは呼び出すことができません。
 つまり、このコードはコンパイルエラーとなります。





今回はポリモーフィズム多態性)についてまとめました。
JavaSilverの勉強をしていると、幾度となくこういった問題に遭遇します。
頭の整理を兼ねてまとめてみました。

今回も最後まで読んでいただきありがとうございました!