プログラミング

【G’s Academy LABコース体験記】21日目

JS選手権で一旦フロントエンドは終了。

PHPを学習し始め、サーバーサイドに触れる。

元Googleのエンジニアの知人がPHPをあまりいいように言わないので、
正直ネガティブな印象を持っているが、
意見を言っていいのは、自分である程度使えるようになってからだ。

そう思い直し、とりあえずPHPの勉強を始める。

来週の火曜日までに、サーバーサイドの基礎、
アンケートフォームの作成が課題だ。

僕が最近気にしているのは、
卒業時にちゃんとGoogleに入社できるレベルになれるかどうかだ。

僕は起業するので、全然関係のない話だが、
レベルとしてそれぐらいになっていないとまずいと思っている。

なぜなら、サンフランシスコのHack Reactorでは、
卒業生がGoogleやFacebookに入社しているからだ。

彼らは三ヶ月しか勉強しないので、
六ヶ月も勉強する僕が入れるレベルに到達していなかったら、
それは相当問題だろう。

世界で使われるプロダクトを作る人間が、
そんなことすら出来なかったんじゃ、お話にならない。

いやいや、Hack Reactorの卒業生で、Googleとかに入れるのは一部だし、
もともと数学とかComputer Scienceとかを専攻していた生徒だ、という話もある。

だが、僕は機械工学専攻で、数学も曲がりなりにも勉強していたし、
電子回路も勉強していれば、C言語だってやっていた。
すっかり忘れてしまったけれど、コンピュータのハードウェア的な仕組みも勉強したことになっている。

しかも、英語じゃなくて、僕の思惑通り母国語で勉強している。

言い訳が一切できない状況なのだ。

これで彼らのレベルに到達していなかったら、
僕は一体何なのだろう。

ただ働かずにサボっているだけじゃないか。

五ヶ月後に「ああ、僕はサボっていたんだな」なんて思うことがないよう、
改めて残りの期間の使い方を、ちゃんと目的立脚で考え直そうと思う。

【G’s Academy LABコース体験記】20日目

ちょっと今回は最近の心境を整理する目的で徒然と。

JS選手権の発表だった。

僕が作ったプロダクトはこれだ。

Shelf Share
(スマホの画面サイズ推奨。でもスマホで見ても綺麗じゃないかも)

名前通り、書籍のシェアサービスだ。

僕の理解では、シェアサービスが成立するのは、
・稼働率が低い
・他人と共有することに抵抗がない
という条件が必要だが、
書籍はこれに当てはまる。

周りの反応も悪くなかった。

個人的には、今回の発表に向けて、
やりきることができなかったととても反省している。

自分の中で何がいけなかったのか、と思ったときに、
クラスメートに言われた一言が脳裏をよぎった。

「リバースエンジニアくんって、なんでもスマートにこなすよね。」

…これだ。

この言葉は、僕が中学二年のときに、
担任の先生に言われた言葉と全く同じだ。

クラスメートの方の真意は分からないが、
先生に言われた方の意味は今でも覚えている。

「本気出してないよね」

という意味だった。

当時は、本気を出さないでも割りといい成績を出せるというのは、
ただの褒め言葉だと思っていたのだが、そういう意味ではなかった。

言語化が非常に難しいのだが、
確かにこの一ヶ月間、僕は本気を出していない気がする。

課題はちゃんとやったし、
だが、本気を出せていない明確な証拠が一つある。

JS選手権の順位付けで、
僕は全く賞を取ることができなかったのに、
全く泣けなかったのだ。

僕は結構泣き虫で、本気の勝負は勝っても泣くし、負けても泣く。
いや、いい歳したおっさんになってきたのだから、
まあ泣くことはなくなったにしても、
本気の勝負で負けたら悔しいと思う。

だが、悔しさがほとんどなかった。

本当に僕の自信作で、結果の順位に不満があれば、
僕の性格から言うと絶対に抗議するはずだ。

なぜこのプロダクトの素晴らしさが理解できないのか、と。
採点基準に不満すら言いかねない。

でも、僕はそんな気持ちにすらならなかった。

僕が最近本気を出して泣いたのは、
大学四年生のときの部活の引退試合で、
天秤の勝負に勝ってリーグ昇格を決めたときと、
就職活動で内定をもらったときぐらいだ。

以来、僕の本気というのが何処かに行ってしまった。

いや、本気じゃないというのも、
ちょっと違うような気がする。

別にサボったわけじゃないし、
僕の中では結構イケてるプロダクトを作ったし、
時間の許す限り真面目にやった。

だけど、このプロダクトが世界一最高なんだと胸を張れない。

うまく言えないけれど、なんか無難すぎるのだ。

自分の出来る範囲で、うまく着地させることに、
あまりにもこだわっている感じがする。

正直、この一ヶ月で僕は新しいテクノロジーが扱えるようには、
そんなになっていない。

これはまさに「課題をこなしている」状態だ。

何が原因でそうなっているのか、正直よくわからない。

確実なのは、僕が今作るプロダクトには、
魂がこもっていないということだ。

挑戦が感じられない。

作るものが、本当に作りたいものじゃないからだろうか?

失敗を恐れているのだろうか?

困難な技術に挑戦して、プロダクトの完成が間に合わないことを気にしているのだろうか?

僕はいつからこんなにつまらない人間になったのだろう?

そんなことを恐れていては何も身につかない。

とりあえず、次の一ヶ月は「背伸び」をテーマにしようと思う。

まあ、そんなことをしなくても、
ここからは僕が完全に未知の領域なので、
背伸びをせざるを得ない状況になるのだろうけれど。

【G’s Academy LABコース体験記】18日目

今日は自習。ひたすらプロダクト開発だ。

先に暴露すると、僕のプロダクトは、
マンガのシェアサービスだ。
発想の起点は、
僕の家に大量に眠っているビジネス書などの書籍だ。
とても残念なことだが、僕の趣味は
本を読むことではなく、本を買うことなので、
沢山の本が一度も僕の脳に刺激を与えることなく、
ただのパピルスの加工物になっている。
稼働率の低い典型的な私有物である。
シェアサービスの基本は、僕の理解では
稼働率が低い、
他人と心理的に共有が可能である
の二つの条件を満たすことなので、
書籍は該当しそうだ。
それで、図書館的な箱を用意して、
そこにみんなが書籍を置いておいて、
人のやつも自由に取り出せるようにすれば、
とてもいいじゃないかと思ったのだ。
お金は、本を寄贈してない人が、
漫画喫茶的に利用してもらうときに徴収すればいい。
これはシェアサービスが台頭しはじめた二年前に思いついて、
ずっと起業アイディアリストに眠っていたものだ。
あんまり深く考えていなかったのだが、
今日計算してみたところ、
利益率が非常に低いビジネスだということに気づいてしまった。
そりゃ、誰もやらんわ。
でも、僕はこれを作ることにした。
理由は後述。

さて、このプロダクト開発をするに際して、
今日だけで面白い気づきが沢山あった。
まず、僕はビジネスにおける営業利益というのは、
世の中に提供した価値とイコールだと思っていた。
高ければ高いほど、世の中に貢献したというわけだ。
レガシー的なビジネスはさておき、
通常のビジネスにおいては、
一見この考え方は正しそうだ。
だが、必ずしもそうではない。
基本的には提供価値の対価と考えて差し支えないが、
提供価値の分類をすると分かる。
顧客への提供価値という意味では、
ほぼイコールなのだが、
世界への提供価値という意味では、
それが反映されないケースがある。
例えば、僕が考えたこの漫画のシェアサービスは、
利益率はいまいちだし、他の漫喫と比較すると、利益が薄くなる。

だが、紙や印刷インクという地球の資源の節約という観点では、
社会的に非常に意義のある進歩が生まれている。

そう、利益というのは直接的に価値を提供するところ、
マネタイズのされるところで発生するものでしかなく、
一概にそのビジネスの価値を説明できないのだ。

まあ、当たり前かもしれないが。

だって、Googleの無料のサービスが、
無料で使えるからといって無価値かと言えば、
全くそうではないから、ちょっと考えれば気づけそうなものだが。

僕は長らく勘違いしていた。

次に、クラスメートに、よく僕の質問に快く対応してくれる
素晴らしい友人がいるのだが、彼が気づかせてくれたことだ。

それは、僕がビジネスの観点と自分のやりたいという気持ちを大切にし過ぎていて、
技術を磨く機会を無意識のうちにトレードオフで捨ててしまっていたことに気づいた。

たとえ、コンセプトがイマイチだったとしても、
技術力の向上にコミットしていれば、
考えている時間の分、技術が身についていたかもしれないのだ。

もちろん、トレードオフなので、
どっちかしか取れないのだが、
無意識で捨てていたというのが非常に危ない。

今回のプロダクトは、僕は採算が合わないから、
制作をやめようと考えていた。

だが、この反省から、いわゆるサービスをひと通り作ってみる、
という経験をすることに改めて決めた。

ビジネス的にはいまいちだったとしても、
技術力を向上させることに重きを置いてやってみようと思ったのだ。

ということで、プロダクト制作の方は、
大体構造をスケッチしてあるので、
後はゴリゴリ作るだけだ。

完成したら、ここでまた共有する。

【追記】
ところで、今日昼間に中座して、
あるベンチャー企業のCEOの方とお会いしてきた。

「ゆるいつながりの方が、インパクトのある情報をもたらす」
的なことを聞いたことがあるが、最近まさにそれを感じている。

まだ未定ではあるが、
今回、その方から事業を一緒にやらないかというオファーをもらい、
(もちろん、共同創業者と相談だし、先方もまだそうと決めたわけではないが)
こういうのって本当に予測不可能だよな、とつくづく思う。

本当にありがたい話だ。
実績も何もなく、ただ面白い未来絵図を描けるだけの僕を面白がってくれ、
一緒にやらないかと声を掛けてくれるのだ。

自分のやりたいことを堂々と表明し、
実際に行動する者にこそ、こういうチャンスというのは巡ってくるのだな、
と前職への就職も含めて感じた。

【G’s Academy LABコース体験記】17日目

今日は明日締め切りのLINE風チャットアプリの作成と、
翌週に控えたJS選手権のアイディア出し。

チャットアプリで作った僕の作品がこちら。

WINE 

ネーミングが例によってふざけているのはご愛嬌。

ちゃんと複数人でチャットができるし、
チャットルームが複数作れるのがポイント。
(誰でも使える状態なので、いずれ閉じるかもしれない。)

今おざなりになっていてちゃんと調べないといけないと思っているのが、
このアプリを支えるFirebaseというデータベースの存在意義だ。

以前、localStorageの存在意義を理解せずにアプリケーションを作成してしまったが、
反省として、その技術の存在意義や必要性、
原理というものを理解しなければ、
プロダクト作成の本当の技術は身につかないと思っている。

来週の火曜日に向けたJS選手権のアイディアだが、
僕が起業する予定のアイディアとは全く別で行こうと思っている。

起業アイディアはARになるが、
今回は、今世の中に最も溢れている通常のWebサービスの仕組みを理解することを目的に、
直接は関係のないプロダクト制作を行う。

AR以前に僕はWebの平面で閉じたサービスも深く理解する必要があると考えたためだ。

またいずれ説明するが、僕の世界に対する理解では、
ARサービスと人間の関係性は、Webサービスと人間の関係性の拡張版だ。

つまり、通常のWebサービスの理解が必要なのだ。

そして、この流れで前から本気ではやろうとは思わないが、
ヒットするんじゃないかと思っている中途半端なアイディアを形にする好機になる。

プロダクトアイディアは近日中に公開する。

【G’s Academy LABコース体験記】16日目

無事、火曜日の課題提出を終えることができた。

今回は、Google Map APIを利用したアプリケーションならなんでもOKという課題だった。

僕が最終的に作ったものはこれだ。

TweetMap

ツイッターのツイートをハッシュタグ検索して、
その結果をマップ上に表示するというものだ。

形にはなったが、残念ながらツイートに位置情報があまりついておらず、
マッピングが困難だったため、擬似的に位置情報を生成してマッピングする、
という荒業でデモができるようにしている。

今回、個人的に一番興味深かったのは、TwitterのAPIではなく、
全員の発表を通して見て、自分も含め、
完全な完成までこぎつけなかった人が多かったことだ。

講義でも解説があったが、APIという特性上、
そのまま実装するのは簡単でも、
いざ自分でカスタマイズするのがハードルが高く、
自分のコントロール外の要素に左右されるという経験を初めてしたことが原因なのだろう。

実際のプロダクト開発では、未完成は許されない。
僕は前回の失敗を反省して、形にしてデモできることにはこだわった。

今後、全員がこうした想定外の出来事などに苛まれるのだろう。
想定外のものをちゃんと想定内にできるように、毎回の失敗の振り返りが大切だ。

ところで、直近二回の課題をやってみて、
とある自分の思考特性に気づいたのが一番の収穫だった。

何かというと、僕は、目的ありきの思考しかできないということだ。

直近二回の課題は、
・canvasを使って何か作れ
・Google Map APIを使って何か作れ

だった。対して、これまでの課題は、
・LP
・じゃんけんアプリ
・メモ帳
・クイズアプリ

だ。

一つ明確な違いがある。

作るものが決まっているかどうか?

いや違う。
実は、僕にとってはそれは大して重要じゃない。

作るものが決まっていても、
どうせその枠組をはみ出した別のものを作るので、
最初から決まっていようがあまり関係がない。

僕にとって明確に違ったのが、
問題解決のテクノロジーが制限されているかどうかだ。

直近二回は、起業で言えば「シーズベース」な考え方だ。

「面白いテクノロジーがある。
これを使って面白いことができないか?」

これは、言い換えれば、手段から目的を発想する思考だ。

逆に、以前は「アイディアベース」な考え方だ。

「何か作りたいものがある。
どうやったら作れるか?」

これは、言い換えれば、目的から手段を発想する思考だ。

僕は、後者の考え方をして生活している。

起業アイディアを出すときもそうだ。

自分が面倒だとか、困ったシーンに出くわした瞬間に、
あ、こうしたらもっとよくなるのにな、と言った具合だ。

これはどっちがいい悪いではなく、
できれば使い分けが出来ると理想的なのだが、
僕は学生で研究をしていた頃から、常に目的立脚の思考しかしてこなかったせいで、
「これを使ってなにか面白いことできないか?」
という思考が全く出来ないようになってしまった。

おそらくこれが原因で、直近二回の課題で、
何を作るのかを決めるのに時間がめちゃくちゃかかってしまった。

何かの問題解決の手段としての、
地図の本質を考えてみたけれど、
結局それだけでは、ちょっとおもしろい地図というプロダクトが出来るだけで、
特別何かの問題解決にはつながらないことが分かった。

問題について考えていないのだから、当然といえば当然だ。

(逆に、本質を考えることは、そのプロダクトを理解する上で、
不可欠であることもちょっと分かってきた。無駄ではなかった。)

次回木曜日の課題は、LINE風チャットアプリだ。

今回は僕が得意な思考パターンのお題なせいか、
前回よりも俄然モチベーションが高い。

が、それ以上に、来週の今日を締め切りに、
JSを使った条件無制限のJS選手権があるので、
そっちにリソースを全部回したい。

ということで、チャットアプリはできれば今日中にMVPを作って、
明日から選手権の開発に取り掛かろうと思う。

【G’s Academy LABコース体験記】13・4日目

例によって昨日の月曜日にフリーランスの仕事が入っていたため、
その準備で先週はほとんど時間がなかった。

簡単に、先週水・木分を書いておく。

まず、木曜日の課題はhtml5のcanvasを使って何かをする、という課題だった。
それに応じて、水曜日はcanvasの使い方の勉強。

僕は、Macの便利アプリSkitchのWeb版を作りたかった。
(前回の課題のときの問題意識として、自分の作りたいものを作るというのがあったが、
それについては16日目の記事に記載する)

Skitchの最も便利な機能の一つが、
ボタンを押したらスクリーンショットを起動して、
そのスクリーンショットをすぐさま編集する画面に移れるところだ。

それを実装しようとしたが、実装方針が悪かったのか、
作りきれなかった。

Macでは、command + shift + 4
でスクリーンショットを起動するが、
同時押しというイベントをJS(jQuery)で作ることが非常に困難だった。

理論上できると思っていたが、
あまりにもその実現に工数をかけすぎ、
計画倒れという非常に残念な結果になってしまった。

(アウトプットはクソすぎてアップできない)

分かる部分に対して工数を見積もるのは誰でもできる。
見えない部分に対して、工数を見積もり、アウトプットを出すのが大切なことだ。

以前のエントリで意識高い系の偉そうなことを言っておきながら、
非常に恥ずかしい結果だった。

工数管理を次回以降意識して進めるというのが僕の目下の課題だ。

【G’s Academy LABコース体験記】12日目

火曜日は課題提出の日だ。

結論から言うと、なんとか無事間に合わせることができた。

金土は全て月曜日の仕事の準備に回し、
日曜日の朝9時から15時で課題の9割を完成させた。

そして、最後の1割は月曜日の帰宅後に2時間ほどやって完成させた。

その作品がこちら。

記憶ゲーム

今回もPCのブラウザのみ対応。

今回は完全に僕の自信を持って作れる範囲を超えることがなく、
自分に負荷が掛からなかったので、反省している。

次回からはもう少し計画的に仕事の準備をしたい。
・・・って社会人一年目から毎回同じ反省をしている気がするが。

それで、今日の講義は関数と、僕があまり使ったことのないcanvasの使い方について。

木曜日に提出の課題もcanvasを使ったペイントアプリだ。

他の人の作品を見ていて最近思うのが、
自分のほしいものを作るというのが一番プロダクト開発の力がつきそうだということだ。

僕はとにかく既存のものは嫌だとは思うものの、
なんだかんだ、とりあえず無難に面白そうなものとか、
すでにあるものを改善したものみたいなものに終始していて、
自分でもちょっとひねりが足りないと感じている。

なんというか、文字通り「課題をやっている」感が自分にあって、
それがとても嫌なのだ。

gsは一般論としては学校みたいなものだが、
これを本当に学校だと認識した瞬間、
そこでの学びは一気にしょうもないものになると僕は思っている。

課題じゃなくて、自分が世の中に必要だと思うものを作ろうと思う。

最後に、最近よく思うことをば。

普段は自称温厚な僕だが、同期に対して思っている少し辛辣なことをここで述べる。

(念を押しておくと、この文章は同期の全員が読めるし、全然陰口のつもりはない。

全員いい大人だし、わざわざ僕が直接言うようなことでもないから、
僕が正直に感じていることとしてここに記すに過ぎない。

もしかしたら明日から僕は教室に居づらくなっているかもしれないがw)

課題の発表の際、フェイスブックページでコメントを言い合うのだが、
その時の表面的なコメントが僕は嫌いだ。

何が表面的かというと、
「●●の技術ってすごいですね、教えてください」
みたいなやつだ。

教えて欲しいと思うこと自体はとてもいいことだし、
僕自身も同じようなコメントを書くのだが、問題はその後だ。

本当に教えて欲しいのなら、すぐにそれについて実装した本人に聞きに行くはずだ。

だが、それで実際に聞きに行く人の少なさに僕はがっかりしている。

別に僕がそうしたコメントをもらって来てもらえなかったから、
期待を裏切られた気持ちになったとか、そんなのじゃない。

その状態が、求める成長の度合いの低さを表していると思うからがっかりするのだ。

もちろん、ググって自分で解決したのかもしれないし、
沢山の人に聞くことがあって、優先順位が低くて回っていないのかもしれない。

だけど、休み時間に見渡している限り、
全くそういう訳じゃなさそうに僕には思える。

だってどう見ても習ってないような不思議な技術、
色んな人が沢山使ってたでしょ、っていう。

教えて欲しいというのは嘘なのか。

知りたい、もっとできるようになりたい、
という欲求はその程度なのか。

それとも、「教えて!」とコメントでちょっと言っておけば、
相手から教えてくれるものとでも思っているのだろうか?

皆それぞれ自分の成長に忙しいから、
コメントをちょっともらっただけで、
自分からご丁寧に教えに行くようなやつはそういない。
(僕の感覚が変なのだろうか?)

少なくとも、僕は自分のことで手一杯だから、
教えてとコメントでのみ言った人に自分から教えに行くような余裕はない。

だけど、自分が実装して分かった気になったところでも、
いざ人に説明しようとすると案外理解してないところがよくあるので、
自分から積極的に教えようとこそしないけれど、
面と向かって教えてと言われたときには、
全力で説明するようにしている。

それがお互いにとってプラスだからだ。

そういうことを言う僕はどうかというと、
教えて欲しいと思った人にはその旨のコメントを残し、
その人に聞きたい内容とその優先順位をメモしておき、
直後の休憩時間にスキを見て、全員に教えを請うている。

別にフィードバックのコメントというのは、
お世辞を言う場所でもないし、
ましてや嘘を言う場所でもない。

教わる気がないのなら、そんな嘘は言うべきじゃない。
フィードバックやコメントは本音で言うから意味があるのだ。

こう思うのは僕がもしかしたらSNSのコメントの位置づけを勘違いしているからかもしれないし、
あるいは僕が人の気持ちを推し測ることが苦手だからかもしれない。

だが、思っていることは本当だ。
(勘違いだったら同期の皆さん、こっそりあとで教えてくださいw)

…とまあ、思うがままにここまで書いたが、
僕は別に同期が嫌いなわけじゃないし、むしろ好きだが、
この同期という一つのチームのレベルを少しでも高くするために、
僕は基準に妥協したくないと思っているだけだ。

ただの学校ならともかく、ここは、
「世界を変えるギークになろう」という理念を掲げているgsに入った人の集まりだ。

当然、僕達が最終的に目指すレベルは、
GoogleとかAppleとかで引っ張りだこになっている世界のエンジニアなのだ。
起業家ならばジョブズやラリー・ペイジ、孫正義なのだ。

それに異論はないだろう。

タイガー・ウッズは大会で優勝争いをしているときに、
僅差の敵のショットが入らなかったときに、よくキレたそうだ。
高い基準の戦いを求めているからだ。

僕はgsにいる人には全員が高いレベルを目指してほしいと思うし、
それでお互いを切磋琢磨したい。

実際にレベルが高いことももちろん大切だが、
それよりももっと大切なのは、
そうした成長を求める気持ちを持っていることだ。

…ああ、明日も僕の席がちゃんとあればいいな。

【G’s Academy LABコース体験記】11日目

先週の木曜日の分。

この日はJSの配列とforループとの組み合わせの使い方だった。
一通り説明のあった後は、ひたすら課題だ。
gsは自分で調べて進められるタイプの人にとっては、
とてもぴったりな環境だろう。

さて、例によってJSは基本的な部分は使い倒しているので、
僕の関心事はもっぱら次の課題と月曜日のフリーランスの仕事の両立だった。

週末が三連休で、講義がない月曜日も合わせると四日の休みがあったのだが、
フリーランスの仕事が次の月曜日に一日入っており、その準備に2日はかかる。
課題には一日未満しか使えない計算だった。

課題はクイズアプリで、
僕は企画だけはいつも出題の日に終わらせると決めているので、
今回も企画はその日のうちに考えていた。

僕が作る予定なのは、
格子の中に出現する複数の●印の位置を一秒で記憶して、
印が消えた後にその位置を正確に回答するというものだ。

クイズじゃないような気もしたが、
企画段階でクイズの本質について考えてみたところ、
結局、知識や記憶、思考のレベルを計測するために出題する問題だと考えたので、
その意味で、僕の問題はクイズという要件を満たしている。

僕が課題をやるときに気をつけていることは、
そもそものそのお題について考えることだ。

今回で言うと、クイズアプリがお題なので、
「クイズとは何か?」を問うようにしている。

これは何も無意味にやっているのではなく、
ビジネスをやるときにも必要な話で、
目の前に存在しているそれが、
どんな必要があって、どんな原理で発明されたものなのか、
という本質を考えなければ、その領域のイノベーションは見込めないのだ。

それで、クイズについては、大して深まらなかったが、
世の中に溢れているクイズというのは、
結局、
「なんの知覚情報について測定するのか」×「出題形式」
の組み合わせで出来ていることが分かった。

これを踏まえると、どんな領域のクイズはまだ存在していなくて、
どうすれば意外性や面白さが生まれるのかということが見えてくる。

僕が企画段階で断念したが、
技術的に面白そうだと思ったのが、
立体図形をマウスで触って当てるクイズだ。

マウスカーソルを画面の白紙上を動かしているときに、
カーソルの移動速度が一定の規則で変化すると、
そこで立体的な図形を触っているような錯覚を覚える。

それを利用しようと思ったのだが、
特別ゲームとして面白いものにはならなさそうな気がしたので止めた。

今回は面白いアイディアが出ることには繋がらなかったが、
引き続きお題の本質について整理して思考するというのは続けていきたい。

週末と課題がどうなったかは、12日目に続く。

【G’s Academy LABコース体験記】10日目

僕は甘えていた。

僕はプロのエンジニアに必要なエッセンスを、
「教えてもらえる」ものだと思っていた。

だが、それは自分で探して見つけないといけないようだ。

コードのお作法、
DRY原則、
git commitのタイミング、
etc.

僕はこうした基本的なことはHack Reactorで教えてもらい、
いつの間にかその先も誰かが教えてくれるものだと思っていた。

だが、冷静に考えて、
エンジニアというのは自分で勉強し続けるものだ。

もちろん、プロの基準の高さをちゃんと認識する必要はあるが、
少し僕の学習の姿勢は甘えていたようだ。

自分で不足を感じるところは自分で書籍を買うなり、
せっかくいるGoogleやFacebookのエンジニアの友人に聞くなり、
どんどんしていけばいい。

反省は以上。

ところで、明日の課題はメモ帳だと昨日書いたが、
以下のようなものを作った。

Evernate

エバーネートと読む。
クラウドならぬローカル版Evernoteである。
Evernoteの冒涜もいいところである。

本当はブログエディタの機能もつけたかったのだが、
フリーランスの仕事の関係で、
今回はあまり時間が割けなかった。

これを作る際に、解決にかなり時間を食った部分が2つある。

・一度DOM操作で要素を取り除くと、イベントの紐付けも外れるので、再度紐付けが必要
Evernateには、ノートの全削除機能をつけたが、
全削除した後にノートの新規作成ができなくなるトラブルがあった。

これは、僕の作り方の問題でもあるのだが、
要素を全て削除してもう一度描画するという方法をとっているため、
イベントの紐づけがもう一度必要になる。

おんなじコードを二回も書いているので、DRY原則に反してしまっている。
イベント発生ベースのコードを何か変数に格納できないか、工夫が必要だ。

・アロー関数でjQueryの$(this)を使ってはいけない
僕はJSの関数は、もう慣れているので、
function () {}



() => {}

と記述する。
後者の書き方をアロー関数と言うが、
jQueryが古めかしいライブラリのせいか、
新しめのアロー関数を使えると急に読み込めなくなる。

なぜ使えないのか原因がわかった。
アロー関数自体がthisの束縛がなくなるという仕様なので、
参照先が変わってしまうことが原因であった。
jQueryの問題ではなかった。
ごめんなさい。

【追記】
コマンドの設定方法が少し分かってきたところで、
調子に乗ってターミナルからChromeでファイルを開けるようにもした。

ここに書いてあるコマンドをターミナルにぶち込むだけだ。
めちゃくちゃ便利である。

エンジニアがターミナルで全部操作するという気持ちが素人の僕にも少し分かってきた。

【G’s Academy LABコース体験記】7日目

今日からいよいよJavaScriptを本格的に扱う。

が、講義では、最初にgsが他のプログラミングスクールと何が違うかの説明があった。 

山崎主任講師曰く、
gsが他のプログラミングキャンプと違うポイントは、
ツールとしてのプログラミングをどう活かすかという、
創造力や自走力が違うとおっしゃっていた。

確かにそうだと思っていて、
僕がgsに入って一番感じていた特徴は、参加者の優秀さだった。
(同期のみなさん、上から目線の言葉でごめんなさい。)

これは言い換えると、
gsのブランディング力あるいは集客力の高さだ。

ここでの優秀さは学校で言う優秀さとも、
会社で言う優秀さとも違う。

一人で生きていくことができる能力が高い、
という意味でみんな優秀なのだ。

逆に、旧来の学校や企業といった既存のシステムに当てはめると、
僕も含めた多くの人が、社会不適合者だと思う。
(同期の皆さん、再びごめんなさい。
でも僕は本当にそう思っていて、そしてこれは最高の褒め言葉だと思っています。)

既存のルールに従ったり、
自分以外の誰かの命令に従うことが極端に苦手な人が多いように思う。

逆に、自分に全く束縛がない状態が、最もパフォーマンスが高くなる人種だ。

今の時代にとても合っている最強の特性でもある。

だからこそ自分の意志で皆ここにいるのだろう。
自分の沢山のお金と時間を投資して。

この特性は、一朝一夕で身につくものではないので、
それを持っているちょっと変わった人を引きつける力が、
gsにあるということだ。

同期の半数がこれから起業するということを考えても、
やはり異常な集団と言えよう。

よくよく考えてみれば、
起業家向けのプログラミングキャンプというビジネス自体、
対象者がニッチ過ぎてやろうと思う人は少ない領域だ。

だが、今伸びているプログラミングキャンプという市場に、
そのまま普通に飛び込んだらレッドオーシャンに巻き込まれるというgsの先見の明と、
それ以上に本当に世界を変えたいというgsの人たちの想いが見て取れる。

前置きが長くなってしまった。

今日はJSを使ってプログラミングの基本的な内容をやった。

まずは、変数、if文だ。

僕は大学でC言語もやっていたし、
JSも多少馴染みがあるので、
(たまに僕が知らない大事なことがポロッと出て来るため)授業には耳をそばだてつつも、
最初から演習と課題に手を付けた。

来週火曜日までの課題は、じゃんけんアプリだ。

これ自体は、プログラミングキャンプの体験コースや、
開発会社の採用課題なんかでよくあるお題だ。

だが、例によって三期生の先輩のアウトプットを見ると、
普通にじゃんけんアプリを作るのがいかに恥ずかしいことかがよくわかった。

実際のその作品をお見せできないのが残念だが、
僕が見たのは以下のようなものだった。
・FFの戦闘形式を模したもの
・音声認識機能のあるUIのきれいなもの
・シューティングゲームとの掛け合わせのもの
・ルーレットとの掛け合わせのもの

まあ、普通にWeb上にゲームとして置いてあっても全然不思議じゃないものばかりだ。

誰がじゃんけんアプリを作れと言われて、
新しいゲームを作ってしまえるだろうか。

普通の人はそんなことやらない。

だが、先輩たちも、僕たちはそれをやる。

やりたいからだ。

ということで、僕は来週に向けて、
「軍艦じゃんけん」を実装することにした。
(音量注意)

地方によって呼び名やルールが若干違うが、
僕が最後にやったのは中学生のときで、
「手の痛みに我慢できなくなったら負け」というルールだった。

最初はじゃんけんという課題を無視して、
ブラックジャックを作ってやろうと思ったのだが、
すでにweb上にアプリがあったため、やる気を無くしてしまった。
(軍艦じゃんけんはサクッとググってみたところ出てこない)

やっぱり、僕は世の中にまだないものを作りたい。
来週の月曜には完成する予定なので、また公開する。