seri::diary

日常

この春情報系出身じゃないけどSE/PGになった人へ その1

2014.7.24追記
結構読まれてるようなのでちゃんと「その2」へのリンクをつけました。

その2

2015.7.15追記
はてなダイアリー時代のレイアウトのままで読みづらかったのでレイアウトと誤植を修正しました。

2016.3.31追記
あわせて読みたい
serihiro.hatenablog.com

なんとなくこのエントリーに影響されたのと、

そういえば新年度になっていたので、新社会人向けのメッセージ兼、
自分の学習履歴の整理のために新しくシリーズものの記事を書いてみます。

1.これ何?

タイトルの通り、『大学や専門学校で情報処理系の勉強をしてこなかったけど、何となく新卒でSEとかPGとか呼ばれる職業に就いちゃったてへぺろ☆』的な人向けに書いた「私はSE1年目〜3年目までこんな勉強してたよ」的な紹介記事です。
なお私も『何となく新卒でSEになっちゃった』人です。

どっちかといえばSIerでSEになった人向けの記事ですが、そうでない人にも得るものがあるような記事を書ければなぁ・・と思っています。

2.これ書いてるお前は誰よ?

農学部卒でSEになって、今(執筆時当時)は底辺ベンチャーでPGやってる変人です。


■2009年3月に某駅弁大学農学部を卒業。
・情報系の知識無し。一般教養レベルのC言語を授業でやった程度。
・パソコンは趣味で自作してたがFPSとかMMORPGやるのに使う程度。

■2009年4月に某メーカー子会社SIerにSEとして入社
・入社以来、開発やりたいって言ってたのにずっと障害対応ばっかりやらされて辟易するが、
 お陰でインフラ〜プログラミングまで幅広く知識を身に付けることになる
・2009年12月に東大で開催された「第一回Web学会シンポジウム」に感銘を受けて
 webと集合知に興味を持つ。
 以来、Webサービス界隈で賑わってる技術に興味を持ち始め独学でPHPを勉強し始めたりブログっぽいサービスを作って自爆したりtwitter botを作ったりする。
・2011年12月に自己都合退社。周りから哀れみの目で見られたが気にしない。

■2011年12月に社員10人にも満たない、ちっこいベンチャーにPGとして転職
・過去に作ったweb受託案件の運用保守とかSaaSの改修だとかiphoneアプリ作ったりしてる
・客先で提案しに行くこともしょっちゅうなのでPGのくせにいつもスーツ着てる変人


では自己紹介はこの辺にして本編をば


「1年目に独学で学ぶべきこと」

1年目だと専門知識うんぬんよりも「社会人としての常識」「ビジネスマナー」だとかが重要と言われますし、実際現場ではそのとおりだと思います。

ただ、そんなもんは現場に1年もいれば自然と身に付くものなのでここでは割愛します。ってか私自身がそっち方面の勉強の仕方はそんなに詳しくないので。


SE/PGであっても1年目なら「それ知りません。てへp(ry」でも「ある程度は」許されるところがあると思います。

しかし、2年目以降になるとそうは行きませんし、1年目でも現場によってはある程度責任あるポジションで仕事をすることになる人もいるでしょう。

私なんかも配属してから半年後ぐらいから直でお客さんと直接会話しながら小さな案件を一人でこなしていました。


なので「1年目だから・・」と、この時期に余裕ぶっこいてる訳にもいかないのです。

さらに言えば、会社の技術研修の内容は「最低限」レベルなので、実際実務に役立つものは殆ど無いと言ってもいいです。

実際実務に役立つものは殆ど無いと言ってもいいです。大事なことなので(ry

じゃあ何やるの

今この時期(4月半ば)だと配属先も決まってない人が殆どだと思いますし、インフラ系なのか?開発系なのか?サポート系なのか?も分からない人が多いと思います

とは言え、まず幅広く知識を身につける必要があります。

逆に、業務の中でしか学べないこともありますので、まずは「独学で学べるもの」について話したいとおもいます。



1年目の私は「多分これが重要なんじゃね?」という独自判断から以下をメインに独学で勉強していました。


1.DBMS(DataBaseManagementSystem)の基本知識

いわゆるDatabase。業務系だとOracle,Web系だとMySQL辺りが今の主流でしょうが、まず自分の会社でよく使いそうなDBMSを一つ選んで、がっつり勉強します。

今のシステムはDBを使わないものは殆ど無いので、何のシステムを担当するにせよDBの基本概念をしっかり抑えておくことが重要です。

DBの知識は、将来的にインフラ屋になってもアプリ屋になってもどちらでも必要になる必須スキルなので、1年目で業務がまだ緩いウチに何か一つのDBMS製品をがっつり勉強しておくと後々重宝します。

さらに言えば、どの製品も基本的なところは似てるので何か一つがっつり勉強しておけば、新しい製品にも対応しやすいです。
SQLもどの製品もほぼ共通なのでこの時に一緒に勉強しちゃいましょう。
SQL分からないとアプリ屋でもインフラ屋でも何もできませんマジで。


私は当時業務SEでしたので、OracleDBを学ぶことにして、
さらに「Oracle Master Bronze」を1年目で取ることを目標に
以下のテキストで勉強してました。

徹底攻略ORACLE MASTER Bronze 11g SQL基礎?教科書[1Z0-051]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略ORACLE MASTER Bronze 11g SQL基礎?教科書[1Z0-051]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略ORACLE MASTER Bronze SQL基礎1問題集 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略ORACLE MASTER Bronze SQL基礎1問題集 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略ORACLE MASTER Bronze DBA11g教科書[1Z0-018]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略ORACLE MASTER Bronze DBA11g教科書[1Z0-018]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略 ORACLE MASTER Bronze DBA11g問題集 [1Z0-018J]対応 (ITプロ/ITエンジニアのための徹底攻略)

徹底攻略 ORACLE MASTER Bronze DBA11g問題集 [1Z0-018J]対応 (ITプロ/ITエンジニアのための徹底攻略)

Oracle MasterってのはOracle社のDBMSの知識を試す資格試験で、コレ持ってると会社から資格手当みたいのがもらえる会社も結構あります。

※詳しくは下記リンクを参照
オラクル認定資格制度


上記で紹介したのは資格対策本ではありますが、DBMSの概念から丁寧に説明してる良い教科書で、これを読んでDBMSの基礎概念を学びました。

また、補助テキストとして以下の本も読んでました。

絵で見てわかるOracleの仕組み (DB Magazine SELECTION)

絵で見てわかるOracleの仕組み (DB Magazine SELECTION)

タイトルの通り、イラストを多用した説明で非常に解りやすくOracle DBの基礎を説明してくれる良書です。

あと業務でよく見るサイトとかの紹介
SHIFT THE Oracle
忘れっぽいエンジニアのオラクルSQLリファレンス



MySQLは趣味でいじっていた程度で、最近業務で使うようになったのでまだまだ勉強中ですが、以下の本が良い感じでした。

※なので良い本とかブログとかあれば教えて下さい><

MySQLによるタフなサイトの作り方

MySQLによるタフなサイトの作り方

また、MySQLオープンソースのソフトウエアということもあり、ネット上の情報が豊富です。
日本人ユーザーも多く、webサービス企業のエンジニアブログや、エンジニアの方が書く個人ブログから高度な知識やノウハウが得られるのでMySQL使いになりたい人はエンジニアのブログをこまめにチェックすると良いです。

私は以下のブログをよく見てます
漢のコンピュータ道
サイバーエージェント公式エンジニアブログ



ITは何でもそうですが、製品やプログラム言語の動作原理を知っておくことで難しい問題に直面した時に生きてきます。

トラブった時もネットで検索すれば解説してるブログがいくつも簡単に見つかる時代にはなりましたが、ネットで解決策が見つからない時に問題を解決できる力はやはりこういった基礎知識だと思っています。

特に、DBは動作原理を知って使ってるのと知らないのとではDB設計のよしあしが全く違ってくるので、ぜひとも1年目には何かのDB製品をがっつり勉強しておきたい所です。

中身をよく知らないでDB設計すると1時間かかっても必要なデータがDBから取り出せない・・なんてこともザラですので。


2.なんでもいいからとりあえずプログラミング言語1つをしっかり学ぶ


これはまぁSIerに限った話だと思うんですが、私が新卒で入った頃から以下のような論争がありました。

「上流SEにはプログラミング知識は必要か否か」


要するに

「設計だけやるんだからプログラミングできなくてもいいんだよ。それよか業務知識だ派」

「プログラミング分かんねぇやつに設計ができるか(゚Д゚)ゴルァ!!派」

がいる訳です。(作者注: 2015年現在は分かりません)

自分の経験で言うと最初から大手でスタートしたマネージャー層に前者の考えの人が多く、後者は昔から下流工程からSEをやってきた中堅の人に多い気がします。


ただ、会社としては新人にプログラミングを教えるコストは高いので出来れば教えたくない。
NECラーニングとかのプログラミング研修の費用を見れば分かりますね。

それよりは↑に書いたDBの知識だとかお客さんの業務知識を学んでもらった方がお金になりやすい訳ですね。


そのため、上流SIerなんかだとロクにプログラミング教えてくれません。
下請けメインのSIerだと分かりませんが、聞いた話では熱心に教育してる所は少ないようです。


つまり、情報工学科を出ていない学生さんはそれこそ「プログラミング」知らないままのSEとして育ってしまう可能性がある訳です。

参考程度に私の実体験を話すと、

・プログラミング研修はVB.NETが1週間のみ
・開発演習では参考となるソースを配られてそれをコピペで作った

という訳で、こんな状態で現場に入れられてさらに現場でも勉強する機会がなかったら、プログラミングできないSEが量産されるのは目に見えてる訳ですね。
(作者注: 自分が新卒で居た会社では、自社のSEはプログラミングが出来る必要はないとされてたっぽい)

果たしてそれで良いのか・・・


社会人4年目になったばかりの私の意見からすると、


「断じて否!プログラミング知らないで設計することは愚の骨頂」


です。


プログラミング知らないSEの手で設計されたものがいざプログラマーの元に来た段階で初めて「これ技術的に出来ませんよ」ってなって設計が手戻りになるシーンを目にしてますし、聞いたことがあります。


なぜか?

それは「プログラミングでできること、できないこと」を知らないで「何となくできるんじゃね?」で設計してしまうから・・


またよく見るパターンとして、変な設計を無理やり押し通して作ったせいで本番スタート後に障害が多発して結局修正になってしまうとか・・。

大抵そういう場合、「外注が作ったプログラムの品質が〜」とか抜かしやがるマネージャーが一杯居ますが、よく見ると設計に根本的に無理があるケースだと思います。


そんな訳で、上流SIerに入っちゃった人もプログラミング学んだほうがいいですよ、という話。

プログラミング学んで、実際に「どうコーディングするか?」を考えて設計できるようになればつまらない設計ミスも減らせる、と私は考えています。
これもDBと同じで、中身を知っててやるのと知らないままでやるのとは雲泥の差、ってやつです。


さて、プログラミングを勉強するにしても何の言語をやるか?

自社開発をしてる会社なら当然その会社で使う言語ということになりますが、色んな言語の案件があるSIerのSEなんかはどうしましょう?

ってなりますが、大体使われる言語は限られてるのでまず1つだけ覚えるならJavaがおすすめです。


SIerだととりあえずWebベースのシステムだとJavaで作るのが殆どです。
特にコスト削減のためにLinux + Javaの構成を取ってるところが多いですね。
さらに「画面がJavaだから」と良くわからない理由で一緒に動く夜間バッチもJavaで作られてたりします。

1年目なら、まずはWeb上で動く掲示板みたいなものを作ることを目標に勉強すると良いです。

やってみると分かりますが、業務系Webアプリって基本的にはどれも「掲示板」の延長です。

そのため、どのWebアプリも「掲示板の延長」で作れちゃうことが多いため、一度「掲示板の作り方」を覚えておくとかなり応用が効くということになります。


私は以下の本で管理画面とかブログっぽいものを自宅のPCで作ってました。
プログラミング自体が初めてでも十分理解できる内容です。

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

基礎からのサーブレット/JSP 第3版 (基礎からのシリーズ)

この本を最初から最後まで、サンプルコードを実際に手で打って動かしながら読み進めば

・Webアプリの動作概念
・「Webサーバ」の概念
・HTTPの概要
・アプリとDBの連携に関する概念
オブジェクト指向的な考え(ちょろっと?)

を広く身につけることができます。
初心者には特に非常におすすめの本です。


本当はオブジェクト指向も身に着けたいところですが、まずは「自分だけの力で動かせる」ことが重要なので、手を動かしながら「中身を知る」ことを目的にやってみると良いと思います。

実際に手を動かしてコードを書いてみれば、どう設計すればよいか、とかお客さんと何を決めておけばよいか、といったことが何となくでも分かってくるはずです。


                                                                                                              • -

とりあえずこんなところで一旦〆ます。
独学で勉強できるジャンルの話はもうちょい続きます。