読者です 読者をやめる 読者になる 読者になる

AI(人工知能)は怖くない

IT

最近AI(人工知能)がテレビなんかで取り上げられることが増えた気がするのですが、実際ITと接点がないと「なにそれこわい」みたいな感じの反応をされることが多いと思うので、非エンジニアの方向けにそんな怖くないよーって話をしたいと思います。

ちなみに私は人工知能とかディープラーニングとかその辺に関してはTensorFlowをちょこっとさわったことがある程度のど素人に毛が生えた程度の人間なので、その辺知りたい人は今すぐ書店の技術書コーナーに走ってください。

AI(人工知能)ってなに?

人工的にコンピュータ上などで人間と同様の知能を実現させようという試み、或いはそのための一連の基礎技術を指す。

ってWikipediaに書いてましたが、こう書かれるとただ怖さを助長するだけな気がするので、健全な男子諸君にわかりやすい例を示します。

qiita.com

ここには結構技術的なこととかも書いてあり非エンジニアの方には難しいと思いますので、この記事でどんなことやってるかというと

  1. おっぱいが大きい女性の顔写真とそうでない女性の顔写真を大量に用意する
  2. コンピュータに顔の判別方法を教える
    コンピュータがそこそこ顔のパーツ判別できるのはなんとなくわかるでしょうか。snowみたいなアプリがあったり、それこそプリクラで目がおっきくなったり、あれを想像するとわかりやすいと思います)
  3. コンピュータにひたすら「これはおっぱいの大きい女性の顔!」「これはそうじゃない女性の顔!」と教え込ませる。
    コンピュータの得意技は尋常じゃない処理速度なので、人間が「ほーんこれがおっぱいの大きい女性の顔かあ〜」と言っている間に数百倍の速度でおっぱいの大きい女性とそうでない女性の顔を覚えていきます。
  4. コンピュータは覚えた写真の数々からそれぞれの特徴を導き出す
    この辺もコンピュータの得意分野ですね。統計学のような難しい計算もミスなく高速で処理していきます。
  5. コンピュータに適当な女性の顔写真を見せ、おっぱいが大きいかそうじゃないかを判別させる
    コンピュータは学んだ統計から答えを導きだします。人間はその結果に一喜一憂します。

なんだかおっぱいって言いたいだけの人みたいになってしまいましたが、だいたい最近のAIはこんな感じで作ることが多いです。やっぱりある程度は人間がコンピュータに勉強させないといけない(させるためのプログラムを作らなきゃいけない)ってことですね。

AI(人工知能)によって何が起きるの?

で、ここですごいのがさっきのおっぱいAIを作った人はAIの専門家ではないということです。ここ数年で、Googleをはじめとしていろんな企業、団体、時には個人がAIを作るためのフレームワーク(作り方、仕組み)をなんと無料でバンバン公開しているので、大学で人工知能を専攻しましたみたいな人じゃなくてもある程度簡単にこう言ったAIプログラムを作ることができるようになったんですね。

なので、これからいろんな分野で「AI作ってみようぜ!」みたいなノリが発生すると思います。これまでも囲碁・将棋のようなボードゲームでAIが人間を打ち負かした!みたいなニュースを見たと思いますが、これからはそんなニュースがいろんな業界で聞こえてくるでしょう。

例えば音楽業界。

www.itmedia.co.jp

マジで結構それなりですね。おっぱいのくだりからなんとなく作り方も想像できるんじゃないでしょうか。人間がビートルズの全楽曲を聞こうと思ったら何時間もかかると思いますが、コンピュータだと一瞬です。一瞬で聞いてその瞬間統計的ななにかを計算します。こういうことやらせると人間がコンピュータに勝つのは難しいです。(とはいえそのコンピュータのプログラムは人間が作ってるんですけどね。)

AI(人口知能)によって生活はどう変わる?

「AIが発達すると人間のやることがなくなって人間はダメになっていく」みたいなイメージがある人ってそこそこいると思うんですが、私は逆だと思います。

確かに人間が行ってきたルーチンワークは今後AIにとって変わられる可能性が高いと思います。ただ、それは多くの人々が今以上に創造力を働かすための時間を得られるということだと思います。

人間が、より人間らしくいる時間が増えるということです。

そして、AIも人間が創造力を働かせた結果の産物です。卵が先か鶏が先かみたいな話にはなりますが、そう考えるとAIは決して怖いものじゃないということを感じられるんじゃないでしょうか。

これからは過去の何かを集積して結果を出す、ということはコンピュータの役割、未来に向かって新たな何かを付け足す、ということが人間の役割、となっていくと思います。

またいろいろなことが急速に変わっていきそうでわくわくしますね!

 

エンジニアになって2年半くらいたったのでやったことまとめてみた

IT

概要

文系未経験からITの世界に飛び込み2年と8ヶ月ちょっとたち、ようやく普通に仕事できるようになってきたのでこれまでどんなことをやってきたのか、どんなことを学んできたのかを振り返ってみたいと思います。

「文系だけど4月からSEになるけどどうしよう死ぬ」と思っている内定者の方や、「これからITの世界目指してみようかな文系だけど」と思っている方に少しでも参考になればいいなと思っています。

内定〜入社まで

そもそも自分は文系学部を卒業後25歳までフリーターでバンドをやっていました。そこからまともな求人がITしかなかった企画と開発の両方に携わり、将来は自らのWebサービスを持ちたいという思いからエンジニアとして内定を頂きました。

内定を頂いたのち、「入社までにこれ読んどいてね」とITパスポートの教科書を頂いて勉強することになったのですが、これがまあ理解できませんでした。

 

 「変数はデータを入れる箱です」←わからない

「クライアントサーバーシステムは、サービスを要求するクライアントと、要求されたサービスを提供するサーバで構成された分散型システムです」←もっとわからない

オブジェクト指向とはデータ処理やシステム操作を手続きの流れとしてとらえるのではなく”もの”及びその関係としてとらえて設計し、開発を進めていく考え方です」←そっと教科書を置く

 

学生時代に全くITに触れてこなかったため、はじめはかなりちょっとなに言ってるかわからない状態が続きました。

あ、これ結構まずいかもしれないと思い、ネットで調べた良さそうな本を図書館で借りて読んだりしていました。これはやっておいて良かったです。

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

 

人によって理解しやすい説明のされかた、というのがあるような気がして、例えば自分の場合だったら「変数はデータを入れる箱です」と言われるより、「変数はメモリ上にデータを記憶させるための領域に名前を付けたものです」と言われたほうがピンときました。これは個人差があるものだと思うので、同じ題材でもいろんな教材から学んだほうが理解が深まると思います。「ああ、変数がデータを入れる箱ってそういうことね」みたいなアハ体験をしたものが知識として定着しやすいと感じます。

 

入社してから

この業界は自社サービスを開発するのではなく、他社のサービスを開発するために自社の社員を派遣する、というのがメインの売上というパターンが多いです。また、自身のキャリアパスもどのようなサービスの開発に携わるか、というところに大きく左右されます。

自分はそのあたりの業界模様をあまりよく理解していなかったので、人事部の「君は何がやりたい?」という今後を大きく左右する問いに「わたくし、何でもやります!」と答え、その結果、ビジネスマナーとExcelの使い方を学んだ新入社員研修の思い出を胸に、他社のプロジェクトに派遣されたのでありました。

この業界「何でもやります」は結構禁句です。

 

あ、このあたりでしれっとITパスポートとった気がします。とりあえず最初はホントになにやればいいかわからないと思うので、ITパスポートを目標にするといいんじゃないかなと思います。

 

配属

最初に配属されたプロジェクトは某大規模通信システムでした。開発言語はC、C++、OSはUNIX/Linux。知っているものは皆無でした。

「とりあえずLinuxはできるようになってくれ」とのことで、とにかく必死で勉強しました。

Linuxやれと言われたらLPIC level 1を受験するのがおすすめです。試験料は死ぬほど高い(¥30,000をゆうに越える)ですが、業務中に「これ進研ゼミでLPICでやった...!」と思える瞬間が結構多かったです。

とはいえ初学者がいきなりLinux教科書(通称あずき本)に手を出すと撃沈する可能性大だと思うので以下の本がおすすめです。自分はこれでだいぶスムーズに勉強することができました。

1週間でLPICの基礎が学べる本 第2版

1週間でLPICの基礎が学べる本 第2版

 

とはいえこれだけだと恐らく合格できないのでこれを読んだ後にあずき本に挑戦するのがいいと思います。

 

Linux教科書 LPICレベル1 Version4.0対応

Linux教科書 LPICレベル1 Version4.0対応

 

 

また、平行してネットワークの勉強もある程度したほうがいいと思います。

知らないとPCセットアップ中、環境担当の方に自分の使用するIPアドレスを聞いたとき「ちょっとまってね、えーと、(192.168.)10.11を使って」と言われ、IPアドレスの欄に「10.11」と入力した状態で「すみません、繋がらないんですけど...」と聞き、閉口されたりします。

というか、そんなそこ(192.168)は固定だなんて普通に暮らしてたら知らなくないっすか?俺だけっすか?そうっすか...

勉強しましょう。

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

 

これとかでも十分だと思います。 

3 Minutes Networking

 

また、10月には基本情報技術者試験に合格しました。

でおなじみの情報処理技術者試験ですが、こと文系未経験の場合、IT業界に進むということは地図を持たずに大海のど真ん中に置き去りにされることと同義なので、ある程度業界全体の知識を持つということはよかったなあと個人的には思います。

(たしかにこれをもっているから仕事ができるとかそういう類のものでは全くないです)

 

そんな感じでようやく素人に毛が生えたレベルまで到達した自分は、システムの障害対応だったりマシンセットアップだったりテストだったりと様々な業務に携わりました。

f:id:cobble:20161122232320j:plain

こんな感じのところでコンピューターをガッチョンガッチョンしてたときはさすがにテンションMAXでした。もう漢のロマン。

2年目突入

この辺りでふつふつと、「あれ、俺がやりたかったのってコンピュータガッチョンガッチョンだっけ...?」との思いが沸き上がってきました。

とはいえ、まだまだ半人前の身分ですし、とりあえず勉強しとくかということで応用情報技術者試験に合格しました。

平成28年度【春期】【秋期】応用情報技術者 合格教本 (情報処理技術者試験)

平成28年度【春期】【秋期】応用情報技術者 合格教本 (情報処理技術者試験)

 

これは意味があったかと言われれば正直かなり微妙ですが、これに合格したおかげで会社からいっぱいお金もらえたのでよかったです(小並感)。

 

1年目はずっと保守・運用系の仕事をやっており、全然プログラミングをやっていませんでした。

全然プログラミングできないってマズくね?なんとか開発の仕事をとりたくね?の一心から、現場で採用されているC言語の勉強を本格的にスタートしました。

いまさらCやるやついるのかって気もしますが、おすすめは以下の2冊です。

これでポインタアレルギーは解消できます。

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

C言語ポインタ完全制覇 (標準プログラマーズライブラリ)

 

LinuxコマンドをCで開発したりするので、LinuxもCも詳しくなれるという一石二鳥の本です。最初にオリジナルcatコマンド開発した時はテンション上がりました。

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道

 

 

2年目以降自分に与えられる業務は開発ではなく要件定義や設計といった、いわゆる上流工程が多くなってきました。

これはこれで大変やりがいのある仕事ではあったのですが、ドキュメント作成が業務の大きなウエイトを占めるようになり、エクセルやパワーポイントと向き合う日々が続きました。

「エンジニアになったけど全然プログラミングしていない。これで別のプロジェクトに行ったときに果たして自分は通用するのだろうか」という思いが日増しに強くなっていました。

 

そんなときに友人のエンジニアが「だったら一緒にWebサービスでも作ってみる?」と言ってくれたので、ふたつ返事でOKしました。

 

カルチャーショック期到来

その友人のエンジニアとは音楽が共通の趣味だったので、それを通じてこんなサービスにしよう、という草案は簡単にできあがりました。

しかし、じゃあ開発しようとなった時に相当なショックを受けました。

「じゃあ開発言語はJavaフレームワークはSpring Bootを使おう。まあ見た目はとりあえずBootstrapで作っちゃって、サーバもとりあえずHerokuでいいよね。AWS使ってみたい気もするけど。あとでGithubリポジトリ作っとくからcloneしといてね。」

「」

 

業界が違うだけでこんなに必要となる知識が違うのかと痛感しました。

自分はとりあえずしっかり勉強していればなんとかなると思っていましたがそうではなく、自身がまずはやりたいことをしっかりと見定め、そこに向かってしっかりと知識を積み上げなくてはいけないのだと思いました。

 

それからというもの「やはりWebサービスが作りたい」という思いが強くなり、忙しくなる一方の業務の合間をぬってWebアプリ開発の勉強していましたが、業務の合間では到底時間が足りないこともわかってきました。

Javaの資格をとって社内にWebやりたいですアピールをしてみたりもしました。

オラクル認定資格教科書 Javaプログラマ Silver SE 7

オラクル認定資格教科書 Javaプログラマ Silver SE 7

 

 

3年目〜そして転職へ

3年目になり仕事自体は順調に来ており、将来的にリーダー引き継ぐ?みたいな話も出たり出なかったりしたのですが、即ちそれはずっといまのプロジェクトを遂行していくということでした。

周りを見渡せばこのプロジェクトに10年以上いる人、ずっと同じ技術しかやっていないという人が少なからずいました。これは他社、他のプロジェクトでも珍しいことではなく、何年も派遣先で働いていて会社への帰属意識が全くないというのがIT業界ではよく問題としてあがります。

 

自分は「このままではパイが空くまで待たなければならない。今すぐWeb開発に携わりたい。」という思いから転職に踏み切りました。

 

Webやるよ!

というわけで7月から今の会社にきました。

最初につまづいたのはSQLです。「Excelと何が違うん?」くらいの感覚でしたが、データベースはシステムの肝です。最近はSQL書かんくてもDB操作できるんやで!っていうORマッパーがたくさんありますが、まだまだSQLを理解しながら書かないと大きいシステムだとすぐ遅くなります。(遅くなりました)

これでまずは基礎固めしました。

CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

CD付 SQL ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

 

あとかなりストイックな本ですが、これを1冊やればSQLへの苦手意識はなくなります。

改訂第3版 すらすらと手が動くようになる SQL書き方ドリル (WEB+DB PRESS plus)

改訂第3版 すらすらと手が動くようになる SQL書き方ドリル (WEB+DB PRESS plus)

 

 

Javaに関しては手元にこれを置いてました。ポケットブック的な使い方もできますし、普通に読んでいっても力つきます。

Java逆引きレシピ

Java逆引きレシピ

 

 

あとはこれとかは「果たして俺はオブジェクト指向を理解できてるのか?」の試金石みたいな感じで読みました。

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本

 

あ、あとこれは割と必読書なんじゃないですかね。プログラミングも本質はコンピュータとの対話ではなく人間とのコミュニケーションだという大切なことに気付かされる本です。

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

 

 

こんな感じでプログラミングの基礎的なところが固まってきました。あとは「Webサービスが作りたい!」というゴールに向かってひたすらに知識を積みあげていく(フレームワークだったりgitだったりフロント周りだったり)というところでようやく迷いがなくなってきたところです。

ちなみに、今はRuby on Railsでの開発に従事しています。

 

強引にまとめ

やりたいことが明確に見えてなかった自分はとりあえず2年目までITでも基礎的なところの学習に終始していたのですが、いまとなってはすごくよかったなと感じています。

というのが、業務でプログラミングを本格的にやるというのがここ数ヶ月が初めてだったのですが、意外と違和感なくこなせているからです。

恐らく、ある程度コンピュータのアーキテクチャやネットワークの動きを想像しながらプログラミングできたり、サーバ周りの設定でつまづいたりしないからなのではないかなと思っています。

文系から入社してすぐに何がやりたい?と聞かれてもそりゃ答えられないよ、って人も多いと思うので、そんなときは焦らずに基本情報、ネットワーク、サーバ周りといった基礎的なところをしっかりと固めていけば、いざこれやりたい!となったときにもスムーズに対応できるようになると思います。

 

あとがき

最近はnode.jsで社内のシステムを作ってみたり、Ajaxで遊んでみたりといろいろなことができるようになって、ほんと楽しいです。

とはいえ、まだまだ素人に毛が2本くらい生えたレベルの技術力だと思うので、もっと精進したいなと感じています。

 

確かに文系出身の方には簡単ではない業界だと思いますが、2年半くらいがんばれば結構楽しくなってくると思いますよ!

これまでの話と今後の話

音楽

大変ありがたいことに「わがままカレッジ解散したあとは何するんですか?」と自分のことを心配してくださる方が何人かいらっしゃいまして、たとえ1、2人であってもそれは自分にとって10万人くらいには相当するのでここで説明しようと思い至りました。

 

これまでの話

わがままカレッジというバンドをやってはいましたが、自分は普段は正社員としてIT系の仕事をしております。土日休みなのでいままでは平日でのライブはリハにも参加せず、退社即ライブハウス駆けつけみたいな生活を送っていました。

7月にはひっそりキャリアチェンジを狙って転職したりしていました。(SIer➡Web系開発といった、大枠で見ればちっさいキャリアチェンジですが)

このITの仕事というのが見事にハマっているというか、すごく楽しくて、おかげでバンドやっているとき以外も充実した毎日を送っていました。

これからの話

12月16日でわがままカレッジを解散したした後は、バンド的な予定はいまのところありません。

やりたいなあという気持ちもあるのですが、もっと仕事に没頭したいという気持ちや、週末は普通に遊んでいたいという気持ちのほうが強いので、しばらくはやらないんじゃないかなって気がします。

まあこれは決断を迫られるようなものではないと思うので、そのときそのときの自分の気持ちに忠実にやればいいかなと思っています。解散後に感じるものもまた違うと思いますし。

あ、インディーズバンドの取り置きのシステムはどうにかしたいですね。チケットとるのにメール送るんかいっていうのはあるので、そこをうまいことやるWebシステムとか開発したいです。

あとわがままカレッジのホームページに採用しようとしてたライブ予定自動管理ツールの開発が途中なのでそれも仕上げて誰かに使ってほしいです。

 

 

こうみえて大事な場面では大胆な変化をするほうの選択をしてきた人生なので、これからも変化を楽しみつつなんかおもしろいことをし続けようと思います。