プログラム 習得 順序2 hello world(Java)

イントロダクション

前回は、大雑把な流れを示したつもりです。今回は具体的に「どーやるの?」について記載しようと思います。

動機付けなどは自分で考えるしかないので「ハローワールド」から始めます。

とりあえず、プログラムが使えるようになると以下のスキルが身につきます。

  1. 問題を解決するためのフロー(流れ、手順)を自分で導き出す
  2. 物事、自分の思いを理論的に説明できるようになる(レベル高め)
  3. 世界にない「新しい何か」を発明することができる(大変だけど)

とまぁこんな感じです、別にプログラムをガリガリ書いてプログラマになって。。。とか、そんなことを言いたいのではなく、上にあげたように「理論的な考え方」と「やればできる!」と言うことを知って頂きたいのです。(ついでに「こんなのを作ったら、面白いのでは?」なんて会話ができる人が増えてくれるといいなぁ)

そして「プログラムしかできません」なんて言う人は「プログラムができない人」です。プログラムが組めると言うことは、いろんなことを噛み砕き、理解して「仕組み」を作れると言うことです。自分自身も学習の途中です。

さて、本題に戻ります。初めのプログラムを組みます。

ハローワールド(Java)

結論から言うとクラスを作ってメインメソッド作って…コンソール表示して終わりです。

大した事はありません。手順は以下に示します。

  1. IDE(開発ツール)を自分のパソコンにインストールする
  2. プロジェクトを作成し、HelloWorldクラスを作成
  3. 下のコードを書いて、プログラムを動かす
public static void main(String[] args) {
   System.out.println("Hello World!");
}

細かいことは以下のページに記載しています。

<開発ツールのインストール>

Java Install Eclipse〜開発ツールのインストール〜

<Hello World>

Java Hello World はじめのプログラム 〜 Step1-1〜

駄菓子菓子!

だがしかし、たかが「ハローワールド」とはいえ侮るなかれ!「遊び」の基本にもなります。初めは表示して終わりですが、これに「入力」を加えます。プログラム引数を使用して、渡した引数を表示するなどやってみると面白いです。

そのほかに、「標準入力」プログラムを起動してからの入力を行うプログラムを追加、画面を更新する、「入力→画面の更新→入力」を繰り返して1つの流れを作ることができたら…それは、既に「ゲーム」です。

Java Game作成 〜ゲームの処理フロー〜

横道に逸れましたが、一歩ずつ確実に進みましょう(理想です)これがいちばんの近道です。

古典的にやる(IDEがない時代はこうでした)

これは、ひとつの例ですが、メインメソッドを起動するだけならコマンドプロンプトからも行けます。コマンドから実行する場合はプログラム引数を直接渡すので、プログラム引数については理解できます。

// 下のコマンドでJavaファイルをコンパイルします。
>javac HelloWorld.java
// 次のこまんどでJava(クラスファイル)を起動します。
>java HelloWorld

プログラム引数を渡す場合

>java HelloWorld プログラム引数1 プロ恨む引数2 スペースで区切る

上のように、コマンドの後にスペースを入れて文字を入力するとJavaを起動した時に「プログラム引数」として値が渡されます。main(String[] args)の「args」に以下のような形で入っています。

args[0]="プログラム引数1"
args[1]="プログラム引数2"
args[2]="スペースで区切る"

これに文法を理解してやると簡単なアプリがつくれるかも?

それは、アイデア次第です。

でわでわ。。。

プログラム 習得 順序1 概要

イントロダクション

プログラミングのススメと自分の経験からこの学習順序(学習フロー)が良いであろうと言う学習順序を記載します。

<初めに>

今現在、学生の方は将来に向けて「あーしたい、こーしたい」と言う気持ちを大切にして欲しいと思います。

そして、成人して社会人の方、特に若い方は目標、夢などを具体的にイメージ出来るようにイメージを具体的に持ってください。少しずつ、ゆっくり具体的にしていく感じです。

「火事場のクソ力」と言う言葉があります。本当は「馬鹿力」らしいですが…、早い話が「人間やる気になれば何でも出来る」と言うことを言いたかったのです。なので、次の「動機」について自問自答してみてください。

1.動機について

元々自分はイベント屋とか音響屋さんになろうと思っていました。が「これはいつまでたっても生活が出来ない!」(まともな収入が得られない)と気が付き「IT業界へ行くべきだな!」と意を決して異種業界へ行く事にしました。

丁度良く「未経験者歓迎」と言う求人があったので、そこに食いつきました。

自分の動機としては「まともに収入を得て働きたい」と「手に職をつけて将来的に独立したい」と言うのがありました。

2.学習開始!

会社で学習しながら、アルバイトして生活する感じでした。パソコンやプログラムとは無縁の仕事をしていたので「プログラムとはなんぞや?」から入りました。パソコンは学生の頃にバンドの音を録音するのに使った程度。ワードやエクセルの存在も知りませんでした。

とりあえず会社からのミッションは「指定の課題をクリアする」でした。

課題をクリアしたら正社員として働けるので、収入も入ります。

ガテン系の人間なので「とりあえず手を動かす」事で「わからない」を「そーゆーこと?」に変えて行きました。

3.課題をこなす

課題と言うのは、プログラミングの教本にあるような問題を解いて、プログラムを実行して起動確認するものでした。やっぱり「ハローワールド」に始まり、文法→アプリ作成とやって行きました。

ハローワールドは、頭ごなしに覚えました。メインメソッドの書き方は常に決まっているからです。

足し算〜四則計算をするプログラムを作りコンソールに表示したりしました。

この時に、変数の型について理解が深まったと思います。ビルドエラーが出るので「なんでエラーになる?」を解決していく事で「データ型」に対する理解が深まったのです。ドキュメントには「この型は〜」と書いてあるけど実際にはいじってみないとわかりませんでした。

4.作ったもの

  1. コンソールアプリ(配列の並べ替え)
  2. ユーザ登録削除(ユーザ管理アプリ)

ここまでが自分が研修としてやった事です。

初めのコンソールアプリはC言語で作りました。構造体とか配列とか初めは訳がわからんになっていましたが、作り終える頃には、なんとか理解したかな?って位になってました。

A.振り返り

実際にやってみて、かなり時が経っているけど、今思い返してみて、思うのは以下の点です。

<やると良い事>

  1. 実際に手を動かして、プログラムを書いて理解する事
  2. 学習(プログラムを組む)の後に理論的に理解する事
  3. 作ったプログラムをいじって思い通りにカスタムする事→ちゃんと理解していれば難しくないし、ちょっと面白い(笑)

<やると悪いこと>

  1. コードも書かないで理論(頭)だけで理解する
  2. 「説明が出来た」=「理解した」と解釈する
  3. 理解が出来ないのに人に相談しない
  4. 理解(実装)した事を起動確認しない

まとめ

次のような手順で学習するのが一般的な手順になります。

  1. ハローワールドをやる
  2. そのプログラムの文法を理解する
  3. とりあえず、何か作る

ここまでは良いのですが、やった後に「理解」する様に各ステージをクリアしていくと効率的かつ実戦的だと思います。理想としては、簡単な操作の出来るアプリを作るのが良いのですがいっぺんには出来ません。

なのでプログラムを書き、起動して、各処理が何をしているのか?を理解しながら学習、そしてアプリではどんな風に使うか?をイメージ出来ると素晴らしいと思います。

ポイント

ゆっくりでもいいので確実に一歩ずつ進む事です。

これが一番の近道だからです。

あと「こんなものを作りたい。」という感じで夢を膨らますとより「やる気」になります。

自分は「何を作ろうか?」から入ったので少し出遅れた感じです。インターネットもよく知らない状態だったので…

ゲームをやる~Play the “Logic Summoner”~

Introduction

Today I woud like to play some game. so I picked  up "Logic summoner"  created by "Paiza" that is Japanese campany named "GINO".

株式会社ギノさんが提供しているゲーム「ロジックサマナー」をやってみようと思います、

Getting started

Access this page. and rest user to paiza. then you can play this game.

Now Play!(やってみました)

why tihis code is wrong?(なんでふせいかいなのか?)

mission is out  "4 2 1 3 5\n"(左のように出力するのが問題)

import java.util.*;


public class Main {
 public static void main(String[] args) {
 // 自分の得意な言語で
 // Let's チャレンジ!!

  Scanner sc = new Scanner(System.in);
  String line = sc.nextLine();
  int num = Integer.parseInt(line);
  LinkedList<Integer> list = new LinkedList<>();
  char[] arr = sc.nextLine().toCharArray();
  int count = 1;
  for (int i = 0; i < arr.length; i++) {
    char c = arr[i];
    if ('L' == c) {
      list.offerFirst(count);
    } else if ('R' == c) {
      list.offerLast(count);
    } else {
    }
     count++;
  }
  int c1 = 0;
  for (Integer o : list) {
   if (c1 == list.size() -1) {
     System.out.println(String.valueOf(o));
   } else {
     System.out.print(String.valueOf(o) + " ");
   }
  }
 }
}

Result(結論)

It is good Question but Answer is ???

プログラムの問題自体は面白かったけど答えがイマイチ・・・