アフィリエイト広告を利用しています


スキル無しのシステムインストラクターから、システムエンジニアへの転身日記。
◇◆◇ 2013年取得資格
LPICレベル1
LPICレベル2
LPICレベル3 Core
LPICレベル3 Speciality 302
LPICレベル3 Speciality 303
LPICレベル3 Speciality 304

Cisco CCENT
Cisco CCNA

Java SE 7 Silver
Java SE 7 GOLD

OSS-DB Silver

◇◆◇ 2014年取得資格
HTML5 Professional レベル1

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

資格 LPIC に挑んだ学習の日々!

このブログを始めたきっかけとも言えるスキルアップのために挑んだ資格試験の
受験の日々を見やすくするためのページです。

当ブログのアクセスは、ほとんどがLPIC学習者でありながら、
Java関連の記事が多いので、学習記録だけ見たい方のためにまとめました。

余裕ができたら、もうちょっと充実させていきますね。

lpic1

LPIC レベル1 101 【LPIC試験対策】LPI-JAPAN主催のLPICレベル1技術解説無料セミナー受けてみた。
【LPIC試験対策】模擬試験1
【LPIC試験対策】模擬試験2
【LPIC試験対策】模擬試験3
【LPIC試験対策】LPICレベル1合格までに使った教材 まとめ
【LPIC試験対策】本番 LPI Level 1 Exam

LPIC レベル1 102
【LPIC試験対策】さっそく始める102対策!
【LPIC試験対策】102 学習経過
【LPIC試験対策】102 受験日変更!!
【LPIC試験対策】LPICレベル1合格までに使った教材 まとめ
【LPIC試験対策】合格!LPICレベル1!


lpic2

LPIC レベル2 201
【LPIC試験対策】【LPIC試験対策】201 カーネル対策
【LPIC試験対策】LPICレベル2技術解説無料セミナーを受けてきました。
【LPIC試験対策】201 学習経過
【LPIC試験対策】201合格!前日の勉強だけで+100点の奇跡[前編]
【LPIC試験対策】201合格!前日の勉強だけで+100点の奇跡[後編]

LPIC レベル2 202


lpic3

【LPIC試験対策】201,202続けて合格!点数も向上!次はレベル3の301に突入! [前編]
【LPIC試験対策】201,202続けて合格!点数も向上!次はレベル3の301に突入! [前編]

LPIC レベル3 301
【LPIC試験対策】301 の勉強を始めてみた。&今後の資格取得スケジュール。
【LPIC試験対策】301 2週間の学習で合格!これでレベル3になったわけだ。

LPIC レベル3 302
【LPIC試験対策】302 受験準備中! 304だってかじってますよ!
LPIC 302

LPIC レベル3 303
【LPIC試験対策】303 満点合格 すごく簡単。残すは304のみ。

LPIC レベル3 304
【LPIC試験対策】302 受験準備中! 304だってかじってますよ!
【LPIC試験対策】304 高信頼システム構築標準教科書を使ってKVMをインストールしてみた 知識を詰め込むぞの巻
【LPIC試験対策】304 高信頼システム構築標準教科書を使ってKVMをインストールしてみた モジュールの追加につまずいたの巻!
【LPIC試験対策】304 高信頼システム構築標準教科書を使ってKVMをインストールしてみた 実際に起動させるの巻
【LPIC試験対策】304 高信頼システム構築標準教科書を使ってKVMをインストールしてみた ブリッジ接続に挑戦の巻!
【LPIC試験対策】304 試験合格!100日の戦いの末LPIC全制覇!

JavaScript 始めました。

学習書籍は、こちら。




JavaEEの学習書籍としてお世話になった山田さんの著書で、個人的には、とても読みやすく相性が良い。
さらっと何となくJavaScriptができればいいな。という人には、他の薄い本がよいと思うが、
以下に書くような、私と同じような感覚で「JavaScriptって何?」という人で、しっかり学びたい。
Ajax!Ajax!な人は、是非お勧め。細かい入門知識から、本格的に学ぶことができる。


今までの私自身のjavaScriptの知識はと言うと、なんとなく使った事はあるけど、


    • 使うときは基本的にサイトのコピペ。それ以上の事は出来ない。
    • JavaScriptと言うからには、Javaの仲間?
    • クライアントサイドだよね。負担は操作者のPCにかかるやつ。

    といった程度。Javaは多少書けるけど、なんかしっくりこない感じでした。
    しっくりこなかった理由は、

    1. 基本的な書き方はjavaっぽいが、ブラウザ上で動かすブラウザオブジェクトの概念がわからない。
    2. Javaで言う文字列(String)でも、数値(int)でも、「var」という型で宣言していて、どう管理しているかわからなかった。
    3. オブジェクト指向ではないと書いてあったり、オブジェクト指向だと書いてあったり、処理の受け渡しがピンとこなかった。



    学習を進めていく事で、(まだ途中だけど)上記に上げた3点は何となく理解した。


    階層構造を意識する必要がある

    window関数の配下に、色んな関数があり、
    ブラウザが開かれた時に、自作なり、用意されたオブジェクトやメソッドを読み込んで、
    使用できる状態にする。

    その用意したオブジェクト(メソッド)の関数名を、HTMLのタグに紐づけて
    クリックした時なり、ドラッグした時なりに動作するようにメソッド内にプログラミングしていけばよいと。
    一般的な文字列の宣言の仕方、if,forの書き方は他言語とさほど変わらないが、
    このwindow関数などのブラウザオブジェクトに関してはがっつり学習する必要があるかな。

    そして学習書籍を読み進めていると、
    この後、ブラウザオブジェクトより、DOMの方が重要だと知る。
    HTML自体の階層構造の宣言がとても大事で、自分で階層構造を宣言したり、
    子要素を丸ごと入れ替えたりといった操作ができるようになり、
    クライアントサイドで動くアプリケーションを構築するのに重要な要素だと学ぶ。

    DOMについては、一度別の機会にまとめる必要がある。

    変数の宣言は全てvar、関数の定義はfunction

    ひとまず、こう覚えた。厳密には違うような気もするけど。
    文字でも数字でも、配列リテラルでも全部var!
    Javaだと、String(文字列型)に数字を入れると、エラーになったりしますが、
    JavaScriptではそのまま上書きされます。
    数字に文字列を加算しようが、javaScript先生がうまいことやろうとします。
    これは楽!と捉えるべきかもしれませんが、正直気持ち悪いし、
    中身がどうなっているのか把握しづらいので厄介です…。

    初めての言語学習がJSだよ。と言う人は、
    Javaに入った時に、いちいちエラーが出てうざい!といった感じでしょうか。

    結構、概念的にはJavaと似ている部分もあるのですが、こういった変数の部分や、
    宣言の仕方などが微妙に違うので、もやもやした感じがします。


    JavaScriptはプロトタイプ型オブジェクト指向

    上記で、もやっていましたが、こっちも更にもやもや。
    Java自体は、クラス型オブジェクト指向。

    じゃあ、何が違うのかと言うと、
    Javaはクラスを定義して、実処理ではインスタンス化(実体化)して処理を行ったりします。
    JavaScriptもそれは同じなのですが、

    JavaScriptはそのクラス(プロトタイプ)にないメソッドをインスタンス自身に処理の中で追加できる

    便利なように見えますが、同じクラス(プロトタイプ)から派生したインスタンスA、Bにおいても、
    途中で処理の構文自体が別物になっている可能性もあり、動きが保証されないのが怖い。


    継承元を切り替える事が出来る。

    Javaでは、継承と言って自分にないメソッドや変数を親クラスを継承する事によって、
    あたかも自分のクラスに定義されている可能ような振舞ができるのですが、JavaScriptでもできます。
    しかも処理の途中で、その親を変える事が出来る。。。
    これも動きを冗長化できて便利な感じがする一方、親クラスが変わると言う事は
    そのクラス(プロトタイプ)自身の持っている変数やメソッドも変わるので、
    またまた動きを予測するのが難しくなる。。。

    ここまでの学習で…

    まずは一冊読みあげたいので、ちょっと分からないところはスル—していますが、
    Javaに比べると、JavaScript自身が「おいらが、うまいことやってあげるよ」といった感じなので、
    いいのか、悪いのか…。
    そして、本格的な実装をしようとすると、結構概念がややこしい。
    冗長化されている分、不可解な動きを思想であり、Javaのようなクラスライクな設計もできるようだが、
    変数や関数を上手いことやって無理くりやっているようにしか見えないな。。。

    正直、ブログのデザインを上手いことやるくらいだったら、上記に述べたようなところでは、
    ブラウザオブジェクトだけしっかり覚えて、単発単発でスクリプトを埋め込んでいったら、それで終わりな話。
    ガチムチな実装をしても、うまい事コードを組まないとメモリばかり食ってなかなか表示されない。
    なんてことにもなりかねません。

    キー操作で画像を動かして、動作で得点が加算され、結果をサーバにデータ送信。

    なんてところまでスムーズにできるようになれば、
    サーバサイドのJavaとクライアントサイドのJavaScriptで連携したAjaxアプリケーションを作れそうですかね。

    まだまだアプリケーションプログラマの道はほど遠い。

Webアプリケーションを作ってみた

まだまだ初歩ではありますが、成果物を挙げられるようになってきました。

つい、2〜3か月前までは、
jspとは?サーブレットとは?といった状態で、なんとなく出来そうな気がしていました。
しかし、実際にはそう甘くなく、覚える事が盛りだくさんでした。

実際に作ったものは、[ ブログ ] です。
そう、ここで公開しているようなブログの仕組みを一から。
これが結構大変だった。


本のサンプルを用いて写経した事はありましたが、
いざ、自分で組んで見ると、セキュリティホールだらけだし、
ブログとして形をなしていない事がよく分かりました。

Webアプリケーションの仕組みを作るなら、ある程度の時間で作れますが、
SQLインジェクションによる不正なスクリプトを埋め込まれたり、
セッションハイジャックといったセッション情報を利用した悪用、
などなど、簡単に不正使用されてしまうのです。

実際のロジック

実際のロジックとしては、そんなに高度な内容ではなく、

< jsp > ページ

・投稿ページ(ブログの投稿画面)
・閲覧ページ(ブログのトップページ)
・投稿画面に入る為のログインページ
・404エラー、403エラー用の専用ページ

< Servlet > クラス

・文字化け対策用のフィルタ
・投稿された内容の不正文字列チェック
・本文・コメント投稿の振り分け
・データベースへの登録
・データベースから投稿内容用のリストを作成
・投稿内容のリストからを閲覧ページに呼び出し

< 裏方 >
・データベースへのアクセス定義(context.xml)
・ページへのアクセス制御(web.xml)

jspはユーザーがHTMLだと認識する部分で、
何も意識しないで投稿やコメントをしている部分ですね。
サーブレットは、jspから値を受け取ったり、jspに値を渡したりする裏方で、
ユーザーが直接触ることのない部分で、ユーザーに表示される部分は、
全部jspに処理を渡しています。


何気ないボタンにも仕組みが満載

次のページ、前のページといった当たり前についているボタンも、
前に10件投稿がなければ、閲覧ページに「前の10件」ボタンを表示しない。
次に10件投稿がなければ、投稿ページに「次の10件」ボタンを表示しない。
といったロジックが必要となり、jspにモリモリ書くのではなく、
Servlet側に判定させて、前に10件あるかないか(boolean)だけをjspに渡して、
jspは、前に10件ボタンを表示するかしないか判定すればよいのです。

JSTLって凄いね

JSTLというjspの記法があり、最初覚えたjspの記述と大分違うので、戸惑いを覚えましたが、
逆にこれしか使っちゃだめ。スクリプトレット禁止!というわけであれば、大したことは無かった。
何がすごいかと言うと、スクリプトレットを使わない事で、処理が分かりやすい。
逆を言うと、コーダーやフロントエンジニアでも、javaScriptのような感覚で記述ができるので、

プログラマさん、サーブレットへのプログラミングはよろしくね。
jspにページデザインして、JSTLもこっちで書いておいて、値を受け取るだけにしておくから。

JSTLも難しい記法ではないので、処理に関してはプログラマに書かせて、
その結果の値だけは、JSTLで受け取るだけの1行を書いてしまえばいいので、
jspの製作は完全に、デザイナー側に委ねてしまうように分業する事が出来るんですね。

しばらく、ばりばりプログラムを勉強して、他の言語にも挑戦できるようになってきたら、
もうちょっと、フロントエンジニア側にポジションを移して作業を進められたら楽しいかもしれないな。
とやっと実感レベルで思い始めました。


改善点

もう少し、サーブレット側の処理をオブジェクト指向的に記述ができて、
MVCモデルといった仕組みで構築できるとよいかもしれない。
最初設計してから、このブログを作ってみたのですが、
実際作り始めると、無理が生じてきたため、設計を無視して突貫工事を始めてしまい、
結構、汚らしい感じになってしまいました。
設計力の足りなさと、上塗り上塗りのコーディング…素人の建築そのものでした。

世の中に当たり前にあるサービスを自分でロジックを考えて作ってみると、
なかなか勉強になります。もっとコーディング力を上げれるよう勉強していかなきゃですな。

忙しかった私生活。こんなことがありました。

やっと、色々と落ち着いてきたのでブログも少しは頻度を上げて更新できるかな。
と思います。あ、お久しぶりです。管理人です。
毎日更新から、徐々に更新ペースが落ち、週1すらも更新できなくなった管理人です。
毎日のように訪問してくださる方もいる中、怠慢しており、申し訳ありません。

私生活が、ものすごく大変になりまして、更新できなくなってしまいました。
まず、大きなこととしては、

第一子誕生

子供が産まれました。
よって、今までの生活ががらりと変わり、自分の時間として確保できていた時間が、
子供とのコミュニケーションの時間に変わり、パソコンに触る事が徐々になくなって行きました。
パソコン離れというよりは、物理的に障る時間がなくなったといった感じでしょうか。
抱っこ!座ってじゃなくて、立って抱っこ!!といった感じで言葉ではなく、泣く事で訴えてきますので、
両手両足共に子供のものとなってしまいました。
イメージとしては、私自身が、人間が乗って操縦するロボットみたいな存在ですねw

マイホーム購入

家を買いました。
まぁ、これも大変でございまして、やっと引っ越しが済んで少し落ち着いたのですが、

・家を決める
・色んな書類(重要事項説明書等)に印鑑を押す
・住宅ローン
・ローン仮審査
・ローン本審査
・金消契約
・役所手続き
・引越し手続き各種
・新居に必要な家具の購入
・粗大ごみの廃棄
・アンテナ工事
・インターネット引きこみ
・フロアコーティング
・保険の申し込み


など、まだ半分くらいしか書いてないけど、
怒濤のごとく、引き渡し日までにTodoが押し寄せてきて、
もう、ご堪忍ください。ご堪忍ください。。
といった感じでした。
不動産やローン等の知識は全くないので、これまた苦労しまして、
「プログラマ家を買う」といったシリーズで書いたり書かなかったりしようかな。と思います。
不動産とは怖いもので、金額はあってないようなもので、買い方やローンの組み方で障害払う金額が、
数百万、もしくは一千万は変わってしまうものなんだな。と引き渡しが済む頃に気付きまして、
これは初めからいろんな事を知っておけば、もっと費用を抑えられたかもしれないなと思います。

そんなこんなで、プロジェクトのリリースと、子供の誕生が重なりまして、
生まれる前後からいろんなものを揃えたり、お宮参りだ、お食い初めだ、写真撮影だ、予防接種だ…
仕事も忙しい…、両方少し落ち着いてきた。家はどうしようか?不動産屋に行ってみようか?
の流れから、次の日には購入に踏み切り、また怒濤の日々が始まり…。

また無茶しちゃいました。

去年は資格で無茶して、今年は私生活で無茶しちゃいました。
なんか、春から夏にかけて、私は無茶をする傾向にあのでしょうな。
おととしの夏も「助けて」が言えなくて、自滅してしまいましたからな。
もうちょっと、うまいことやんなさいよ。と一息入れさせることができればいいのですけれどね。

パソコン故障

そして、メインPCが引越をしたらお亡くなりになっていました。
電源ボタン無反応。放電も試しましたが、ダメでした。

引っ越しのトラックに載って壊れました。弁償しろ!!と言っても、
外損もないですし、なんか非現実的で、何をどう保障するの?といったレベルですし…。
だからと言って、素人じゃあるまいし、原因の特定くらいしろよ。といった感じですので、
箱を開けて、怪しいところを抜き差ししました。

直りました。

修理に出して数千円とられて返ってくることにならなくてよかったです。

更新頻度ですが、毎日更新は無理なので、一回の更新の中身の充実した記事を上げる方向にしていこうと思います。
似たような記事だったら、Googleで検索したページを一回限り見ればいいし、
この人、今度何をやらかすんだろうといった記事を書いた方が、読者も面白いでしょうしね。
これからも、どうぞよろしくお願いします。

1年以上かけてやっと開発案件へ。その道のり。

先日、やっと、開発案件に入れていただきました。
とはいっても、他の人がやったら1日で終わる内容を3日くらいもらって、
かつ質問もできるという高待遇でのお仕事。
まさに、仕事をやらせていただいている。
といった感じで感謝しながらやらせていただきました。

半年くらい前にも書いた UT(ユニットテスト) をやっています。
テストと言えば、開発の中でも下流工程ですが、コードが読める事、
コードの中身を追える事、フレームワークでの実装を理解する事、
ユニットテストを行える事(JUnitやMockなどを理解している事)などなど。
入門書レベルのJavaの教科書を一通りやっただけでは理解できない領域です。





一通り、Webアプリケーションについては、下記の教科書で学習しました。

独習Javaサーバサイド編 第2版

新品価格
¥3,888 から
(2014/8/12 21:47時点)




とっても分かりやすかったです。一通り学習し終わるまでには、
1〜2カ月かかるかもしれませんが、実際のWebアプリケーションのテストをする際にも、

・Webアプリケーション独特の階層構造を読み取りやすい。
・JSTL、XML、プロパティファイルなどの概念を理解しやすくなる。
・MVC(Model View Controller モデル・ビュー・コントローラ)の流れが分かりやすい。


などなど…、実際の案件に入って勉強して良かったなぁ…しみじみ。と思うわけです。
Javaの入門書って、分厚いですよね。オライリーしかり、他の教科書でも。
それでも名前の通り入門なんですよね。プログラミングをやりたい!と思う人が挫折してしまうのは、

・教科書の分厚さに眩暈
・楽しいと思えるまでに時間がかかる
・コーディングの細かいお作法にげんなり
・オブジェクト指向の壁


などなど、原因はたくさんあるんですよね。

特に Webアプリケーションを作りたい!! と思っている人が、
ここをどれだけの人が見ているかはわからないですが、
(半数以上は、LPIC関連できていただいていると思っています)
上記の問題たちを乗り越えた(とりあえずわかったかな?といったレベルでも)先には、

・jsp、サーブレットを学習
・Tomcat、Glassfishなどのサーブレットコンテナを学習
・データベースを学習
・JSTL、MVC、beansなどを学習
・デプロイメントディスクリプタを学習
・セキュリティプログラミングを学習
・アプリケーション(サーブレットコンテナ)を動かすためのサーバ知識を学習


と、これから勉強したいな。とりあえず簡単なものを作りたいなと言う人の
夢と希望をぶち壊す勉強内容が待っています。
おわ、 敷居が高い…。 と思うのが普通で、
私も勉強を開始した時に全貌が見えていたわけではありませんでした。

では、私自身が最初どんな意識でいたかと言うと、

・プログラミングがしたい(できればWeb系)
・Webで公開するには、apache,tomcatを最低限分かっていた方がいいな。

たぶん、これくらいです。
そして、どんなふうに勉強してきたかと言うと、
細かく書くと違うけど以下のような感じ。


シェルスクリプト

オライリー

Webアプリケーション構築入門

LPIC

JAVA

CISCO

OSS-DB

Java入門

AWS

オライリー

JavaEE

これで、学習時間だけを抜粋すると約1年でしょうか。
私はこれくらい学習すれば、プログラミングは普通に肩を並べて行えると思っていた。
けど、 やっとスタートライン なのですね。

詰め込みが得意なだけではプログラミングは出来ない。
と感じたのは、結構早い段階からで、今でもそれは感じています「。

まず早いうちに気付いたのは、

あ、俺、オブジェクト指向を受け入れられない! といった事。

次に感じたのは、

設計がろくにできず、最初に考えていたものとは、ほぼ違うものになっている 事。

頭に思い描きながら修正しながら一つのものを作り上げていく手法は、
実際のプロジェクトでは許されるわけがありません。
まず仕組みをしっかり作り、どういう実装をしていくと実現できて、
そのためには、各クラスとメソッド、プリミティブ変数を利用しとしっかりと計画を立て、
ドキュメント化した上で、紙上でシステムを作り上げる。
その後、修正が出てしまったものは紙上でも修正し、1つのものを作り上げなければいけません。

目指すべきは、SE領域もできてこその、プログラマなのです。

私も昔はSEの仕事の役割も理解していませんでしたが、
SEって、システムエンジニアの名の通り、システムを作り上げる人なので、
逆に設計ができない人(アプリケーションでもインフラでも)は、システムエンジニアではないですよね。
プログラマなのか、オペレータなのか、サーバエンジニア(SE)なのか。
プログラム書いたことないけど、SEしているっていう人って、ある意味凄いですよね。
プロジェクトに入ってみて、コードの書き方知らないのに、設計できるって、頭脳の作りがすごいな。

説明書を読まずにゲームを始めたり、ベッドを組み立て始めたりと、30年くらいそんな感じでやってきましたが、
開発にかかわる以上は、お作法や段取り、仕様作成など1つ1つの仕事を丁寧に確実におこなう事も必要なんです。

ただし、こればっかりは少しずつ身につけて、私生活も見直しながらやるしかないですね。

オペレータ的な仕事ばかりやってきたので、
「オペレータ独特の、独断で判断して失敗する可能性があるなら、エスカレーションして、自分はやらない。」
といった仕事ばかりしてきたので、調査→検証→実装といった段取りを当たり前にできないのです。
失敗のリスクがあると、リスクばかりが先行して先の事を考えられなくなってしまうのです。
オペレータの仕事も的確に責任範囲の中で確実に行うと言う意味では難しいのですが、
開発をやりたいと少しでも思う人には、ぜひ開発の仕事ができる場所への転職をお勧めします。
私もいろんな会社を経験しましたが、オペレータから開発職(インフラ構築)へスキルアップを
推奨はしているものの、実際に行っている会社は見た事がありません。

脱線してきてしまいましたが、プログラマとして仕事をこなすには、
まだまだだぞっていう位置にいるってことでした…。

まだまだ報告したいことはたくさんあるので、別の機会に書きたいと思います。
×

この広告は30日以上新しい記事の更新がないブログに表示されております。

Build a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: