新人教育
プログラミング教育
新卒エンジニア
プログラミング初心者
PG0

はじめに

PG0は、プログラミング学習を目的としたプログラミング言語です。
PG0の詳細は『初心者用プログラミング言語「PG0」のススメ』を参照してください。

今回のプログラミング研修対象者はプログラミング経験者だが、アルゴリズムの組み立てが苦手とのことだったので、PG0を使ってアルゴリズムの組み立て方を学んでもらうことにしました。

プログラミング研修でPG0を使ってみる場合の参考にしてください。
 → PG0がプログラミング研修に向いている理由

解説

PG0についてチュートリアルを使って解説しました。

  • 開発ツールの使い方
    • プログラムを書く場所
    • プログラムの実行方法(実行、ステップ実行、カーソル行まで実行、停止)
    • プログラム実行中の変数の見方
  • 言語仕様
    • 使える型は「整数型」と「配列」のみ
    • 使える分岐は「if、else」のみ
    • 使える反復は「while」のみ
    • exitで実行結果出力
  • 演習問題の進め方
    • 次の項目参照

演習問題

演習問題はPG0用の演習問題(PDF)を渡して解いてもらいました。

演習問題を解く際に「Webで検索するのを禁止」という制約を設けました。
これはWeb検索すると色々なプログラミング言語で書かれたアルゴリズムが出てくるためです。
アルゴリズムを考えるのが目的だったので考え方がわからない場合は私に質問することとしました。
考え方の質問があった項目は演習問題のヒントとしてフィードバックしました。

演習問題は完成したら私宛てにチャットでプログラムを送ってもらい、机上レビューを実施しました。

進捗は4日間で、全26問中、21問完了しました。
順次、分岐、反復の基本問題はすべて完了できました。
応用問題については2問完了できました。

  • 1日目8問完了
  • 2日目7問完了
  • 3日目3問完了
  • 4日目3問完了

レビュー指摘事項

アルゴリズムは考え方を伝えることで組めていたため、レビュー観点としては今後業務でプログラムを書くにあたって意識した方がいいこととしました。
レビュー指摘事項は以下になります。

  • 空白の統一
    • 数字と演算子の間の空白の数を統一することで可読性が向上
    • 開発環境がフォーマットしてくれることが多い
//修正前
var  x= 16
x=  x+5
x=  x/10 *10
//修正後
var x = 16
x = x + 5
x = x / 10 * 10
  • 冗長な書き方
    • 正しく動作するが、if文とelse文で同じ処理を書いてあるのは無駄
    • 改造等で修正漏れとなりバグの温床になる
//修正前
var b
if (a == 0) {
    a = 1
    b = a * 10  //これと
} else {
    a = 2
    b = a * 10  //これが同じ処理
}
//修正後
if (a == 0) {
    a = 1
} else {
    a = 2
}
var b = a * 10  //ここのみで処理
  • 動いてはいけない処理
    • 本来動いてはいけない条件でif文やelse文が動くと予期しない動作をしてしまうためNG
//修正前
var y
if (x > 0) {
    y = 1
} else {
    y = -1  //xが0の時にも動く
}
if (x == 0) {
    y = 0  //xが0の時はここだけ動いてほしい
}
//修正後
var y
if (x > 0) {
    y = 1
}
if (x < 0) {
    y = -1
}
if (x == 0) {
    y = 0  //xが0の時はここだけ動く
}
  • 計算値を使う
    • 固定の数値を使うと汎用性が無くなる
    • 計算で出せるものは計算する
//修正前
//cnt(正の値)の半分(奇数は切捨て)までループ
var cnt = 7
var i = 0
while (i < 3) {  //cntが6か7の場合しか正しく動かない
    i = i + 1
}
//修正後
//cnt(正の値)の半分(奇数は切捨て)までループ
var cnt = 7
var i = 0
while (i < cnt / 2) {  //cntがどんな数字でも動く
    i = i + 1
}

振り返り

プログラミング研修を受けた方からヒアリングした内容です。

  • 感想
    • 自分の基礎的な考え方がまだまだと感じた
    • ツールは特に問題無かった
  • 良かったこと
    • 曖昧に覚えていたものが明確になった(配列やwhileなど)
    • ためになった
  • 悪かったこと
    • 考え方を教えてもらわないと進めない場面があった
    • for文やインクリメントを使いたかった
      「PG0.5」のモードを追加してfor文やインクリメントを使えるようにしました

リンク