みんからきりまで

きりみんです。

#技術書典 8で配布予定だった新刊「AtCoderの歩き方」の電子版が販売中なので既刊を含め紹介する【20%OFF】

こんにちは、きりみんです。
2/29に開催予定の技術書典8にサークル参加予定だったのですが、残念ながらコロナの影響によりイベントが中止になってしまいました。
それ自体はやむを得ない事だし特に異論もないというかむしろ運営のみなさんにはこの苦難をなんとか乗り越えてほしいという気持ちです。

さてそれはそれとして、サークル「きりみんちゃんねる」では新刊として「AtCoderの歩き方」という本を出す予定で、すでに300冊の入稿をしてしまった後だったのですが、電子版をBOOTHにて販売することにしました。
この判断は若干迷って、電子版を売ってしまうと紙の在庫を消化する難易度が上がってしまうので次のイベントまで温めておくという選択肢もあったのですが、今回の本は特に完全な趣味で書いた側面が強くAtCoderを布教したいというモチベが強いので、次のイベントを待たずに電子版を販売という形で公開してしまうことにしました。

というわけで、技術書典8で配布予定だった本を既刊も含めて紹介することにしました。
ちなみに期間限定で全ての本を20%OFFにしているので、この機会にぜひ購入してくれると嬉しいです。

新刊 AtCoderの歩き方 -数学が得意じゃないエンジニアにこそ競技プログラミングを布教したい!-

kirimin-chan.booth.pm

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1844204/920d01ff-a969-498c-afd6-989452503f3f_base_resized.jpg

この本は、著者がハマっている競技プログラミングサービスの AtCoder の魅力を もっとたくさんの人に知ってもらいたくて書いたものです。 みなさんは競技プログラミング/プログラミングコンテストというものをご存知で しょうか。 かなり昔から行われているものではあるので、存在は知っているという方が 多いかもしれません。 一方で、実際にやったことがあるという人はプログラマーでも少 数なのではないかなと思います。 競技プログラミングはプログラミングを使用して数学的な問題を解く速度や正確さを競い合う遊びです。 実は競技プログラミングは近年ブームの兆しを見せています。特に数学が好きな理系の学生など、かなり若い層を中心に広まっています。 しかし、著者は競技プログラミングを数学やアルゴリズムに苦手意識がある社会人エンジニアにこそもっと布教したいと考えています。 競技プログラミングに取り組むことで、楽しみながら数学や複雑なアルゴリズムに対する思考や実装のスキルを身につけることができます。 実際、筆者も Android エンジニアとしては何年もガッツリ開発を経験してきました が、数学や高度なアルゴリズムが要求されるような分野にはとても苦手意識があり、全 く手が出せていませんでした。
しかし、近年では機械学習や XR などより高度な計算な どが求められる分野が増えてきています。 そんな時代に対応しコンプレックスを解消す るためにも、一緒にゆるーく AtCoder を始めてみませんか?
【まえがきより】

競技プログラミングサービスのAtCoderをもっと流行らせたくて書いた本です。
内容としては、競プロに興味があるけど何から始めていいかよく分からないという人や、プログラマーをやっているけど数学やアルゴリズム周りに苦手意識があって学習してみたいという人向けに、AtCoderとはどういうものか、始め方、過去問の探し方や勉強方法など知っておくと便利な知識などを紹介したガイドブックのような内容になっています。
AtCoderは勉強になるだけではなく趣味としてもとても楽しいので、興味があればぜひ読んで始めてほしいです。

具体的なコードや技法について解説した本ではないのでご注意ください。

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1844204/a1de76df-d3b1-4743-bc16-afa7ab5c69d8_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1844204/1e4597f6-572e-41a7-b523-f801f35b916a_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1844204/4a119883-9bdc-441d-81c5-0048e1e7c211_base_resized.jpg

既刊 エンジニアのためのプログラミング以外入門

kirimin-chan.booth.pm

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1575077/f2549b1d-2513-4a36-bec8-9f234804f59b_base_resized.jpg

この本は、著者が10 年ほどエンジニアとしていろいろな会社を渡り歩き仕事をしてきた経験を元に、エンジニアとしてこれから働く人や働き始めた人のためにエンジニアとして働くうえで著者が学んだり心がけていたりする「働き方」についてのTips を雑多に紹介する本です。

日本には優秀なWeb プログラマーがとてもたくさんいると感じています。あまり知られていない小さなベンチャーや零細企業などでも会社を引っ張っているハッカー精神を持った優秀なプログラマーが大抵一人はいたりします。
一方で、多くの開発現場でプログラマーのプログラミング以外のスキル、いわゆるビジネススキルやソフトスキルといわれるようなスキルはあまり高くないと感じることがあります。
せっかく優秀なプログラマーが開発に携わっていても、マネジメントや進捗管理などが出来ていなかったり、適切なコミュニケーションや情報共有が出来ていないために開発がうまく進んでいなかったり生産性が低かったりしている現場を多くみてきました。
本書ではエンジニアが働く上での「プログラミング以外」の部分に焦点を当て、筆者のちょっとしたTips を紹介してみようと思い書いた本です。中には「そんなことは当たり前だ」と思う内容や「自分はそう思わない」と感じる内容もあるかもしれません。
あくまでいろいろな開発現場をみてきた筆者のポエム集として、一つの参考として受け取ってもらえれば幸いです。
【まえがきより】

■対象読者
• これからWeb 業界で働く予定の人
• エンジニアとして働き始めたばかりの人
• プログラミングには自信があるのに開発がうまく行っていない、残業が多い、組織からの評価があまり高くないと感じている人

■本書で得られること
• エンジニアとしてWeb 業界で働く上で知っておくと役に立つ「プログラミング以外」の業務スキル
• 筆者が様々な技術系のビジネス書を読んで学んだり実践したりして学んだ知見のサマリ

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1575077/669f57b2-5506-4c9b-ba92-2e7d0795f37a_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1575077/23e000f3-07ac-4c1b-b130-2e30cd42f85b_base_resized.jpg

フリーランスを完全に理解できる本 エンジニアがフリーランスで働くための情報と知見

kirimin-chan.booth.pm

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1313813/14f4414d-b20b-448d-90c3-fd07767065f0_base_resized.jpg

この本は、7 年ほどフリーランスのエンジニアをやっている著者が、フリーランスについて身をもって知った情報や知見などを共有するものです。フリーランス(個人事業主)の基礎知識から、様々な知見などを惜しみなく解説しています。

■主な内容
フリーランスの基礎知識
業務委託契約や請負契約、エージェントの解説
・エンジニアの単価や相場について
・税金や経費について
・確定申告について
フリーランスキャリアプランについて

■本書の対象読者と前提 筆者が Android アプリ開発者ということもあり、本書は主にエンジニア、特に都内の Web 系業界で働くプログラマを対象にしています。
しかし、各章の内容はエンジニア以 外の職種 (デザイナーやイラストレーターなど) の人でも多いに参考にしていただけるの ではと思っています。
また、フリーランス以外の方でも、副業で収入がある方や業務委託 契約の仕事をしてみたい方にも役立つ内容だと思います。
エンジニアのフリーランスという働き方については、あまりその情報が共有されておら ず、一部の行動力がある人のみがメリットを享受している現状があります。また、最近で は「フリーランス」という言葉を使った耳障りのよい詐欺のような情報や、「全ての人は 就職せずにフリーランスになった方がよい」といった無責任な情報を発信している人もお り、うさんくさいというイメージが付いてしまっている側面があると思います。
一方で、 その反動からか最近のインターネット上などではフリーランスという働き方を極端に否定 したり、リスクを過大評価してあたかも社会的弱者かのように煽るような言説も見られる ようになりました。
本書で扱うフリーランスの情報は、そのようなメリットやデメリット だけを盲目的に列挙するような内容ではなく、現実的なフリーランスという働き方につい ての情報を共有したいという想いで書きました。
【まえがきより】

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1313813/cfc137f4-962c-4206-956c-d5eee2f44d65_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1313813/5022e96b-f68f-482f-82ee-9a177386c123_base_resized.jpg

既刊 Great Little girl Programmer kirimin-chan

kirimin-chan.booth.pm

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1767214/5b93cc74-947b-4c56-9c7e-abed376886c9_base_resized.jpg

幼女のきりみんちゃんが雪が降った早朝の町を散策したりするだけのフルカラーまんがです。
きりみんちゃんを知らない人でもオリジナル漫画としてたのしめます。

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1767214/95fb704d-1f68-45ca-8b2a-1e2798cf98bf_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1767214/dbe1298a-ae53-46e7-97bf-28772183d5bd_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1767214/724401cc-e5eb-40af-9ba6-4f9a980bfab0_base_resized.jpg

https://booth.pximg.net/c/620x620/023c5dec-c356-48b7-a126-d3fab8cc10ba/i/1767214/9b488ae3-7d45-4307-8c9e-6f8aa2e83737_base_resized.jpg

その他

きりみんちゃんが各本について紹介してる配信のアーカイブもあるのでよかったらみてください。

www.youtube.com

N予備校に入学してプログラミング入門コースを少しやってみたけどかなり良さそうだった

このエントリはバーチャル幼女プログラマーのきりみんちゃんが書いています。

N予備校に入学してみたよ

www.nnn.ed.nico

少し前にも話題になっていたけど、Webプログラミングなどの勉強がしたいと思ってN予備校というサービスに登録してみました。
N予備校ドワンゴが運営してるネット学習サービスで、大学受験コースの他にプログラミングコースなどもあり、月額1000円ですべてのコースが自由に履修できるようです。

プログラミングコースではプログラミングの完全な初学者向け教材から、かなり本格的なソフトウェア開発のコースまで用意されているようです。

https://pbs.twimg.com/media/EPYB6S4U8AIQV7V?format=png&name=large

「プログラミング入門」コースではnode.jsを使った簡単なWebアプリの作成まで、「大規模Webアプリ」コースでは次のように本格的なWeb開発が学べるようです。

プログラミング言語ScalaとWebアプリケーションフレームワークであるPlay Frameworkを利用して、 大規模Webアプリケーションの開発を学ぶ講座です。 並行処理プログラミングコースの終了が前提となっています。 大規模なチーム開発に必要なアジャイルソフトウェア開発やドメイン駆動設計についての概略を学び、 UMLを使ったソフトウェア設計を学びます。 最終的に、Dockerを用いてMySQL、Redis、ImageMagickを利用した画像変換サービスを完成させます。

実践的な大規模サービスの開発が包括的に学べる教材というのは結構めずらしい気がします。

やってみたよ

さっそくまずはプログラミング入門コースを履修してみました。
きりみんちゃんは現役エンジニアなのでサクサクっと終わらせようと思ったのですが、想像していたよりも内容が丁寧かつ本格的でびっくりしました。

第一章では、PCにそれほど詳しくない一般的なWindowsユーザーの中高生でも理解出来るくらい丁寧にたくさんのスクリーンショットなどを使って0からプログラミングのはじめ方を解説しています。
そしてHTML、CSSの基礎を解説したあと、JavaScriptの基本構文までやるのですが、この部分も簡潔なのにとても丁寧に書かれていて、ES6の解説などしっかりモダンな内容になっていて安心感があります。

さらに驚いたのは、次の第二章ではいきなり開発準備としてLinuxやviの解説、Ubuntuのインストール、GitとGitHubの使い方、ネットワークの基礎などかなりガチな内容になっています。
軽い気持ちでプログラミングをやってみようと思った人は挫折してしまうのでは?という心配もややありますが、最初からモダンで実践的な環境や知識についてしっかり教えてくれるのは良いですね。

この辺りはネット検索の断片的な学習では身につけにくかったり、書籍だとボリュームの問題であまり解説されない部分だと思うし、専門学校でもあまり教材がアップデートされずにGitやDockerなどまできちんと教えてもらえることは少ない気がします。
実践的なスキルを身に付けさせたいという想いを感じますね。

https://pbs.twimg.com/media/EPa9NbxU8AEzf-V?format=png&name=large

https://pbs.twimg.com/media/EPa9N3GUcAEDDbI?format=png&name=largehttps://pbs.twimg.com/media/EPa9OSMUYAAbDye?format=png&name=large

個人的には使用する言語/フレームワークはnode.js&ScalaよりもRails&Goとかの方が嬉しさはありますが、考え方までしっかりと教えてくれる教材であれば別言語への応用はしやすいだろうと思います。

最近はプログラミングスクールというのが流行っていて、中には学生やほとんど実務経験のないエンジニアの作った自称プログラミングスクールサロンのようなものが結構高額で行われているのも観測したりしますが、そういうものに手を出すくらいなら、月額1000円のN予備校のプログラミングコースを履修した方が安くしっかりとしたスキルが身につくんじゃないかなという気がします。

ちなみにN予備校に登録すると大学受験コースや中学復習コースなどもすべて受けられるので、中学数学復習コースなども履修してみようかなと思っています。

https://pbs.twimg.com/media/EPYB53XUcAI47k9?format=png&name=large

またしばらく学習を進めたら改めて感想を書きたいなと思います。

俺的2010年代を象徴するゲームベスト10

流行りに乗ってみる。
象徴するといってもぼくの10年代はそんなにゲームに費やしたわけではないので、あくまで自分の中で印象的だったものという感じです。
あとどうしても記憶の問題で最近のものが多くなる。ゆるくいこう。

mizchi.hatenablog.com

jp.ign.com

10位:WATCH DOGS 2 (2016年)

store.steampowered.com

2010年代はオープンワールドが本格的に普及した時代だと思うが、WATCH DOGS 2は自分がプレイしたオープンワールドゲームの中では非常に完成度が高く、現実のサンフランシスコをリアルに再現している見事さ、その中でシームレスかつアクロバティックに繰り広げられるアクションとシナリオはオープンワールドゲームとして一つの完成形に思えた。
しかしそれ以上にこのゲームが10年代を象徴していると感じるのは、やはりその世界観とシナリオだろう。
黒人の若いハッカーが主人公で、対する敵はGoogleFacebookなどを模した巨大IT企業による個人情報の悪用や汚職犯罪など。
主人公は(フィクション特有の魔法のような)ハッキングスキルによってあらゆる電子機器を操り、ドローンやソーシャルネットワークなどを駆使し戦う。
社会問題や最新のIT技術などを取り入れた皮肉たっぷりのシナリオも面白かった。

9位:Cities Skylines (2015年)

store.steampowered.com

10年代のシムシティ
現代の技術とマシンスペック、最高のセンスによって実現された理想のまちづくりゲーム。
ゲーム性は高くないがシミュレーションとしての完成度は異常なほど高い。
そして何故かシミュレーションされている情報量から考えるとありえないほどに軽く、それを開発しているのが大手ゲーム会社ではなくフィンランドの小規模開発会社だというのだからすごい。
そんなゲームをSteamで誰でもプレイ出来るというのが10年代を象徴しているような気がする。

8位:Euro Truck Simulator 2 (2012年)

store.steampowered.com

レースをするわけでもなく黙々と広大なマップをトラックで安全運転して貨物を運ぶ労働をするというよく分からないゲーム。
しかしその運転するだけというのがとても楽しく癒やされるのだからすごい。
Steamで日々量産されている「○○Simulator」系ゲームの先駆けであり代表作と言ってもいいだろう。
これも広義にはオープンワールドゲームといえるかもしれない。

こういうゲームがSteamというプラットフォームのおかげで評価され発売から10年近く経った今も愛され未だにプレイされているというのも10年代らしさがある。

7位:Factorio (2016年)

store.steampowered.com

生産自動化ゲーのFactorioはエンジニアなら一度はやってみてほしい神ゲーだ。
マインクラフトを始めとしたランダム生成マップ上で自由にクラフトを楽しむというゲームジャンルの中で、生産ラインの自動化という部分に極限までフォーカスして作業ゲーとしての快感をこれでもかというほど詰め込んでいる恐ろしく中毒性の高いゲーム。
Factorioにインスパイアされたと思われるインディーズゲームが多く制作されていることと、Factorio自体がインディーズゲームでありながら異常なほどの情熱でアップデートをし続け、最近ようやく「このままでは永遠に完成させられない」という理由で作者が正式版のリリースを決心したというこれまたSteam時代ならではの開発スタイルも10年代を象徴してるように思える。

6位:リングフィットアドベンチャー (2019年)

www.nintendo.co.jp

いまだに品薄が続いているという、Switchの最高傑作と言っても過言ではない一本。
フィットネスゲームという万人受けを狙い薄味になりやすいジャンルでありながら、実際にはガチガチの筋トレゲーでありつつ更にゲームととしても非常によく出来ていて夢中でプレイさせてくれる。
Switch付属のコントローラー+フラフープのような軽量なリングとふとももに付けるベルトだけで、多種多様なアクションをかなり正確にトラッキングしてくれる謎の技術。
10年代はVRゲームが流行ったが、重いヘッドマウントディスプレイやトラッキングカメラといった重厚な機材を使ったVRゲームよりもよっぽどトラッキングの精度がよく感じられ没入感が得られるというのも衝撃的だった。

5位:スプラトゥーン ( 2015年)

www.nintendo.co.jp

TPS/FPS型の対戦ゲームというゲーマー向けジャンルを老若男女に楽しめるゲームデザインに完璧に昇華し、オンライン環境の成熟と相まってネット対戦というもののハードルを大きく下げたのではないだろうか。
その一方でガチのPvPとしても楽しめる出来で、Sランクを目指して廃人化するゲーマーが続出した。 発売当初Twitterを中心としたネット界隈でも大流行し社会現象となったのも印象深い。

4位:Skyrim (2011年)

store.steampowered.com

10年代初頭に現れオープンワールドゲームというものの知名度を一気に広めたゲーム。
ゲーム業界に与えたインパクトは計り知れない。 荒削りでありながら万人が楽しめるレベルまで完成度があがったことによってオープンワールドゲームをニッチなジャンルから10年代の流行へと変えた。

3位:PUBG (2017年)

store.steampowered.com

オープンワールドと並んで10年代に流行したバトルロイヤルFPSというジャンルを確立させた革新的な作品。
それまでCoDシリーズやBattle Fieldシリーズのような最高のグラフィックを追求した作品が主流だったFPS界で、当初は個人の卒業制作かと思うほど雑なクオリティでありながら、それでも革新的なゲームシステムにより大流行したというのが印象深い。

2位:ゼルダの伝説 ブレス オブ ザ ワイルド

www.nintendo.co.jp

Skyrimの登場後に誰もがSkyrimを超えるようなオープンワールドゲームを作りたいと思っただろうが、それを成し遂げたのは任天堂だった。
Skyrimを始めたとしたベゼスタゲーや洋ゲーにはない丁寧なゲームシステムやゲームバランスでオープンワールドゲームというのを再開発して見せてくれた。
10年代のRPGSkyrimに始まりブレスオブザワイルドに終わったと言っても過言ではないと思う。

1位:マインクラフト (2011年)

www.minecraft.net

しかしやはり10年代にもっとも衝撃的でもっとも素晴らしくもっとも時代を象徴するゲームは何かと問われればマインクラフトだと思う。
あらゆるものをブロック化することにより世界のすべてを自由に破壊し作り直すことが出来るという子供の頃に「こんなゲームがあったらいいな」と夢見たようなゲーム。
それまでもゲーム内のオブジェクトが破壊出来るというのは技術力の表現としてアクションゲームやFPSなどで取り入れられていたが、全てが破壊可能オブジェクトで出来た世界で自由に冒険するというのは本当にすごい。
おそらく自分が子供の頃にマインクラフトがあったら何千時間でもプレイしていたかもしれない。
マインクラフトをプレイ出来る今の子供が羨ましいとすら思う。

おまけ:ハード編

Steam

2010年代のゲームの多様性を支えたのは間違いなくSteamというプラットフォームだったと思う。
SteamのおかげでPCゲームを入手するハードルも大きく下がり、おそらく違法ダウンロードをする人も減っただろうし、インディーズゲームがフリーゲームとしてではなく有料ゲームとして評価され商業的に成功出来るようになった。

ニンテンドースイッチ

自分にとってニンテンドースイッチは、PS2一強時代が終わって以降ゲームハードがPS系とニンテンドー系に分断され、更に据え置きゲーム機と携帯ゲーム機にも分散され、コンシューマーゲームをプレイするハードルが上がってしまっていた中、とうとう待ち望んだ大統一ゲームハードだ。
最近のコンシューマーゲームはほぼすべてSwitchで発売されることになり、Switchさえ持っていればすべてが解決する時代が訪れた。
この時代が末永く続いて欲しいと思う今日このごろ。

プログラミングを学ぶにあたって詰まったことと、その後どうなったか

mizchi.hatenablog.com

みんなも何に詰まったか、書いてみてください

とのことなのでぼくも書いてみたいと思います。

プログラミング歴

  • 13~15歳:RPGツクールをやり込む
  • 15歳:はじめてのCプログラミングという本を買って少し遊ぶ
  • 19~20歳:情報系専門学校に入り基本情報を取得したりJavaを学んだりする
  • 21歳:1社目、Androidアプリを一人で作らされる
  • 22歳:2社目、Unityでフラッシュゲーのスマホ移植みたいな仕事
  • 23歳~:フリーランスAndroidエンジニアとしてひたすらAndroidアプリ開発

学習過程で詰まったこと

プログラミング言語を学ぶことが何に繋がるのかが分からなかった

たしかこの本。当時はゲームクリエイターに憧れていてプログラミングに興味を持ったけど、素人向けの技術書が今のように豊富じゃなかったし田舎だったので本屋で見つけられたプログラミングに関する本がこれだけだった。

内容はC言語の基本文法についての解説と、付属のCDにコンパイラが付いていてコマンドプロンプト上で実行出来るようになっていた。
変数の概念や四則演算などはなんとなく理解できたけど、コマンドプロンプト上で足し算をすることがどうゲームクリエイターに繋がるのかが全く分からずすぐに飽きてしまった。

その後どうなったか

この時の疑問は本質的には専門学校に行っていた頃も残っていて、ようやくちゃんと理解できたのは学校の後期にWebアプリを作り始めたり、就職してAndroidアプリを作ったりし始めてからだった。
多分今はプログラミングを実用的に使う方法を解説した本や記事が大量にあるので同じような経験をする人は少ないかもしれない。

条件判定やループなどが直感的に書けなかった

専門学校でプログラミングの授業をやって最初に躓いたのは、自分が条件判定などを上手く書くのがむずかしいという事だった。
学校では簡単なアルゴリズム問題みたいなのを大量に課題として解かされたんだけど、ぼくは条件が>なのか>=なのか<なのかというのがすぐに混乱してしまって苦戦した。
for文もi < nなのかi <= nなのかがなかなか覚えられなかった。
while文が終了条件なのか継続条件なのかもすぐに忘れ、自分は根本的にプログラミングの才能がないのではと悩んだ。

その後どうなったか

今でも競技プログラミングなどをやっていると自分はこれが苦手だなぁと感じるけど、普通の業務で書くようなコードであればほとんど"型"が決まっているので、数え切れないほど似たようなコードを書いているうちに慣れて迷わなくなった。
今ではそれが特にエンジニアとして仕事をする上で問題だと思うことはない。

予約語や関数名などが覚えられない

同じく専門学校でプログラミングをやり始めて思い悩んだのは、とにかく予約語や関数名などが覚えられないということだ。
特に当時の自分は英語がとても苦手だったということもあり、関数名は全て謎のヨコモジというようにしか見えなかったし、特にJava予約語も多くimplementedだのpublic static voidだのという文字列を覚えることに苦戦した。
なお当時学校では最初の1年はあえてIDEを使わずテキストエディタでコードを書かされていた。

その後どうなったか

これもよく使うものは意外に自然と覚えていった。
Androidを始めた頃もたくさんのボイラーテンプレート構文をとても覚えられる気がしなかったが、2年もやっている頃には素で書けるようになっていた。
まあそれよりもそもそも初心者は全てを暗記しないと行けないと思いがちだが、別に関数名や予約語なんてなんとなく憶えていれば十分である。
現代のプログラミング環境にはコード補完があり予約語や関数はサジェストしてくれるし、ど忘れしたらググればすぐに出てくる。
「そういう機能がある」という概念さえ理解できていれば十分である。

余談だが英語を学習するとこの辺はだいぶ楽になる。

オブジェクト指向が分からなかった

突然Javaの授業が始まりクラスは「たこ焼き器の型でインスタンスはできたたこ焼き」だの「AnimalクラスがあってCatクラスとDogクラスはどちらもbow()を実装しているが実行結果は違う」だの説明されたが何も分からなかった。
コードを書いていてもnewというのが何をやっているのかがいまいちよく分からず混乱していたし、根本的にオブジェクト指向が何の役に立つのかも分からなかった。

その後どうなったか

今でも何もわからない
文法面で言えばこれもやはりたくさんコードを書くことで自然に理解出来るようになっていった気がする。
オブジェクト指向の活用方法のようなものはAndroid開発を始めてだいたい分かるようになった。

正しいコーディングスタイルや設計が分からなかった

新卒で入った会社では自分よりもプログラミングが出来る人間が誰もいなかったため、ひたすらネットでググりながら見様見真似でAndroidアプリの開発をしていた。
当時はモバイルの設計論の情報などはほとんどなく、多くのサンプルコードがスタイルが統一されておらずC言語のようなコーディングスタイルで書かれていたりしたので、何が正しいのか全然分からなかった。

その後どうなったか

ちょうどその頃にリーダブルコードという本に出会い、初めてコードの良し悪しという概念を理解した。
ただその影響で必要以上に強引なコードの共通化をしようとしたり無邪気にリファクタリングをしたりしてバグを出して怒られたりした。
趣味でも小さいアプリをいくつも作ったりして同じような失敗を繰り返し、次第に「短いコード」や「共通化」といった良しとされているものが必ずしも優れているとは限らないということを学んだ。

その後より良いコードの書き方やコード設計などに興味が強くなり、その関連のブログエントリを書いたり発表をしたりするようになっていった。

伝えたいこと

生存バイアスというコメントが付くのが目に浮かぶようだが、正直自分はもともとプログラミングの素養がある方だとは思っていない。
学校の筆記試験で何も分からず0点を取ったこともある。
専門学校時代は自分よりも地頭がよく成績がよく課題を早く進めるクラスメイトはたくさんいた。

でもそんな同級生達の多くがSIerに就職していき、今でもプログラミングを続けているのかは分からない。
ぼくはとにかくどんなに苦戦してもプログラミングが嫌いではなかった。
だから就職してからも勉強を続けたしもっと強くなりたいとずっと思い続けてきた。

今のぼくはフリーランスのエンジニアとしてそれなりに高給を得て上手く仕事が出来ているし、競技プログラミングをやったりもしている。
プログラミングを始めたばかりの頃は地頭の良さやそれまでの人生で培ってきたこと(数学力や英語力)の影響が大きく出るし、簡単にマスターしてしまう他人と比べ自分は向いていないと感じることも多いかもしれない。
でも多くの「分からない」は学習と反復によって補っていけるし、もしあなたがプログラミングが嫌いではないのであれば、ぜひ"才能"を理由に諦めずに続けてみて欲しいと思う。
全く出来なかったのが何か小さなきっかけでスッと理解出来るようなことも世の中にはたくさんあるので。

ゲームやインターネットは子供にとって教養や学力を授けてくれるものでもある -元不登校エンジニアの立場から-

こんにちは。
香川県の条例で子供のゲームなどの利用を1日60分程度に制限する条例を検討しているというニュースが話題ですね。

www3.nhk.or.jp

これは昨今また国際的にも懸念が広まっているらしいゲーム依存症などへの対策という側面から考えられたもののようです。
しかし1日60分という内容の厳しさを考えると、実際には依存症対策というよりは昔ながらの「ゲームばっかりやってると馬鹿になる」というような思想があるのではと想像できます。

ただ、このエントリでは直接この条例案の是非や人権面の問題などについて主張する意図はなく、代わりにゲームやインターネットなどに対する自分の経験と考えを書きなぐりたいと思います。
ここで書くことはあくまで自分の経験と見聞きした事に基づく自分個人の考えであり、科学的根拠や統計的な価値のある情報でないことを予め断っておきます。

ひたすらテレビゲームばかりやっていた不登校時代

このブログをウォッチしてくれている人にはもはや周知の事実かもしれませんが、ぼくは小学3年から中学6年までの6年間不登校でした。
更にその後も高校を卒業せず、二十歳に近くなってから社会復帰して今はフリーランスプログラマーとして働いています。

さて、そんなぼくが毎日学校もいかず何をやっていたかというと、基本的にはひたすらテレビゲームばかりやっていました。
小学生の頃は少ないゲームソフトをひたすら何度も何度もやり込み遊んでいたし、中学くらいになると少ないお小遣いで当時全盛だった中古のゲームソフトを大量に買ってはがっつりプレイしていました。
やっていたゲームのジャンルは様々ですが、一番好きだったのはRPGです。スクエニが大好きでPS時代のスクエニ作品はほとんど全てプレイしました。

テレビゲームは総合学習教材のようなもの

テレビゲームばかりやっていると馬鹿になるし百害あって一利なしだと思っている人は未だに多くいるようです。
ぼくが子供の頃はゲーム脳という言葉が流行り、ゲームをやると脳が萎縮するという怪情報が広く出回り親たちが信仰しました。
本当にゲーム脳があったかどうかはゲームで育った今の20代の若者を見れば明らかだと思います。

今でこそ脳トレゲームなどというジャンルも存在しますが、そういうものに限らずテレビゲームというのはかなり様々な能力が要求される総合的な娯楽です。
たとえばRPGをプレイするには一定の日本語の語彙力や文章読解力が必要ですし、能力値や所持金など様々な数値を計算したり、効率的なお金の使い方や戦い方を考える必要もあります。
多くのゲームでは地図を見る必要があり、左右や東西南北をゲームで覚えたという人もぼくの世代では少なくないのではないでしょうか。
ゲームによってはパズルのようなダンジョン攻略があったりもします。時のオカリナの水の神殿に苦しめられた人は多いと思います。 物語には様々な時代や地域を元ネタにした世界が広がり、多くが古典的な文学などをオマージュしたようなシナリオが展開されます。

このように、ゲームをプレイするには様々な能力や教養が求められるし、プレイを通して自然にそれらを学ぶことが出来るようになっています。
読書や映画鑑賞、算数パズルなどが知育として認められるのであれば、テレビゲームはそれらの要素を詰め込んだようなものですしむしろ理想的な知育教材だとすら言えると思います。

ぼく個人に関して言えば、物心がついた頃からスーファミでアクションゲームやPRGをプレイしていて、日本語はゲームで覚えたと言っても過言ではありません。
不登校時代も様々なゲームをプレイする中でたくさんの文章や計算に触れ、必死に分厚い攻略本を読み込み攻略方法を考えていました。
たくさんの物語に触れ善悪について考えさせられたり、様々な国の文化を知ったりしました。

中学を卒業しインターネットが開通してからはネットゲームにハマり、チームプレイやコミュニケーションの楽しさや難しさを学びました。

テレビもアニメも漫画もインターネットも全てが自分にとって学習の場だった

もちろんゲームだけが学習によいといいたいわけではありません。ぼくは学校に言っていなかった分、たくさんテレビ番組をみたり漫画やアニメ作品をたくさん見たり、インターネットで知らない人たちと交流したりすることを通して、本当にたくさんのことを学びました。

今振り返ってみると、日々の生活すべてが学びだったのです。
もしも自分の親が全く自分に理解のない人間で「登校拒否するような子にはゲームや漫画なんて絶対に与えない」という思想であったならば、ぼくは毎日ひがな一日ベッドでゴロゴロしたりぼーっと有り余る時間を潰して過ごしていたことでしょう。
少なくとも自分に関して言えば、たとえ他に娯楽が何も与えられなかったとしても代わりに教科書を読んで勉学に励んだりは絶対にしなかったと思います。

例えば渋滞に巻き込まれて何時間も拘束された車の中で娯楽物はなにもなく算数ドリルだけがあったとして、子供は算数ドリルをやり始めるでしょうか。ぼくはやらないと思います。

何事も乱用すれば毒だし、適度に摂取すれば学びである

ぼくはゲームばかりを一日中やっているのが素晴らしいと言いたいわけではありません。
ゲーム依存症といえるような状態になってしまったら他のことが出来なくなってしまうのは確かだと思うし、単調なアクションゲームやポチポチゲーを何も考えずに一日中やっていたらそれはあまり健全ではないでしょう。

しかし少なくとも1日60分だとか90分だとかいう時間は依存症などというレベルでは到底ないと思うし、その制限下ではむしろ集中して取り組むことはできないでしょう。
また、多少時間を忘れてやり過ぎてしまうという経験は決して悪いことではないとぼくは考えています。
時には狂ったように何かに夢中になるという経験は一生残る思い出になりますし、子供の頃からそういうことを繰り返すことで次第に自制が出来るようになっていくのではないかなと思っています。

実際、大人になった今のぼくはゲーム以外にも勉強や他の趣味などやりたいことがたくさんあるので、自分でゲームをプレイする時間をコントロールするようにしています。

ゲームを禁止してプログラミングを学ばせるという不毛さ

最近は学校教育にもプログラミングが組み込まれることが決まっており、学校以外でもプログラミングを子供に学ばせたいと考えている親御さんは多いのではないでしょうか。
しかしその一方でゲームを禁止したりしているのだとしたらそれは大変滑稽なことだと感じます。

ゲームとプログラミングは非常に似ている部分が多く、能力としては地続きな面があります。
特に最近こどもに大人気のマインクラフトというゲームなどは本当に多くのことが学べるゲームで、夢中になってやり込むと自然にプログラミングに近いことに触れることになります。
プログラミングの教材をこどもに押し付けなくても、マインクラフトを好きなだけやらせてあげるだけで、プログラミングや様々な能力を育てることが出来るのです。

また、子供時代にゲームに夢中になりゲームクリエイターに憧れ、今はプログラマーになったという人はとても多いです。
ゲームはプログラミングによって作られています。そのゲームからこどもを引き離してしまったらプログラミング自体への興味もそいでしまう可能性すらあります。

結局何が言いたいのか

よくわからん。