Post on 20-Dec-2014
description
新人 Java プログラマーに贈る基礎知識 + α
2
アジェンダ
• Java (サーバーサイド)• HTML,CSS, JavaScript など(フロントエン
ド)• Linux (インフラ)• DB• セキュリティ
本当はここまでやる予定だった…
3
アジェンダ
• Java (サーバーサイド)• HTML,CSS, JavaScript など(フロントエン
ド)
やる気はあったけど発表時間とスライド作る時間が足らんかった。インフラさん本当にごめんなさい。
4
Java
5
概要• 1995 年 5 月 23 日リリース• 最新バージョンは 8 ( 2013 年 3 月 18 日リ
リース)• オブジェクト指向• 静的型付け• Write Once, Run Anywhere• 実行速度速め• 大規模開発向き
6
概要の中でも大事な項目をちょっと補足
7
オブジェクト指向ざっくり言えば、「処理や値もろもろを意味的にまとめる」為の概念。以下に挙げるようなメリットがある。
• カプセル化(隠蔽)• ポリモーフィズム(多態性)• 抽象化• 継承 など
まあ、世の中的には各項目異論反論あるのですが…
8
まあ、人によっても捉え方が変わる概念なので、
最初は雰囲気で理解できていればいいです。
詳しく知りたいなら次の本がオススメ
9
『オブジェクト指向でなぜつくるのか』平澤 章日経 BP 社
オブジェクト指向 (OO: Object Oriented) の誕生の経緯から利用するメリットなどまでについて詳しく書かれた書籍。OOP(Object Oriented Programming)で重要な知識が多数書かれている。読むと「 Java らしい書き方」や「 Java で書く理由」が理解できるようになるのでオススメの一冊
10
オブジェクト指向に関する基礎はこの本で OK ですが、本当にオブジェクト指向を理解したと言えるように
なるには
デザインパターン
の理解が不可欠でしょう。
これは、後で説明します。
11
静的型付け・動的型付け• 静的型付け → コンパイル時など、プログラム実行前に型が決まっている型システムのこと。 予めバグを察知できるので安全に開発できるが、固い書き方しなければならないので少々面倒なこともある。• 動的型付け → 実行時の実際の値によって型が決まる型システムのこと。 柔軟な書き方が出来るが、実行してみるまで型関係にバグがあるかコンピューターには判別がつかない。( IDE レベルでは型に問題があるかリアルタイムチェックするものも存在する。)
12
• 型についての資料
ITPro 『第 2 回 データの「型」とは何か?』 http://itpro.nikkeibp.co.jp/article/COLUMN/20090623/332478/?ST=develop&P=1
13
以上、大まかに概要が分かった所で、
早速、初心者には是非読んで欲しい入門書を紹介
14
「スッキリわかる」シリーズ
15
『スッキリわかる Java 入門 ・ 実践編』中山 清喬、国本 大悟インプレスジャパン
Java で抑えなければならないことを網羅的かつ非常にわかりやすく書かれた、迷わず推薦できる入門書。特に実践編には、仕事で Java を書く人なら知っていなければならないことでありながら他の入門書ではあまり書かれていないことが多数紹介されているので、現場でコードを書く前に一通り目を通しておくのをオススメします。
16
さらにサーバーサイドの入門書
17
『スッキリわかるサーブレット &JSP 入門』国本 大悟インプレスジャパン
5/7 に発売したスッキリわかるシリーズ、サーブレット &JSP版!他のスッキリわかるシリーズ同様ストーリー調でわかりやすくサーブレットと JSP の使い方を解説している。帯に書かれている通り、しくみとコツをスッキリ学べるのでオススメ
18
以上の本をマスターすれば基礎は完璧でしょう
19
ただ、これだけでは以下のような要素を満たすコードは書けません
“キレイ”“わかりやすい” “保守性が高い”
“オブジェクト指向的”etc …
20
もっと上を目指す方々へ。Java だけでもまだまだ次に挙げるような項目を理解しなければ
“一流のプログラマー”にはなれないでしょう。
21
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
22
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
24
皆さんは API リファレンスを読み物として読んだことがありますか?
何か問題あったら読む程度でしょうか?
そもそも読むという発想が無いでしょうか?
25
ナンセンス!(死語)
26
API リファレンスにはその言語で何が出来るか詳しく書いてありますし、その中にはみなさんが未だ知らぬ有用な機能も多数あるはずです。
なので、これを読まずしてコードを書くと、「その一日かけて書いたコード、 Java の組み込みクラスで出来るよ?」とか、「その100 行あるコード、本当は 10 行必要ないんだけど…」みたいなことになります。
つまり、読んでおけば時間の浪費を防げます。
27
さらに、組み込み API は一流の人たちが考えをこらして作り上げているので、処理に無駄がありません。
ですので、より良い処理効率を目指す上でも、車輪の再発明しないことが良いシステムを作る手だての一つになります。
(「勉強で1から処理を考えたい」とか「全く新しいものを作りたい」とかいう場合はもちろん除きます。あくまで仕事上の話です。)
28
ですので、言わせていただきましょう
29
API リファレンス読め!
30
標準 API リファレンスを一通り読んだら、
次はこれです。
31
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
32
Apache Commons
「 Apacheソフトウェア財団の傘下にある再利用可能な Java コンポーネントをまとめたApache のトッププロジェクト」のこと(Wikipedia より)
Java で一番有名な拡張ライブラリー集。標準 API見ても無い処理で、「汎用性がありそうな(過去に誰かしらやってるであろう)処理」はこのライブラリを見ると結構存在する。
33
Apache Commons の中にも色々種類があるのですが、一番メジャーなのは「 Lang 」でしょうか。StringUtils なんかは入門書でも当たり前のように出てきたりするので、見たことある人も多いのではないかと思います。
34
この、 Lang の StringUtils だけでもかなり便利なのですが、その他の Lang パッケージのクラスや、 Collections パッケージとか IO パッケージなどの中には超便利メソッドが多数存在します。(これだけで勉強会 3回くらいは余裕で出来る)
35
ですので、 Apache Commons も標準 APIと同様の理由から、一通り目を通しておくべきでしょう。
36
また、 Apache Commons の良い所は便利メソッドがそろっているということだけではありません。
これ、実装コードも全て API リファレンスのページで見れるんです。このコードは非常にキレイで為になるので、API だけでなく実装コードも読むべきです。
37
あとついでに Google Guava ってライブラリも為になるので、暇な時に調べてみましょう
38
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
39
コーディング規約プログラミングというものは、人によって自由な書き方が出来ます。変数やクラスの命名にしろ処理の流れの書き方にしろ、その他様々な要素をプログラマーが自由に決めることが出来ます。だけれども、自由気ままに書いていては他の人には読めないコードになったり、処理的に非効率なコードになったりします。ですので、仕事ではよく「コーディング規約」を定め、それに沿って書くようにしている所が多いです。
40
コーディング規約は組織ごとに定められていたりする為、非常に多種多様に存在しますが、その中でも以下のものは一度目を通しておいて損はありません。他にも色々探してみると面白いです。
• Google コーディング規約 リンク
• Sun コーディング規約 リンク
41
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
42
早速ですが、初心者には次の2冊がオススメ。
特に1冊目は必読です。
43
『リーダブルコード』Dustin Boswell 、 Trevor Foucher 著、角 征典 訳オライリー
内容は書名の通り、読みやすいコードの書き方について書かれた本。様々な実例を挙げながら、どのような書き方をすれば“誰にでも伝わる”、“分かりやすい”コードを書けるかについて紹介されている。さらにそもそもなぜキレイなコードを書かなければいけないかの理由もこれでもかと教えてくれる。仕事でコード書く人には必読
電子書籍
44
『良いコードを書く技術』 縣 俊貴技術評論社
メジャーな良いコードを書く為の技法をまとめた本。さっくり読めるボリュームなので、良いコードを書く技法を一通り概観したい時はこの本を読むとわかりやすい。ただ、各技法を使いこなすには適宜より詳しい専門書を読む必要はあるでしょう。
45
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
46
次に、テストについて
(単体、統合、システム ,… とかでなくテストコードの話)
47
テストと聞いてまず思い出すのは皆さんも学校で受けてきたテストでしょう。
もちろんプログラミングのテストもこういった同じ意味合いです。
48
ただ、以下の点において、この2つは決定的に異なります
学校のテスト: “要点を抜粋したもの”
プログラミングのテスト : “ そのシステムに求められる用件
を 網羅したもの”
(注:この意味合いでないことも往々にしてありますが、一口に“テスト”と言えば大体こういった意味合いです。)
49
システムの“用件”を“網羅”する。これはつまり見方を変えると
“テストコード” = “設計書”
ということになります。(わかりにくいですかね ^ ^; )
50
テスト駆動開発 (TDD: Test Driven Development) では、以上の様な概念を踏まえ、テストファースト(テストを先に書き、その後実行コードを書く)ということをします。
これはつまり、まず動作を保証するテストコード(設計書)を書き、次にこの設計書を満たす実行コードを書くということになり、より信頼性の高いコードを書き上げることが出来るようになります。
51
ちなみに、テストファーストの説明を読むとよく「まず失敗するテストを書きます」とか「まずテストを書き実行して、失敗したら成功です」みたいに書いてあって、「テストが失敗したら成功ってなんじゃい!」ってなることがありますが、これは、まず最初にテストを書くけど、その時点ではテスト対象となる実行コードが無いんだから当然テストを実行しても失敗に終わるよ、「もし実行コードが無いのに成功したらテストコードが間違ってるよ」ということです。わかりにくくて面食らうかもしれませんが、とりあえず書いてある通りに受け止めてればそのうちわかるようになります。(体験談)
52
他にもテストコードを書くことには
• テストを自動化できる(むしろこれがメイン?)
• コードの量を減らす• 疎結合にし、保守性を高める
といった効果もあるのですが、なぜ上記のようなことになるかの理由(特にした2つ)は各自勉強してみてください。
53
で、 Java 実際にテストコードを書く為の入門書。
TDD の入門書ではないので、これまで説明した内容は少なめですが…
54
『 jUnit 実践入門』 渡辺 修司技術評論社
Java のテスティングフレームワークである jUnit について書かれた(日本で唯一の?)本。テストに慣れてない人には正直分かりやすいとは言いがたいが、 jUnit で出来ることを一通り知ることが出来るので、 jUnit を使う際には常に傍らに置いておきたい一冊。
55
他にもテストには語るべきことがたくさんあるのですが、「 Java のテスティングフレームワークはそこまで進歩していない」 & 「進歩しているものもそこまで取り入れられていない」のが現状なので、今日はここまで
個人的には FluentLenium とか一般的になってほしいんだけどね…あと、 Ruby の FactoryGirl 的なの誰か作って
56
テストの観点(同値分割、境界値分析)とか、テスト項目の洗い出し方(ディしジョンテーブル)とかのレベルについては各自ググってください。それだけでも結構な情報量出るので、とりあえずそれで十分でしょう。(特に本読んだことないからマジ適当。オススメ教えて)
57
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
58
リファクタリングプログラムの外部から見た動作を変えずにソースコード内部構造を整理すること( Wikipedia )
Wikipediaに他にも概要が非常にわかりやすく書いてあるので (2014/5/12現在)、リファクタリングについて勉強するしないに関わらずこれは必読です。
59
『 Refactoring: Improving the Design of Existing Code 』Martin Fowler , Kent Beck , John Brant, William Opdyke, Don RobertsAddison-Wesley Professional
ファウラーらが書いたリファクタリングのバイブル。必読、といいたいところだが、原著は難しいし、日本語訳版もあるが絶版で入手が難しい。
ので、次にお勧めするのを買おう。
60
『 Java 言語で学ぶリファクタリング入門』結城 浩ソフトバンク クリエイティブ
ファウラーらのリファクタリング本を元に、よく使われる手法を中心に分かりやすくリファクタリングを説明した入門書。軽く目を通すだけでもコーディングが目を見張るほど変化するので、一通りコードを書けるようになった人には必読。
61
あと、さらにリファクタリングを極めたい人はこのサイトをチェック
62
REFACTORING.com
• HP: http://refactoring.com• ファウラーによる数々のリファクタリング手法を紹介する Web サイト。
『 Java 言語で学ぶリファクタリング入門』を読み終えたら一度目を通してみるといいかも
63
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
64
デザインパターン
「過去のソフトウェア設計者が発見し編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したもの」( Wikipedia )
65
『 Design Patterns 』Erich Helm, Richard Johnson, Ralph Vlissides, John GammaAddison-Wesley Professional
Gof(Gang of Four) と呼ばれる 4 人によって書かれたデザインパターンのバイブル。これまた必読と言いたいけれども難しくて言えないし、訳書版も難度が高い。極めたい人のみ読めば良いかなー、というのが個人的見解
66
『 Java 言語で学ぶデザインパターン入門』結城 浩 ソフトバンククリエイティブ
リファクタリング本と同様、結城浩さんによって書かれたデザインパターンのカタログ本。デザインパターン本としてはわかりやすい方だが、どういう場合にデザインパターン使えば良いか分かりにくい部分はあるので、初学者は次の本が一番オススメ
67
『 Head First デザインパターン』Eric Freeman, Elisabeth Freeman Kathy Sierra, Bert Bates オライリー
面白いストーリーにのせて軽快にデザインパターンを紹介していく入門書。どういう状況でパターンを駆使すれば良いかが非常にわかりやすいので、初めてデザインパターンを学ぶ人にはまずこれを読んでほしい。訳がおかしいとかの批判もありますが、文句あるなら原著を読もう。文字数は多くない本だからそこそこ英語読める人なら問題ないはず
68
• 標準 API リファレンス• Apache Commons• コーディング規約• 良いコードの書き方諸々• テスト• リファクタリング• デザインパターン• ガベージコレクション などなど…
69
ガベージコレクション「プログラムが動的に確保したメモリ領域のうち、不要になった領域を自動的に解放する機能である」( Wikipedia )
なくても問題無い知識かもしれませんが、知っておくとより処理効率の良いシステムを書けるようになります。
70
まずはこれを読もう
71
一般教養としての Garbage Collection
http://matsu-www.is.titech.ac.jp/~endo/gc/gc.pdf
GC の基礎的なことについてはこれで抑えられる。 Web 上で公開されているもので量もそこそこなので、仕事中に手が空いてやることが無い時にでも読むと良いと思います。
72
Understanding Java Garbage Collection
http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/
英語だが、わかりやすく Java のガベージコレクションのアルゴリズムを解説しているので、 JAVA の GC がどんなことをしているか分からない人は読むのをオススメします。
73
GC についてより高度な勉強をしたい人は次の本を買いましょう。
74
『ガベージコレクションのアルゴリズムと実装』中村 成洋 , 相川 光 , 竹内 郁雄 (監修 )達人出版会
数少ない(というか日本語の本としてはほぼ唯一の) GC の解説書。内容も網羅的で詳しいので、 GCについて勉強したい人は買って損は無い。ちなみに紙の本は絶版なので電子書籍版( 950円 +税。安い!)を買おう。
75
最後に一流の Java プログラマーになるための必読書。
難しい本なので、経験年数 2 年を越えてから読むので大丈夫でしょう。
(というかそれ以前に読んでも分からんのでは……)
76
『 Effective Java 』Joshua Bloch (著 ), 柴田 芳樹 (翻訳 )丸善出版
例えるならば「中・上級者の為のJava 解説書」Java の最も良い書き方を紹介している。初心者には多少難度が高いが、一流を目指すならばどこかで必ず読まなければならない、 Java プログラミングの必読書
77
あと、 Java の説明の締めくくりとして、
ちょろっとフレームワークについて
78
フレームワークWikipedia曰く、フレームワークとは「一般的な機能をもつ共通コードをユーザーが選択的に上書きしたり特化させたりすることで、ある特定の機能をもたせようとする抽象概念のこと」
よくわからない人は「お約束な処理をまとめることでコーディング量を減らし、プログラマーの労力を低減するためのもの」、くらいに思っとけば良いです。(それだけじゃないけど)
79
Java フレームワークSpring Framework
StrutsSeasar
Play FlameworkNinja Flamework
Dropwizard etc…
下 2 つは個人的趣味で書いてます。流行るかは知らん
80
フレームワークは話すとまた長くなるので、
とりあえず勉強するべきものを挙げると
“ Spring Framework”
になります。理由はシェアダントツ No.1 で
公式ドキュメントもそろってるから。
81
「シェアで選ぶのは“流行物好き”って感じがして何か嫌だ…」という人もいるかもしれませんが、「使ってる人が多い」ということはそれはつまり
・ 情報が多い・ バグがキチンと洗い出され修正されている
などといったメリットがあるので、プログラミング業界的には非常に重要な指標です。誰も使ってないようなものには重大なバグが放置されている場合もあるので、使う場合には注意が必要です。
82
あと、ドキュメント(説明書)は揃っていないと問題が起きても解決法が分からないので簡単に詰みます。詰むたびに手探りで解決法を探ることになりますが、そんなことしてるくらいならスクラッチ開発( 0 から作ること)した方がむしろ楽なのでは、となってしまうので、ドキュメントが揃ってないフレームワークを使うのはオススメしません。
83
逆に使ってはいけないフレームワークは以下のような特徴があるものです。
• ドキュメントそろってない• セキュリティが甘い• 公式サポートが終わっている(終わりそう)
• そもそも使いにくい(フレームワークなのに使いにくいとか本末転倒な話ですが)
Struts 、てめえのことだよ。ついでに Seasar もな
84
今回挙げたものの中で個人的には
Play FlameworkNinja Flamework
Dropwizard
の3つに頑張ってほしいですね。(俺の仕事を楽にする為に)
現状一般的なものはもう時代遅れ感が半端ないですし、そろそろ世代交代せねば。
85
以上、 Java
86
次、フロントエンド
87
フロントエンド
フロントサイド、クライアントサイドとか様々な呼ばれ方をするが、
要は画面に表示されるもののこと。
言語で言えば、 HTML, CSS, JavaScript(jQuery) などのこと
88
• HTML Webページの構造を書く為の言語
• CSS HTML とあわせて用いる。 Webページのデザインを書く為の言語
• JavaScript Webページに動きを付ける為の言語 (現状はもっと多様な用途があるが、まず最初に理解すべきはこのWebページを動的にする役割)
89
• jQuery JavaScript を簡単に記述する為に作られたライブラリ。これを使えば手軽に Webページに動きを加えることが出来ます。 また、 jQuery には UI操作に特化した「 jQuery UI 」、携帯端末に特化した「 jQuery Mobile 」などあります。 公式サイトには実際にいじれるデモもあるので、一通り遊んでおきましょう。
*ライブラリ:汎用性の高い複数のプログラムを、再利用可能な形でひとまとまりにしたもの
90
フロントエンド勉強法について
92
ドットインストールは 1 レッスン 3 分以内のプログラミング学習用動画をあげている、現代の日本人プログラマーなら誰でも知ってるほど有名な学習サイトです。特に CSS や JavaScript などは画面系の技術なので、動画での学習は本よりもわかりやすいでしょう。
ちなみに Java の動画もありますので、気になる人はチェックしてみてください。
93
さらに、 HTML/CSS でしたら次の本が個人的にはオススメ
94
『作りながら学ぶ HTML/CSS デザインの教科書』高橋 朋代 , 森 智佳子 SB クリエイティブ
非常に実用的な知識を簡単なブログを作りながら説明してくれる入門書。 HTML や CSS はゴリ押しでも画面を作ることが出来てしまうが、この本を読めば各要素の役割をしっかり理解して書くことが出来るようなる。ただ、全くの初心者には多少難しいかもしれないので、ドットインストールで HTML と CSS を一通り学んでから読むと吉。
95
JavaScript, jQuery に関してはまだ僕の中では決定版が無いのですが、初学者には次の本とかが分かりやす
いと思います。
96
『よくわかる JavaScript の教科書』たにぐち まこと マイナビ
プログラミング初心者からでもわかるように最初の方はかなり優しめに書いてある。タイトルには書いてないが、内容の半分くらいは jQuery 。内容はかなりざっくりなのでこの1冊で十分とは言いがたいが、読みやすい本なので JavaScript が初めての人は一度読んでみて損は無いでしょう。
97
JavaScript を極めたいなら次の一冊も読みましょう。
98
『 JavaScript 第 6版』David Flanagan (著 ), 村上 列 (翻訳 )オライリー
JavaScript のバイブル。ページ数は圧巻の 840ページ!極めたい人、 JavaScript の辞書になる本を求めてる人にはオススメですが、とりあえず Web画面が作れればいいという人はまずは jQuery をおさえてからこれを読むか考えましょう。電子書籍
99
さらに jQuery の本
100
『 Web制作の現場で使う jQuery デザイン入門』西畑一馬 アスキー・メディアワークス
jQuery の基礎から、実用的な用法まで学べる解説書。jQuery について一から学びたい人はこれを読んでおけば大丈夫でしょう。(自分がしっかり読んでないから適当な説明に…)
101
『 jQuery 最高の教科書』株式会社シフトブレイン (著 )SB クリエイティブ
多少色物感がある本なのだが、初歩的なことから最終的には最近流行の超オシャレな jQuery プラグインの実装まで説明しているので、基礎を抑えるだけでなく有用なプラグインを学びたいときにオススメしたい一冊
102
さらに、フロントエンドの勉強には
次のサイトもオススメ
104
CODEPREP
Web サイト上で実際にコードを書きながら学べるサイト。非常に丁寧に一からコーディングを教えてくれるので、一度やってみるのがオススメ。まあ、とは言ってもそこまで深い内容のレッスンはまだ無いので、現状はあくまで初めての言語を学ぶ際の足がかり程度。これからに期待してます。
105
ちなみに、 CODEPREP のように Web サイト上で実際にコーディングをしながら学べるサイトには「 Codecademy 」、「 Code School 」といったサイトがあります。どちらも英語なので難しいかもしれませんが、最低限読める人なら「 Codecademy 」は結構ボリュームもあって面白いと思います。
「 Code School 」は有料だし英語の解説動画を見た上でコーディングをするので個人的はちょっとキツい…
106
あと、有用なサイトをちょっとだけ紹介して、今日は締めたいと思います。
今日話し足りなかったことはまた別途何らかの方法で共有します。
107
• Qiita リンク
• StackOverflow リンク
• Codrops リンク
• Best of jQuery リンク
• coliss リンク
• はてなブックマーク リンク
• Hacker News リンク
• @IT リンク
108
ご清聴ありがとうございました