今からはじめるプログラミング0.1(いまさら基本まとまってないまとめ)

調べておくといいこと。これをまとめておきます。キーワードというか。

 

「2次元配列」「レンダリング」「スプライシング」「データ設計」

まず「フィールド」とか「マップ」を構成する技術?てきなもの。

マップをデータとしては「2次元配列」としてます。草原を「1」、海を「2」でつくった「2次元配列」ですが、画面で表示されているのは、対応する草原の画像と海の画像です。Tableの値、データとして持っている数値をRendererによって判断して、画像を「レンダリング」している。この実データを小さく持って、実際の表示は少ない画像からレンダリングするという考え方というか技術はゲームを開発する技術(知識)としては必須?なのではないだろうか。

実際は複数の画像をまとめて読み込み「スプライシング」したものを使用することで「メモリ」などの「リソース」の節約、処理速度を向上させたりしている。(と思う・・・実際のゲーム開発現場は知らないので。)

この実データを小さく、表示は別に・・・というような考え方は、データの圧縮というか、データを設計する上で業務アプリケーションでも必須の技術、知識で、「データ設計」の中で区分・コード定義としてコード化した値とその意味を定義しておく。プログラムにおいては定数として使用することが多く、Javaの場合、インターフェースに定数を定義していく方式を使ったりする。でもインターフェースに定数を定義していくのは、昔の言語の習慣ではないかと思ったり思わなかったり。

性別として男と女しか区分がないとしてbooleanで定義してしまっているアプリは修正をしているかもしれない。大抵の場合、integerで定義すれば事足りるけれど、もっと小さい値でという場所もあるかもしれない。

 

コンポーネント」「イベント」「ストーリーボード」

画面の開発について、最近の新しいJavaandroidでのJavaではiPhoneとかと同じで画面がすでにあって、そこにボタンやテキストボックスなどの「コンポーネント」を配置、「イベント」が発生する上でプログラムをコーディングしていくスタイルになっていますが、そもそもVBなどでは昔から、そんな感じのスタイルになっています。Javaが遅れている、ということでもなく、eclipseにはない?(あるかもですね)ですがJBuilderという開発環境にはありました。ただ仕組みを知ってしまうと、プログラムを書いた方がわかりやすい気がしている(僕だけかもしれないですが)し、処理速度が遅くなるので使用していません。

iPhoneアプリだと「ストーリーボード」というやつでしたっけ?まぁ、そんな感じです。

 

「クライアントサーバ」「フルスタックエンジニア」

WEBアプリケーション全盛?ですが、画面アプリもないわけではなく、ネットワーク前提ですが、「クライアントサーバ」、いわゆる「クラサバ」で今も工場のラインなどでは、画面アプリは稼働しています。

やはり画面を作る上で、「タグ」という別の言語を構成することを考えながらプログラムする必要がないので、WEBアプリケーションを作るよりも難易度が低い、ということもあると思います。WEBアプリケーションは実際に不特定多数のアクセスを想定したりしなければならず、かなりいろいろな技術の複合アプリケーションです。よって、実際にコーディングと関係なくても、知識としてはしらなければ、何が起こるかわからない、というようなアプリケーションであり、HTTP、HTTPsWeb2.0とかSSLとかストリーミングとか、「フルスタックエンジニア」というWEBアプリケーション(システム)についてほとんど理解して開発できるエンジニアを表す言葉からもその技術の範囲の広さが難易度の高さがわかると思います。ネットワークエンジニア、プログラマー、UI・UXなどなど、技術者を分類するものをまた統合したようなものですので、まぁなかなか難しい世の中ではありますね。

 

「バージョン管理」「文書管理」

話は変わって、開発環境について、eclipseを理解すれば、VBやVCなどのVisualStudioもほぼおんなじですかね?あとはプログラム(だけにとどまらない)の「バージョン管理」、JavaだとトータスSVNですか?Subversionか。MS系でいえばVSS(VisualSourceSafe)とか。

プログラム(ドキュメント)がどのように更新されていったか履歴をみたり、修正前に戻したり。

僕みたいな記憶障害があると少しの修正でコミットしてしまうので、管理者からは煙たがられるし、よく怒られるので、度を過ぎた管理方法は正直やめてほしいと思うのですが、作ってきたものが失われる、ということを防ぐためにも、ほぼ全ての現場で使用されていますね。でも最近は「GitHub」が全盛ですかね?

あとよく使うツールとして、WInMargeという2つ(もしくはそれ以上)のファイルを比較表示するアプリは便利ですね、テキストエディタも昔の人ならVIとかterapadやsakura、秀丸など。秀丸の「grep」などは重宝しますね。(もとはunix系のコマンド)

 

正規表現

正規表現」も少しずつ勉強すると何かと便利です。途中で鬱がひどくなって降りたプロジェクトで正規表現で変換テーブルみたいなものを作って、あるデータからこのデータへみたいなものをつくったり。

「*」「?」とかはgrep的、正規表現な文化かな?など?ネットワークというかデジタルの文化のある意味、アイドル的な感じになってませんか?(なってないかもですが。)

僕なんかはあまり深く掘り下げていないので、ダメダメですが、「インフラ系」のシステム開発ではかなり深く利用されています。

数十台、百台規模のサーバ群を管理するとか、メーカー系のプロジェクトではハードと密接にからむプログラムはそれはそれで面白いです。

 

細かい(プログラムの)話にまた戻ってJavaの基本だろ?と思うクラスについて、

「Stirng/StringTokenizer」

スペルが間違っていたらごめんなさい。いわゆる「文字列」というものの操作は一通り知っておくと細かいプログラムが面白くなります。僕はStringTokenizerというクラスをしらなくて、自作してしまったことがあります。要は文字列を区切って抽出する、操作なのですが、区切る文字列と文字列の長さ、区切ったものを配列でもったり、なんて、少し考えればプログラムできるけど、実際1からプログラムするとめんどくさい、みたいなことができます。

Vector/List/ArrayList/Iterator

後述の「Map」とセットの方がいいかもしれませんが、連続したデータという意味ではちょっと違う分類かな、と思ってこうしました。ArrayListで大体事足りると思いますが、Iteratorを抽出して「まわす」ほうがいい、とか言われたりすることもあるので、一通り知っておけばいいと思います。僕はインデックスループで十分いいと思っているのですが、まぁそのプロジェクトの文化というか、参加している人の趣味というか。

「Map/Hashtable/HashMap/Set」

マップというのはキーとなる何かと使いたい何かをセットにして保持しておくことのできるクラスで、キーは大体String(文字列)を指定して、そのキーの表す「構造体」を保持しるような感じで使用する。たとえば、ユーザーアカウントであれば、メールアドレスをキーに、名前や性別、住所などを保持するオブジェクト(だいたい構造体)を登録しておける。アプリケーションを階層構造で作る場合、画面(ビューとかプレゼンテーション層とか)で入力されたものをマップに保持して、コントローラ(制御層とか?アプリケーション層かな・・・クラサバの話かも)を経由して、ロジック、データ管理層へ渡し、永続化するためにSQLへ組み直して、データベースへ登録する。最も、最近はWEBアプリケーションでは、Javaのマップの話ではなく、JavaScriptよりの話で「Json形式」でリストに保持するような感じの方が流行りかもしれない。こういう技術というのは統合したり別れたりで、忙しいですね。

単純にいろんな話を混同しているだけかもしれない。。。ごめんなさいね。

まぁ基本となるクラスはとりあえず思いつくところはこんな感じです。話の中にしれっと登場していますが、「構造体」というものも理解しておくといいですかね?あとプログラミング的なことになりますが、「再帰」とか。フォルダやファイルを扱うアプリケーションを作るときによく使った気がします。

僕はあまり「スレッドプログラミング」は業務として作らなかったので、プログラム例を提示できませんが、データベースとのコネクションを管理するコネクションプールを自分で作ってみよう、と思って、スレッドを使ったことがあります。要は別の流れで、処理されていくようなプログラムですが、パラレルで処理したいというときに使用するようですね。自分で作った「コネクションプール」はMySQLとかPostgresSQLでは動いたのですが、もっと手軽なHSQLDB(?だったかな?)ではうまく動かなかったです。プログラムは残ってないです。HDDのクラッシュというのは痛いですね。

シェルとかバッチについて、パソコンや大きなコンピュータを利用するにあたって、オペレーティングシステムというものがインストールされており、そのシステムを利用するためのコマンドがあります。

それらのコマンドをまとめて実行するためのものがUnixとかLinuxではシェル、Windowsではバッチというものになるのですが、これ自体プログラムといえば、プログラムみたいなものです。

その他、キーワードが思いついたら追記していきます。