close
プログラミング クラウド Microsoft Azure 情報処理資格 基本情報技術者 IT基礎 応用情報技術者 開発・設計方法 オブジェクト指向 内定者・新人研修 プログラミング基礎 アルゴリズム コンピュータ数学 内定者研修 新人研修 ヒューマンスキル プロジェクトマネジメント プレゼンテーション リーダーシップ 組織マネジメント ネゴシエーション ロジカルシンキング Java UI/UX HTTP JavaScript基礎 情報処理資格 ネットワークスペシャリスト ネットワーク インターネットルーティング応用 IPアドレス データベース応用 SQL応用 パフォーマンスチューニング データベース設計 ER図 概念設計(データベース) 論理設計(データベース) IT資格 Linux基礎 OS・システム基盤 セキュリティ TCP/IP OSI参照モデル データベースセキュリティ ファイアウォール 標的型攻撃 SQLインジェクション ネットワーク基本設計 CCNA Cisco プロジェクトマネジメント資格 情報処理資格プロジェクトマネージャ 情報処理安全確保支援士 人事給与 財務会計 管理会計 簿記 生産管理 在庫管理 ERP バランススコアカード 情報処理資格 ITアーキテクト 情報処理資格 ITストラテジスト 情報処理資格 ITサービスマネジメント 情報処理資格 システム監査 PMBOK® PMP® プロジェクト計画 WBS リスクコントロール ITIL ITサービスマネジメント 要求定義 要件定義 見積手法 ビジネスインダストリ 業種・業界知識 業務知識 提案力 ソフトウェアテスト基礎 情報処理資格 データベーススペシャリスト ハードウェア基礎 外部設計(基本設計) 内部設計(詳細設計) データベース基礎 SQL基礎 RDBMS 物理設計(データベース) C++ Ruby MVC基礎 Webアプリケーション開発 JavaEE Javaプログラミング応用 フレームワーク MVC応用 Spring フレームワーク ソフトウェアテスト応用 テスト手法 Junit スマートフォンアプリ開発 Androidアプリ開発 C# 基礎 C# 応用 負荷テスト Javaプログラミング基礎 ソフトウェアテスト コーチング メンタリング HTML/CSS サーバー構築 仮想化技術 KVS (NoSQL) アジャイル スクラム ファシリテーション C言語 ITパスポート JSTQB データサイエンス 単体テスト ユニットテスト キャリアアップ インターネットルーティング基礎 パケット解析 LAN構築 データベース データサイエンティスト トレンド 障害対応 インフラ監視 HTTP/2.0 コンピュータサイエンス VPN ネットワーク物理設計 データベース障害 JavaScript モダンJS (Modern JavaScript) 応用 MVS応用 バックアップ/リカバリ 分散処理 Hadoop Hive Python AI 深層学習(DeepLearning) CentOS Linux応用 Zabbix シェルスクリプト Infrastructure as Code Windowsサーバー基礎 内部設計 Docker DevOps Windowsサーバー応用 NginX chef Ainsible ロジカルライティング R テスト自動化 Jenkins Git 継続的インテグレーション (CI) バージョン管理 Vagrant 要求分析 Redmine 継続的インテグレーション(CI) 継続的デリバリー (CD) ヒューマンリソース管理 Web API マイクロサービス コミュニケーション 業務知識/業界知識 マーケティング 語学 AWS 法務 IoT ビジネスマナー OJT 業務効率化 表計算ソフト オフィスソフト コンプライアンス フロントエンド Subversion PHP 関数型プログラミング Laravel モダンJS (Modern JavaScript) 基礎 Android Studio 機械学習 iOSアプリ開発 ぷプログラミング React 次世代高度IT人材 共創 IPA Raspberry Pi Xamarin スクリプト言語 GoF CUI VBA 資格 ビジネス文書 jQuery 研修参加レポート マネジメント OSPF テーブル設計 アンガーマネジメント クリティカル・シンキング PDU 経営改善 Pマーク 問題解決技法 サイバー攻撃 エンジニア 参加してみた エンゲージメントマネジメント 労働関連法 新人育成 ネットワーク構築 情報セキュリティマネジメント デザインパターン リファクタリング マルチスレッドプログラミング ベンダーコントロール Modern JavaScript 冗長化 VLAN インフラエンジニア チームビルディング テストケース リーダブルコード セキュリティ入門 ネットワーク入門 Node.js npm gulp ビルドツール Python入門 冗長化入門 インフラ実機演習

Javaプログラミング入門(1) プログラミングの基礎を知る 研修コースに参加してみた

unsplash-logoCrew

SEカレッジ2018春夏シーズンより、実際にコースがどんなものだったのか、研修に参加してレポートすることになりました。これからどうぞよろしくお願いします!

今回レポートするのは ↓ のコースです。

プログラミング (1) プログラミングの基礎を知る

実際、参加してみた感想は、プログラムを動かしてみる、という原始的な喜びとおもしろさを感じることができました!
また、“改造して、自分の思い通りに動かす” というプログラミング学習のコツを学べました。
これからプログラミングに取り組もうかなぁ、と思っている方や新人若手の方にはとってもオススメの内容です。

では、どんな内容だったのか、詳細をレポートします!

 

受講する方の想定

まず、この研修コースの受講前提を整理しておきます。

  • パソコンの基本操作ができること

 

受講目標

続いて、このコースを受講すると、どんなことが身につくのか、目標を見てみましょう。

  • プログラミングの手順を知る
  • 処理の区切りを考えてプログラムを作れる
  • 処理の流れを考えてプログラムを作れる
  • 処理をメソッドに分けてプログラムを作れる

では、実際、どのような研修プログラムだったのか、教えてもらったことや心に残ったものを中心にレポートします!

 

講師紹介

講師は矢沢久雄さんです。
とてもユニークなキャラクターと、わかりやすく解説されるので、SEカレッジでも人気の講師です。
まずはアイスブレイクということで、「親父ギャグを言うので、笑ってね。笑わないともう1回言ってしまうので、ニコッとしてもらえるとうれしいです。」クスリとスタートです。

その中で、矢沢さんが栃木県在住ということで、みつをさんにちなんで、今日のコースをまとめて下さいました。

プログラミング言語ってのは人間の考えを表現するための言語なんだよなあ
ひさを

プログラムはコンピュータに伝わるように書く文章、という意図でした。わかりやすいですね。

 

皆さんの自己紹介

続いて、受講者の皆さんがどの程度、知識をお持ちなのか確認です。
今回参加された方は、ほとんどプログラムを作ったことが無いという方がほとんどでした。

実際に受講者に手を挙げて頂きながら、「Excelをやっていると、プログラムに近い感覚が得られますよ~」「変数はセルのこと、関数が処理ですよ」というプログラミングの敷居を下げるような話もされていました。

 

講座内容の紹介

今日のアジェンダとそこで何をするか説明です
目的としては、Javaを使って、 プログラマ脳になろう というものでした。

  1. プログラミング入門
    ここで書くサンプルプログラムはあくまで理解を促すためで、世の中に意味のないものという補足がありました。
    そうしないと、これは何が面白いのと思ってしまう、とのことです。たしかに、ハローワールドしてもなんだろうと思ってしまいますね。
  2. 入力、演算、出力
    肥満指数BMIを求めるプログラムを題材に、入力演算出力をセットに考える “プログラマ脳” に段々近付いていきます。
  3. 順次、分岐、繰り返し
    じゃんけんゲームを題材に、今度はプログラムの流れを考えられるようになります。
  4. 処理をメソッドに分ける
    じゃんけんゲームを引き続き題材として、大きなプログラムで、どう部品化していくのか、考えてみます。

補足して、今回使うJavaがどのような言語なのか、人気ランキングが紹介され、TIOBE index for April 2018というサイトで、Javaはダントツ1位でした。

 

プログラミング入門

ここからはプログラミングです。
SEカレッジの環境は、ほとんどMicrosoft Azureというクラウドにある仮想マシンで構築された開発環境を使います。
なお、今回はシンプルに JDK のみがインストールされています。

 

プログラミングの手順

さぁ、いよいよプログラミング、の前に、プログラムが動くまでの手順を解説します。
このパートは普段プログラムを使う側だと、まったく想像がつかない部分でした。

  1. ソースコードを記述する
    ソースコードとはコンピュータに伝える “人間にもわかる” 文章のことで、専用の編集ソフト、エディタを使って書きます。
  2. コンパイル
    ソースコードはコンピュータには読めないので、コンピュータでも分かる文章にする、それがコンパイルというものです。
  3. 動かす
    普通のWindowsプログラムは何もしなくても動くけど、JavaプログラムはJava仮想マシンで動くので、起動の仕方が違います。今日はコマンドプロンプトでプログラムを動かしてみます

 

コマンドの紹介

またコマンドプロンプトでコマンドを打って、ファイルを呼び出したり、プログラムを動かすので、今日使うところだけ紹介です。

  • md = `make directory`
  • cd = `change directory`
  • dir = `directory`
  • cls = `clear screen`

なお、このようにコマンドや構文は略されているので、そのままだと覚えにくく、略さないで用語を覚えると定着します、という解説があり、確かに略を覚えると、タイプミスはありませんでした。

 

Hello! World

さぁ、いよいよプログラミングです!
実際にコマンドプロンプト上に Hello! World を表示するプログラムを、サンプルを見ながら書きます。

続いて、作成したソースコードを保存してみます。
ただ、いつものようなファイル保存は出来ず、.java という拡張子にして、ファイル名も好きなように作れないので注意です。(マジか!と思ったポイントでした)
たとえば、Hello というクラスを作れば、 Hello.java にしないとダメです。

 

書き方の注意

そのプログラミング中に書き方に注意することを紹介してもらいました。

  • 「パブリック・スペース・クラス・スペース・スタティック・~」と読みながらやるとタイプミスが少なくなる
  • やたらカッコを作るので、開きカッコと閉じカッコを最初に書くこと
    • エディタがやってくれるけど慣れるまではやろう
  • 横に書き連ねてしまうと、とっても長いので、改行する
  • {} の中身の書き方
    • 先頭を下げて書いた方が読みやすくなる
    • タブキーではなくスペースで4つにしたりするが、今だとスペース2つが多い (好みの問題)
  • まずは意味がわからなくてよいので書く
  • セミコロンで終わる

たしかに音読すると、どこまで打っているのかわかりやすく、ちょっと恥ずかしく感じる部分ではありますが、とても良いやり方でした。

 

プログラムを動かす

実際書いたプログラムをコンパイルして、動かしてみます。ドキドキ。
コンパイルは、1文字間違えてもエラーが起こり、100点満点じゃないとダメなので、祈る気分でやるようになるとのことでした。
慣れないうちはだいたいエラーが出るので、それだけで通ったときに喜び、それが楽しさに繋がり、やってみようという気になるとのことでした。

ちなみに、私は printlnprintIn とタイプミスしていて、コンパイルが通らず。。
それだけに動いたときにヤターと感じられました!

一通り、コンパイルできたところで、受講されている方に 「コンパイルが通ってうれしいですか?」と講師から質問されたのですが、ほとんどの人が手を挙げてらっしゃいました!

また、この楽しさがわかれば、このサンプルプログラムをマネしたあと改造してみると、さらに面白くなり、上達するということでした。
例えば、今回の Hello World プログラムであれば、

  • Hello,world を日本語にしてみる
  • Hello,world を2回出してみる

このマネして改造する、ということを本1冊やってみると、まったく変わります、ということでした。

 

プログラマ脳になる

プログラムがコンピュータでどう動くのか

コンピュータの中は 入力(Input)->演算(Process)->出力(Output) と装置が分かれて実行されているので、プログラマにも同じ考え方が必要になります。
なので、例えば、お昼を食べるときにも、どんなIPOがあるか考えられるようになっていくとのことでした。

 

BMIを求めるプログラム

いよいよ、ちょっとした実用的なプログラムを考えます。
ここではBMI(肥満度の指数)を求める仕様をもとに、まずはどんなプログラムを書くのか、考えてみます。
ポイントは、先程の 入力 -> 演算 -> 出力 がどんなものになるのか、というところです。

  • BMIの仕様
    • BMI = 体重kg ÷ 身長mの2乗
    • 25以上なら肥満

 

ソースコードを解説

実際に入力・演算・出力を考えたところで、ゼロから書くのではなく、用意されたプログラムをもとに、ソースコードを解説してもらいました。

 

Javaの特徴

ソースコードの解説の前に、Javaの特徴について少しだけ紹介されました。

  • // でコメントを書く。// のあとはスペース入れたほうがキレイに見える。ただ好みの問題がある
  • クラスライブラリというのを使う
  • Javaは全部イチ作るのではなく再利用するという文化
  • クラスという単位で用意されていて、それを再利用する
  • 再利用可能なクラスが図書館のように膨大にあり、クラスライブラリと呼ばれる
  • どんな人でも全部は知らないので、Javaで分からなかったら、ググることが必要

 

ソースコードの読み方

Javaの特徴をおさえたところで、実際にソースコードを読んでいきます。
プログラムは以下の順番で書かれているので、それが分かれば読めるようになります。

  1. 変数
    • 例えば、体重という変数を扱うのであれば、 weight を定義する
  2. 入力
  3. 演算
  4. 出力

import java.util.*;

public class Bmi {
  public static void main(String[] args) {
    // 変数を用意する
    double weight; // 体重(kg)
    double height; // 身長(m)
    double bmi; // BMI

    // 体重と身長を入力する
    Scanner scn = new Scanner(System.in);
    System.out.print("体重(kg)= ");
    weight = scn.nextDouble();
    System.out.print("身長(m)= ");
    height = scn.nextDouble();

     // BMIを演算する
    bmi = weight / (height * height);

     // BMIを出力する
    System.out.println("BMI = " + bmi);
  }
}

 

BMIプログラムを改造してみよう

サンプルプログラムが読めるようになったところで、改造のアイデアを紹介してもらいました。
どのように改造すればよいのか、スグには思いつかないので、とても役立ちました!

  • 身長を cm にしたい
  • 小数点が10ケタ以上あるので、それを2ケタなど指定した値にする // これはライブラリを検索してみると良いとのこと
  • 実際に改造してみる

 

プログラムの処理を考える

 

順次・分岐・繰り返し

プログラムの処理を組み立てるには、以下の3つしかなく、この3つを使って処理を考えるとのことでした。

  • 順次
  • 分岐
  • 繰り返し

 

じゃんけんゲームを作ってみる

ここで、順次 / 分岐 / 繰り返し を考えられるよう、じゃんけんゲームが題材となりました。
じゃんけんゲームの仕様が説明され、

  • 入力はどれかな~
  • 演算はどうするかな~
  • 出力はどうかな~
  • 処理の流れはどうするかな~、順次かな~、繰り返しかな~

ということを想像しながら考えました。

 

プログラムを見てみよう

処理を考えたところで、ここでもサンプルプログラムが用意されていましたので、ソースコードを解説します。

 

注意点
  • コンピュータの手を決める乱数は演算でしています
  • && ~でかつ、というのを指し、== は一致していることを指す
  • || は ~または~ を指す
  • { } の位置に気をつけるように // { }はブロックとも言う

ということで、プログラムはこれだけです、という説明でした。
あれ? 本当に?? と思ってしまいましたが、これだけの仕組みで複雑な業務システムを作るので、難しく、長くなってくるんですとのこと。確かに。。

 

改造アイデア

あわせて、ここでも改造するアイデアが紹介されました!

  • 出力を顔文字にしてみる
  • バグが出るので直す
    • 実は入力にいろいろなものが入る可能性がある
    • 実はEnterや名前を入れるとクラッシュする

バグが出る、というのは確かにやってみると、そうでした。
プログラミングでは、いろいろ考えることが必要だと改めて気付かされました!

このようにバグ修正をしたり、メソッドを追加していくと長くなり、何を書いているかわからなくなります。(そのことをスパゲッティ状態というそうです)

これを解決するためにJavaでは2つやり方があるとのことでした。

  • 部品化
  • 部品のメソッドを使う

 

メソッドを使ってみよう

ここではサンプルプログラムの簡単な紹介でしたが、実際に部品化して、メソッドを分けておくと、とても短く書けて、わかりやすいことが紹介されました。
不思議なもので、確かに読みやすいものでした。ここがとっても難しいハードルのように見えます。

最後にこのプログラムについても改造するアイデアを紹介してもらって、講座は終了しました!

 

まとめ

実際にプログラムを書いたり、動かすことだけでも、プログラムを使っていた側から大きな違いがあることに気づけて、とても楽しめる内容でした。
また、本に書いてあるサンプルプログラムをまずマネて、その上で、改造する、ということをやっていくと、確かに学ぶことが多く、とてもよいプログラミングの学習方法を体験できました。

最初は Hello World を表示するだけで何が面白いのかな、と思っていましたが、やってみると全く違いました!
これからプログラミングを学ぼうとする方には、とてもオススメです!

 

SEカレッジが気になった方はこちらからお気軽にお問合わせください!!

お問い合わせフォーム

SEカレッジの詳細をご覧になりたい方はこちら!!

SEカレッジ

特集・キャンペーン

よくある質問集

タグ一覧

参加してみた研修参加レポート基本情報技術者Javaセキュリティプログラミングプログラミング基礎オブジェクト指向プロジェクトマネジメントアルゴリズム情報処理資格Linux基礎新人研修IoTコミュニケーションエンジニアPythonコーチングJavaプログラミング応用デザインパターンロジカルシンキングマネジメントSQL応用ファイアウォールテーブル設計Javaプログラミング基礎ビジネス文書JavaScriptSQL基礎内定者研修Raspberry Pi要求定義C# 基礎リファクタリングOSPFUI/UX新人育成テスト自動化データベース設計データベース基礎JavaScript基礎ソフトウェアテストCCNAjQueryデータサイエンスITILトレンド単体テストRDBMS経営改善エンゲージメントマネジメントGoF要件定義Pマークロジカルライティング資格問題解決技法マルチスレッドプログラミングSQLインジェクションWebアプリケーション開発アンガーマネジメントネットワーク構築プレゼンテーションJavaEEシェルスクリプトIPAネットワーク表計算ソフトNode.js内部設計冗長化AIインターネットルーティング応用関数型プログラミングHTML/CSS障害対応インフラ実機演習マーケティング簿記パケット解析npmDocker物理設計(データベース)IT基礎VLANCentOSモダンJS (Modern JavaScript) 基礎仮想化技術VPNPMBOK®C# 応用労働関連法LAN構築ヒューマンスキルgulpMVC基礎リーダブルコードLinux応用パフォーマンスチューニング次世代高度IT人材ソフトウェアテスト基礎アジャイルデータベース障害ビジネスマナーWBSデータベースビルドツールITパスポートセキュリティ入門Zabbix共創サイバー攻撃ベンダーコントロール業務効率化リスクコントロールデータサイエンティストPython入門ネットワーク入門ER図Modern JavaScriptクリティカル・シンキング情報セキュリティマネジメントネゴシエーション冗長化入門業務知識/業界知識Cisco

過去の記事