未経験でエンジニアを募集している会社

2104054031_b9b27ea2cc
photo credit: Cole Constantineau via photopin (license)

久しぶりにITネタで。

いつも不思議に思うのですが、求人情報を見ていると、未経験でITエンジニアを募集しているのをいまだによく見ます。
募集する企業の経営者は、未経験でもできる仕事だと思ってるんでしょうね。
なめられたものです。(苦笑)
そして、未経験で応募する人は、仕事しながら会社が色々教えてくれると思うでしょう。
しかし、未経験で募集している会社は、まともに社員を教育する気もないですし、やろうと思ってもできないのが現実です。

あるカフェで人材派遣の営業同士が話しているのを聞いたことがあるのですが、今は製造業界でC言語のプログラミングができる人材がかなり不足しているらしく、かなりいい単価で募集しているとのことでした。
そこで、その派遣会社は全くの素人を3か月教育して送り込む話をしていましたが、これはデスマーチプロジェクトになるなと私は思いました。
私もC言語で開発していたのでわかるのですが、C言語はハードウェアを直接制御できる言語ですので、とてもバグが出やすく扱いが難しいプログラミング言語なのです。
それを、ほとんど素人の人が扱うのはかなり危険です。
そんな感じで働かされた人たちも、デスマーチプロジェクトでITの仕事がいやになるでしょうし、機械を制御する部分となると、よりクリティカルでしょうから、できた製品も色々問題が出てくるのはまちがいありません。

そもそも未経験でエンジニアを募集している会社は、頭数を増やしたいだけでエンジニアのスキルなどどうでもいいと考えています。
結局一人いくらで売っている商売なので、成果物の品質なんて関係ないんでしょうね。
したがって、そんな会社でエンジニアがスキルアップしても評価されることはありません。
しかし、これからエンジニアのスキルを気にしない企業はまちがいなく淘汰されていきます。
なぜならば、これからは大量生産で安いものよりも少量生産で高品質のものが売れる社会に変わりつつあるからです。
世界を見ても、未経験のエンジニアを企業が雇う国なんて、日本くらいしかないのではないでしょうか。
アメリカやヨーロッパの企業では、大学のコンピュータサイエンスの学位を持っているか、同等の知識、経験があることを応募の条件にしています。
なので、もし未経験でITエンジニアになりたい方は、仕事をする前にぜひ基本的なことを学んでからにしたほうがいいと思います。
そして、未経験で募集しているような会社ではなく、ちゃんとスキルを評価してくれる会社に行ったほうがいいでしょう。

幸いにも、今はコンピュータやネット接続が劇的に安くなりました。
私がこの業界に入った頃はネットもなく、コンピューターも個人用でも30万以上していました。
でも、今は自分でコンピューターを買ったりクラウドでサーバー立てたりできますし、本やネット上の動画など教材も安いコストで手に入るので、学校に行かなくても自分で学ぶことは可能です。

ただ、何を学べばいいかわからないと思いますので、将来性があると思われるウェブエンジニアに必要な学ぶべきことをリストアップしてみました

・HTML,CSS,ウェブデザイン

ウェブシステムを扱うのであればHTMLとCSSは必ず触ることになります。
デザインといってもデザイナーのようなスキルは必要ありませんが、最近ではスマホでもちゃんと見れるようなレスポンシブデザインという技術も必要になりますし、JavascriptでHTMLを操作して動的なコンテンツを作ることも多いので、エンジニアとしてデザインも抑えておくべきでしょう。



・Javascript

ウェブシステムを開発する上で、Javascriptは避けて通れません。
かつてはブラウザ上で動くクライアントJavascriptで使われることがほとんどでしたが、今はNode.JSなどサーバー側で動くJavascriptも増えてきました。
今最も進化の激しいプログラミング言語ですね。


・スクリプト言語

ウェブシステムを作るとき、いろんなツールを作ることが必要になります。
例えば、データをバックアップしたり、同報メールを送信したりしたいとき、簡単にプログラミングできる言語を知っていると便利です。
そんな時は、手早くコーディングできるスクリプト言語が便利です。
一番メジャーなのは、RubyまたはPythonです。
スクリプト言語は、コンパイルしなくてもすぐ実行できますし、いろんなライブラリが利用できます。
個人的にはPythonのほうが将来性があるかなと思います。


・ウェブフレームワーク

ウェブシステムを一から全部自分で作ろうとすると大変です。
ウェブフレームワークを使えば、よくありそうな機能はほとんどコーディングしなくても実現できます。
フレームワークとしてはRuby On Railsが有名ですが、覚えることがたくさんあって学習コストがそれなりにかかります。
手っ取り早く作りたい場合はPHPのフレームワークのほうがいいかもしれません。
私はPHPはあまり使わないのでわからないのですが、最近はcakePHPとLaravelというフレームワークが人気だそうです。



・正規表現

正規表現とは文字列パターンで検索するための技術です。
例えば、先頭に大文字英文字が来る文字列の正規表現は^[A-Z]*のように書きます。
正規表現はいろんなところで必要になる技術で、プログラミングでもほとんどの言語で正規表現が使えます。
複雑なパターンは結構難しいのでマスターするまでに経験が必要です。

・データベース,SQL

今時のウェブサービスはほとんど後ろにデータベースがいます。
簡単にいうと、データベースはデータを保存して検索するためのソフトウェアなのですが、リレーショナルモデルという考え方でデータを蓄積しています。
そのリレーショナルモデルを扱えるデータベースをリレーショナル・データベースというのですが、リレーショナル・データベースとはデータベースの中にエクセルのシートみたいなのが複数あって、シート(正式にはテーブルといいます)どうしが関連性をもっている状態でデータを保持してるというイメージです。
そのテーブル上にデータを挿入したり検索したりするのがSQLという言語です。
ウェブ開発するときはSQLを使ってデータベースにデータを問い合わせるのですが、テーブルが増えてくるとかなり複雑になります。
また、ウェブアプリケーションではデータベースにアクセスする部分をプログラミングすることになりますが、アクセス先のデータベースを設計することも必要です。
データベースの設計はデータモデリングという手法を使って行うのですが、ウェブエンジニアはデータモデリングのスキルも求められることが結構あります。
そこを補完してくれるのが、先ほど説明したウェブフレームワークになります。


・Linux

ウェブシステムはなんらかのOS上で動作しています。
一番有名なのはWindowsとLinuxでしょう。
WindowsはGUIで操作できるしマクロソフトのサポートもあるのでいいのですが、シェアからいうとLinuxのほうが多いですし、カスタマイズもしやすいです。
なので、Linuxを操作するための基礎知識やシェル・基本的なコマンドの知識はウェブ開発エンジニアとしては必須でしょう。

・ウェブサーバー(ApacheまたはNginx)

Linux上で動くウェブサーバーとしてはApacheとNginxが有名です。
Apacheのほうが古いので情報は多いのですが、トレンドとしてはNginxがこれから増えていきそうな感じです。


・DNS

DNSとは、ドメイン名からIPアドレスというサーバーを特定する番号に変換するためのサーバーです。
このブログはanthony-blog.gowest.co.jpというホスト名+ドメイン名になっていますが、DNSはこれを182.48.57.147という番号に変換してくれます。
DNSはウェブにアクセスするときに必ず必要なサービスなので、ウェブエンジニアにとってDNSを扱えることは必須項目となります。

・メールサーバー

メールは、もはや電話と同じくらいに社会のインフラになりました。
ウェブシステムでも顧客にメールを送ったり、サーバーのアラートを受信したり必ず使うことになります。
メールを送信するときは、SMTPというプロトコルを使い、受信する場合はPOP3またはIMAP4というプロトコルを使います。
メールを送信するためのサーバーをMTAともいいますが、MTAで有名なソフトウェアとしてpostfixがあります。
このMTAがどう動いているか理解していることがウェブエンジニアに求められます。

・TCP/IP

ウェブにアクセスするためのHTTPやメールを送信するためのSMTPなど全てのプロトコルはTCP/IPというプロトコルのうえで動いています。
TCP/IPは、もともとはアメリカ国防総省で核攻撃されても通信手段を維持するために考えだされた技術です。
TCP/IPでは、ある特定の回線が切断されても他の経路に迂回して通信路を確保することができます。
インターネットは、このTCP/IPを基盤として動いているシステムなので、ウェブエンジニアは基礎知識として知っておくべきです。

・セキュリティ技術

いまどきのウェブサイトは、HTTPSで公開されていることが当たり前になってきています。
HTTPSとは、HTTPを暗号化したプロトコルですが、そのためにはサーバー証明書というのが必要になります。
サーバー証明書は、公開鍵暗号技術というのを使って、通信経路を暗号化しています。
また、暗号化技術以外でもウェブシステムを開発するとき、セキュリティを考慮することが必要になります。
クロスサイトスクリプティングやSQLインジェクションなど、様々な攻撃方法を熟知し、ウェブ開発するときにセキュリティを考慮しなければいけません。


・DevOpt技術

今どきのウェブ開発はバージョン管理システムでソースコードを管理し、CI技術と呼ばれるもので開発からサーバーへのインストール、設定作業を自動で行うのが当たり前になってきています。
Gitは、バージョン管理システムとしてはスタンダードになりつつあるので、使いこなせるのは必須でしょう。
ただ、Gitは使いこなすのが結構難しいので、実際のプロジェクトで失敗しながら覚えるしかないと思います。
まずは、Githubを利用するのが一番初めやすいでしょう。
また、CI技術を使うには、Jenkinsなどのサーバーを自前で立ててもいいですし、TravisCIなどのサービスを使ってもいいと思います。
また、最近はDockerというサーバー技術が普及しつつあるので、こちらも抑えておくといいのではないでしょうか。



そのほかに、コンピュータ・アーキテクチャーやスマホプログラミング、アルゴリズム、数学などエンジニアとして学ぶべきことはまだまだあるのですが、最低でもこれくらいは頭に入れておかないと現場で仕事をするのは難しいと思います。
これらを一通りやるだけでも、かなり集中してやっても少なくとも1年はかかるでしょう。
未経験でITエンジニアをやるというのがどれだけ無謀か理解していただけたのではないでしょうか。

日本の企業は、ITエンジニアのスキルをちゃんと評価しない傾向があります。
しかし、独自のウェブサービスを行っている会社を中心に、エンジニアのスキルが企業の命運をわけることを理解してエンジニアを評価する企業が増えてきています。
さらに、最近は技術革新が速くなってきているのもあって、エンジニアがたくさん勉強しないといけなくなってきています。
私が、エンジニアなりたてのころはC言語といくつかのライブラリの使い方を覚えれば一応仕事はできました。
しかし、今は大学のカリキュラム並みにがっつり学ばないといけないくらい、多くのことを学ぶ必要があります。
そんな感じで時代が変わっているのに、多くの日本企業はいまだに変われていないということなんだと思います。
これからITエンジニアとして働こうとしている方は、未経験でもいいなんていう会社は相手にせず、ちゃんとスキルをつけて評価してくれる企業で働くことを目指すべきだと思います。

以前のブログで、アメリカの大学のコンピュータサイエンスのクラス風に、エンジニアの学ぶべきことを書いたブログがあります。
コンピューターサイエンスカリキュラム in Anthony University

よかったらこちらも見てください。