山本ゆうごブログ

山本ゆうごの仕事メモ

Progateは素晴らしい。だが他にもやることがある。

こちらのエントリ読んで思うところを書いています。

「progateをどれだけやったら仕事ができるの?」に採用について考えてる側から答えたい – fukaminmin – Medium

自社でもエンジニア採用をしているのですが、Progateやプログラミングスクールを経て、プログラマーになろうとしている人は多くいます。

プログラマーになろうとしている人の背中を押してあげるという点では、これらの初心者向けのサービスは本当に素晴らしい。ところがいくつか困ったケースができはじめています。

Progeteのみを永遠と続けていて、エディタを触ったことがない

自社の採用は「未経験OK」とはしているのですが、プログラミング勉強中の人にはFizzBuzz(のような超シンプルなソース)はその場で書いてもらっています。メールで出題をして、結果をメールで返信してもらいます。

  • Progeteでしか書いてないので、エディタは持ってないのですがいいですか?
  • Progateの問題にないコードは書いたことがないので、実行せずに書いたまま出します

あとは、Progateの中でしか実行してないので、ターミナルそのものを触ってないという人もいます。カレントディレクトリの概念がないとか。

ターミナル、コマンドプロンプト、CLI、シェル いろいろいい方はありますが、「黒い画面」で「ファイルをいっぱい繋げていく」というのが、プログラミングの基本です。プログラミング「言語」に引っ張られすぎて、まるで語学習得のようになってないでしょうか。

Progateは料理教室みたいなもの

料理教室はこの世に必要なものですが、料理教室で「しか」料理をしてないというのはよくない。料理教室だと以下の訓練ができません。

  • 食材を買ってくる訓練
  • 食材を貯蔵する訓練
  • 調味料をそろえる訓練
  • 献立を考える訓練
  • 味見をして、レシピを改善していく訓練
  • 同じレシピを繰り返し安定して作る訓練

単に料理本をみて、そこから食材を買いに行くというだけでも十分カバーできることはあります。

そんなわけでProgeteの外で頑張らなくちゃいけないこと

Progateは初心者にプログラミング言語を網羅的に教えてくれるのだけれど、それだけだと足りない。

タッチタイピングの練習をしよう(まさかのここから)

今はスマホネイティブの人も多いので、PCで高速チャットをする機会がない。だからタッチタイピングができないまま、Progateをやりつづけていたり、合宿系のプログラミングスクールに行ったりする。タイピングスピードが遅いというしんどさだけではなく、画面をみながらタイピングができないということは、Googleの第二キーワードもエディタのコードアシスト機能も使えないということ。キーボード見ちゃダメ。絶対。TwitterもPCでやりましょう。Twitterはキーボードのみでほとんどの操作ができます。

新規のファイルからソースを書こう

ファイル名をつけるところからスタート。Proagateみたいに予めファイルが用意されていて、そこを修正するだけなので、ほとんどエラーがでない。実際にはタイピングしているとたくさんのスペルミスがある。requireで指定しているファイル名と、実際のファイル名が違うことなんてベテランでもしょっちゅうある。私はよく「俺たちはファイル製造マシーンだ」といい切ってる。新しいファイルを適切なディレクトリに作るという訓練をたくさんしよう。

読む能力を身に着けよう

どのプログラミング言語も、本屋にいけばテキストがある。テキストだからそれそのものは面白くもなんともない。だけどいずれは、テキストだけで勉強しなくちゃいけなくなるときは来る。プログラミングの楽しさって、「できあがったプログラムが便利だった」というところなので、正直勉強は苦しくても別にいい。そして殆どのドキュメントには公式ドキュメントがある。公式ドキュメントは最初はとっつきにくいだろうけど、読めるようになろう。

読解力というのは人それぞれかなりの差がある。「読むと頭に入らないが質問のキャッチボールでは頭に入る」という人もいる。だけどプログラミングというのは、どこまで行っても読み書きの世界。読み書きの得意な先輩方が作られた業界だから、覆しようがない。適切に質問をする能力が身についているのなら、人間相手ではなく、Googleに聞けばほとんどの答えが載っている。

ググり方を身に着けよう

タッチタイピングができるようになったら、Googleで検索して適切なサイトか適切な情報を引っ張り出す訓練です。Progateは中のテキストが充実しているので、困ったときにスライドにジャンプできます。しかし実際のプログラミングではそのスライドを探し出すところからやらなくてはなりません。適切なワードでググりましょう。ググったら上から順に「これは欲しい情報なのかどうか?」「まともな人が書いてそうか?」などの重み付けをしながら参照します。公式ドキュメントやstackoverflow(英語版)の評価の高い解答などは大事ですね。

エラーメッセージの「ちょうどいい部分」をググるというのも大事です。

環境構築が大変なら環境構築が楽な言語から手を付けよう

Webプログラミングといえば、Railsという相場観があるかもしれないが、残念ながらWindowsだとrbenvの段階で辛い。Railsまでいかなくても、単体のRubyなら十分手元で勉強はできる。またWebで公開して他人に触ってもらいながら学習を進めるのも効果的。そうなると、フォルダコピーだけで本番反映が可能なPHPの方が学習からフィードバックまでのサイクルは早い。ロリポップのようなレンタルサーバーでもすぐ動かせる。

仕事でエクセルをよく使うのなら、エクセルVBAから始めたって構わない。繰り返しや分岐などは全く変わらない。VBAのエディタはIDEとしても完成度が高い。本当にプログラミング初心者ならVBAから初めて、Web系言語にシフトしても全然遠回りじゃない。

手元に自分のサンプルソースをたくさん作ろう

どんなリファレンスよりも、自分で書いたコードが一番あとで参照しやすい。だからできるだけ自分の手元においておこう。絶対あとで見る。Progateを一通りやったら、全く同じ課題を、自分の手元のPC上で書いて、手元のPC上で実行するというのもいい。絶対別の苦労がでてくる。だけどその苦労は仕事でエンジニアになった時には乗り越えなくちゃいけない苦労。

手元でたくさんのサンプルファイルを置くのは、「うまいこと動いているバージョン」「動かないバージョン」と複数バージョンを置いて比較をしながら学んでいくことができます。プログラミングの最初は、「Hello World」と出力するだけのプログラムですが、「いろんな文字列を日付としてパースするサンプル」のようなサンプルソースはベテランになってからも手元でちょこっと作ります。小さくても「手元で動いたプログラム」がリファレンスとしては最高です。

自分ひとりが便利なものから始めよう

プログラミング初心者が作りたいものというと、Railsで作った何かしらのコミュニティサイトを上げる人が多いです。ところがコミュニティサイトはプログラミングだけではなく、Webサーバーのセットアップや管理から、掲示板が荒れした時(もしくは誰も来ない時)のコミュニティ運営まで幅広いスキルが必要になる。PDCAサイクルが一周する時間が長すぎます。

手始めにおすすめなのは、自分がよく見るサイトのスクレイピングツール。定期的にWebサイトを巡回して、欲しい情報があれば、そのサマリーを自分あてにメールで送ったりするツール。このレベルなら、Rubyでクラスなんて作らなくてもできちゃう。継承だオーバーライドだインスタンス変数だとか知らなくても、誰かの生活を便利にすることはできる。自分でやり始めて「あれ、修正すると既存機能が壊れやすいなぁ」とか「部分的なテストがしにくいなぁ」みたいな課題感を持ってから、クラスを覚えたって構わない。まずはプログラミングによって人が幸せになるのだというところは実感したほうがいい。

その点では、エクセルVBAは職場の人が即幸せになる可能性があるので、入り口としては馬鹿にできない。

環境構築もいずれはチャレンジしよう

「環境構築だけがクリアできない課題」という言い訳はあるものの、「エラーメッセージが出る→ググる→ちょっと直してみる→前回と比較してみる」というステップはエンジニアの仕事そのものです。「適切な情報源から適切な文書を取り出して読む訓練」ができれば、環境構築もできます。