渡るネットは嘘ばかり

元文系、米国大学院CS修士号持ちITエンジニア。自称エンジニアが撒き散らすゴミを少しでもキレイにしたい

ネットでプログラミング教室選びをする前に読んで欲しい話

それより、ちょっとここがアフィリエイターとかに引用元の明示なく無断転載とかされてるのがわかったので、差し込みで。引用する場合はソースを明示して下さい。

アフィリエイターとか本当に金儲けのためだけに読者の幸せを考えない「何かをお薦めする記事」を体験した風に量産しているので注意が必要です。そういうお薦めに乗っても自分は幸せになりません。GoogleとかがUpdateで順位下がるように対応してくれてるのにSEO対策とか言ってゴミ認定された記事をまた上げようとする。

プログラミング教室は広告を依頼してるだけではありますが、公式でも信用できない卒業生のインタビューを載せたりするあたり、実際には現場で通用しないのをわかってて、もしくは元々センスのある1割程度しか自分たちの教えたことだけで成功しないのわかってて、特殊事例を上げてるように思えるので、同罪でしょう。

金儲けのためのアフィリエイター
→プログラミング教室
→紹介制度(報酬あり)
→アフィリエイター化
→戻る

と負のループができかけてる気がします。ちなみに、ここは全くSEO対策とかしていませんが、その辺のアフィリエイターと同じかそれより上にきてると思いますが、それは自分の言葉で書いてるからだと思います。広告も入れてないしね。ブログとかで稼ぎたかったら自分の言葉で語れる程度の知識をつけて欲しいです。

掲載元を明示せず作者の意図と違う引用をするDIVE INTO CODEのアフィリエイター

DIVE INTO CODEの検索でここにたどり着いた人が結構いるようですが、中には本来の主張と違う方向でアフィリエイトに引用してる人もいました。
hirox2.com
2018/06/06追記 アフィリエイト会社から連絡があり、無断引用が消されました。
現役エンジニアと元エンジニアなので自分の言ってることの信用のなさが露呈するので引用ごと消したのでしょうか。

引用元を書かないで反対意見を一部だけ抜いており、作者の意図を誤解させる行為です。非常に悪質。匿名の口コミとか何故か①②が抜けて③から振られてますが、匿名で口コミした憶えはありません。DIVE INTO CODEの関係者というより、アフィリエイターなんでしょうが、まともなリテラシーを持っていないようです。公式のインタビューを流用しまくってコメント付けるだけの非常に質の低いアフィリエイトサイトです。とりあえず、意図と違う引用なので、アフィリエイトの会社に通報しました。内容もめちゃくちゃでとても前線でエンジニアとして働いたことがないと思われます。おそらく、引用でリンクを付けると、僕がアメリカの大学院に留学してコンピューターサイエンスの修士号を取ってきた人間だとわかるので、Pathos的な信用で負けると思ったのでしょう。また虚偽も多く、

これだけRubyに特化しているスクールはないので

と言ってますが、Rubyだらけですよね。TECH::CAMPとか。こういう書き方はクライアントが優良誤認表示で注意を受けたりしてもおかしくないです。

僕の引用への反論もひどいもので、

基礎知識というのも非常に大事だとは思いますが、学生のように時間も取れない社会人の為にも、重要な部分を集中的に教えてくれるのがプログラミングスクールの特徴です。

また、大学のように卒業までに4年もかかってしまうプログラミングスクールがあったとしたら、あなたは通いたいと思うでしょうか?

時間がないから基礎や知識は無視してもいいという言い訳なんでしょうか?プロで働きたい人に言ってるんですよね?
また、4年かけるならプログラミングスクールでなく大学行くでしょう。質が違いすぎる。TECH社とかはプログラミング教室の体験談を直に聞くと最後までやり遂げられる人は2,3割といいます。

[2018/07/18追記] それ故か、久しぶりにサイト見たらTECH社は今はチュートリアルレベルのコースばかりですね…。文章読める人は通う意味あるのか微妙です。APIやライブラリを使える、SDKを導入できる、というのは技術力ではありません。ドキュメント、Referenceは説明書です。プロが説明書があるのにできません、とか冗談もいいところです。基本、英語なので、英語読めるか、レベルでしょう。日本語のドキュメントやチュートリアルがあってもできない人は向いてないので、コンサルとか企画職に行った方がいいです。向いていない人が現場に来ても残念ながら負荷が上がるだけです。

大学の授業だと学部なら9割、大学院でも7,8割はやり遂げられるのが普通です。教えるプロの教授が教えてますから。そりゃそうです。速度が異常です。そもそも、学問というのは一日に長い時間をかければできるようになるというものではありません。

大学で学んだことがある人ならわかるでしょうが、ある応用科目は基礎科目を取ってないと登録できません。前の科目は1学期前にある。これはコース全部を履修してから、というのもありますが、学んでるときに100%理解できることって意外と少なくて、Aを取っても曖昧だった部分というのがあって、応用科目中に「ああ!そういうことか!」となることも多いです。

  • 次の授業までにリーディングで自分で理解しようとする
  • 授業の説明や質問で曖昧点を解消する
  • 課題を通じて知識を技術として定着する

そういうサイクルが学校にはあります。理解には時間がかかるものです。昨日読んだ技術書の内容を明日完璧に把握できる人間はそもそもとして独学で十分できるでしょう。ただ動くものを作るなら理解はいりません。こう書けばこう動く。しかし、それが最適か、実行速度としてどうなのか、大規模ユーザーでスケーリングの問題が出てきた時にどうなるか、そういったことを考えるには基礎が必要です。特に、国民総スマホユーザーのこの時代、1人でシステムを動かすのと同時に1000人がアクセスするのではシステムの挙動は全く変わってきます。

例えば、フットサル面白い。もっと楽しみたい。で個サルに行って、得点につながるプレーを集中的に教わったら楽しめるでしょう。趣味ですから
ただ、フットサルで大会にガンガン参加して、ゆくゆくはプロになって食べていきたいのであれば基礎はものすごく重要です。高いレベルだと、強いパスを柔らかく停めて進みたい方向に向くとかはできなきゃいけないことです。

ボクサーはトレーナーから正しい動きを学んで、鏡を見ながらシャドーで何千回、何万回もその動きを練習して初めて無意識にその動きができるようになります。それが基礎です。時間がかかるし大事なんです。

スポーツとは違いますが、プロとして”高い給料をもらって”食べていきたいなら、基礎は絶対条件です。好きじゃないけど仕事だから、レベルで普通の給料でデスマーチで働きたいなら別にいいと思います。でも、プログラミング教室行きたい人って手に職つけて稼ぎたい人が中心ですよね?でなく、プログラマとして、とりあえず食べていける程度の収入が欲しい、であるなら、Javaの教室に3ヶ月行ってシステム会社に就職するといいと思います。一番人手の足りない業界ですし、基礎わかってない人中心なので未経験でも入れるところは多いと思います。

この方、2年で鬱になってプログラマ辞めたそうですが、基礎や知識なくやってたのも原因なのではないですかね。お宝ザックザクの特に外資だと1000万超えが普通の業界ですが、基礎や知識っていうのはそのお宝探しの洞窟に持っていく松明や色んな道具みたいなものです。手ぶらで入ったら暗闇をさまよって鬱になっても仕方ないと思います。自分が書いたものがどう動いてるかわからない、直したはずなのにバグってる。それは基礎がわかってないから裏側の動きが理解できていないのが原因です。

実際のところ、この辺のプログラミング教室がやってる程度の研修を未経験者を雇って給料を払いながら3ヶ月ほど学ばせてから現場に出すシステム会社は結構あります。とりあえず、基礎は省いて動くものを作らせる。結果何が起こっているかと言うと、品質の低さによりバグが多発、実装速度も遅いのでデスマーチが発生する。ということです。システム業界は特に基礎がない人が多いので、結構やばいです。そして基礎も知識もない人が見積もって、設計になってない「文章」を渡して現場が炎上するという…。

また、他言語を学んでもRubyを独学で習得できなかった人の体験談引用してますが、パット見、他の言語をかじった程度ですよね?使いこなすレベルで他言語わかっててRubyがわからない人はプログラマ向いてないので一生の職にしようと思うのは止めたほうが良いです。今後、コンピュータが得意な世代が育ってきて(スマホかPCかに分かれてる印象でスマホ側は完全に相手にならない気がしますが)、枠が減ってきたら確実に淘汰されます。特にC系使ったことあるのにRubyがわからない人。
Ruby (programming language) - Wikipedia
implementation language Cとあるように、内部ではCが動いているので、Cが使えたらRubyで書いたコードの裏で何が起こってるかわかるのが想像できるでしょう。Cで解釈が書かれてる言語は多くて、何故かと言うと、OSが、カーネルと呼ばれる部分が基本的にCで書かれているからです。システムコールとか、OSの機能を呼び出すのに使うのは基本Cだと思っていいでしょう。

利害関係のないように見える体験談

[2018/06/22追記] 引用元から名誉毀損と謝罪を求められました。事実確認のため、一旦サスペンドしました。
[2018/07/06追記] サイトにアフィリエイトが明示されたのでリンク削除
内容としては、失敗談を通じた体験談でも、アフィリエイトが付いていて、実際は利害関係があったりするので注意して読んで下さいという意図でのリンク掲示でした。名指しとかでなく、リンクにコメント付けたものです。さすがにアフィリエイトを付けて稼ぐ意志は一切ありません、というのは信じがたいので…対象のブログの作者の言葉がブーメランに感じたので、その言葉をそのまま返した感じだったのですが、逆鱗に触れたようで、表現は少し注意しようと思います。
※ 自分が他者に使った言葉で激怒するというのも不思議な話ではありますが、上手いこと書こうとし過ぎました

正直、ブログを公開してる以上賛否あっても、法的に問題のあるレベル以外で謝罪求めるとかどうかと思いますが…。それが原因で家に苦情の電話が殺到するとか、馬糞とか等身大ガンダム送られたりしたら別ですけど。

DIVE INTO CODEの最新カリキュラムレビューはまた別でやりますが
AIコースのシラバススタンフォードの機械学習コースを比較して妥当だと思う人いますかね?この速度で理解できるなら、TAかRAやって給料もらいながらスタンフォードの大学院で勉強できると思いますよ。英語できれば。

プログラミング教室の生徒を鴨にしてるアフィリエイター

ちなみに、プログラミングスクールの潜在利用者はアフィリエイト業界では「良い鴨」と見なされているようで、資料請求だけで報酬がもらえるようです。また、フリーランスとかやたら進めてる記事がありますが、あれもかなり報酬がもらえるようです。
setsuyaku-info.com

プログラミング教室ランキングとかおすすめ、って記事が書いてあって、そこからその教室へのリンクがあったら、PCならカーソルを合わせるとリンク先が表示されると思います。スマホだと長押しでリンクをコピーとかでメモ帳にでも貼って見てみて下さい。
px.a8.netとかaf.moshimo.comとか付いてたらかなりの確率で偽物の金儲けのために作られた記事です。鴨にしようと書かれた内容です。アフィリエイトの会社は↓を参照で。
hituji-affiliate.com

プログラミング教室やフリーランスは実務未経験ブロガーのアフィリエイトに向かない

別に体験してアフィリエイトのページを書くこと自体は悪いとは言いません。ただし、プログラミング教室やフリーランスの仕事関連は体験して記事を書くのに向いてない。なぜなら、アフィリエイトのために、という時点で対象が違う。プログラミング教室に行く人のほとんどは転職のためだと思います。その時点で、評価すべき対象は人事か現場エンジニアです。卒業しても基礎構文とかフレームワークの基礎や動かし方がわかった程度では自分が即戦力化はわかりません。

要は、アフィリエイトを続けるつもりでちょっと遊びに行ってみる。それは趣味レベルの人です。1月でも10万前後はかかるところが多いわけで、それだけかけたら趣味レベルでも褒めざるを得ません。回収するために。そうなると嘘が出てくる。あくまでアフィリエイトのネタのために、ですから。本気の人の参考になるわけないし、そもそも前項のアフィリエイターが明かしている通り、プログラミング教室やフリーランスを語ってる人間のほとんどが技術に疎いです。それが良いか悪いかなんてわかりません。稼げればいい、というだけの人です。本当にいいと思ったらアフィリエイターなんて辞めてプログラマーになりますよね。人生変わる体験をするなら自信になるでしょう。プログラミングを学んだとかフリーランスやってると言っても、まともにコードを書いてる記事は一つもないですよね。プログラミング教室行ったらコード書きたくなりませんか?こうだと思ったけど、これが正解だった、とか。

ちなみに体験してない体験談で買わせるのは詐欺だと思います。アフィリエイトって稼げる稼げる書いてあるので、仕事辞めて専念するとかいう計画性のない人も多いようで(そして情報商材に流れて借金したり)、日々の生活に必死になる時期が最初にあるようで、嘘や騙すことに鈍感になります。フリーランスで稼いでる、でアフィリエイト付ける人間は間違いなくフリーランス自体で稼ぐのでなくフリーランスを紹介して(サイトで誘導して)稼いでる人でしょう。事実かわかりませんが。フリーランスで技術で稼いでるエンジニアはアフィリエイトなんかより技術を磨いたほうが稼げるのわかってるし、1000万前後収入があると基本的に無駄遣いしなければどんどん貯まっていくので、アフィリエイト記事に時間割くくらいなら好きなことをやったり技術を磨いてQOLを上げようとする人の方が多いです。

そして、それをわかっててアフィリエイトに依頼を出すプログラミング教室も確信犯に近いと思います。

何度も書きますが、プログラミング教室を検討するときはネットの記事だけを見ないで、エンジニアをやってる友人にカリキュラムを見てもらって、現実的か、それで現場で通用するか判断してもらって下さい。講師も妥当か、そして、その講師が本当にいつもそこにいるか(アフィリエイトや公式の体験談で釣ろうとする教室は名前貸ししてる可能性も高い)確認したほうがいいです。エンジニアの友人がいない人は…

コーヒーでも飲みながら30分〜1時間程度のカウンセリングとかあるといいんですかね。無料もしくはワンコインか1000円程度で。稼ぐ目的ではないので。どこかでモクモクやってもいいですね。みんなで集まってプログラミングする、そういう集まりが無料であったりします。初心者向けのそういうのを作るのもいいですね。

僕はプログラミングが好きで天職だと思っています。
こういうことをしてるのは金儲けでなく、プログラミングを通じて不幸になる人を一人でも減らしたい、プログラミングを好きになってくれる人が増えて欲しい。そして、エンジニアの世界的に見て低い日本での地位を上げたい。その辺がここで記事を書くモチベーションです。

[2020/03/14 一部表現を修正しました(雑に書いたままになっていたので)]

副業元年 〜副業でブログを書かないでくれ〜

GWなのでちょっと頑張って早めの更新。外資しか受ける気なかったのにエージェントに声かけられて日本企業の話進めてみて失望した話もあるので、時間あれば近いうちに。

麻布十番のメゾネットはなかなか快適です。隣人とも挨拶がてら話して、寝てる間は車の音とかはあっても、隣とか上は無音です。やっぱり睡眠は大事。全ての基本です。立派なタワマンより、低層高級マンションの方が大人の住処としては価値が上です。家賃安くなった分、近所のボルダリングジムに通おうかと思っています。

電車とかも最近余裕ができて、満員電車嫌だな、と、ふと時刻表を見たところ、最寄り駅から始発が数本、出勤時間にあることがわかって、また、その電車までに背中で押して入ってる満員電車を2本ほどスルーしてみたら、始発1本前も行き先の問題か結構空いてることに気づきました。車両も、目的の駅の階段に近いドア付近にいたら、座席に空きがあるのに出口付近だけ周りと触れる位の満員で、2つ隣のドアまで行ったらガラガラになって、そこから先頭降車したら、人気満員ドアの先頭集団とほぼ変わらないタイミングで乗り換えられたりもしてます。ホームについて最初に来た電車の、出口の階段に近い車両が最適解とは限りません。ストレスとか、要素を追加すると、貪欲法の基準が変わって、より快適な解にたどり着いたりします。乗換案内ではそこまでわからなかったりするので、時刻表、最寄り駅で見てみたら何か発見があるかも知れません。その満員電車の次の電車はガラガラかも知れませんよ。

閑話休題。今年は副業元年とか言われてますが、そもそも、会社が副業を禁止するのは元々違法です。本業に害をなさない場合、問題なかったというのが現実。
副業で生活や人生が潤うか。個人的には一部の既に稼げている層にはYes、他の層にはNoです。稼げている人間の方が心にも時間にも余裕があるのが現実だったりします。また、知り合いも多いので胡散臭いセミナーとか商材にもかかりません。副業関係のセミナーや商材は99%詐欺と思っていいでしょう。そんなさ、稼ぐノウハウあって、普通他人に教えないでしょ。これは何度も言っていますが、無限にパイが増えるわけじゃないし、ノウハウが普及すると、そのやり方の価値は劣化します。その辺は経済の基本原理です。希少価値であるからこそ稼げる。鉄を金にできる錬金術ができたとして、金の価値はどうなるでしょうか。特徴に違いがあるから純粋比較はできないとは思いますが確実に価値は下落するでしょう。

実際のところ、元々人脈があってセンスや技術がある、できる人間がより稼げるようになって、できない人間ほど目先に見せ金に飛びついて詐欺に合うという、余計格差が広がるだけの阿鼻叫喚な未来がぼんやり見えます。まぁ、半分以上は解禁でもやらないでしょうが。前者は副業で店舗経営や独自サービスの運営と自分が何かを提供する側の副業を、後者はアフィリエイトやブログなど他のサービスにぶら下がっての副業を選ぶ傾向が強いと思います。選択肢の幅がそもそも違います。知人のつてや人脈から副業を開始するのと、ネットで検索して副業を開始するのと、そんな違いもありそうですね。何度でも言いますが、ネットの情報は8,9割は嘘や誤りで儲け話の99%は詐欺です。それが国民総配信者時代の現実です。

それと、本ブログ、実はDIVE INTO CODEのレビューのアクセス数結構多いです。カリキュラム多少変わってるので、近々再レビューしたいと思います。アクセス数的に、場合によってはインタビューとかした方が良いかも知れない。でも、インタビューしたら掲載NGになりそうな気がしないでもない。あと、コーディング的なインタビューしたら、数人はできる人間雇ってると思うし、下手すると外部から連れてくることも考えられるので、あまり意味なさそう。ちなみに新しいカリキュラム見た感じ、センスある人以外ついてけるのか、これ?という、通常コースもAIコースに近い駆け足感を感じました。自分が教えた経験からも、まるで知識0だと元々のコンピューター好き以外は地獄に近いと思う。

今回は副業に関して、再度取り上げます。

ネットビジネス稼げてると言ってるブログは大抵セミナーとかへの誘導が目的

「ネットビジネス、詐欺」「副業、詐欺」とかで検索しても「実際は稼げる、詐欺とか言ってるのはやったことのない奴らだ」とか耳辺りの良いことを言ってるのが大半です。苦労して稼げるようになった、とかいう論調で、画面の下の方に行くと「セミナー」「○人限定」とか有料コンテンツへの導線があります。実際、苦労話を見ても、失敗例ばかりで、ほとんどが、やろうとしていたことで成功していない、失敗したから他のことをやって、という行き当たりばったり君ばかりです。で、そこから、何故か、成功談がなく、成功してセミナーとか商材につなげるという、起承結の謎の失敗から高収入という流れが大半です。転を売ろうとしてるのかも知れないけど、その飛躍はもはや錬金術、魔法の類です。大成功は小さな成功の積み重ねからくるもので、いきなり成功する可能性があるのは博打だけです。そして、博打は大半が負けるか良くてトントンなのですよ。そこには魔法を使えなかった人が突然大魔術師になる見えない大進化が現れます。MP0でどんな魔法使ってんだ、という。答えは簡単、チートなんですが。嘘というMPを使わない魔法です。

そもそも、何を売ってるのか、セミナーで話すのかわからないようなの参加しない方がいいです。何をしたい、どうなりたいのビジョンなく、金持ちになるために副業という人間が成功するはずがない。目的と結果を履き違えてる。地図を手に入れて、世界が見えた!俺は自由な土地に行きたい、とだけ決めて歩き出す人は道に迷うだけです。成功したとしたら、腕が後ろに回る可能性のある綱渡りを渡り切った与沢氏みたいな強運の人間だけです。実際彼が売ってたのは空気です。金持ちの雰囲気を売ってたわけです。ある種、あそこまで金に執着して稼げるのは生まれつきの化け物じみた欲がなした業で常人には無理です。少しでも人の善意があればあそこまで行けない。大半が稼げないし、稼げても逮捕される可能性が高いです。

というか、セミナーに行かないと成功しないレベルなら、副業で小銭稼ぐより、本業を磨くことをお薦めします。しかもセミナーを開催してるブロガーは何故かアイデア次第で〜とか言ってるわけで。アイデアなくて儲けられない人間だからセミナー行くわけだし、セミナー参加したらアイデアマンになれるだけのコンサル力あるなら、知らない人より、身近な人間をコンサルして、継続的にその人達にアドバイスして稼げばいいと思うんですが。新規と話してコンサルって実際はかなり大変でしょ。セミナーを不特定の他人に何回もやってる時点で固定客のコンサルで食べていけない証拠だと思いますけどね。それか、実際業界の裾野を広げる程度のまぁ、3000円取れば十分レベルの浅い話しかないかのどちらかですね。何か新しいサービスの普及とかなら後者はありうる。成功する秘訣、とかのセミナーで後者はありえないので、セミナー参加者を成功させられてないんでしょうね。参加者を成功させるんじゃなくて、セミナーに数多く流入させて参加費を稼ごうというのが目的でしょう。

基本的に副業はその時々で多少稼げるかも知れませんが、大半がグレーゾーンなので(価値のないブログに誘導して広告費で稼ぐトレンドブログとかも、広告主を騙すグレー行為と思う)、法規制とかで稼げなくなります。セミナーきた皆が稼げるようになったらパイが枯渇して、新しい手法のためにまた金を払う、それは弱者の思想です。弱者のまま稼ごうとするのでなく、耐え忍んで強者になるために鍛錬に励む時間も必要です。自分は30代前半で1000万前後稼げるようになりましたが、天才以外は30前後の1000万を目指して日々を積み上げた方が良いです。日々考えて考えて勉強して蓄積した技術は嘘をつきませんし崩れません。20代で簡単に稼ごうなんてして、運良く1000万稼げても1年後には半分になってたりします。そして、たちが悪いのは一度生活水準を上げてしまっているので我慢ができないという。そして、グレーゾーンを繰り返すわけですね。土台がないので、いつまでも稼げたり稼げなかったり不安定でしょう。そんな人生、精神的に持たないと思います。他人の土俵で、しかも正統派でないやり方(ブログであれば、唯一無二の情報・研究成果・知見などを提供できるの特化型が正統派)で稼ごうとすれば、場を作ってる人間は本来の意図に寄せようとするのが世の中のバランスです。

YouTuberとかも広告主に損害を与えるような動画で激怒して代理店が撤退するようなことがありましたし、報酬基準を変えたりしてます。当たり前です。反社会的な動画とか、悪ふざけの違法行為、炎上でも視聴数上がる迷惑行為などが収入になってましたし、未だにそういうのが数多く残ってる(というか8割方?)。子どもばかり観てて収益に繋がらない動画も数多くあります。TVだと子どもは親と一緒に観てるから広告効果あるかもですが、YouTubeはTVで見れても8割型スマホタブレットでしょう。トレンドブログとか詐欺系ブログも価値のない、もしくはうっすい記事に広告がついてるわけで、まともな人間はそっと閉じるので金を使う購買層でなく、金を稼ぎたい層にしか見られてないのが現実だと思います。広告主を騙してるようなものなので、Googleも検索の価値判断を変えていて、その内、ゴミのようなブログはかなりページを進めないと出なくなるでしょう。むしろ、Googleでその仕事をしたい…。アクセス数=価値のあるコンテンツ、という世界は10年前、スマホの登場と共に滅びました

話は戻りますが、良くわからないけど稼いでる風の人は基本的にブランディングなだけで稼いでないと思っていいでしょう。

ネットビジネスの特定のコンテンツを否定してるのもアフィリエイト誘導

uwakiaruaru.info
この辺がいい例です。YouTuberはもう儲からないからブログ、とか言って、リンクの先ではAmazonアフィリエイトが貼っています。文献とか紹介していて、tag=XXXXXとか付いていたら基本的にアフィリエイトが目的です。
アソシエイト・セントラル - ヘルプAmazonアフィリエイトのリンク記述
ちなみに同ページにあるサーバーの方もアフィリエイトです。カーソル乗せてhttps://px.a8.net/のURLが見えたら基本的に金儲けのための記事と思って良いです。この辺は宣伝と言わずに宣伝してるのでステマの一種ですね。宣伝とかPRの文字がなくアフィリエイトが貼ってあったら、流入の報酬目当てのためだけの記事と思って閉じてしまってまず間違いないでしょう。正しい情報を提供する気はありません。アクセスが稼げればなんでもいい量産型クソ記事製造業者です。

副業で何をするべきか

個人的には、仲間と将来の起業に向けての活動をするのがいいと思います。このサイトに関係が深い部分で、エンジニアなら自分の将来やりたいサービスに使えそうな未経験の技術を使っている簡単な仕事を請け負って経験や技術を蓄積するとか。より給与のいい業界(システムから自社サービス等)への足がかりとなる技術の請負とか。まず、目標となる将来の指針を立てて、そこに向かって、1ヶ月後の収入重視でなく、将来の収入を想定して動くべきです。まぁ、副業に飛びつく人は目先の金儲けしか見えない人が中心でしょうが、その誘惑に負けると大抵騙されて借金が残るわけです。簡単に金儲けができたら世の中、あなたより頭のいい人間全員が大金持ちです。大抵グレーゾーンとか黒い詐欺サイトは動かないだけだ、と言いますが、違法性をはらんだ行為は利口な、そんなことしないで稼げる人間は手段として選びません。まず行動するのが大事、続ければ成功する、と言ってる人間は大抵詐欺師です。目標設定、下調べ、準備、そして行動。成功する人は成功すべくしています。例えば、エンジニアリングで言うと、突然、レイトレーシングを実装してください、と言われて、いきなりコードを書く人間はまず書き上がらないでしょう。レイトレーシングとは何か、位の簡単な説明はあるかも知れませんが、理論を知って、それに必要な技術を一つずつ理解して身につけて初めて正しい設計ができて、手戻りの少ないプログラミングが実現できる。そういうものです。当然行動に移すのは大事ですが、目的地までの道のりを調べずいきなり歩きだすと路頭に迷うだけです。そもそも、その辺の人達が提供するものってターゲットが曖昧なんですよね。副業したい人に自分が成功した方法を、って、副業で何がしたいかわからない。元々、誰かに喜んでもらうようなことを提供する、という基本原則がなくて、トレンドブログとか、読者の時間の無駄にしかならないゴミを撒き散らすわけです。ここは営利目的ではないですが、誰かの気付きにつながって、考え方の一つとして吸収したり、騙されそうになってる人にストップをかけられれば、というのがターゲットというか主な目的ですね。技術やネットという世界で生きてきた人間の声として。

技術職の場合、本業を高めるのが最善

ITは特殊な業界で転職が経歴としてマイナスになりません。個人的には2,3年ごとに転職した方が技術が作業になって錆びつくことがないし、守備範囲も広がります。当然、なんでもできるような国際的な大企業は別です。プログラミングが好きでずっとものづくりがしたいと思う人が日本企業にいたら、転職しない方がリスクです。海外では囲い込むのに年収8000万出すような職種ですが、日本では何故かマネージャ信仰から400〜600万でプログラマは頭打ちでしょう。フリーランスなら技術力あれば1000〜1200万位までは行けそうですが、一生フリーランスというのも心細いですし、フリーランスを取るところで本当に大きな仕事はできないので、ある程度磨くと物足りなくなってくるでしょう(今の僕がそんな感じです)。

副業でブログを書かないでくれ

書籍を書くレベルの人ならいい。金儲けのためだけにブログを書かないでくれ。9割の間違った情報で、健康系なんて時に人の命を奪いかねない。
トレンドブログでググった情報に自分のコメントを付けただけ、技術の勉強でよくわからないけど、これで動くらしい、なんか動いたっぽい。そんなものは紙の日記に書いて本棚に仕舞っておいてくれ。既にゴミまみれのネット上にゴミを出すことで小銭を稼ぐ。そんなの乞食と大差ないように思える。空き缶を拾ってゴミを捨てられない子ども大人の尻拭いをしてくれてるホームレスの方がよっぽど世の中のためになってます。誰かのためにならない自分のためだけの乞食ブログなら書かないでください。
※執筆活動できるレベルとは思ってないけど、営利目的じゃないので、その辺は勘弁してね( ゚д゚)

ああ、マジでGoogleでゴミをフィルタリングする機能を作りたい。
あと、早く国が情報商材を認可とか制度で取り締まって欲しい。
情弱ビジネスって、ピュアな(無知とも言える)人間を真っ黒にしますからね…。

一歩踏み込んで考える

インフルエンサーの人が拡散してくれたのか、一時twitterからの流入が増えていたようで。僕の拙い文章を読んでくれる人が増えて嬉しい限りですが、相変わらず筆不精です。

Google Code Jam始まってますね。Qualification Roundは48点で突破でした。固定値にケアレスミスがあって、新しいシステムでもPractice mode解禁になって2個固定値修正したら普通にあってて20点無駄にした…Round1は1回目3000位台、2回目2000位台でどちらも突破の1500位以内に届いてないので、今週末に賭けます。

また、外資系プラットフォーム企業への転職準備をしつつもプロジェクトでクライアントのメインのプログラマの筆頭辺りになってしまい、フェードアウトしたいのに中々時間の取れない日々が続いています。仕事自体は楽しいんですけどね。cocos2d-xを使っていて、最近だとTableViewを横に動くようにしたり、Shaderで光彩付けたり、Android/iOSそれぞれで権限許可出したり、Perfect Pixel Detectionとかやってます。大体のことができるようになって、ホントそろそろ移らないと技術力が止まってしまう。同じ技術ばかり使って自分は大抵のことができる、と慢心すると広がる技術の世界から取り残されます。最近のも会社としては新しいことをやっていても、基本的には知ってることのcocos2d-xへの応用だし。
外資の世界トップ数社受けてダメなら、LinkedInでAI機械学習系の会社の誘いというか紹介があって、年収のレンジがどこも下限800で上限が1300〜1500位なので次のキャリアパスとしてデータサイエンティスト的なのも次の10年を楽しく開発する選択肢としては良いかも知れない。もうゲーム業界はいいや…社内でも歩きスマホが多くてストレスが開発以外のところで多いです。

自分は育ちが良いので、マナーと言うか振る舞いが下品な人が好きじゃないです。今度書くかと思うけど、前までタワマンに住んでて、住人の民度が酷くて、部屋で落ち着かないので引っ越しました。成功する人の大半は成功すべくして成功しています。そこには品格というかオーラのようなものがあって、所作振る舞いとか、マナーや気遣いが当たり前にできる人が多い。何故なら評価する人間がそういった品格のある人間が多いので、地位のある人間から人間性の下らない減点をされることが少ないわけです。同じ能力の人間が2人いたら通常、一緒に働きたいか、一緒にプロジェクト成功を祝って飲みたいか、そんな基準で人を選ぶのが人間です。反面、育ちの良い人間は気遣いに使われる脳機能が発達してる(子どもの頃のしつけで未発達の人は他人の不快を想像できないらしい)ので、無作法な振る舞いに意識しないでも気付いてしまって、無駄にストレスを感じたりもます。まぁ、一個上の次元だと下々の粗相は気にも留めない次元になりますが…。

www.forbes.com

前にも書いたかもですが、アメリカで語学学校にいた時にcontagiousという単語の例文で"A bad attitude is contagious"っていうのがあったのを今も覚えてます。contagious diseaseが伝染病なので、移りやすいとか伝染性って意味の単語なんですが、近くで悪い振る舞いをする人がいるとそれは伝染しやすいということです。マナーの悪い行動とか、迷惑な行いというのはたいていが自分にとって楽、他人に取って迷惑なものです。割り込みとかね。特に判断力のない人間(子どもとか)は人の行動を深く考えずに真似から学びます。だから、躾の時期に親は正しい振る舞いをしなきゃいけないわけで。子どもといる時は絶対信号無視するな、とか、昔は地域でも子どもの前では信号無視する大人はいなかった気がします。子どもは集中力がなく好奇心旺盛なので、よそ見しながら歩くことがよくあるので、信号無視を習慣化すると事故に合う危険はかなり上がりますよね。歩きスマホとかも、この伝染してる悪いマナーの1つで、しかも問題なのが、前のエントリーで書いたように、歩きスマホが当たり前の人は脳の超前頭野が働かない状態が続き、脳は使わない部分は縮んでいくので判断に使う部位が劣化して、善悪の判断がつきにくい、要は認知症とかのような状態になって、すべきでない悪いマナーだとそこらじゅうに貼られても止められなくなってしまうという。

今回はそんな、深く考えない行動にストップをかけて、一歩踏み込んで考えてみようという話です。一応、非技術者もしくは初心者技術者向け技術ブログのつもりなので最後は技術話、コピペ癖への警鐘に繋げます。

なぜを考える

日本人はどうもWhyよりHow toを気にする気がします。それ故、深く考える習慣がない人が多いように感じます。特に今の子どもは幼稚園、小学校低学年から親に押し付けられて塾に通い、何故を考える時間なく(外で遊んで色んなものに触れて、見て、話しての方がその能力は伸びると思ってる)、教えられたことを憶える習慣が強くなってるように思う。感受性の衰えすごいな、と感じるのは電車で2人一緒にいてもお互いスマホいじって、会話の話題もスマホからだったり。ちなみに、僕は子供の頃から何故ばかり考えて生きてきたせいか、学習能力とか理解力は高めな気がします。周り見ると発見や気づきがいっぱいあるんですけどね。ただし、一歩踏み込んで、気付きが得られると、それを気付いてない人の行動が気になってちょっと生き辛いかも知れません…。傘束ねずに傘の水滴で自分の服濡らして電車に乗ってくる人とか、店の前の邪魔な違法駐輪とか非常に気になります。How toはどうすればいいかの手順なので、深く考えたり理解は要りません。行動の理由は理解した方がいいけど。

何故というのは、一歩奥を覗き込むことのような気がします。例えば、重力の仕組みであっても、どういうことが起きてるか、の理解が先に来て、どうしてはその先、一歩先の次元にある気がします。未だに重力の計算式はわかっていても、重力が発生する理由はわかっていません。仕組みがあって現象がある。現象の理解は見える部分からの分析の結果で仕組みはその元の見えない部分です。分かる例で言うと、時計がどう動いてるか、仕組みは分解しないとわかりません。分解しても分かる人にしかわかりません。何故を考えることは物事の本質を考えることです。

邪魔の例

一つの例えとして、邪魔という感覚を取り上げます。
道とか電車を出る時に邪魔だな、と感じることはよくあると思います。でも、邪魔、で終わってしまうのでなく、一歩踏み込んでみる。なんで邪魔と感じるんだろう。それを考えると、自分が感じた邪魔、という不快な感情を他人に与えないようになります。では、邪魔と感じる状況を分析してみる。基本的に邪魔だと感じる状況というのは最善の動線を遮られた時だと思います。自分勝手な人間によって回り道、余計なコストをかけなくてはいけない状態、自分のペース・速度で歩けない状態、それが邪魔です。そう考えると、他人の動線をイメージして、そこを塞ぐ位置には立たない、流動性を遮る状態になったら一旦移動する、などという感覚ができます。そのためには周りの状況を把握しなくてはいけない。つまり、電車でドアが開いてる間は基本的には周りを見るべきです。流動性、他人の動線を把握して動くために必要な情報はスマホ上のまとめサイトではなく、周りに立ってる人との距離感や、移動する人の動線です。降車客が階段に向かう動線が想像できれば、イライラしてる人が出てきた時にぶつかられることもないでしょう。触らぬ神に祟りなしです。

邪魔の応用

邪魔がどういうことか自分なりの答えが見つかると、他のことにも理解ができます。例えば、”うるさい”。これは思考の動線、つながりを妨げられる状態です。邪魔と同じで音で気が散って流れを止められることで思考の流れが悪くなります。スポーツでも対人スポーツは自分のペースだと全く疲れないのに、相手のペースに合わせさせられると異常に疲れます。人は自分のペースを乱された時に不快に感じ疲れるものです。

コピペの弊害

プログラミング教室や現場でもコードを書く時にコピペをする人がいます。コピペは基本的にバレると思った方がいいでしょう。コードを書く時、スタイルは人それぞれです。if文も

if (flg1)
{
    // do something
}
else
{
    // do other
}

if (flg2) {
} else {
}

if (flg3) {
}
else if {
}

この辺よく見る書き方なんですが、複数のスタイルが混ざってると大抵コピペしてますね。

if(flg){
if (flg) {

半角スペースの使い方も癖が出ます。コピペでなく混ざる人は…美しくないコードを書く人なのであまり一緒に仕事したくないです。
わかりやすく(ロジックが複雑だとコメント多くしたり)美しいコードはバグが起きにくかったりします。コードレビューでも拾いやすいしね。

そして、コピペは他の箇所で正しく動いても、自分のコードではバグる場合もあります。また、他で動いてるからと言って最適とは限りません。コードアシストとか色々やってくれるので、せめて、元のを参考に、自分で動きを考えながら、最適化しつつ書く癖を付けたほうが良いです。コピー元が何をやってるかわからなくてコピーしてる人間とか正直、正気の沙汰に思えませんが、意外といます。

情報の真偽

1人1台スマホ時代で情報発信が普通になり、さらにプログラミング教室のステマが広がった今、ネットで見つかる情報は著名な専門家の書いている記事以外、何かしら間違いが混ざっていると考えていいと思います。「なんでこうなるかわかりませんが、」などと書いてるページがあったら即閉じたほうが良いです。そこをコピペしたら間違えたのがそのブロガーでもあなたの責任におけるあなたの間違いになります。結局、peer reviewをしてる紙の情報が確実なんですが、急ぎの場合でもコードの意味をしっかり考えたほうが良いです。一歩踏み込んで考えること、情報を疑うこと。悲しいことですが、発信者が増えたことで、発信者のレベルが劣化しています。URLを確認してプログラミング教室のページが書いている技術情報とかはメンター的な学生に毛が生えたか、下手すると素人に毛が生えた程度のエンジニアの卵が書いてる可能性が高いのでそっと閉じましょう。そして、そんな人間に情報発信をさせている教室は絶対に信じないほうが良いです。

ちなみに、最近見つけた仕事で使うとバグる例だと
masahirosaito.hatenablog.com
http://developer.wonderpla.net/entry/blog/engineer/Cocos2d-x_texture_hit_test/developer.wonderpla.net
前者は後者を批判していますが、どちらも現場じゃ正しく動かないでしょう。
他画面対応してる場合

this->location = CC_POINT_POINTS_TO_PIXEL(location);

initWithLocationとか作って、これでピクセル情報にしてあげないとダメ。CC_CONTENT_SCALE_FACTOR()をかけて変換してる感じ。取得する色情報はポイントじゃなくてバッファ上のピクセルの位置です。個人レベルの実験だとscaleFactorが1対1ですが、大抵変形端末は縮尺が違います。
ちなみに、color picking的な手法はopenGLでは普通の技術で特に3Dのオブジェクト選択ではオブジェクトごとに別の色を付けて、同時に描画して、取れた色のオブジェクトを選択状態にする、というのがよくやる手段ですね。さらに、3Dオブジェクトはtriangleの集合体なので、そこまで選択したい場合、ポリゴン(基本3画形と思っていい)ごとにIDを振って、それをIDごとに色情報(RGBA)に変換してglReadPixelで選択したポリゴンを選んで選択した対象を判断する、とかも学校の課題でやったりします。この場合、1回のバッファへの流し込みで住むので、cocos2sでの手法より効率がいいと思います。この辺の記事は元の技術とか仕組みわからずにStackOverFlowとかのコピペで動いたのベースでperfect pixel detectionができると思って書いた記事なんでしょうね。おそらく、openGLわかってないように思えます。

階段を登ろう

結局コピペ由来のバグの問題は深く考えず、元の技術を理解せずにショートカットしようとして、バグを起こす。しかも、仕組みがわかってないので本人がすぐ直すのは不可能です。コピペするにしても、使っている技術は全て把握しましょう。やり方がわかったとしても、正しいかは使っている技術を理解しないとわかりません。まぁ、簡単に言ってしまうと「ちゃんとやろう」ということです。

それでは、よいGWを!

プログラミングは奥が深い

お久しぶりです。3ヶ月のモニター2期プログラミング教室が終わりました。その辺をメインにあれこれ。

本題の前に、仮想通貨の話。ちょくちょく仮想通貨(海外では暗号通貨と言われますが)いじってないの?的なことを聞かれますが、あれは博打なのでやりません。まぁ、初期に買って去年くらいに売るなら手を出しても良かったかも知れませんが、投資で良く言われる、素人が買いだしたら相場は終い、と言うのもあり、今更手を出す気になりません。先行して多額の投資をしている金持ちは売り抜けるのにも同数の買いがないと利確できないこともあり、素人が増えてボリュームが増えたら少しずつ売って逃げたりします。そもそも、仮想通貨だと取引量が少なすぎて金持ちには向かないんですよね。数億買い入れたら買値上がっちゃうし、売りでも値崩れの引き金になりかねない。なので、大きな買いを入れられる銘柄、もしくはタイミング(買いが膨らんだところで売ったり、逆に成行じゃない売りが膨らんだところで買ったり)。基本的に仮想通貨の現状じゃ、機関とか大金持ちには向いてません。ハッキングで出金できなくなる危険性もある。来ても仕手くらい。仕手が来ると値は上がりますが、たいてい素人はハメられます。買ってる金持ちって投資素人の芸人とか情弱ビジネス界(情弱を鴨に広告収入とかコンテンツ売ってる)のトップスターのイケハヤとか与沢翼でしょ。與沢君後輩だけど、半夜間学部で情報処理系の共通授業で俺が授業中5分しかちゃんとやらずにA取ったプログラミングの授業でC取ってるし、ネットビジネスで成功した人、なんだけど、IT系は名乗らんで欲しい。インターネット使ってるだけでエンジニアリングではない…というか、情報技術って広すぎるんだよなぁ。そういう技術関係ないアフィリエイターとかまでIT系名乗るから新しい業種名が必要な気がする。與沢君が出てきた時点で胡散臭いグレーゾーンのものな確率が高いので撤退したほうがいい。金持ちとか機関が来ないって言うことは、底堅い上昇に繋がりにくくかんたんに崩れるってことです。

なんにせよ、ファンダメンタルとかない、チャートと場の空気だけで予想する博打な上に相当数を上位数%に握られてたり、マイニングの売りあったりとか、指標のないものを買うのは博打です。まともな人のすることじゃない。買ってる中の情弱の方々はブロックチェーンがすごい、中央支配されない、価値が上がって当たり前、とか思ってるかも知れませんが、ブロックチェーンは取引の正当性を保障するだけで、アカウント乗っ取られたら何の効力もないし、むしろ、その取引すら正当化される気が。コインチェックは保障するみたいですが、海外では保障しないハッキングされたところもありますし。

中央がコントロールしないのはいい面も悪い面もあって。不当な介入はないですが、通貨の水準が決まらないんですよね。国家の通貨っていうのは国力が反映されるので、大きく暴騰暴落しても妥当な範囲です。明確な価値基準がある。だって、それがなければ、海外でPS4を1$で買えたり、フェラーリを日本で50万で買えたり、iPhoneXが100万とかになりうるわけです。国の通貨として認定されて国の管理の下にあるというのは国がある程度の問題を保障できるということだったりもするわけです。

というわけで、仮想通貨・暗号通貨は博打。元の金がなくてなくなってもいい人は自己責任で、という感じ。元銭あるなら、株とか税金や手数料低い安定したところで確実に勝った方がいい。最近だと、1,2ヶ月に1度暴落あるので、そこで買ったら結構勝てます。銘柄ある程度ウォッチしてれば安い水準もわかるから、そこまで我慢すればたいてい負けません。中長期でできる余剰資産あるなら、ファンダメンタルズ分析が最終的には強い。銘柄選べば月に10%位は難しくないです(去年は月に平均5〜10%儲けました)。

特に去年のいつ買っても待てば儲けられる相場で利確して今年入って暴落で損切りとか強制決済させられた人達は結構な人数で去年の億り人から6月位に刑務所送りになってそうですね…。国税庁結構本気だと思うよ。

3ヶ月の第2期が終わって

11月からの3ヶ月ですが、6人(3人ずつの2クラス)で開始しましたが、最終的に2ヶ月目で1人脱落、3ヶ月目はチーム課題を出したので、課題提出がほとんどなかった1名は打ち切らせて頂きました。元々課題やアンケートのフィードバック(以下FB)を前提に安く提供する話だったのですが、ちゃんと契約書とか作るべきだったなぁ、と。
プログラミングは初期(基礎構文とかのレベル)は知識より手を動かすことが大事です。そもそも、基礎構文でデータ構造もクソもないからね。とはいえ、知識をベースに手を動かすと理解が数倍に跳ね上がるので、授業で知識を教えた上でそれを実践する課題を与えていました。スポーツや言語と同じで、リーディングが上手くなったから話せるわけじゃないし、身体の使い方がわかったからと言って反射的にそれをできるかは別です。例えばシャドーボクシングとかも、正しい動きを反復するのが大事で、ただシャドーしていると変な癖の付いた効率の悪い力の入らない打ち方とか、手打ちで身体の力が活きない動きで脳が最適化されたりします。プログラミング教室では基礎のインプットとして授業があり、課題でのアウトプットにより、その知識を定着させて使いこなせるよう脳を最適化するわけです。課題をやらないと、頭を通り抜けて翌週には忘れます。課題をやるにしても、重要なポイントを意識しないでやると、できるけど理由はわからない、という曖昧な状態で、後々、致命的なエラーを起こすコードを書きかねません。

講師が好む生徒

これを出来の良い生徒とか質問を良くする生徒と勘違いする人が多いですが、個人的には「努力して成長する生徒」です。これを言ってしまうと、元々できる人は困るかもしれませんが、元々できる人は本当に全部知ってるなら受けに来るわけ無いですし、自分の新しく知った知識に関して、なぜ自分が知らなかったかを考察したり、新しくわかったことについて調べたり、知ってるからこその角度で質問したりすると、教える側にも学びがあります。アメリカの授業ではトップレベルの学生はこういうことが得意で、教師側も、それはやったことないから、確認する、と言って次の授業でFBをしたりしていました。講師が全部知ってるわけでもないので、時折、そういう質問があると、日本では無駄なプライドで変なことを口走ったりしますが、海外では双方向での学びの機会と喜びます。また、質問に関してはすればいいというわけじゃなくて、「それ、前に説明したよね」というのが中心だと、逆にちゃんと聞いてない生徒、となりかねません(ただし、1,2ヶ月前の話とかなら再確認としてOK。その場合、前に聞いた気がしますが、〜って、○○でしたっけ?とかどう動いてるんでしたっけ、という聞き方がpolite)。ちなみに最低の生徒はわかってるふりして全然わかってない生徒。授業のペースが壊れます。
自分でわからないことを努力して、わからない部分を説明しながら質問してもらえると、講師としては詰まりどころがわかるので、次の回に活かせます。元々あまりできなかった生徒が質問と課題への努力を通じてできるようになっていく、成長していくのは何度か書いたかも知れませんが、教育者の最大の喜びです。
というのも、自分が、数学とかの用語の分からない英語(プログラミング用語は最初から余裕でした)の授業で他専攻から大学院に入ったこともあり、数学力をかなり求められる授業では最初は落ちこぼれで、リーディングと質問で最後はクラスのトップレベルまでできるようになった(正直血尿出るんじゃないかくらい頑張りました)ことが何度かあって、最終的にA-位で終わって、教師にやけに気に入られた事があったりして、その気持ちが今はわかります。最初できないことは必ずしも悪いことではありません。ただし、最初から基礎がある人の何倍も努力しないといけないので、ちゃんと基礎は出来たほうが良いです。その経験からここでは基礎はちゃんと積み上げるべき、の思考を繰り返し書いています。

プログラミングは常に新しい発見ができる

大学院在学中の短期も含め、今の現場で3年位いますが、この1年半はcocos2dでC++を使っています。元々Javaはかなり使えて、大学院でCやPython, Haskellとか、Prologいじったので、C++JavaとCの知識であまり言語仕様をしっかり勉強せず、現場で使われてる書き方をリバースエンジニアリング(以下RE)で身につけた感じですが、最近、ガッチリ系エンジニアのコードを見て言語仕様をちゃんと学びだしたら、それまで自分が書いてたコードが稚拙に思えました。おそらくアルゴリズム的にはあっと思う部分もあっても、言語仕様が使いこなせてないからconstをあまり使ってなかったり、参照を他で使われてるやり方(キャッシュしてるマスタデータのエンティティの参照とか)しか使ってなかった部分がありました。後はconstexprとか。それにともなって色々論理式の使い方も見直しました。数学的なプログラミング、論理式の正しい使い方ができてるとコードが全然違うものになります。

論理式を使いこなす

ここからの例では最近使ってるcocos2dがベースですが、関数は名前見れば意味がわかるでしょう。_で始まるのはメンバ変数です。Node::setVisible(bool isVisible)はその要素の可視を設定して、要素を出したり消したりします。

if (classA.isVisible())
    _nodeA->setVisible(true);
else
    _nodeA->setVisible(false);

とかって、結構慣れてる10年選手のエンジニアでも思考停止してると書いちゃうんですが、trueの時にtrueを与えて、falseの時にfalseなら最初からsetVisibleに渡しちゃえよ、という話です。

_nodeA->setVisible(classA.isVisible());

これでいいじゃん。まぁ、可読性は多少落ちますが、これくらい読めなきゃプログラマ辞めちまえ、と思ったりします。
他にも、

enum class TabType {
    TAB_A = 0,
    TAB_B,
    TAB_C,
};

という定義があって、タブを切り替える関数で

void SceneA::setTab(TabType tabType)
{
    if (tabType == TabType::TAB_A)
    {
        _nodeTabA->setVisible(true);
        _nodeTabB->setVisible(false);
        _nodeTabC->setVisible(false);
    }
    else if (tabType == TabType::TAB_B)
    {
        _nodeTabA->setVisible(false);
        _nodeTabB->setVisible(true);
        _nodeTabC->setVisible(false);
    }
    else
    {
        _nodeTabA->setVisible(false);
        _nodeTabB->setVisible(false);
        _nodeTabC->setVisible(true);
    }
}

とか、もうこんなコードは見たくないんです。

void SceneA::setTab(TabType tabType)
{
    _nodeTabA->setVisible(tabType == TabType::TAB_A);
    _nodeTabB->setVisible(tabType == TabType::TAB_B);
    _nodeTabC->setVisible(tabType == TabType::TAB_C);
}

これでよくないですか?3択で1つしか取らないわけですから、対象のnodeだけが見えます。

数学的思考

何度か取り上げた1からNまでの等差数列の和

int sumByIdiot(int n)
{
    int sum = 0;
    for (int i = 1; i <= n; ++i)
        sum += i;

    return sum;
}
int sumByFormula(int n)
{
    return int(n * (n + 1) * 0.5);
}

がありますが、この辺は実はコンパイラが最適化してくれて両方同じ機械語に翻訳されたりします。
最近見た見たくないコード。

std::map<int, bool> visibleMap;
for (auto &data : result->visibleList())
{
    visibleMap[data.asInt()] = true;
}
for (int y = 0; y < result->numRows(); y++)
{
    for (int x = 0; x < result->numCols(); x++)
    {
        int index = y * result->numCols() + x;
        _imgParts->setVisible(x, y, visibleMap.count(index) == 0 ? false: visibleMap.at(index));
    }
}

これは開始地点から、x * y個に分かれた表示領域で渡された位置のみ表示するコード(初期値は全部visible=false)なんですが、これ、map必要ですか?おそらく、リストの数字からx, yを算出できなかったんだろうけど。これ見て、ああ、数学できないんだな、と思った。画像データってピクセルのstreamなので、開始位置から終了位置まで連続で情報が詰まってます。おそらく、画像関係の勉強した人や数学力のある人が書いたら、

for (const auto &data : result->visibleList())
{
    int index = data.asInt();
    int x = index % result->numCols();
    int y = index / result->numCols();
    _imgParts->setVisible(x, y, true);
}

indexとx, yは無名でもOK。x, yは割り算理解してれば算出できるわけです。割り算の本質と2次元配列のstreamのどちらかが理解できれば無駄な2重ループなんて書きません。

bitsetはすごく便利

std::bitset<n>は知る人ぞ知るプログラミングコンテストの強い味方ですが、これ、enumのグループ分けした判定とかでも強い味方です。
よくあるコード

enum class Cause {
    CAUSE_BY_AGE_A = 0,
    CAUSE_BY_AGE_B,
    CAUSE_BY_AGE_C,
    CAUSE_BY_AGE_D,
    CAUSE_BY_LIFESTYLE_A,
    CAUSE_BY_LIFESTYLE_B,
    CAUSE_BY_LIFESTYLE_C,
    // ... some 10 more causes
    SIZE,
};

bool isByAge(Cause cause)
{
    bool result = false;
    switch (cause)
    {
        case Cause::CAUSE_BY_AGE_A:
        case Cause::CAUSE_BY_AGE_B:
        case Cause::CAUSE_BY_AGE_C:
        case Cause::CAUSE_BY_AGE_D:
            result = true;
            break;
        default:
            break;
    }
    return result;
}

こんなのでswitchで並べたりする。bitsetを使うと

enum class Cause {
    // ... same as above
}
static constexpr size_t SIZE = static_cast<size_t>(Cause::SIZE);
static constexpr std::bitset<SIZE> CAUSE_BY_AGE = 
 std::bitset<SIZE>(1 << static_cast<int>(Cause::CAUSE_BY_AGE_A))
 | std::bitset<SIZE>(1 << static_cast<int>(Cause::CAUSE_BY_AGE_B))
 | std::bitset<SIZE>(1 << static_cast<int>(Cause::CAUSE_BY_AGE_C))
 | std::bitset<SIZE>(1 << static_cast<int>(Cause::CAUSE_BY_AGE_D));

static constexpr std::bitset<SIZE> CAUSE_BY_LIFESTYLE = 
 std::bitset<SIZE> (1 << static_cast<int>(Cause::CAUSE_BY_LIFESTYLE_A))
 | std::bitset<SIZE>(1 << static_cast<int>(Cause::CAUSE_BY_LIFESTYLE_B))
 | std::bitset<SIZE>(1 << static_cast<int>(Cause::CAUSE_BY_LIFESTYLE_C))

bool isByAge(case)
{
    return (CAUSE_BY_AGE & std::bitset<SIZE>(1 << cause)).any();
}

固定値の定義がくどめだけど、isByAgeはスッキリ。bitset<N>はN個のbitが並んでるデータ構造なので、boolがN個並んでるようなもの。なので、対象のenumの位置(enumの宣言で0だけしてるが、それ以降は1ずつ足されてる)にビットが立つ(1になる)ので、渡されたenum分左にシフトして論理積をすると、両方で1が立ってるときのみany()が1を返すわけです。1回AND回路通すだけで判定ができるってわけ。これ、例ではAGEとLIFESTYLEだけなんですが、AGE x 何か、LIFESTYLE x 何か位に要素が2つ3つなるとすごい便利です。
ちなみにプログラミングコンテストでよく使われるのはN個の数字が与えられて1〜N個の任意の組み合わせでmが作れるか、とかね。普通にやるとN個使った場合だけでN!通りあるんですが、O(N)で解けるという。この辺は説明してるところ結構あると思いますが、新しい数nでn個分左にシフトすると今ある数とnでできる全ての組み合わせがわかり、それと今ある数とnを合わせたものも論理和で足してあげれば、そこまである数値全てで作れる数に1が立つという。パッと聞いて理解できない人は論理値の理解が浅いので色々遊んで身につけて下さい。

Note始めます

最後ちょっと宣伝なんですが、プログラミング教室はもしかしたら始めないかも知れません。というのも、顎変形症の手術が夏前になってしまい、タイミングが微妙で、今の職場の契約が6月までで、延長せず、7月1ヶ月休んで外資系で8月から働こうかな、と思ってます。まぁ、世界トップ数社何個か受ければ受かるかな、という軽いノリです。当然準備もガッチリしてます。ですが、T社とかどうしようもないプログラミング教室が年商億稼いで、「使い物にならないプログラミングをマスターした即戦力エンジニア(Rubyに限る)」が大量発生するのが怖い。なので、C++を使って、プログラミングの基礎とオブジェクティブ指向やデータ構造、アルゴリズムが学べる講座をNoteで格安で販売してみようかな、と。筆不精なので、ちょっと自信ないけど…。1個の講座を短めに100円とか200円位で行こうと思ってるので気が向いたらよろしくお願いします。

スマホ依存は情弱を加速させる

プログラミング教室第2期も2ヶ月が終わりました。
プログラミングに関してできる人とできない人の差がある程度出てて、可能な時間でクラス分けるだけでなく、最初に簡単な実装テストをして、レベルで分けたほうが良かったかな、とも思っています。

実装はできるけど言語化(レポートで説明する)が弱い人や、プログラミング力はあるものの数学的な考え方になると詰まる人、真面目過ぎて時々融通が効かない人、色々です。ただ、学ぶ時に1番重要なのは失敗を恐れないことだと思います。

アメリカの語学学校で先生に言われて未だに残ってるのは「Learning is making mistakes.」的な言葉です。ロシア人の美人でメチャクチャ厳しいナディアという先生でした。間違ってもいい、積極的に発言しよう、間違った時にこそ学ぶことが多い。失敗を恐れるな、ということを習って、日本人が特に学習において苦手な部分だな、と思いました。わかってるかわかってないかは伝えないと講師にはわかりません。わからない時に何がわからないかを言語化して、自分の中でできないを理解することは非常に大事なことです。わからないけど、周りにわからないと思われるのが恥ずかしい、だから、黙ってる、となると負債が雪だるま式に大きくなってついていけなくなります。何故なら、理系は、特にCSは知識の積み上げです。下にあるものがわからないと上を積んでも簡単に崩れてしまいます。

それを避けるために毎週課題を出してもらって出来具合で理解度を図ろうと思ったのですが、1/3の人が無言で課題を提出しないという事態が発生しました。出してくれた人には苦手な部分を重点的に次の課題で補足したりとか試みましたが、提出のない人は全くわかってないと判断せざるを得ません。これも日本人の悪いところですが、完璧に、もしくは全部解けないと提出しようとしないところです。どこまでできて何に引っかかったか、それがわかれば次の授業で取り上げられます。質問もなく提出もないのでは何に引っかかったかもわかりません。努力は見せないと0と判断されます。努力しない人間を助けようと思う人はなかなかいないのではないでしょうか。努力してもできなかったなら、その苦悩が伝わればそれでいいんです。教える側として1番良い生徒は頑張る生徒、そして、努力して成長する生徒です。自分の一言で引っ掛かっていた壁を乗り越える瞬間を見るのは教育者にとって何より嬉しいことだと思います。

学習において1番ダメなのは理解できてないのに質問ができない状態です。理解できない時、何がわかってないか言語化することが大事です。自分の理解度を客観的に見て、ここがわかってないと伝えてもらえれば細かく教えるのですが、質問がないとわかってると判断して先に進みます。課題もできてるのかな、と思ったら、前日に無理です、とか提出自体なかったり…。

人は学ぼうという意志さえあれば何歳でも学べます。学習して1番の瞬間はわからないことがわかった瞬間だと思います。そのためには自分に厳しく、失敗を怖れないことが大事です。山を登るのは大変かもしれない。でも、頂上では息を飲むような風景に感動することができる。そのために、多少大変な課題でも挑み続けて欲しいな、と思います。

今回はスマホの話。ちなみにPixel2買いました。お手伝いに行ってる会社の検証端末で国内キャリア向けの端末もいじってますが、やっぱり純正はいい。日本のキャリアが関わった端末は親切の押しつけが満載で、そりゃ海外で勝負にならないや、と思いました。

スマホで人の脳は停止する

最近、スマホ子守と言われたりしますが、子供にスマホを与えて静かにさせて自分もスマホで遊んだり、子供のプログラミング教室もあって、小学生がスマホを電車でいじってたりしますが、2時間の学習効果が消える! やってはいけない脳の習慣 (青春新書インテリジェンス)という本があります。スマホを利用してる子供が2時間勉強しても全く勉強してない子供より成績が悪かった的な話です。

ure.pia.co.jp

この辺は脳科学的にも実証されてることで、スマホ利用後は脳の前頭前野が麻痺したような状態になって、理解力や判断力が落ちるそうです。だから、同じだけ、もしくはそれ以上勉強しても学力にならない。この領域はギャンブルとかでも活動が低下するみたいですが、要は中毒症状です。電車でスマホに夢中な人が降りる人を無視して出るのに邪魔なところで周りも見ずに通せんぼしてるのは、この辺の脳の活動が低下して判断力を失っている状態です。歩きスマホも同様ですね。通常、広がって歩いたら、広がってる方が避けるのに、避けるどころか、人にぶつかっても操作を続ける人がいっぱいいます。完全に脳が機能を失ってます。また、同じことを繰り返す状態は脳が働かないので、ソシャゲーのクエストループ状態は脳が停止してる状態です。脳は使わないとその脳番地が弱っていきます。最近ではスマホで買い物する人も多いですが、アフィリエイトの嘘ランキングやAmazonの売れ筋から欲しいと誘導されて買い物をしてる状態も脳科学的には思考停止してるらしいです。自分で判断してるつもりでも判断を作り出されて考えずにそれに従ってる状態。脳科学に興味ある人は↓も面白いです。

www.amazon.co.jp

つまり電車でも移動中もスマホをいじってる人は常に脳が働いてない状態です。これが1日2時間とかなってくると若くても脳が変形したり痴呆状態になったりするらしいです。デジタル認知症ってやつですね。

スマホが使える≠情弱じゃない

こんなにスマホを使いこなしてるのに、なんで情弱なんだ、というスマホ中毒の人がいそうですが、ユーザーとしてのスマホ利用は電子機器に詳しいわけでもなんでもありません。特にiPhoneは思想的に直感的に理解できるUIを心掛けてるので、バカでも使えるようになっています。バカどころか2才児ですらゲームや動画を自分で見れるとかよく聞きます。スマホアプリ開発者的には普通の話ですが。情報を得られる状況にあるのと情強であることは別の話です。それはデジタルディバイド的な話です。情報は集めることに価値があるわけじゃないです。情報を適切に短時間で収集し、それを整理して、アウトプットする、もしくはアウトプットできる状態に噛み砕くことでやっと血肉になります。そもそもが、ここのタイトルの通り、ネット上はゴミ情報だらけです。

しかも、ネットユーザーが増えてから結構経つので、古い情報もいっぱい混ざってます。ここの前にアメブロで書いてた記事が去年の秋頃からタグランキングに入ってるようです。1年以上前のT社のプログラミング教室に関する記事ですね。ランキングに入れてもらって毎日70アクセス位きてるようなのに申し訳ないのですが、1年以上昔の記事が今になってそんなにヒットするのもネットの情報が新鮮でない証拠です(Googleアルゴリズムが変わってステマ記事より僕のエントリーがヒットしやすくなってるのかも知れませんが)。

ネットで情報を探してて、まとめサイトをはしごして(よくある、リンクから一覧に飛ばされて、リンク探してやっと記事につくとか)結局、一般人の裏取りもない情報に辿り着くとかよくあると思いますが、それは正直、情報収集にすらなってない気がします。そんな愚かなことを歩きながらして、その方が効率いいとか言ってる人はもう、デジタル認知症状態でスマホに依存する理由を作りたいだけのように感じます。また、小さい端末に視線を集めてる状態も脳が停止する条件に合致するようで、電車の例だと、せめて駅につく度にホームの駅名とか車内の状況を見るなどして視覚情報から脳の動きを活性化させた方がいいと思います。たまに、結構降りてガラガラになってるのに、自分の周りだけ異常に人がいて全く動かないときとかありますよね…僕はプライベートスペース広いこともあり気持ち悪いので逃げますが。スマホと紙で同じ情報を見た場合、紙の方が圧倒的に理解度が高いとかって調査結果もあります。スマホは画面上で文字や画像が移動するので、その視覚情報を処理するので脳がフル稼働になって、理解して咀嚼する余力ないようです。やっぱファーストビューって大事みたい。

情報を扱うということ

情報は玉石混交でなんでも良いから集めれば良いわけじゃありません。特にネットで本当に重要な情報がゴミみたいな情報に隠されています。アフィリエイト詐欺とか情報商材とか簡単に月100万稼いだ、みたいな詐欺情報に躍らされるのは情報を集めて処理できない人が陥る落とし穴です。普通の人には見えてる落とし穴なんですが、情報を処理できない、周りが見えない人は穴が丸見えでも落ちるわけです。ネットで貴重な情報を得ようなんて掃き溜めで鶴を探しているようなもので、結果として折り鶴見つけて喜んで後でがっくりくるという。情報を得たいなら、本が1番です。校閲で誤字脱字や事実関係を確認して、Peer Reviewで情報の信憑性を確認した上で出版されています。毎日情報が更新されるような、某プログラミング教室の教材のような、質が悪いから直さなきゃいけない状況はそうそう起きません。ネットの情報は9割は間違ってる、というか不正確と思ってもいいでしょう。

また、情報は正しい情報を集めて、整理整頓して、しっかり理解して自分の論理回路に組み込むのが大事です。電車とか移動中は普通の人は情報を整理する時間に当てますが、電車でずっと、歩きながらもスマホをいじってる人は情報を整理したり、深く理解する時間はないでしょう。インプットし続けているので、どんどん情報が素通りするだけ。ゲームだとしたら情報すら入らず、脳の思考を整理したり、深く考える経路がどんどん細くなっていきます。調査によるとスマホ中毒の子供は脳が変形していたそうです。この辺はコミュニケーション不足も原因ですが。今、2人組で電車に乗っててもスマホなしには会話も進まない人達がいて、本当に怖いです。

greenteatime.net

満員電車や歩きながらスマホを使う人はこれと同じような現象が起きてると言われています。情報をひたすら入力して、情報の整理や熟考しない。情報への欲求だけが強くなってどんどん考える力がなくなって、学んだり判断する回路が抑制された状態が続く。情報を得てるのにどんどんバカになっていく状態です。判断力がどんどん落ちているので、それに気づかないし、中毒症状で何かしらの正当化も行われる。

そもそも人前でスマホをいじるのは恥ずかしいこと

先日、プログラミング教室に向かう途中でフリフリのフードの付いたピンクに水玉模様の…要するにパジャマの子とすれ違いました。横断歩道渡ってコンビニまで行くだけだから、ということでしょうが、土曜の13時前です。個人的には人前でスマホをいじってるのは、公道をパジャマで歩いてるのと同じように見えます。ゲームをやってる時の自分の顔を見たことがあるでしょうか?漫画で吹き出してる時とか。本来そういうのは家でプライベート空間でするもので、公の場で見せるべきものではないです。会社の機密情報の混ざったメールを見るとかもありえないですね。前述の様に、人が降りた車両でスマホに夢中で移動せず圧迫して来てるのが偶然取引先の人だったらどういう印象を受けるでしょうか?そもそもが、電車に乗ってて、すぐに返事しなきゃいけない状態って、乗車中に遅延が発生したときくらいですよね。待ち合わせでも、乗る前に乗車の車両がわかれば到着時間わかります。それを乗車前に伝えておけば、車内で連絡来ても見る必要ないし、混んでて見れなかったと言えば済むだけの話。相手から遅れるって連絡が来ても、降車後で十分だし、早く着くと連絡があっても、自分が頑張っても電車は早く着きません。乗車中にしきりに連絡を取るのは要は自分が段取りの悪い人間と主張してるようなものです。ただのSNS依存の部分も強いですが。

正直な話、自分はスマホの魅力で本場で勝負したいと思ってアメリカに渡ったこともあるので、スマホが広まった結果の、今の惨状がかなりつらいです。皆さん、スマホに考えることを移譲せず、便利なツールとして上手く付き合って下さい。便利な技術も依存すると人をバカにする悪魔の誘惑になります。

新年のご挨拶

今年は3月頃の手術後になりますが、プログラミング教室の本格始動(2〜3月に正規募集しての状況次第では事務所借りるかも)や、各種先端技術を使った開発も進めていきたいと思っています。このブログも技術者以外でも楽しめるような内容で、せめて月1では更新したいな、と・・・

そんな残念な嘆きからですが、2018年もよろしくお願い致します。
少しでも歪んだ情報に警鐘を鳴らして、より良いネットの世界を作っていけるように尽力したいと思います。また、色々面白いことを一緒にやってくれる人も募集しようかと思っています。

AI・機械学習を学びたいなら勉強会に行ってみよう

プログラミング教室第2期が動き出しました。結局6名教えることになって、一人一人話しを聞きながら、各個人の方向性や授業のスピード感を決めようと思っています。今回、応募者の中に、プログラミング教室の某T社で学んだ物の、応用が効かなかったり、全く使い物にならなかったという人も混ざっています。正直、僕がプログラミング教室が情報商材業界のような状態になっていることに気づいたのはT社がきっかけです。Life Hackerでインタビュー記事を見た。それを読んで、Life Hackerってガチでヤバイな、と思った。まともな業務経験がある人間だと?マークしか飛ばないような受け答えが続いて、T社の社長を褒めてた。結局、良く見たらそれはインタビューを模したT社の広告記事だったことに気づいて、この会社はステマで営業してる、とわかった。検索したら褒める記事ばかり。で、よく見ると、目的は紹介金だとわかった。T社で何も身に付かなかった。でも、紹介すれば無駄になった10数万が取り返せるかも知れない。嫌な思いしたのにミイラ取りがミイラになったわけです。嫌な思いをしたのに、嫌な思いをさせる側に回ったわけです(ヒカル風に言ってみた)。

最近、満員電車が駅について乗り込もうとして良く気づく。入口付近はぎゅうぎゅうなのに奥はガラガラで皆スマホをいじりながらスマホを突き出すスペースを取ってる。地方ではそこまでじゃないと思うけど、もし都心に住んでる読者の方で、ついつい電車でスマホをいじってしまう人は1日だけスマホを我慢して顔を上げて周りを見回して欲しい。自分の今までの行為がどれだけ恥ずかしくて周りが見えてなかったか、気づいて欲しい。そう思えた人はまだこっち側にいる。そう思えなかった人は中毒症状が出てるから病院に行くべきです。5年前、僕がアメリカに発つ前にはまったくなかった風景です。

スマホは便利です。ただし、それは「答えを見つける」ツールです。依存すると考える力がどんどん落ちていきます。デジタル認知症と言って、実際、認知症のように脳が縮むという研究もあったりします。技術は便利です。ただし、それは使いこなせてこそです。依存すると毒になってしまう。ここの読者やプログラミング教室の卒業生が技術の奴隷になるのでなく、技術と仲良くなって、一緒に楽しく働けるようになれる手助けをしたいと思っています。

で、T社のこともそうです。技術はすごい。でも毒になる。そのいい例です。良いのか悪いのか微妙だけど。T社の名前で検索すると、賞賛記事ばかり。でも、裏を見ると、あれは一種のアフィリエイトです。褒めないと紹介できないから嘘を書いてる。これが、ネット総発信者の弊害です。技術を使いこなすこと、情報を見極めること、それを意識してデジタル時代を生きて欲しいです。2期生の人に確認したら、やっぱりT社は独学をサポートするレベルで学生が教えてて微妙、という話でした。アメリカの大学でもTAがサポートはしますが授業はあくまで教授で、TAもほとんどがその先生の元でその分野の研究をしてる人です。個人的にはプログラミングを教えるなら業務経験が10年以上かせめてコンピューターサイエンス(CS)の学部卒レベルです。ちなみに、就労ビザとかの基準では業務経験3年が大学の1年に相当するので、結構甘めに言ってです。ただ、10年働いて分割統治法も知らないし、再帰とか使ったことない人もいるので、正直日本の業務経験は会社と内容によります。T社の関係者でW大の商学部でT社で教えてる方がアフリカでプログラミング教室を国と組んでやったらしいのですが、行動力は本当にすごいと思うものの、そんな経験で教えるとか、日本の恥になるので勘弁してくれ、と思いました。ITスペシャリストを名乗ってますが、どこまでわかるんだろ。うちの大学では大学院卒業に少なくとも3個の専門分野で指定の単位数取ってないと卒業できませんでした。なので、そこの院卒は最低3分野は専門的な知識がないと卒業できないんですが、スペシャリストを名乗る彼に質問したら、基礎的なことも答えられない気がします。CSをなめないで欲しい。自分の会社ではCS卒とか教えるのに十分だと思えるプログラマやデザイナーと、週の半分はIT教育に、残りの半分を研究に費やして、最新技術を使ったサービスを展開する会社を作りたいです。ちょっとビジネス寄りの学術機関に近い形態の組織というか。教える人間は常に最新技術を追うべきだし、それを形としてサービスにできる方がいい。そして、教わる側も最先端で開発をしてる人間に大学以外で教われる、そんな会社にしたいです。

あと、T社で1日10時間週6がイナズマコースとか言ってますけど、実務だと週に1度くらいは10時間越えるの普通ですよ。もし、25歳以下ならT社のプログラミング教室行くより、未経験可のシステム会社に行くことをお薦めします。僕は25歳未経験でシステム会社に中途で入社しましたが、1日8時間、給料をもらいながら2ヶ月半研修を受けました。まぁ、Javaで基本的な処理とServletを使った簡単なショッピングサイトをmySQLを使って作れる程度の知識にしかなりませんでしたが、給料もらいながら、です。あと、その後、現場に出て思ったのは一人でサービスを作る経験は現場でそんなに役に立たない、ということです。大抵、既に何千、何万ファイルのコードがあるところで開発をするので、コードを読んで理解する(リバースエンジニアリングと言います)のはすごい大事。簡単なシステムなら一人で作る方が簡単です。なので、一人で1から全部作った経験は実は、業務ではほとんど役に立ちません。

AIや機械学習を学ぶということ

と、話逸れまくっての本題になります。今回も応募者の中の数人がAIエンジニアになりたいと希望しています。一応機械学習は土台部分はしっかり勉強してきたので、何回か書いていますが、AIや機械学習を目指すなら学術機関に入るべきだ、と思っています。僕のいたアメリカの大学では学部4年で大学院生と一緒に機械学習の入門編が受講できます。それ以降は大学院で学ぶ内容になります。それはどういうことかというと、学部レベルのCSの知識、プログラミング能力、数学の知識は持っている状態で学ぶべき分野だということです。色んなプログラミング教室でAIを始めていますが、大抵が手を動かして(プログラミングを書いて)学ぶ、と言っていますが、そういう教室は絶対通ってはダメです。散財するハメになります。運営が全く学問的に理解できてない。CSの分野は大きく分けて2種類に分かれます。プログラミングがベースになっていてコード量が多いもの(CGとかアルゴリズムは結構書きます)と、理論が中心になっていて理解に時間がかかってコード自体は簡潔なもの(セキュリティとか情報理論)。

AIは後者であり、理論がしっかり理解できればコード量はそこまで多くありません。当然ですが、効率的なデータ構造の使い方がわかった上で、ですが。AIや機械学習ビッグデータの時代になって復活した古くから研究されている分野なので、ビッグデータによる学習がベースになります。データ構造とか効率的なアルゴリズムが書けないと、簡単に学習に1週間、1ヶ月かかるプログラミングが完成します。数学とか統計わからなくてもできる、とか謳ってる教室はそもそも講師が全く理論を理解していないので回避すべきです。そもそも理論がわかってないと、その解析や分析にどのモデルが適切かすらわからないと思います。AIとか機械学習ができればAIに仕事が取って代わられる時代でも食いっぱぐれないと思う人も多いかも知れませんが、AIが最初に置き換えるのはAIエンジニアが熟知してる、APIやライブラリを叩くだけのプログラミングでしょうね。情報を入力すればコードを吐いてくれる。ちなみに僕もcocos2dのコードは画面構成を対話式で入力すればテンプレートを出力するジェネレーターを作ったりしてます。半日でできるレベルです。

なので、僕のプログラミング教室で3ヶ月コースだと最後1ヶ月を使って、1,2個の機械学習のベースとなっている技術の実装に挑戦させたいと思っています。そこで、面白い、もっとやりたいと思うなら大学院目指して下さい。推薦状なら日本語でも英語でも書きます。最低限のセンスを見せて貰えれば、ですが…。

勉強会

機械学習に関してですが、まず東大が主催してる勉強会があります。機械学習のベースになっている事後確率を使ったベイズ理論を学べたりするもので、先日、AIの世界的権威の大阪大学の石黒教授の講演を聞いてきました。

実践的機械学習勉強会 | Doorkeeper

とか

人工知能研究会 / AIR | Doorkeeper

に参加して、入門カテゴリから学んでみるのがいいと思います。ただ、Pythonわかるレベルが参加条件になっていたりするので、その条件を満たすレベルの知識(多分余裕で超えますが)を学びたくて、僕のプログラミング教室にご参加頂くのは大歓迎です。基礎はPythonで、データ構造やアルゴリズムはCを交えて、オブジェクト指向に関してはC++とかJavaを使うつもりなので、土台はしっかり組めるはずです。その方向を志望なら、最後の課題は一緒にそちら方面から決めたいと思います。

ITの勉強会

実は結構IT系の勉強会っていっぱいあって、僕はガラケーのゲーム会社にいる時に日本Androidの会にお世話になっていて、色んな方と仲良くさせて頂きました。それこそ、Androidの本といえばこの人的な人が普通に無料の勉強会で講演をして、打ち上げでお話できて、名刺を交換したりFBで繋がったりするのが結構普通でした。今は活動が不定期になっていますが、毎月定例会があって、その度に飲んでAndroidの未来を語って、非常に良い会でした。イベントの実行委員に参加して、それもresumeに書いてアメリカも大学院に日本の文系学部卒で入学許可をもらえました。

というわけで、AIとかプログラミング業界に興味があったら、まずは無料の勉強会に参加してみることをお薦めします。当然プログラミング教室と繋がってないやつね。つながってると洗脳とかくるのでご注意を!

プログラミング教室の宣伝も胡散臭いネットビジネスの手法だらけ

プログラミング教室関連リアルタイムネタは削除しました。

この回にご応募頂いた方のアンケートの中には、ここでも取り上げてるプログラミング教室で痛い目にあった方や現在も受講中の方もいるようで…基本的にカリキュラム的に金額に見合ってない趣味にしか思えないとこしか取り上げてないですからね…。何故かクラウド契約させられるところも結構あるんですが、インフラエンジニアを目指すのでなければ、エンジニアが複数人いるところで新人がクラウドの契約や管理を行うことはまずありません。セキュリティとか安定稼働に関わる部分ですし、ミスが損害につながりやすい部分です。クラウド使うにしても、払った費用から教室側が契約して、VPNとか設定して、このIPでSSH接続して、とか伝えるべきです。それで、期間終了後は教室側で解約する。この辺やらせる教室は講師にまともな経験ない可能性が高いです。中規模(100人以上)の会社とか、大手に出向したエンジニアなら間違いなくダメ出ししますから。例えば、スタートアップしか関わったことない(エンジニアが2,3人しかいない環境)とかなんでしょう。確かに、クラウド上でウェブサービス公開したら何かを作った実感は得られるかも知れませんが、クラウドRailsみたいなフレームワーク同様、クラウドサービス提供側がいろいろな設定を便利にやってくれたりしますから、本来、クラウドに移行する前に知っておくべき知識が学べないし、そもそも実務では経験豊富な運用担当のインフラエンジニアが触る部分でプログラマの仕事ではありません。知ってて損はないと思うけど、教室で習って実務で数年いじらなかったら忘れるだろうし、逆に、プログラマになろうとしたのにインフラエンジニアを任されてプログラムはJenkinsとかジョブ管理中心のしか書かないことになったりするかも。そういう教室は数人でスタートアップとしてサービスを立ち上げてエンジニアが1人か2人位、下手したら1人で起業するのに特化した内容なので、そういう目的じゃない人は避けたほうがいいです。プログラミングや理論部分が薄れるだけです。

で、今回はアンケートを受けて、ヒカルがYouTube情報商材屋の手法を使ってたみたいに、胡散臭い系のプログラミング教室もアフィリエイトの手法だらけだな、と思ったので簡単に触れます。

何度も比較記事とかで自社を薦めるT社

典型的な詐欺アフィリエイトの手法として、事実関係なくランキングを勝手に作って1位とか上位にアフィリエイトのリンクを貼るとか比較記事で優位に書くのが問題になって、日本アフィリエイト協議会が警告を去年出してましたが、同じことをこの会社はしょっちゅうやってます。これは自社なのでアフィリエイトではないですが、いわゆるステマ記事というものですね。自社なら弊社プログラムでは、とか言えばいいのに、下記ページとか最初にお薦めしてますが、弊社の文字は全く無いですね。

tech-camp.in

システムエンジニアの役割もわからないT社

なんでまともな業務経験のない人に自社のPR兼ねた記事書かすんですかね。まぁ、当然チェック入れてるんだろうから、経営陣もわかってないんだろうけど。

tech-camp.in

あまりIT業界を知らない人にとっては、システムエンジニア(SE)とプログラマーの違いがわかりにくいかもしれません。

昔であれば、システムエンジニアプログラマーといえば銀行の管理システム構築や法人の大規模なデータ管理などの業務が主でした。

ごめん、君もわかってないからwプロジェクトマネージャとかプロジェクトリーダーとか知ってるんでしょうか…。マネジメント職とエンジニア職の違いすらわかってないやんけ。まぁ、日本では文系が多い時代に文系優位に作られた謎キャリアパスがありますからね…。システムエンジニアの主な仕事はその名の通りシステムをエンジニアリングすることですよ。マネジメントちゃうよ。何故か日本では話すことがエンジニアリングの中心になってるようで、BtoBでは顧客と折衝とか、意味不明な設計書という名の説明書を下請けに丸投げするのがSEの主な仕事ですね。ちゃんとしたところだと、実装のイメージの付く設計書、要はシステムの設計図を書いて実際プログラムを書く人達に引き継いだり、自分で共通部分書いたりしますね。まぁ、たいていが顧客と実装者の間で伝言ゲームする人です。個人的には日本しかない役職なので文系エンジニアの別称、と呼んでたりします。海外ではプログラマがやってる仕事をプログラマは話せないから、とか言って切り抜いてる仕事がSEだったりします。ホント、SEって呼ばれるの嫌いです。それは置いといて、こういう記事もステマアフィリエイトの手法ですね。知識ある人がお薦めしてる風を装ったりして誘導するやつ。

tech-camp.in

AI(人工知能)は「人工的に作られた人間のような脳を持つ機械」の総称です。ここまではなんとなく理解している方がほとんどかと思います。

お前が理解してないw脳を持つ機械って、ガチですか?この会社は誰一人自社の出す記事をチェックしていないんだろうか?プログラミング長く書いてると、なんとなく見ているコードに違和感を感じるようになります。そして、違和感を感じた箇所からたいていバグが出たりします。AIビジネス事情とか、ガチでググった内容話してるだけ、とかこの会社ならありそうだな・・・。

ここでもAI教えるらしい…冗談きつすぎる

クソみたいな記事を読んでたらびっくりしたのですが、

TECH::CAMPではいよいよ10/12(木)からAI(人工知能)コースが開講します。

プログラミング知識はもちろん、初心者にとって難しい数学や統計の知識は不要です。コードを書きながらAIの基本知識を実践的に学ぶことができます。

おいおい、マジですか。ここもAPI叩いたら動いたからってAI教えちゃうのか。なんか、卵が先か鶏が先か的な話になるけど、API叩けば動くプログラムってさ、AIに取って代わられる最初の仕事な気がしないでもない…。人工知能どころか人工無能でできるやつですね…単なる自動生成。統計も数学も分からないでいじるんでしょ?まさに人じゃなくていいやつですね。てか、お前ら、絶対まともにAI習ったことないだろ…。どうせ、scikit-learnとか使って、Irisを分類できて喜んでるレベルな気がしないでもない。そもそも、ガチの学習させると半日とか1日学習にかかったりするので、理論わからずに適当に叩くと、半日後に涙目になりますからねwまぁ、前述の

「人工的に作られた人間のような脳を持つ機械」

という説明だと、彼らの脳を持つ機械はスーパーコンピューターより速いかも知れないけどwあれ、AIコースって脳を持つ機械を作る電子工作コースですか?( ゚д゚)

冗談は置いておいて、この人達、ブラックボックス平気で使いこなせると言っていじる人達ですかね。つまり、銃とか、身を守るために買って、使わないでメンテナンスもしないで放置して、いざという時に暴発させて自爆するタイプの人達ですね。怖い怖い。ちゃんとした知識ないと身を守るための物で身を滅ぼすこともありえるんですよ。日本人には銃は身近じゃないので、身近な例を出すと、テレビ見るのにテレビの仕組みを知る必要はない、使い方さえ知ってればいい、壊れたら叩けばいいんだ、とか言ってる人。たまにAPIとかフレームワークの中身知って使うべきだ、って論争でテレビ出す人いますけど、この例でテレビ見る人はユーザーでプログラマはテレビ作ったり直す人だからね。テレビ見るのに〜、っての見るとあちゃー。ユーザーにプログラム書かす気か、この人は、と思ったりする。APIのユーザーって観点だと、テレビは完成品なので、ブラウザみたいなもんで、そもそも不適切で、APIは昔だとアンテナとかリモコンかな。正しく使わないとちゃんと動かない。ある程度の原理は知ってるでしょ。向ける方向とか距離とかさ。これ、完璧にしっくり来ないけど、使うのはユーザー、使いこなすのがエンジニアだと思う。ユーザーの上級者目指すわけじゃないですよね。

テレビの例はあまり適切じゃないですね。例えば何でも屋に依頼すれば、どんなことでもやってくれると頼んでたら、実は毎回犯罪行為してた、とかなのかな。

百歩譲って、APIを使う人が100%中身を理解してる必要はない(大まかには理解したほうが良いけど)としても、教える側は理解してないとダメだよね。

www.amazon.co.jp

せめてこの本は理解してから教えようね

例えば、予備校の日本史の教師に「この年にこの事件が起きた因果関係がよくわからない」って質問して、「私はその時代の人間じゃないからなんでかなんてわからない(APIを作ったプログラマじゃないから知らない)。でも、年表(API)という便利なツールがある。これの使い方がわかれば歴史の流れがわかる。すごいだろ。」とか言われたら、だめだこりゃ、って思いませんか?俺もわからん。でも、覚えろ。覚えれば点が取れる、これでいいのだ、的な。歴史を学ぶことって年表を覚えること自体に意味があるのでなくて、そういう流れが起きる因果関係とか、その時代の人達の心情を知ることによって、良いところを学んだり、悪い歴史は繰り返さないようにすることが大事なんじゃないんですかね。まぁ、歴女はキュンキュンしたりするのかも知れないけど。APIの使い方を覚えるのは年表を覚える程度の意味しかないと思います。本質がわかってないから、簡単にバグらせますよ。そして、ブラックボックスのまま使ってたらバグった時直せないよね。

ここVRもUnityのチュートリアルレベルで教えてるっぽいし…。ちなみに、近々、Computer Scienceのマップを作って掲載しようと思うんですが、機械学習とかAIの領域はかなり理論寄りだと思っています。何度でも書くけど理論側は理論を理解することが大事で、大学院にいた時、機械学習の課題とかは5日間リーディングに費やして5時間でプログラミングを書き上げる、というようなことがよくありました。理解することが大変で、わかってしまえば簡単になる。そういう領域です。コードを書きながら…ってさぁ、そもそもエンジニアリングの基本もわかってないじゃんか。重めの学習プログラムも組んだことないの丸出しだしね。システム業界ですら設計しようとするし(実態は全く設計になってない文系の書類なんですが)、負荷試験とか見積もりするわけだけど、見切りでできるとか言ったらダメでしょ。やっぱダメでした=詐欺ですよ。

オリジナルアプリを企画制作するのがプログラマ

かなりの謎としては多くの前線の人が関わってない、経営者がガチエンジニアじゃなかった教室でオリジナルアプリ制作をさせられ、ひどいところではそれがいい教室の条件とか自画自賛で言っちゃってたりします。

www.sejuku.net

スクール選びにおいてもオリジナルアプリ開発までしっかりサポートしてくれるかということも大きなポイントになってきます。

何を言ってるんですかね…。制作現場で働いたことあるんだろうか…。エンジニアは企画職ではありません。自分で企画して、一から全部作るようなところは数人規模のスタートアップくらいです。1人で作れるものなんてたかが知れてます。チームでそれぞれのプロが組んで作るのが業務としての開発です。一人で全部作るのは趣味ですよ。たまにスーパープログラマっているけど、スーパープログラマは教室なんて行かないでも簡単に作っちゃうゆえにスーパーなんですよ…。ちなみに雇われる側としては100人以上の規模の会社しか入ったことないけど 、エンジニアが企画することはめったにない(業務効率化のツールとかはよくありますが)です。イベントで、くらい。ハッカソンとか。

ちなみに上記のページたまに

f:id:masa-lab:20171016085340p:plain

こんなん出ちゃってるけどいいんだろうか…これさ、完全に見えちゃいけない表示ですよね。エラーハンドリングもまともにできないで人に教えてんのか…。即戦力エンジニア雇って改修した方がいいんじゃないか?せめて「人多杉」くらい出しましょうよ。こういう、できる振り、優秀な人材の振りって商材屋得意の儲かってる振り、みたいなもんですね。

 

今日はとりあえず、この辺で。と言うかツッコミどころ多すぎて収集つきません。