※本記事は、2015/6/29に投稿されたTechAcademyマガジンからの転載記事である。


本記事は、非エンジニアサミット「プログラミングをシゴトにする」の第2回イベントレポートである。このイベントは、これからプログラミングの学習を始める人を対象に開かれたものだ。ゲストは、クラウドワークスCTOの大場氏、Fablicの堀井氏。第1回は、彼らの講演の様子を書き起こした。

第2回である本記事では、大場氏と堀井氏によるパネルディスカッションをお伝えする。


「これからのエンジニアに必要なスキル」とは

続いて、大場氏、堀井氏によるパネルディスカッションです。モデレーターはTechAcademyを運営するキラメックス株式会社の代表取締役社長の村田がつとめました。

パネルディスカッションでは、事前に参加者から募集した質問をもとに回答いただきました。質問はこれからエンジニアになっていくことを想定して、下記のセクションに分けて進めています。

  1. エンジニアになる前の段階
  2. エンジニアとして働く段階
  3. エンジニアとしてさらにスキルアップする段階

 

1. エンジニアになる前の段階

村田:それではパネルディスカッションを始めていきます。非エンジニアの方のプログラミング学習が一歩前に進むきっかけになればいいなあと思っています。最後には会場のみなさんからの質問も受け付けます。まず1つ目の質問ですが、「どのプログラム言語から勉強するべきか」という疑問にお答えいただこうと思います。これみなさん非常に悩ましい点だと思うのですが、このあたりお二人はどのようにお考えでいらっしゃいますか?

堀井:最初はPHP、Perl、Rubyあたりから始めるといいのかなと思っています。理由は、コミュニティが活発なので困ったらそういうコミュニティに相談して聞く環境がある点ですね。あとは、実際に企業に入ってみて使われていることも多いです。実際、私が新卒で入った会社も主要な言語がPHPであとPerlとRubyも少しあったので就職するときも有利だと感じています。

村田:なるほど。大場さんはいかがでしょうか? エンジニア歴も長いと思いますが。

大場:最初に触る言語としては僕はなんでもいいかなと思ってるんですけど、子供向けや教育向けと呼ばれる機能が制限された言語よりは汎用的な言語を使った方がいいかなと思っています。それがコンピュータが本来持っている能力を引き出せる可能性があるという理由です。なので、あんまり学びやすさとか初心者向けといった軸で選ぶよりは、なんでもできるような言語を選ぶのがいいのではないでしょうか。

村田:では、続いてプログラミングを勉強する段階になった際に「どこから着手すればいいか」という質問に入っていきたいと思います。具体的にあれば教えていただけますか?

大場:さっき話したことと関係しているのですが、一つのサービスを成り立たさせるためにはいろんな技術の積み重ねがあって、一部分だけわかっててもサービスとしては成り立たないことがあります。だから、どこからというよりは「これが作りたい」とか「こんなサービスをやってみたい」といったところを目指して、それに足りないのはどこなのか、簡単そうなのはどこなのか、一番難しそうなのはどこなのか、そういう切り分けでちょっとずつ自分がどこにいるかわかるように進めるのがいいんじゃないかなと思います。

この言語を覚えたいといった学習の仕方だとモチベーションが続かないと思うんですよね。

村田:それはありますよね。

大場:コンピュータという分野も3ヶ月勉強した人や10年仕事で使ってますという人とか経験にいろいろあっても、そのなかで「マスターしました」って自分で言える人はあんまりいないと思うんですよね。すごい奥が深い世界なんで。だからこの言語をマスターするまでやろうとなると、結構どこまでいっていいかわからない。なので、道具として何をやりたいか、というところを目標にすると”続きやすい”んじゃないかなと思います。

村田:目的ありきでその言語をツールとして使って、形にしていくところから足りない部分を補うのがいいんじゃないかということですよね。堀井さんはいかがでしょうか?

堀井:大場さんも仰ったように、1つを学べば終わりというものではないですね。プログラミングをするモチベーションを保たないと結局意味がないので、自分がこういうのがあったら便利だなというものを、とりあえず手を動かしながら作るのがいいと思います。

大場:さっきTechAcademyのオンラインブートキャンプの説明の中で、Twitterクローンを作るというお話しでしたが、あれってどこまでのクローンなんですかね? 投稿するだけだと簡単だけど、Twitterを真面目に作ると結構難しいと思うのですが。

村田:Ruby on Railsチュートリアルに載ってるくらいのマイクロポストみたいなレベル感ですね。ユーザ登録ができてフォローして、その投稿がそれぞれタイムラインに一列に出てくるクローンです。

大場:フォローもするということは、ある程度データベースの関係性もグラフみたいなところもやるんですね。そういう意味では歯ごたえのある感じですね。

村田:そうですね。実際に世界中で使われているようなサービスに近い形で作る方がモチベーションが上がると思っています。まったく使わなそうな図書館データベースを作るよりも、Twitterクローン作る方がイメージがわきやすいし、なにより面白いなと感じてもらえるはずです。プログラミングを学習するときのモチベーション、特に一人で勉強する時間が長いので、自分がやる気になるようなところから始めるのがいいのかもしれませんね。

OLYMPUS DIGITAL CAMERA

村田:では、次にいきましょう。「プログラミング習得をする上でつまずきやすいポイントとその解決方法」について聞いてみたいと思います。堀井さんいかがですか?

堀井:つまずくところいっぱいありますね。特に、環境構築が1つのハードルになるかなと思っています。弊社でもインターンに来てもらうことが多いのですが、プログラミングを書き始めるまでの開発体制を整えるところで時間がかかることがあります。

ただ、いまはEC2とかHerokuとか、必要なパッケージが揃っている状態で始められるものもありますね。無料プランを使うか、少しお金を出せばサーバが簡単に手に入るので、うまく使って最初のハードルを乗り越えてから本を一冊写経してみるといったことから始めるのがいいのかなと思ったりしますね。

大場:個人的には、難しいところって「技術と技術の境目」の部分かなと。

たとえば、Rubyだとアプリケーション開発の知識がいるし、データベースにアクセスするときにSQLみたいな言語をわかってないといけないし、両方わかってないといけないようなシチュエーションがサービス開発の中でたくさんあります。両方の知識が求められるところでハードルがぐっと上がって、新しいことを覚えるのが難しいのかなと思いますね。その解決方法としては、「繰り返す」ということですかね。繰り返していると、「これはこのことだったんだ」みたいに理解できることもあるので、反復するところがコツかなと思っています。

もう一つ、つまずきやすいところとしては、技術の中でそもそも難しいところです。C言語だったらポインタ、Rubyだったらブロックとかですね。そもそも考え方が難しいものがいくつかあって、それを変なたとえで理解しようとしても、結局どこかでウソが入っていたりして「本質的には理解できない」ところがあります。それは難しいものだと受け入れて、わかるまで何回も繰り返すところが必要なんじゃないかなと思っています。

村田:そうですね。僕も最初はPHPから始めたんですけど、クラスみたいな概念がそもそも理解できなかったです。そのときは、10日くらいわからないまま続けたら理解できました。繰り返しながらやっていくと、ピーンとわかるときがくるので諦めずに繰り返すのが重要ですね。

大場:悟るまでですね(笑)

村田:悟りが降りてきますからね。さて、次の質問ですが、「おすすめのプログラミング学習方法はありますか」ということです。いま繰り返しやるとありましたけれど、もうちょっと具体的に聞きたいと思います。大場さんは仕事を始めてから学んだという感じですか?

大場:まあ、プログラムを書くのがもともと好きで、ゲームを作るなかで学びました。Windows3.1が出たときに、「マインスイーパ」というゲームが入っていたのですが、当時Windowsが動くパソコンがすごい高かったんですよね。なので、みんなができるように、MS-DOSのキャラクターベースでできるマインスイーパを開発してみんなに配ったとか、そのなかでいろんな技法みたいなものを学んでいったというところです。

いまは、1つのアプリケーションを成立させるのに本当にさまざまな技術が必要なので、「競争仲間であるとか教えてくれる先輩とかそういう人がいる環境に身を置く」ところが大事かなという気がします。

堀井:小さいところから考えて手を動かすのがいいかなと思っています。会社に入ってみて思ったのが、システムって完璧じゃなくてすでに困っている人がいるんですね。そこで私もわからないなりに、管理画面にあったらいい機能とかを他の部署の人から聞いたりして、改善や機能追加できるところを調べながら徐々に開発技術を学んでいくところがありました。

あとは、勉強会もおすすめです。新卒で入った会社では勉強会を定期的に開催していたので、自分の回が来たら学んできたことを発表しなきゃいけない場がありました。そういう半ば強制的にでも自分のスキルを底上げするようなイベントに身を置いて、ステップアップしていくのはいいかなと思います。

村田:なるほど。僕も自分で学習してきていたときは、何かインターネット上で気になるサービスをまねてそれと同じ動きを作ってみることをしていました。あとは、わからないところでずっと迷ってるとやる気がなくなっていくので、すぐ人に聞くというのは結構重要ですね。僕は新卒で楽天に入ったので、エンジニアの部署にいる同期を休日にカフェとかに呼び出して、わからないことを聞くというのを結構な頻度でやってました。

大場:あとは、オープンソースの開発に関わっていくこともいいですね。そんなに難しくなくても、手が足りないというプロジェクトはたくさんあって、それこそプログラムだけじゃなくてドキュメントの追加みたいな簡単なところから手伝うこともできます。それでコミュニティの人たちの顔がわかってきて、だんだん開発に協力していくなかで、いいプログラムをたくさん読んで、自分がやるならどうするか、みたいなことを考えたりすることがスキルアップにつながると思います。

村田:なるほど。ありがとうございます。続いて、「エンジニアとして働く段階」について伺っていきたいと思います。


次回も引き続きパネルディスカッションの様子を伝える。テーマは「エンジニアとして働く段階」について。実際に働いている場合、「優秀なエンジニア」とはどういう人を指すのか、「採りたいと思うエンジニアの特徴」とはなどについて、ディスカッションする。

logo

TechAcademyマガジン 編集部
[原文4]