はじめてプログラミングの授業を受けた後に書いたしょーもないプログラムを振り返ります。
当時の思い出とともに見ていきましょう。
Table of Contents
最近話題になってますね
未経験からのソフトウェアエンジニアになろう系。
誰だって最初は未経験なので、そういう意味合いではどんな人にも世界は広がってるはずです。
私だって、ちゃんとエンジニアやってます。(ちゃんとできているのかはさておき、お金はいただいているので)
ただ、実際の就職はバイアスがかかったりしてチャンスに恵まれないことも多々あるかと思います。
自分も大学の専攻がまったくコンピューターサイエンスを掠ってもいなかったのでつらいこともありました。
これはそんな私がとりあえず何かプログラミングをやってみなきゃ!と焦って書いたのが、今回ご紹介するプログラムだったりします。
なので、本当に読むに耐えないコードです。
他学部聴講でC演習を受ける
自分みたいなバイタリティもなく、声も小さく、覇気のない人間にとても営業職なんてできない、ましてや金融系ソルジャーなんてできないなぁと思い、一発逆転を狙って飛び込んだのがプログラミングの世界でした。 (自分の学部は大手金融系の営業が主な就職先でした。)
他学部の授業を聞くことのできる仕組みが、当時の大学にあったので、とりあえずプログラミングとか、コンピューターサイエンスとかそういうキーワードの授業を片っ端から受講しました。
はじめてのプログラミングの授業Cでした。
Cの先生は優しかったです。
コンピューターサイエンスを何1つしらない私にも色々わかりやすく教えてくれました。
その先生が言ったことが私の人生を変えました。
授業にまじめに来てくれててこんなこと言うのも心苦しいんだが今時、Cなんかできてもねぇ。。隣でやってるRuby演習でも受けなよ~
衝撃でした。
その後、「プログラミング 求人」のキーワードでググったら確かにRubyが出てくるではありませんか。
ただ、悲しいかな。
Rubyの授業は別の授業とかぶってたため、諦めました。(二年後、ちゃんと受講しました。)
代わりに自分でRubyをお勉強しようかと思ったのですが、それならJavaScriptのほうが手軽でいいよーと理系のお友達に言われたのでJavaScriptをお勉強することに。
当時の私は、誰かが言ってることを自分で調べず鵜呑みにするタイプでした。
学籍番号に妙に執着する
今考えれば謎なんですが、大学の学籍番号のCD(Check Digit) の法則を知りたくなってた時期がありました。
お友達の代わりに授業に出てあげてたとき(代行というあれです。)に、出席カードが配られてそこに学籍番号を書くのですが、学籍番号は覚えていても、CDが思い出せず、適当に書いて代行がバレるという苦い思い出がありました。
そんなことしなくていいから
CDという値がエラー検知、エラー訂正に使う値という知識くらいはありましたので、じゃあ、このCDの計算規則が知りたくなったわけです。
お友達からある程度の数、あらかじめ学籍番号とCDのセットを教えてもらっていたため、バイトの合間、頭で色々考えてとある法則を見つけるにいたりました。
計算法則
バイト中に見つけた法則がこちらです。
まず、学籍番号の形式は下記のとおりです。
1A11B002 (架空の番号です)
1Aは学部に対応したコード, 11は入学年度(2011年), Bはわからん, 016は学科の名簿順っぽいです。
まずはA~Fまでの文字を数字に置換します。
| 文字 | 置換後数字 | 
|---|---|
| A | 1 | 
| B | 2 | 
| C | 3 | 
| D | 4 | 
| E | 5 | 
| F | 6 | 
まんまですね。
こんな感じになります。
11112002
その次に、
最左の1桁、左から3桁目を除いた6桁の各桁に桁数をかけて足しこんでいきます。
(学部の数的に1A~1Fで学部を表現できる&大学に10年以上いないだろうということでCD上不要な桁を取っていると思われます。多分。)
つまり最左桁を抜いたので、2桁目から足し算しますが、こちら2桁目として掛け算します。
1×2 + 1×3 + 2×4 + 0×5 + 0×6 + 2×7 = 27
CD値は1桁なので11で割ったあまりを出します。よくやるテクニックですね。
27 ÷ 11 = 2あまり 5
よっしゃ!5や!と思ったら残念。これの11の補数みたいなものを取ります。
11 - 5 = 6
そうです。 6がCDとなります。
こんなのどうやってわかるんだよーって思うのですが、当然自力で解ききれませんでした。
理系のお友達に色々ヒントをもらい、解決まで手伝ってもらったのをよく覚えてます。
はじめてのプログラミングはこれをJavaScriptで書いたよ
今見ると大変ひどいコードですが、この法則を世に広めたくて、計算できるサイトを作ってみようと思いました。
そして書いたコードが下のHTMLとJavaScriptです。
今考えたら悲しいくらいひどいコードなんですが、全くの未経験で書いたんです!!許してください!!

あまりにひどいコードだったのでコメントで赤ペンしてます。
<html>
<head>
  <meta charset="utf-8" />
  <title>早稲田CD計算機</title>
  <script>
  function calcCd(input_check_digit){
    var input_cd = input_check_digit;
 //キャメルケースとスネークケースが混在。ムカつく
    var split_cd = input_cd.split(""); //桁をsplitで分割したのはよくできました
    var answer;
    answer = 11-(split_cd[1]*2+split_cd[3]*3+split_cd[4]*4+split_cd[5]*5+split_cd[6]*6+split_cd[7]*7)%11
    return answer;
  }
  function replaceSn(inputN){
 //関数名が意味不明(Snってシリアルナンバー?)
    var input_check_digit = inputN
    after_cd = input_check_digit.replace("A","1");
 //頭悪い実装・・。まぁ愚直ですね
    after_cd = after_cd.replace("B","2");
    after_cd = after_cd.replace("C", "3");
    after_cd = after_cd.replace("D", "4");
    after_cd = after_cd.replace("E", "5");
    after_cd = after_cd.replace("F", "6");
    return after_cd;
  }
  function goAnswer(){
    var input_check_digit = document.getElementById("input_check_digit").value;
    var regex = /^[A-Z0-9]{8}$/;
 //未経験にしては優秀。ちゃんとバリデートしている。が、中途半端。
    if(!regex.test(input_check_digit)){
      alert("学籍番号入れてね");
      document.getElementById("input_check_digit").value = "";
    }
    document.getElementById("answer").value = calcCd(replaceSn(input_check_digit));
  }
  </script>
</head>
<body>
  学籍番号を入力してね 例:1A11A001<br>
  <input id="input_check_digit" type="text" />
  <input id="calc_cd" type="button" value="計算!" onClick="goAnswer()"/><br>
  答え<br>
  <input id="answer" type="text" />
</body>
</html>結論
結局このプログラミングは何も役に立たなかったのですが、この業界に進もうという覚悟の現れがあふれた瞬間でした。
図書館でMac片手に色々調べながら動くものができた快感を今でも覚えてます。
その後はプログラミングよりはLinuxとかネットワークに興味を持っていくことになるので、就活も全くプログラマー的な感じでは進まなかったです。結局。
今こうして、プログラミングもする仕事をしているのですが、昔書いたコードを見てとりあえず何か新しいことへ踏み出す大切さを改めて思い出しました。

