プログラミング初心者が半年間でWebサービスをリリースするまでの道のり

制作関連

去年の10月に会社を売却し、30歳無職実家暮らしになりました。

その際、掲げた「半年間で自分のサービスをリリースする」という目標が何とか形になったので記事にします。

当時はデスクトップアプリを想定しており、Webサービスの予定はありませんでした。

この記事は以下のようなプログラミング初心者の方向けに書いています。

  • ・なんとなくプログラミングに興味があり、学ぼうか迷っている方
  • ・プログラミングができるようになりたい方
  • ・プログラミングスクールの入校を考えている方
  • ・自分のサービスをリリースするまでの具体的な方法を知りたい方

この半年、一言で表すと微々たる希望だけを信じてほぼ絶望とともに歩んだ半年でした(笑)

そしてこの絶望は死ぬまで僕の側に居続けるんだろうなぁと思います。(ポジティブな意味で)

 

作ったWebサービス

  • 概要:ヤフーショッピングでよく検索されているワードの虫眼鏡キーワードとさらにその関連キーワードを一覧表示するサイト

 

  • 使用した技術
    プログラミング言語:Python
    Webフレームワーク:Flask
    デザイン:Bootstrap
    データーベース:PostgreSQL
    サーバー:Heroku

※技術的な仕様について、需要があれば別記事にまとめる予定です。

 

作った経緯

そもそも僕はプログラミングが好きだったようです。

高校生の頃なんの見返りもないのに、少ないお小遣いの中からHP作成本を買い、当時ハマっていたハンゲーム麻雀グループのコミュニティHPを作っていました。

そんな感じだったので、大学も情報系の学科に進んだのですが、そこで学んだJavaがイメージと違っていて、挫折してプログラミングが好きだったことを忘れてしまっていました。

だって、ただHello worldって文字出すのだけで、やたら手間かかるんだもん(笑)

HTMLやCSSみたいに、目に見えてわかる結果がすぐに表示されると思ってたんです。

 

これなら、Pタグで囲ったほうが早いし、for文の九九の表だってHTMLのテーブルでええやんって思って、「なんの役に立つの!?」って感じで止めてしまいました。

ここを我慢すれば楽しい世界が待っていたのに…

 

ただ大学卒業後も、完全にプログラミングへの興味を忘れるわけではなく、ちょこちょこ試しては「あ、やっぱあかん」って投げ出してを繰り返していました。

そこで今回、まとまった時間がとれたことで、この因縁を断ち切るべくプログラミングに再度挑戦してみました。

 

YA!FOIを題材に選んだ理由

また、今回の題材を選んだ理由ですが、5年ぐらい前、初めて自分でお金を稼げた経験がトレンドアフィリエイトというやつでした。

 

旬な話題の虫眼鏡キーワード(サジェストキーワード)を狙ってブログ記事を書き、爆発的なアクセスを呼びグーグルアドセンスのクリック収入を得るというものでした。

その後、独立して始めたネットショップや化粧品通販でも、商品需要を調べるのに、虫眼鏡キーワードは常に利用しておりました。

当時、毎回手動で探しては、「一気に調べられたら楽なのになぁ」と思ってましたので、今回昔の自分を救うべくYA!FOIを作成しました。

 

勉強開始前の知識

今回、腰を据えて勉強をする前の知識は以下の通りです。

  • HTML/CSSでHPを作って公開はできる
  • Java言語ぐらいしか知らない
  • HTMLもJavaもSQLも同じカテゴリ(使用目的)だと思ってる
  • if文とfor文がなんとかわかる程度
  • for文で九九の表を作れって言われたら悩むレベル

興味があるくせにこの知識量で抑えるほうが難しいですよね…笑

 

Webサービス完成までの道のり

勉強サイクル:

  • カフェで5時間前後(ほぼ毎日)
  • その後自宅で2-4時間
  • 週1で完全な休み

1000時間で道は開ける説を信じて、とにかく1000時間やってみようと考えていました。

 

11月 Python期 「何がわからんのかすらわからん…」

まとまった時間がとれたことで、プログラミングを学ぶことは決めたもののプログラミング言語選びには迷いました。

そこでネットで調べて、全く触ったことないけど良さそうな言語っぽいPythonを選びました。

Python本を3冊ぐらい買ってゲーム作成を題材に取り組みましたが、眺めているだけで時間が過ぎていきました(笑)

ググり力はあると思っていましたが、プログラミングについては何をどう調べればいいかすらわからなかったんです。

 

11月末日 オンラインプログラミングスクール入校 「これで万事解決や!(誤った希望)」

このままじゃいかん、と思い、思い切ってオンラインプログラミングスクールに入校しました。

とりあえず自分のサービスのリリースは忘れて基礎からのやり直しを決意しました。

 

オンラインプログラミングスクールは受け放題的なものに申し込んだので、いろんな言語の選択肢がありましたが、ここでは、大学時代に挫折したJavaを選びました。(Pythonはありませんでした)

 

当時、プログラミングスクールの選択でミスったなぁ~と思ったのが、スクールがWebサービスの作成までサポートしてくれると思っていたところでした。

実際は、本当に”プログラミング”しか教えてくれず、デプロイやDBとの連携など一番手間がかかるところは全部、独学でやりました。(これも需要があれば別記事にまとめます。)

 

12月 Java期 「オブジェクト指向はわかってきたけど、これで自分のサービスリリースできるんかいな…?」

スクール講師の方たちは知識豊富で、態度も柔らかく基礎的な質問にも丁寧に答えて下さりました。(もちろんそうじゃない人もいましたが…。)

おかげで、独学じゃ全く理解できなかった知識がクリアになり、質問させていただく度に成長を実感しました。

 

ただ前述した通りスクールが教えてくれる所は、ローカルでできる事のみで閉じており、Railsですらデプロイには一切触れていませんでした。

でも、大金を払って入校したし、僕には自分のサービスを作るという目標があるので諦めたくありません。

だから、何度か講義を受けて親しくなった講師の方たちに思い切って質問してみました。

 

僕 「あの、教科書外の事を聞いて申し訳ないんですが僕は自分のサービスをリリースしたいんですがどうすればいいんでしょうか?」

 

講師の方1「Javaでデスクトップアプリを作りたいなら別にSwingを学ばなければいけません」

講師の方2「一言でWebサービスといってもIaaS PaaS SaaSがありまして…」

講師の方3「Cloud9で発行されるURLでも一応Webサービスですよ。」

 

僕「」

 

1月 JS/PHP/Ruby/Rails期 「あかん、Javaでやろうとしたらめちゃ大変そう。てか、プログラミング自体が嫌いになりそうやから、別の言語触ってみよ」

Javaを学ぶ中で、プログラミングそのものに対しての理解はかなり深まりました。

ただ、依然として、ローカルの環境に閉じてプログラミングをやっており、どうやってサービスとしてプロダクトにするのかイメージがつきませんでした。

このまま文字列操作や、誰も登録できない会員サイトを作り続けても、またプログラミングが嫌いになってしまうと思って、別の言語に移ることを決意しました。

 

まず、JavaScriptをやり、その後、PHPをやりました。

Javaとは違い、ブラウザですぐ目に見える結果が確認できるので、だんだんとプログラミングの楽しさを思い出してきました。

ただ、JavaScriptにしても、PHPにしても、「これでWebサービスができる!」って実感を持つことができず、かすかに見えていた希望が再び絶望に変わりかけていました。

 

そうして、最後に残ったプログラミング言語のRailsにたどり着きました。

 

2月3月 Railsどっぷり期「神講師出現!」

ここが転機でした。

プログラミングスクールをいくつか検討した時、ほとんどの所がRailsを推しており何となく存在は知っていましたが、「フレームワーク」が具体的にどういうものかわかっていませんでした。

現に、Railsを学び始めた時も、フレームワークの概念を理解していなかったので、いちいちRailsのルールに躓いて学習が思うように進みませんでした。

 

ただ、ここで神講師に出会います。

この方に出会ったおかげで、Rails学習が一気に捗りました。

 

そして、Railsという一つの完成形を学んだおかげで、「フロントサイド」「サーバーサイド」「データベース」「サーバー」など個々に独立していた知識が徐々にひも付き一つになってきた感覚が出てきました。

 

3月の後半あたりから、プログラミングスクールの講義は一切受けなくなりました。

この頃には、エラーが出ても自分で調べて解決できるようになっていたからです。

 

4月 Python期再び 「おおおおお!わかる!わかるぞ!散らかってた知識が一体化した!!」

Railsで作るWebサービスといえば食べログとかツイッター的な奴が多いかなと思います。

しかし、Railsを学んだといっても2か月そこら。

 

この程度の知識では形だけそれっぽい自己満足サービスになりそうでしたし、ユーザーから入力を受け付ける事の危険性を前述の講師の方から教えてもらってたので、ユーザー入力がなく実用的なサービスを作ろうと考え今回のWebサービスを思いつきました。

最初はRailsで作っていたんですが、データの取得がうまくいかず、Pythonで試してみると上手くいきました。

 

ここで驚いたのが、すんなりPythonを扱えるようになっていた自分です。

Rails(Ruby)とPythonは記述が似ているのもあると思いますが、Pythonに移ったという感覚すらなく、さらにFlaskというミニフレームワークがあり小回りも効いて自分好みだったので、そのままPythonに切り替えました。

またFlaskもRailsと同じ概念(MVCモデル)で構成されており、Javaで学んだオブジェクト指向もあり、今まで学んだ知識が一気に統合され、成長曲線で言うブレークスルーポイントを体感しました。

 

 

Pythonに移った後も、DBとの連携やHerokuへのデプロイなど一筋縄では行きませんでしたが、都度調べなんとか形にすることができ、今に至ります。

 

半年間のプログラミング学習を通してわかった5つのこと

最短経路なんて存在しない

Pythonから色々な言語を経て、結局Pythonに戻りました。

浮気せずにPythonだけやってればもっと早かったのでは?と思うかもしれません。

 

でも、僕の場合、言語を変えて、重要な概念を学んだのが良かったと思います。

Javaで「オブジェクト指向」を学び、Railsで「MVCモデル」を学んだおかげで、やっとWebサービスの全体像がつかめるようになりました。

どちらも単語にしたら一言ですが、理解できるようになるまで、かなり時間がかかったのでPythonで両方とも学ぼうとしたら、頭がパンクして挫折してた気がします。

 

「3か月でオリジナルのWebサービスが作れる!」みたいに宣伝しているスクールもありますが、確かに、それは可能です。

RailsでScaffoldを叩くもよし、スクール側が用意してくれたテンプレートをいじるでもよし、作ることは作れます。

でも、その楽した分は、必ずエラーという形で自分の前に現れ、返済を迫られます。

これは僕の場合が、まさにそうでした(笑)

 

例えば、Railsなどの新しい技術は、色々な技術の集合体であり、Railsだけ学ぼうとしても、結局はその構成技術について理解を深めないと前に進めなくなります。

だから結局、学ぶのが後になるか先になるかの違いで、大学時代の僕みたいに途中で投げ出すことさえしなければ、必ず誰しもが同じ道を通らなければいけないということです。(誰しも同じ学習コストを支払わなければいけない)

これに気付いてからは、わからないことやエラーで詰まっても、「今、コストを支払うべきタイミングなんだな。」と頭を切り替えることができ、エラーに挫けて学習が止まってしまうような事がありませんでした。

 

現役エンジニアでも知らない人は知らない(知ってる人は努力してるだけ)

プログラミングスクールで何人もの現役エンジニアの方と接して良かったことは、「プログラミングに詳しい人はその分、努力しているだけ」と知れたことです。

 

現役エンジニアの人に、質問させてもらうと、全部に答えられるわけではありませんでした。

その際は、講師の方も僕と同じようにグーグルで調べていました。

 

また、Railsについては、前述の神講師以外は、最近アサインされた方が多く、僕のほうが理解が進んでいる箇所もあったぐらいです。

 

僕は会社に勤めてプログラムを学んでいないのがコンプレックスでもあり、プログラムを学ぶ上で致命的な欠落なんじゃないかと思っていました。

 

でも、実際は、現役エンジニアであってもわからないことはわからない。

現役エンジニアがプログラミングに詳しいのは、会社という環境で様々な経験をして、更に時間も割いている(9-17時)だけであって、現役エンジニア=プログラミング上級者というわけないんだな、とわかりました。

 

この結論は、僕の大きなモチベーションになりました。

だって、努力の土台の上に成り立っているのであれば、僕も同じぐらい努力すればいいだけですからね。

自分は、自分でコントロールできます。

 

でも、会社に勤める事は、会社側の採用意思が全てであり、これは自分でコントロールできませんからね。

 

プログラミング学習の9割は、エラーへの試行錯誤である

高校生の時、独学でC言語(多分)を学ぼうとしたことがあるんですが、教科書の最初の環境構築でエラーが発生して、つまづきました。

そして、「なんでやこのクソ本。教科書通り動かんとかありえんやろ」と思って投げました。(高校生なので教科書が正義)

 

でも、今回改めてプログラミングを学び直してみて「教科書通り動かないのが当たり前」なんだな、とわかりました。

そして、そのエラーこそが自分を成長させてくれるきっかけでした。

 

また、一般的にエラーと言えば、多くても数パーセントぐらいのイメージかと思いますが、プログラミング学習では初めから9割方思い通りに動かないと思っていた方が良いと思います。

 

「くそーエラーだ…」といちいちエラーのたびに挫けていては多分モチベーションが保ちません。

それよりも最初からエラーが発生する事が前提で、かつ、それは成長の機会であり、また必ず支払わなければいけない学習コストを支払うタイミングであるとわかっていれば少しずつでも進めますので、挫折してしまうことはないのかなと思います。

 

あと大切なのは「きっとエラーは解消されるという確信」です。

全く真新しいものでない限り、その技術は世の中に実現されているものなのですから、時間や手間を限定しなければ、必ず解決できるエラーなのです。

 

プログラミング能力は全体的に底上げされていく

いろんな言語を学びましたが、一つ学ぶにつれ他の言語への理解も深まっていました。
学習を始めたばかりは、言語が変わると何をやっているか理解することができませんでしたが、今は全く触ったことない言語でも、以前よりかは何をしているかわかるようになりました。

だから、最短経路とか、効率とかは置いておいて興味を持ったことにはすべてやったほうが良いと思います。

 

あらゆる技術は、先人たちが、当時の悩みを解決すべく全力で考え抜いた末の叡智の結晶なのですから、学んで無駄なわけはないのです。

その経験を経て、改めて振り返ってみれば景色は全く違ったものになっていました。

 

好きじゃないと無理

無理という言葉は嫌いですが、あえて「無理」という言葉を使います。

 

今、世の中はプログラミングブームです。

「全ての人がプログラミングを学ぶべき」なんて意見も言われていますが僕はそうじゃないと思います。

パソコンが好きでもない人にとっては、そもそもPCに数時間も向かうこと自体が苦痛でしょう。

それなのに、「プログラミングを学ぶべき」というのは、義務教育の押しつけと何ら変わらないと思います。

 

僕は、「人間にはやりたいことをやる義務」があると考えています。

やりたいことをやる、というと甘ちゃんみたいなイメージがありますが、そうじゃありません。

 

やりたいことをやるのは、ご存知の通り苦境です。

お金を得られる保証もありません。

社会的地位(資格や昇進)が約束されているわけでもありません。

人との繋がりだって勝手に増えるものではありません。

世間からは白い目で見られます。

たまたま、やりたいことが世間の価値観と一致していた場合はこの限りじゃないですが、その可能性は低いでしょう。

 

でも、これもご存知の通りやりたいことをやるのって楽しいんです。

楽しみの方が大きいから、苦境に居続けることができるのかなと思います。

 

だから、これからプログラミングを学びたいと思っている人については、「好き」か「嫌い」でまず判断して欲しいと思います。

 

世の中には無限の可能性があるのに、「流行ってるから」とか「必要だから」で選んでしまうのはもったいないです。

それに、「やりたいことをやる義務」を果たしていません。

 

学生時代、勉強をして東大に進めば良い事は誰しもわかっていたと思います。

でも、身体が動かなかった、でも、求められた。だから辛かった。

 

でも、今はそうじゃない。

苦境を超える楽しさを見つければ、「やりたいことがやれる」環境は整っているんです。

 

そうして、自分の価値観で生きられる人が増えれば、色んな人が、お金とか地位とかの固定観念から自由になり、違う事を理解し合える優しい世の中ができると思うのです。

 

僕は、一生やりたいことをやりたい。

それが、一生プログラミングであるかはわからない。

 

でも、やりたいことをやる、という姿勢は崩したくない。

これが人間に生まれた以上の義務であり、より良い世の中を作ると信じているからです。

 

 

最後はこの言葉で締めくくりたいと思います。

 

wisdom: knowledge that is gained by having many experiences in life

(知恵とは、人生のたくさんの経験から得た知識)

 

これは、プログラミング学習で唸っているうときに、どこかで見つけた知恵の定義です。

知識は「経験」によって知恵になるって解釈が気に入ってしまいました。

プログラミングの知識は使うことで知恵になります。

知識を知識で終わらせることなく、ガンガン使って知恵にしましょう。

 

きっとそれは、プログラミングだけに留まらない、人生の知恵もなりえると思うのです。

コメント

タイトルとURLをコピーしました