プログラミング歴0年で気合だけで二週間でWebアプリを作った時の話
これはProgateアドベントカレンダーの一環で書いてます。
どうも、Progateという会社でエンジニアインターンしてるひろむと言います。
僕は2017/04/01から色々あってエンジニアインターンをしてるんですけど、その時に一つWebアプリを自作するという研修があったんですね。
作ったのはあまり詳しくはかけないけど、Progateの知識を使ってRuby on RailsとJavaScriptを使ってLINEアプリみたいなメッセンジャーアプリを作るというもの。
こんなやつ(めっちゃ簡素)
プログラミング経験0、Rubyってなんぞという状態からプログラミングを始めたんだけど、なんだかんだ色々あって二週間くらいで完成したので、その時に気をつけてたことについて書きます。
ということで2017/04/01、俺がProgateに入る前の時の話。
Progateに入る前については下の記事にちょっと載ってます↓
東大留年して5ヶ月経ったら人はどうなるのか - キャッチーを科学したかった
大抵は基礎を知らないか、基礎を使えてないか
たまに「プログラミングとか数学に強くないとできないんじゃね?」「センスないと無理なんじゃね」みたいなことを友達言われたりするけど、最初の時ほどそんなことない。
俺も受験する時やデザインの勉強にも思ってたけど、結局「センス」みたいなのが要求されるのは相当後のフェーズだと思う。
例えば受験数学の素数問題とかは「いやこれはセンスないと解けないだろ」みたいな局面に遭遇することもあるけど、そんなのも東大でも6問に1問だけだ。5問くらいは微分積分を極度の緊張状態で実行する、三角関数を正確に計算するとか基本的なことで構成されている。
Webプログラミングも同じで、「きちんとデータを受けわたす」「きちんと文法にそってコードを書く」みたいな基本的なことで構成されてることがほとんどだと思う。
で、結局それは別に大層な本とかは読む必要なくて、基本の文法にどれだけ習熟してきたか、つまりやった時間に比例するし、そこはセンスは全く必要ない。とにかく時間を大量に溶かせば大抵のことはなんとかなるな、と初心者だけどなんとなく思っていた。
なので、とりあえずProgateのRuby on RailsやJavaScriptとかを4周くらいやることから始めた。実際大抵の問題は「いやここ前に勉強したとこじゃん」みたいなことで解決することがほとんどだった。
というかそもそも何かができない時にセンスのせいにする人をたまに見かけるけど(2chとかで)、大抵は自分が知らないか、知ってるのにちゃんと使えてないかの二通りにだいたい原因があると思う、そしてそれを解決できるのは溶かした時間ただ一つしかない。最初の方こそセンスがどうとか考えず、とにかく基本を抑えられてるかを見直して手を動かすこと、それしかないと思う。
深く考えるのは後にして完璧は目指さない
ある意味前の章と矛盾してる気もするけど...
今改めて当時のコードを見てるけど、めっちゃひどい。
いわゆるクソコードだ。9ヶ月ぶりに改めて見てるけど何が何だかさっぱりわからない。マジでひどい。
なんでscopeの中で.as_jsonしてるんだ?
でも別にそんなんでいいと思う。
プログラミング勉強したての頃は絶対にいいコードはかけない。だって何も知らないんだから。
Rubyはそういう意味で初心者にめちゃくちゃ優しい。どんなひどいコードでもなんだかんだで動いてくれる。
要素の検証をした時にエラーが出まくる、別にそれでいい。
とにかく動くものを作ることが大事だと思う。細かいことを気にしていたら日が暮れてしまう。
大事なのは「あっこれ動くやん」「この機能は実装できたやん」その瞬間に、細かい単位で、早くたどり着くこと。
ユーザーのデータを表示したいのに、画像が表示されてない。みたいな時もあると思うけど、最初から画像が表示されてることの方が稀だと思う。
とにかく最初はユーザーの名前だけでいいから表示しきる、次に画像...と途中目標を細かく切り分けて、細かく達成して行くこと、最初から完璧な機能を作らないこと、それが大事だと思う。
で、結局どうすればいいのと
基礎を徹底的にやりこむ、とにかくざっくりと動くものを作る、これらは二つとも矛盾してる気もしなくもない。
でも大事なのはこの二つのバランスだと思う。
ドラムでも吹奏楽でもなんでもそうだと思う。基礎のルーディメンツをやるだけだと何も進捗がない。でも曲を練習して、ライブをするだけでも技術的な進捗はないと思う。
大事なのはそのバランスだと思う。基礎をしっかりする、とにかく雑でもいいから機能を実装する、その両輪をどれくらいの塩梅で回すか。どれくらい高速に回すか。
この二つを見ても、結局センスなんて必要なくて結局はかけた時間ただ一つだけだと思う。俺はこのアプリを作るのに二週間の全てを費やした。
初心者の人で「プログラミングってセンスいるんでしょ?」と思っている人がいるなら、とりあえず短い期間でもいいから、一気に熱中してやること、時間を後先考えずに溶かしまくることをオススメしたい。
特にオチなく勢いで書いちゃったけどそんな感じです。