こんにちはー!ニアです。
このブログなどでプログラミングやアプリ開発についてのノウハウを発信している私ですが、大学院では電気系の専攻(研究室はデジタル信号を扱った情報処理系)に所属しています。
今回は、電気系学科に所属する私がプログラミングやアプリ開発が好きになるまでのことを、自分の高校時代から振り返って思い出しつつ書いてみます。
目次
1. 私がよく使用している言語
C#
大学2年の頃からずっと独学しており、現在最も使用している言語です。主にWindowsアプリの開発やXamarinを利用したモバイルアプリのプログラミングなどに使用しています。最近では、大学院の研究のために作成しているシミュレーションプログラムにも使用しています。
C++
大学時代に所属していたサークルの班活動にて、RPGゲームの制作するためにオブジェクト指向の勉強もかねて使用していました。それ以外にも、授業の課題やゼミナール、卒業研究で使用するためにC++でプログラムを作成していました。
C
大学1年の頃に受けた、情報処理の授業の実習で使用していました。現在は情報アシスタントとして、学科の授業の間接的なサポートをしています。
PHP
大学4年の頃にWordPressをはじめたのをきっかけに、テーマのテンプレートやプラグインなどを編集するために使用しています。
HSP
大学1年の頃、GUIアプリ開発の勉強をするために使用していました。
2. 初めてプログラミングに触れた日
私が初めてプログラミングに触れた日は、高校時代に参加したオープンキャンパスでの模擬授業の時です。そこでCOBOLを使って「身長と体重を入力してBMIを求め、診断結果を表示する」プログラムを作っていました。
はじめは、授業で渡された資料を読みながらコーディングし、プログラムを実行していたのですが、
display文の中身をちょっと改造してみよう。
と思い、BMIの判定結果を表示するdisplay文の中身を改造し、ちょっとフレンドリーな表現にしてみました。
作成したプログラムを弄って自分好みの動作に改造するのがとても楽しく、模擬授業が終わるまで夢中になっていました。
3. 高校時代
高校時代では、情報の授業でドリトル言語を使ったプログラミングをしていました。命令が日本語なので、名前から動作を直感的に想像しやすかったです。他にもタートル(亀)オブジェクトの分身を作り、それぞれに役割を与えて動かしたり図形を描いたりする操作をするという概念が面白いです。
授業の中で、ドリトルを使ったプログラムを作成するという課題があり、私は風車の動きを再現したプログラムを作成しました。
風車を回すためのギミックとしては、風車の羽の図形を描く時に、描きはじめの位置が風車の軸となるように描画し(図形を回転させる命令を実行した時、図形の描きはじめの位置を中心に回転するためです)、タイマーを利用してその図形を一定時間ごとに少しずつ回転させます。
苦労することはあまりなく(強いて言えば、エラーメッセージからエラーの原因となっている場所を見つけるのが大変でした)、むしろ、
と、動作を想像して試行錯誤しながらプログラムを作るのが楽しかったです。
4. 大学時代
4.1. 約1年ぶりのプログラミング
大学1年の頃に受けた情報処理の授業の実習で、C言語を学びました。授業では、エディタとコンパイラの使い方からはじまり、文字列の表示、算術演算と変数、条件分岐、繰り返し、配列、関数、ポインタを学びました。
以下は最初の実習で書いたC言語のプログラムです。
#include <stdio.h>
int main( void ) {
printf( "○○\nUniversity" );
printf( "○○大学理工学部\n" );
return 0;
}
printfは画面に文を出力する命令で、改行するには「\n」を入れればいい・・・、
ということは、「\n」を「University」の後に移動すれば、「○○University」が1行で表示できる!
授業でプログラミングをしていた時は特に難しいと感じず、むしろ全体の動作の仕組みとprintfの機能を学び、値やコードを少し変えて、課題を楽しみながら解いていました。
4.2. 大学の授業だけではもの足りず
授業の実習で久しぶりにプログラミングをしたら、高校時代の授業でプログラミングをしていた時のワクワク感が蘇ってきたのです。
でも、授業時間だけでは物足りない!もっとプログラミングをしたい!
と、授業でのプログラミングできる時間の少なさに物足りなさを感じ、私は新入生向けのプログラミング講習(ソフト講習)があるサークルに入り、また自分の個人PCにC言語の開発環境をインストールして、自分から進んでプログラミングをしていました。おかげで、入部したサークルで仲間ができ、情報処理の授業の成績は最高ランクのSを取ることができました。
4.3. GUIアプリも作ってみたいです
今まで授業などでやっていたのは「キーボードから値を入力して、処理を行い、結果をコンソール画面に表示する」ものでしたが、1年後期の頃のある日、サークルのソフト講習でDXライブラリを使ったプログラミングをしていた時、ふと私はGUIアプリを作ってみたいと思い立ちました。
試しにC/C++でフォームアプリのプロジェクトを作成してみたものの・・・、
ウィンドウを作成するのに必要となるコードがコンソールアプリや、DXライブラリを使ったアプリの比ではない程多く(特にウィンドウメッセージ関係が煩雑に感じました)、当時の私はC/C++でGUIアプリを作るのは断念しました。
しかし、GUIアプリを作りたいという希望を諦めなかった私は、それをもっと簡単に開発できそうな言語をインターネットで調べ、HSP(Hot Soup Processor)というプログラミング言語に出会いました。
HSP言語で書かれたプログラムのサンプルコードを見てみたところ、何も命令を書かなくてもウィンドウを作成でき、やりたい処理を実装することに注力できるところに魅力を感じ、HSP言語でGUIアプリのプログラミングをすることに決めました。
HSP言語で、ミュージックプレーヤーやタイマー、スクリーンセーバーなどを作りながら、GUIアプリのプログラミングを学びました。
最初に作成したのは、プレイリストに登録した音楽を再生するジュークボックスアプリです。当時MCIなどの音楽再生用のAPIを知らなかった私は、音楽を再生した時の時刻と現在時刻との差からシーク位置を求めて、音楽再生を制御していました。
後に、MCIを利用したミュージックプレーヤーを作成しました。
また、プレイリストファイル(m3uやwpl)の読み書きのために、HSPの標準機能だけでなく、XMLファイルを扱うCOMオブジェクト(XMLDOM)を利用していました(XMLDOMを学んだおかげで、C#でプログラミングをする時、.NET FrameworkのXmlDocumentクラスをすぐに使いこなすことができました)。
作成当時Windows 8に興味があり、ロック画面風のスクリーンセーバーを作成していました。スクリーンセーバーが開始してから5分経過すると、ディスプレイへの焼き付き防止のために、画面上を黒で塗りつぶすように工夫しています。
シンプルなタイマーアプリです。
HSP言語で学んだ知識を活かして、大学2年の夏休みに、新入生向けのロボットコンテストの模擬戦で使用するタイマーアプリ(Chronoir Robocon Timerのプロトタイプ)を開発し、サークル活動の円滑な進行に貢献しました。
4.4. はじめてのチーム開発
2年になり、サークルの班活動で、ソフトウェアの開発を行いました(メンバーの人数は、私を含めて3名です)。テーマは「ダンジョン探索してモンスターを倒し、お宝を集めるRPGゲーム」で、開発言語とフレームワークはC++とDXライブラリです。私が担当したのはダンジョンのフィールドとゲームのシナリオで、フィールドでは通路や壁などの情報の値が書かれたCSVファイルを読み込み、2次元配列に格納してマップを構成していました。
通路と壁だけでなく、触れるとダメージを受けるトゲ床や、矢印の方向へ強制移動するトラップ、1つ下のフロアに移動する落とし穴などの仕掛けを作り、それらを組み合わせて、ダンジョンならではの謎解き要素を実装しました。
プロジェクトは途中までは順調に進みましたが、プログラムの結合テストの頃に、
あと、戦闘で使うアイテムも導入したいな~。
と、追加の機能を実装する必要が生じ、計画時の設計通りに進まないことがありました。そこで、必要な機能を優先順位を決めて(例:今回のプロジェクトの目的は「C++言語を使ったオブジェクト指向プログラミングの学習」と「チームでの開発」なので、敵キャラのAI機能の実装は見送りました)、文化祭までにゲームとして動作できる状態まで完成しました。
この活動によって、オブジェクト指向プログラミング言語を使ったコーディングの記法を学び、チーム開発の楽しさと完成した時の達成感を味わうという経験を得ました。
4.5. C#との出会い
大学2年の前半までは、GUIアプリを作るのにHSP言語を使用していましたが、スライダーやタブなど標準では用意されていないコントロールを使用する時、WindowsのAPI(Win32 API)を直接操作する必要があり、高機能なGUIアプリを作成するには、HSPでは限界を感じてきました。
そこで高機能なGUIアプリを作るのによさそうな言語を探し、C#とJavaが候補に挙がりましたが、C++でプログラミングしていた時に使い慣れたVisual Studioで開発できるということでC#をチョイスしました。
はじめはC++とのコーディングスタイルの細かな違いに戸惑いましたが、C#を始めるに当たり書籍やインターネット上の記事を読みつつ、プログラムを作成することでC#でのプログラミングスキルを身に付けることができました。
◆ C#のプログラミングの学習で活用した、書籍及びインターネットのコンテンツ
- 独習C# 第3版 – ハーバート・シルト 著、矢島聡 翻訳・監修 – 翔泳社
- Visual C# 2010 パーフェクトマスター – 金城俊哉 著 – 秀和システム
- Visual C# 2013 パーフェクトマスター – 金城俊哉 著 – 秀和システム
- NET Framework クラス ライブラリ- Microsoft
- C#によるプログラミング入門 – ++C++; //未確認飛行(@uncpp氏)
- .NET Tips – DOBON.NET
C#でのプログラミングの基本を学んだ後、Windowsフォームアプリケーションでいくつかアプリを作ってみました。
こちらは最初に作った、ただのメモ帳です。
こちらはタイマーアプリ(C#、フォームアプリ版)です。時分秒を表すリング型インジケーターは、中心部を明るい色、端を暗い色でグラデーションにしてネオンサイン風に仕上げています。
4.6. GUIアプリ開発はWPFへ
C#のフォームアプリでGUIアプリ開発の勉強をしていた時、UIのコントロールをより自由自在にカスタマイズできる「WPF(Winodws Presentation Foundation)」というフレームワークに興味を持ち、WPFによるGUIアプリ開発の勉強も始めました。アプリを作るならデザインにもちょっとこだわりたい。
「連載:WPF入門 – @IT」などを参考に、最初はXAMLの書き方やフォームアプリとの違いを学び、UIとバックエンド処理を分離可能にする「データバインディング」やコントロールを配置を決めるためのレイアウト用パネルの使い方などを学ぶことができました。
特に驚いたのが、リストボックス各要素に複数のテキストボックスを配置したり、ボタンの背景に動画を流したりと、HSPやC#のフォームアプリでは考えられないカスタマイズができるということです。
学んだ知識を活かして、大学3年の夏頃に、HSPで開発したロボコンタイマーをWPFに移植しました(Chronoir Robocon Timer)。チーム名を選択するコンボボックスには、試合中は単なるテキスト表示(トグルボタンが非表示)になる仕掛けを施しており、1つコントロールで2つの役割を持たせています。
将来はUWP(Universal Windows Platform)にも移植してみたいです。
今ではデスクトップアプリを開発するメインのフレームワークとして使用しています。最近は大学の情報アシスタントで毎回書いている日報を作成するアプリを作っています。そろそろ、情報アシスタント内でシェアしようかな。
4.7. IT勉強会で新しい仲間との出会い
大学4年の秋頃にプログラミング生放送主催の「カレンダープログラミング プチコンテスト」に参加したことをきっかけにIT勉強会に興味を持ち、12月20日の同団体主催の「プログラミング生放送勉強会 第32回@GMO Yours」に参加しました。
勉強会初参加&初ライトニングトーク(LT)でとても緊張しましたが、内容が面白いという感想をもらい、また勉強会のセッションや他の参加者のLTの内容も大変興味深く、さらに勉強会の懇親会で他の参加者と楽しくお話することができました。
それ以来、興味のあるIT勉強会に参加して、新しいことを色々学んでいます。
4.8. インプットのみから情報発信へ、Web系の分野にも触れてみる
と思い、大学4年の秋頃にWordPressでブログを始めました。WordPressをチョイスしたのは、サイトのデザインや機能を自由にカスタマイズできるからです。WordPressは初心者にとって(特に環境構築で)難しいという噂があったのですが、MicrosoftのWebMatrixによるWebデプロイ機能のおかげで特に苦労することなく、ブログをはじめることができました。これをきっかけにテンプレートやプラグインをカスタマイズするためにPHPを勉強しています。
現在はConoHaに移行し、KUSANAGIによる高パフォーマンスを堪能しながらLinuxサーバー関連の勉強もしています。
ブログ以外にも、Qiitaで記事を書いたり、GitHubにソースコードをアップしたりして、情報発信する量を増やしています。
5. 今までプログラミングをして、感じたこと
今回は、電気系学科に所属する私がプログラミングやアプリ開発が好きになるまでのことを、自分の高校時代から振り返って思い出しながら、書き綴りました。
今までプログラミングをして感じたことは、以下の3つです。
- 私はITが好きで、特にプログラムやシステムの動作の仕組み(「からくり」)に面白さを感じ、自分で作り上げるのも好き
- ある方法では実現できなくても、別の方法からアプローチするという手があるということ
- アプリが完成した時に達成感を感じる
完成したアプリをユーザーが実際に使ってみて、「使いやすいアプリを作ってくれてありがとう」などと感謝された時は最高です。
それでは、See you next!