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入門 冗長化入門 インフラ実機演習 プロジェクト管理 Active Directory ネットワーク管理 コンテナ 正規化理論 Haskell 品質管理 OpenStack シンギュラリティ DBA中級 プロトコル UX 基本設計 FinTech トラブルシューティング 並列処理 見える化 PMO ロジカルコミュニケーション Deep Learning 実機演習 インデックス設計 超上流工程 BGP Excel C-CENT Selenide プライベートクラウド アセンブラ コンピュータ基礎 工数見積 CCENT 法律知識 失敗から学ぶ プロジェクト失敗事例 PDCA プログラミング入門 非エンジニア向け 4Biz DNS セルフマネジメント 片付け術 サーバーダウン サーバー タイムマネジメント GO言語

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基礎プログラミング基礎セキュリティプログラミングコミュニケーションSQL基礎ネットワーク入門オブジェクト指向SQL応用ソフトウェアテストマネジメントファイアウォールPythonAIコーチングテスト自動化データベースLinux応用情報処理資格インフラ実機演習Javaプログラミング応用アルゴリズムRDBMSネットワーク障害対応データベース設計新人研修CCNA資格マルチスレッドプログラミングビジネス文書Docker単体テストIoTRaspberry Pi仮想化技術エンジニアJavaScriptJavaプログラミング基礎トレンドビジネスマナーアジャイルSQLインジェクション物理設計(データベース)ロジカルシンキング経営改善パケット解析デザインパターンVLANヒューマンスキルOSPFLAN構築UI/UX問題解決技法インフラエンジニアテーブル設計C# 基礎プレゼンテーションjQueryネットワーク構築JavaScript基礎要求定義シェルスクリプトActive Directory冗長化WBS業務効率化スクラムセキュリティ入門TCP/IPロジカルライティングソフトウェアテスト基礎リファクタリングCiscoマーケティングデータベース基礎クラウドITILデータサイエンスデータベース応用新人育成簿記JavaEEデータベース障害アンガーマネジメント関数型プログラミングZabbixPMBOK®テストケースパフォーマンスチューニング内定者研修品質管理IT基礎PMOプロジェクト失敗事例要件定義GoFインターネットルーティング応用エンゲージメントマネジメント次世代高度IT人材ロジカルコミュニケーションPマーク工数見積表計算ソフトJunitIPアドレスCentOSWebアプリケーション開発コンテナVPNOSI参照モデルDBA中級AWS正規化理論IPAサーバー構築インデックス設計データベースセキュリティ法律知識ベンダーコントロールITサービスマネジメントプロトコル見える化Modern JavaScriptプロジェクト管理UXインターネットルーティング基礎情報セキュリティマネジメントスクリプト言語BGPDNSリーダブルコード機械学習chef基本設計コンピュータ基礎Infrastructure as Codeビルドツールテスト手法OpenStackExcelセルフマネジメント業務知識/業界知識MVC基礎応用情報技術者ネットワーク管理インフラ監視PDCAFinTechER図Windowsサーバー基礎リスクコントロールPython入門シンギュラリティITパスポートC-CENT労働関連法片付け術共創HTML/CSSDeep Learningプログラミング入門トラブルシューティングIT資格CCENT内部設計冗長化入門フロントエンドSelenideNode.jsHTTPサイバー攻撃非エンジニア向けチームビルディング継続的インテグレーション (CI)C# 応用並列処理データサイエンティストプライベートクラウドnpmHaskell超上流工程4Biz継続的インテグレーション(CI)モダンJS (Modern JavaScript) 基礎ネゴシエーションクリティカル・シンキングOS・システム基盤失敗から学ぶWindowsサーバー応用アセンブラプロジェクト計画gulpソフトウェアテスト応用

過去の記事