システムエンジニア兼IT講師の備忘録

技術やトレーニングテクニックなどを思いのままに発信していきます。

わかりやすく説明するための「例え」と「喩え」

こんにちは!

今日は、トレーニングやOJTの手法について意見をメモ書き程度に述べていきます。
※個人的な体験に基づいた意見になります

身の回りにある教育

近年では、多くの企業が「若手の育成」を重視し始めています。
OJTやメンター、トレーナー制度などを導入している会社もあります。
そのため、先輩社員として後輩の育成をある程度任されてしまう、なんていうケースも多々あります。

わかりやすい説明のしかた

かく言う私もかなりの若手で、一般的な企業で言えばまだまだ教育される立場なわけですが、
業務柄、他の社員の育成に関わる場面があります。

その中で、「なぜか伝わらない」、「わかってもらえない」ことが多く
相手に何かを説明しようとするときに「たとえ話」が重要であることに気づきました。

なぜ、「たとえ話」が重要なのか?

一言で言うと、「相手の経験と関連付けてあげる」ことが重要です。
人間誰しも、新しいことを学ぶのはとても大変です。
ですが、既知の事柄と似ていることなら簡単に学習できる!と思いませんか?

この性質を利用することが非常に重要かつ効率の良い学習や習得に繋がると私は考えます。



じゃあ、どんなたとえがいいの?

とは言っても、とりあえずたとえを出せば良いわけではありません。

先程も書いたように「相手の経験と結びつける」ことが重要です。
つまり、相手を知る必要があります。

相手の「趣味」「勉強してきた内容」「知っている事」を加味したうえで
たとえを出しましょう。
例えば、若者向けであれば「最近の雑誌」だとか「最近のゲーム」だとか。
中年の方向けであれば「家庭の話」や「前職の話」など。
できるかぎり、相手にとって身近な内容に置き換えて説明しましょう。
そのためには、前もって相手との雑談やコミュニケーションで、その人の知識を引き出しておくことが必要ですね。

一歩進んだたとえ話:「例え」と「喩え」

「たとえ」には、漢字が二種類あります。
例え」と「喩え」です。
※「喩え」と「譬え」は同義とされている事が多いので省きます

「たとえ話」を出す際には、「例え」と「喩え」両方を出したほうが良いです。
喩え」は比喩であり、相手の身近なものに置き換えて説明するのがコレに当たります。
例え」は実例ですね。実際の業務などに即した実例を話しましょう。

例を示すと、こんな感じです。
説明したい内容:「月報は給与に反映されるから、月報を毎日しっかり時刻を記録してね」
対象者:アルバイト経験のある新入社員
喩え:「アルバイトとかでも毎日タイムカード押すよね。あれが無いとお給料もらえないよね?だからしっかり時間は記録しようね!」
例え:「例えば、業務を開始した時間を9:00としたら、ココに9:00って書いてね。退勤した時間が18:00だったら、ココに18:00って書いてね。そうすると、8時間労働したことになるよね。これを元にお給料が出るよ」

まあ、さすがに給料の話でたとえが必要な人はいないかもしれませんが、
いずれにせよ、相手の経験と関連付けること、それから実際の値を見せることが重要です。

更に進んだ話:「たとえ」は複数用意しよう!

人によっては、自分が用意したたとえでスッキリ納得してくれないかもしれません。
ですので、「たとえ」はできれば複数用意しておきましょう。

JavaでString文字列を==で比較してはイケナイと言われる理由

こんにちは!今日は少々マニアックな話になります。

Javaで文字列を比較するとき、==で比較してはイケナイというのは良く聞く話ですね。

本当かどうか、ちょっと試してみましょう。

String型の変数を2つ用意し、同じ文字列を格納して比較する

String str1 = "Hello World";
String str2 = "Hello World";

System.out.println(str1 == str2);

結果:true

となります。

あれ?大丈夫じゃん????

では、以下のケースを試してみましょう。

String型の変数を2つ用意し、加工して同じ文字列の状態にしてから比較する

String str1 = "Hello";
String str2 = "Hello World";

str1 = str1 +  "World";

System.out.println(str1 == str2);

結果:false

となります。 結果的に両方共"Hello World"という文字列を格納していますが、falseです。

なぜなのか

==は、基本的に「同じ文字列であるかどうか」を判定します。

ですので、実は下記のように文字列が加工されない場合はあまり問題無いです。

String str1 = "Hello World";
String str2 = "Hello World";

System.out.println(str1 == str2);

問題になるのが、文字列に加工が入る場合です。

String str2 = "Hello";

str2 = str2 +  "World";

この時、実は内部ではコレが起こっています。

String str2 = new String(str2 + "World");

つまり、全くの新しいオブジェクトを生成しています。

あとは、よくある動きですね。

String str1 = "Hello World";
String str2 = new String("Hello World");

System.out.println(str1 == str2);

結果:false

となります。

ちなみに、このケースでも

System.out.println(str1.equals(str2));

と、equalsメソッドを使ってやればシッカリと内部文字列の比較ができます

まとめ

・Stringにおける==は、文字列の比較を行うようになっているため、文字列に加工が入らない限りは問題は起こりにくい

・ただ、明示的にnew String()が行われた場合の==はオブジェクトの比較を行う

・文字列の加工は、裏でnew String()を行う

・結論として、何があるかわからないので、基本的にequals()メソッドを使えばとりあえず安全!

よく聞くけど意外とわからない言葉その1 「クライアントサイドスクリプト」「サーバサイドスクリプト」

こんにちは!

 

当ブログでは、主に初心者の方をターゲットに、

「よく聞くし、わかった気になってるけど意外と説明できない言葉」をいくつかご紹介していきます。

 

IT業界にこれから入ろうとしている方、入ったばかりの方、よかったら読んでみて下さい。

 

第一弾として、今日は

「クライアントサイドスクリプト「サーバサイドスクリプト

をご紹介します。

 

たとえ話から行きましょう。

 

みんながバラバラの方法で申請を出すと大変!

皆さん、仕事をする上で何かしら、定期的に提出しているものってありますよね。

まずはそれを思い浮かべて下さい。

例えば、週報、月報、報告書、経費精算、申請書とかそういうものです。

 

共通している点は、「誰かがチェックしている」という点ですね。

とくに申請書なんかは、上司等がチェックして承認することが多いですね。

 

f:id:bowtin:20171207005154p:plain

 

さて、普通の会社は一般社員さんのほうが、人数面でチェック係となる上司よりも多いわけです。

 

申請をしてくる社員さんそれぞれが、みんなバラバラな書き方で送りつけてきたらどうでしょう。

 

チェックをする上司は毎日終電でしょうね。

f:id:bowtin:20171207005156p:plain

 

予めフォームを決めておいて、それに書いてもらう

そこで、大抵の会社は「フォーム」を使いますね。

「名前を書く欄」「金額を書く欄」「理由を書く欄」等を予め作っておいて、その通りに書いてもらえば楽チンなわけです。

f:id:bowtin:20171207005159p:plain

 

Webの世界に置き換えてみよう

実は、Web界で利用されている技術も全く同じ発想なのです。

Webの世界は、サーバとクライアントに別れます。

申請を通す「上司」が「サーバ」で、申請をあげる「社員」が「クライアント」です。

 

例えば、SNSなどで新規ユーザ登録をするとき、最近では「パスワードの文字数は8文字以上、大文字小文字を混ぜてね」などのルールがありますよね。

 

クライアントが本当にその条件を満たしてパスワードを設定してきたかどうかは、サーバが判断しているのでしょうか?

f:id:bowtin:20171207005201p:plain

 

う~ん。サーバにやらせるのは非効率ですね。しかも、Webは同時に何百人もの人がアクセスしてくるわけですから、なおさらです。

「8文字かどうかなんてお前がチェックしてから持って来いや!」って話ですね。

 

 

というわけで、用意されているのがクライアントサイドスクリプト

こいつは、Webサイト等にアクセスした時点で、自動的にサーバから送られます。

f:id:bowtin:20171207005203p:plain

 

 

Google ChromeInternet Explorer等のブラウザと呼ばれるソフトウェアが、送られたプログラムを解析し、ユーザが入力してきたデータなどをチェックしてからサーバへ送信していきます。

 

これに対し、サーバ側でしかできないような処理(例えば、全員のデータの一元管理等)を、サーバサイドスクリプトと呼んでいきます。

 

うまくできていますね・・・。

 

ちなみに、プログラミング言語もそれぞれでわかれていることが多く、

クライアントサイドは近年ではJavaScriptが多く

サーバサイドはJavaPHPC#

というように、様々な言語が用いられています。

 

ブラウザを使って、サーバからクライアントサイドスクリプトの内容を確認する方法もありますが、長くなってしまうのでそれはまたの機会にしましょう。

 

ではまた!

 

 

 

 

 

Java SE 9の新機能!jshellって何?

こんにちは!

 

Java SE 8が発表され、あれよあれよと言う間にもうJava SE 9の発表。

ついでにJava EE 8なんかも発表されちゃってます。

 

時代についていくのは大変ですが、せっかくなのでJava SE 9の魅力を一つ、ご紹介したいと思います。

 

Javaの学習はめんどくさい!?

実は私はよく新入社員研修講師として登壇したりしていまして、よく「Javaの勉強ってめんどくさいんですが、何かいい方法無いですか?」なんていう相談をもらいます。

 

う~ん。確かに。

テキストエディタでやってるとしたら、メモ帳出して、class定義して、mainメソッドなんていうよくわからないオマジナイを書いて、やっとSystem.out.println()。

最後にjavacでコンパイルして、javaで実行。

 

まさにその通り、めんどくさいですね!

 

実はこれを解決するとんでもないモノが・・・。

 

jShell

Java SE 9 をインストールすると、インストールディレクトリの中にbinフォルダがありまして、その中にjshell.exeっていうファイルがあります。

f:id:bowtin:20171205172207p:plain

こいつですね。

f:id:bowtin:20171205172237p:plain

 

そのまま実行してやると・・・

この通り。

f:id:bowtin:20171205172739p:plain

あとは、クラス定義とかめんどくさい手順はすべて省いて、いわゆるmainメソッドの中に書きたいものをコマンド感覚でじゃんじゃん書いてやればOKです。

 

Hello Worldもこの通り。

f:id:bowtin:20171205172837p:plain

 

計算もこんな感じ。

f:id:bowtin:20171205172848p:plain

f:id:bowtin:20171205172852p:plain

 

変数は、実はSystem.out.println()すら省いてしまって変数名だけ書いてしまってもOKです。

 

お手軽に試して見ては如何でしょう?

 

Java SE 9のダウンロードはこちらから!!