こんにちは、但野正行です。ご挨拶に代えてこの教室の狙いについてご説明します。
今まで、会社に入っていくつか研修というものを受けたことがあるかと思います。まずは新人研修から始まって、プログラミングの研修とか。数日間の研修を受けた結果、その内容について「分かった」「説明できる」というレベルに達しているでしょうか。
会社側からすれば、業務を休んで受けてもらうわけですから、2,3日の研修期間より長く取ることは出来ない訳で、それにあわせて教える側もそのようなカリキュラムにするわけです。その結果表面的な手法や方法論のみの紹介に終わってしまうという事になるわけです。
本当に身につくというレベルに達するには、その後の長い経験があってこそなのですが、その際に実は教わっていないかもしれない、根本の原理を知っているか否かで、その後のレベルアップにかかる時間が違ってきます。
教えている側からすれば、要望としては数日間でと言われるので、それにあわせるわけですが、そんなことよりもこっちのほうが大事というところが山ほどあるのですね。でもそれを教えていたのでは、セミナは成立しないわけです。
このたび教室を開設するのは、このギャップを埋めるためのもので、簡単に言えば社会人向けの学校という事になります。ただ、講師は基本的に私だけなので、私塾と言ったほうが近いですね。私が今まで経験したもの(開発、教育、研究)のなかで、是非皆さんにも同じように理解していただければと思うようなことをやってみたいと思っている次第です。
余談ですが、じゃあ何故いままでこういったことが行われないかといえば、
【講師】-- 一般的には、知識は豊富であるが、実装(開発)の経験不足
【開発者】 -- 実装の経験は豊富であるが、教えるという技術には乏しい人が多い。
また普段は教えてる暇がない。
【私】-- 一応上記の両方を中途半端ではなくやっている(つもり)の人。
ということからなんです。
最近実施したコース(例)
第1回目-HTML/CSS/JavaScript入門
■ Ajaxを実現するために必要な知識の習得
○ HTML,CSS 簡単入門
・HTMLとXHTMLについて
・テーブル、フォームタグの使い方
・CSSを利用した例について
○ JavaScript 簡単入門
・基本文法編
・オブジェクト指向
・DOMについて
・イベント処理
○ JavaScript プログラム作成
・入力フォームのチェックプログラム
○ Ajax
・Ajaxとは
・Ajaxを使ったサイトの紹介と仕組みの解説
○ GoogleMap API を使ってみる
・API Keyを取得し、自分の住んでいる場所を表示してみる
第2回目- WebAPIの利用
■ JavaScriptだけでのAjax
○ 関連知識
・データ形式(XML,JSON)
・クロスブラウザ対策
・文字エンコード
○ WebAPIの利用
・JSONPについて
・jQueryについて
・JSONPを使って、旅行情報検索(AB-Road)アプリの作成
第3回目-サーバ側アプリの開発①
■ Proxyサーバを利用したAjaxサイトの構築
○ サーバ構築
・Apacheのコンパイルとインストール
・自動起動、VirtualHostの設定
・PHPのコンパイルとインストール&諸所設定
○ Proxy機能構築
・PHPによるProxy機能の実現について
・各種データの取得方法について
・JavaScriptとの連携について
○ Proxy機能を用いたWebAPIの利用について
・Livedoor Weather Hacks を利用した天気サイトの構築
第4回目-サーバ側アプリの開発②
■ WebAPIの公開する
○ DBの導入
・MySQLのインストールと設定
・PHPの対応
○ Web+DBプログラム開発
・PHPでのDBアクセスプログラム(PDOを利用)
○ 一般的なセキュリティ対策
・XSS対策
・SQLインジェクション対策
○ 公開WebAPIの作成
・郵便番号データをもとに、公開APIを作成
第5回目-サーバ側アプリの開発③
■ 1回目から4回目までのまとめ
○ 以下の要件でアプリケーションを作成する
・GoogleMap 上からマウスをクリックした座標を取得し、コメントなどを付加して、DBに保存する
・登録されているデータの一覧を表示する
・サーバ側アプリケーションは、MVC分割モデルを元に作成する
第6回目~第8回
■ MASHUP AWARDS 4th へ向けて
○ どのようなAPIを使い、どのようなアプリを作成するかを決定
○ 決定事項を元に、グループごとに役割を分担し作成
○ 応募して、賞品・賞金をゲットするのを待つ
最近準備しているコース(例)
第1回 PHPをつかったWebサイト構築①
■ Webアプリケーション構築についての基礎知識
※ 環境 Windows上で、Apache+PHP(+MySQL) を使ったWebアプリを作成する。
○ HTTPプロトコルついての解説
・TELNETコマンドでのシミュレーション
○ PHPの文法、PHPにおけるオブジェクト指向
・変数、定数、制御構造
・スーパーグローバル変数
・配列、連想配列
・ファイルのインクルード
・関数の定義方法
・クラスの定義方法とその利用方法について
・マニュアルの見方
○ Webアプリケーションの特徴
・セッション管理の仕組み
・PHPにおけるセッション管理の方法
・MVC分割モデルについて
○ セキュアプログラミングについて
・XSS対策
・SQLインジェクション対策
・CSRF対策
○ DBアクセスの手法について
・DB固有のライブラリを使用した方法
・pdo ライブラリを使用した方法
○ 実施課題
・WebAPI(Livedoor天気、photo蔵)を利用したサンプルプログラムを元に、MVC分割モデルに基づくように変更する
・別のWebAPI(YouTube)を追加する
・データを取得する部分をブログパーツ化する
第2回 PHPをつかったWebサイト構築②
■ フレームワークを使ったWebアプリケーション開発について
※ 第1回で作成したアプリケーションをフレームワークを用いて構築する
○ PHPにおけるフレームワーク
・Zend Framework, Cake, Symfony の特徴の紹介
○ Zend Frameworkを使っての開発について
・動作原理について
・簡単なアプリケーションの作成
○ Smarty
・Smartyの特徴
・Smartyの利用法について
・plugin 開発
○ 実施課題
・第1回で作成したアプリを、Zend Frameworkで構築する
・表示部分は、Smartyを利用し、plugin 化できるところは、そのようにする
コースAの場合
第3回 Javaを使ったWebサイト構築①
■ Strutsを使っての開発
○ Eclipse, Tomcat, Mysqlの設定
○ Strutsアプリケーションの特徴
○ Action/ActionForm の使い方
○ JSTLタグライブラリについて
○ 課題
第4回 Javaを使ったWebサイト構築②
■ DIコンテナ(フルスタックフレーム)を使っての開発①
○ DIコンテナについて
○ O/Rマッピングについて
○ seasar について
○ Spring について
○ 課題
第5回 Javaを使ったWebサイト構築③
■ DIコンテナ(フルスタックフレーム)を使っての開発②
○ 課題
第6回 Rubyを使ったWebサイト構築①
■ プログラミング言語 Ruby について
○ Rubyプログラミング入門
第7回 Rubyを使ったWebサイト構築①
■ RoRについて
○ Ruby on Rails について
○ RoRを使ったアプリケーション作成
第8回 Rubyを使ったWebサイト構築①
■ RoRアプリ作成
○ 課題
コースBの場合
第3回~第8回
■ PHPで作成されているオープンソースアプリの拡張
○ OpenPNE
○ WordPress
○ GeekLog
○ XOOPS
○ ECcube
○ Zen Cart
○ SugerCRM
○ その他
あるいは
■ SnaleMart 開発
○ 既存プログラムの再構築と、機能拡張
定番コース(例)
1.プログラミング入門コース
● プログラミングというものがどのようなものかを学習する。
● 対象言語は C(C++) と Java として、それぞれでの基本的なことを学ぶ
・プログラムが動く仕組み
・変数とデータ型
・制御構造
2.オブジェクト指向プログラミング入門コース
● オブジェクト指向という考え方を浸透する。
● 対象となるプログラミング言語は C++ か Java。
● 対象言語のプログラミング入門は終わっているか同等の知識があること。
・オブジェクト指向って何?
・従来のプログラミングと何が違うか
・CとC++ではどのように変るか
・Javaだったらどうするか
・何をすれば、オブジェクト指向プログラミングといえるか
3.オブジェクト指向プログラミング応用コース
● オブジェクト指向プログラミングらしいプログラムを作成できるようになる。
● 対象となるプログラミング言語は C++ か Java。
● 【オブジェクト指向プログラミング入門コース】同等の知識があること。
・クラス間の関係を理解する
・カプセル化と言うけども
・継承をとことん使ってみる
・多重継承は便利?
・多態性は優柔不断
・自分で問題領域からクラスを定義することができるか
4.Webアプリ入門コース
● Webアプリが動いている仕組みを理解する。
● HTMLやJavaScript などのクライアントサイドの技術を習得する。
・そもそもWebアプリって何だ?
・いろいろなカタカナ言葉の説明
・HTMLって難しい?
・JavaとJavaScriptは違います
5.Wevアプリ開発実践コース
● Java ベースのWebアプリ開発の基本を学習する。
● 【Webアプリ開発入門コース】同等の知識があること。
・猫を手なずけよう
・設定やディレクトリ構成について
・Servletこそ基本
・JSPにすると何が楽になるか
・ServletとJSPの使い分け方
・コーヒー豆の便利な使い方
・MVC分割モデルってかっこいい?。
・Servlet/JSP/JavaBeansでの役割分担
6.Webアプリ開発応用コース
● セッション管理やDBアクセスといった必須内容について学習する。
● 【Webアプリ開発実践コース】同等の知識があること。
・セッション管理って何を管理する
・DBアクセスのためのいろいろな方法
・あなたは誰ですか
・ここらで一つシステムを作ってみよう
7.Linux入門コース
● Linux(Unix)というOSに関する知識と、簡単なシェルスクリプト演習
・いろいろな OS の違い
・コマンドって難しい・面倒?
・正規表現を使い倒す(倒される?)
・シェルってどんな貝殻
・スクリプトを使うとこんなに便利
8.Linuxサーバ管理・Webサイト構築コース
● Linux上でのいろいろな設定の方法や管理方法についての演習
●【Linux入門コース】同等の知識があること。
・ユーザ管理について
・ログ監視について
・ネットワーク設定管理について
・アプリケーションの導入や設定について
・DNSの設定
・メールサーバの設定
・Webサイト構築に必要なことについて
・安全なサイト構築のための設定について
9.LAMPベースサイト構築入門コース
● Linux+Apache+MySQL(or PostgreSQL)+PHP による Webサイト構築入門
● 各種設定や、PHPの基本文法を学ぶ
● 【データベース基礎コース】,【ネットワーク基礎コース】,【Webアプリ開発入門コース】同等の知識を有すること
・まずは、インストール&セットアップ大会!
・php.ini の設定について
・PHPの基本文法
・セッション管理方法について
・DBアクセス方法について
・マルチバイト処理について
・Mail送信機能について
・ちょっとしたサイトを作ってみよう
10.LAMPベースサイト構築実践コース
● Linux+Apache+MySQL(or PostgreSQL)+PHP による Webサイト構築実践
● モジュール分割、セキュアサイト、コマンドラインインターフェイス(cli)などについて
● 【LAMPベースサイト構築入門コース】同等の知識を有すること
・PHPで行う MVC 分割モデル
・クラスの活用
・セキュアWebサイトにするには
・cliでのバッチ処理
・メール受信による処理インターフェイス
・PDF出力
・梨はうまいか?
11.ネットワーク基礎コース
● TCP/IPネットワークについて理解する。
● 理論だけではなくて、実際にコマンドを使って確かめてみる
・そもそも、TCP/IP って良く聞くんだけど
・小包の中身はどんなもの
・IPアドレスは、何の住所
・プロトコルいろいろ
・ネットワークが繋がらない、その時あなたは
12.データベース基礎コース
● DBの考え方、構築方法、管理方法についての基礎的なことを学ぶ
● 具体的に、PostgreSQL、MySQL を用いての演習
・DBとファイルの違いについて
・SQLを理解する
・いろいろな制約
・検索を早くするためには
・クライアントツールの使い方
・トランザクションって何だ
・データが消えてしまうその前に
その他
【Webアプリケーション概説】
Webアプリケーションの概念とその開発に利用される技術を理解する。
従来型のC/Sシステムやホスト中心のシステムとの違いを把握し、Webアプリケーション開発のベースとなる技術について学習する。表現方法としてのHTMLやCSSに付いても触れる。
【Webアプリ応用】
セッション管理やデータベースとの連携方法を身につけるために実施する。
Webアプリケーションの必須機能であるセッション管理とデータベースアクセスについて学習し、より実際的なWebアプリケーション構築について学習する。
【オブジェクト指向概念とJava入門】
オブジェクト指向プログラミングの概念とJavaプログラミングの基本を理解する。
オブジェクト指向の登場の歴史的な背景、モジュール分割の方法論の一種であることを押さえ、従来型の手続き型プログラミングとメッセージ駆動型オブジェクト指向プログラミングの違いをしっかりと理解する。つまる所、そのオブジェクト志向の概念がコーティングテクニックの向上に繋がり、オブジェクト指向のメリットを享受するためには、パーツという資産を育てる意識が必要であることを理解する。その上で、プログラミング上、必要となる言語文法をマスターする。
【Java Servlet入門】
Servletを作成して、動作させるまでに必要なことを学習する。
Java Servletの構造や作成方法、応用的な利用方法を、実習を通して習得する。アプリケーションサーバーとしてTomcatを利用し、その上でServletの作成を行う。その際に必要な設定などについても学習する。
【JSP入門】
JSPファイルを作成して、動作させるまでに必要なことを学習する。
JSPの仕様と機能について実習を通して習得する。アプリケーションサーバーとしてTomcatを利用し、その上でJSPファイルを作成し、Webブラウザより動作確認を行いながら実習を行う。そしてWebアプリケーション開発でのMVC分割モデルを理解する。
【Javaベース オブジェクト指向プログラミング】
Javaを通じてオブジェクト指向プログラミング(コアテクニック4本柱:カプセル化、継承、多態性、メッセージ駆動)を理解する。
オブジェクト指向プログラミングの肝となる要素(カプセル化、継承、多態性、メッセージ駆動など)をJavaでどのように実現するかを学習する。
【EJB+Strutsアプリ開発実習】
効率的なWebアプリケーション開発と大規模化のための技術を習得する。
代表的なWebアプリケーションオープンフレームワークである、Strutsベースのアプリケーションの構築について実習する。また、大規模システム構築の手法として、フレームワークを用いたEJBアプリケーションについても学習する。
【MVC分割に基づいたWebアプリケーション開発】
Webアプリケーション開発の基本的な手法を身につけるために実施する。
Webアプリケーション開発の基本となる、MVC分割モデルを理解する。MVC分割モデルを理解することで、より効率よい開発方法やテストが行いやすくなることを実習を通して学習する。
【UMLを用いた設計】
オブジェクト指向に基づいた設計・開発手法について理解する。
オブジェクト指向の概念を再度確認し、その概念に基づく設計開発のための手法を学習する。その際に用いられる記法としてUMLについて理解を深め、そこから実際のJavaのプログラムへ変換していく流れを理解する。また、オブジェクト指向に基づいた設計の代表的なものをまとめたGoFのデザインパターンについても学習する。