つよつよエンジニアは何が強いのか

 私の夫は割とつよつよなプログラマだと思っている。

 そんな彼に今日やった凡ミスの話をし、「こんな凡ミスするなんて私はよわよわプログラマだよー」などと続けたら、「それは違う」と割と強く言われた。

「そういううっかりミスは誰でもするから、そこがよわよわとかいうのは違う」と。

「じゃあつよつよプログラマはどんなところがつよつよなの?」と訊いてみたらなんだか禅みたいな答えが返ってきたのでちょっと書き残しとく。本人の了承済み。

 

 夫曰く。

「つよつよなプログラマは道の選び方が上手い」

「道?」

「そう。ある機能を実現するのに、様々な方法がある。グネグネとしてるけど最短距離を行く方法とか、遠回りだけれどまっすぐな方法とか。そして時に最短距離よりも遠回りの方がいいことがある」

「ふむふむ」

「あと、言い換えが上手い。これってこういうことでしょ?みたいな」

「なるほど(抽象化とか本質を見抜くとかそういうことかな)」

「これは道の例えで言うとゴールの設定が上手いって話にだいぶ近い」

「(ちょっと違ったっぽい)ゴールの設定が上手いってのは必要条件と十分条件を適切に見つけることができるってこと?」

「うーん、そうかなぁ。それは近いなぁ」

「じゃあ、抽象化とか本質を見抜くとかそういうこと?」

「それも近いけど、うーん」

「なんか、ズバッとこれだ!って感じではない?」

「そうだねぇ」

「なるほど。ありがとうー」

 

 というわけで、割と感覚的な話だとは理解したので、ここで質問は終わり。

 でも、道かぁ。プログラミングという実物的なものごとについて話しているのに、禅みたいな話が出てきたのがものすごく面白かったです。

文系が理転してプログラマになろうとしたけど結局15年ほどかかった話

まぁこんなお題でなんか書いてみようかなと。書き終えてみたら3,000字程の長文になった。

高校時代

あまり勉強はしないけれども国語が得意で数学が苦手だったので、高校1年の頃には文系に進もうと心に決めていた。心理学とか哲学とかやって人間について考えたかった(心理学は実はそういう学問ではないらしいとはこの頃はまだ知らなかった)。

でも、転機が訪れる。高校2年生のとき、当時好きだったロスト・ユニバースというラノベのあとがきに相対性理論を崩せる人募集と書かれており、じゃあ相対性理論を勉強してみようと思って高校の図書室にあったニュートンという科学雑誌の特集号を読んでみることにした。

そしたら面白すぎた。本は相当読んでいる方だと思っていたけれど、本の内容が面白くて電車を乗り過ごしたのは初めてのことだった。

なので理転して物理学を学ぼうと思った。でも、実はこの選択が逃げであったのも当時から認識していた。私は国語が得意だと思っていたけれど、その得意なフィールドで大学受験に挑んだらもし失敗した時に辛すぎる。どうせ受験に失敗するなら理系分野の方が自分に言い訳が効く、などという謎の卑屈な精神も手伝って理転を決心したのだ。

しかし、理転するにしても1年次の進路調査票で文系クラスに進みたいと答えており、そのため3年次のクラスが文系になることはもう決まっていた(1年次で保留にしとけば2年次の選択で文系理系選べたんだけどね)。

なので、数学3Cと物理は未履修のまま受験に挑むことになった。そしてそんなに熱心に勉強していたわけではないので(そもそも自分に言い訳するための理転だし)理学部に落ちて浪人することになった。

でも、この浪人になった時は就職氷河期で、高卒で就職しようとしていた友人たちは片っ端からフリーターになった。それを見て、さらに色々と考えたのもあり、手に職をつけて一生働き続けられるようにならないとと思って志望学部を工学部に変更した。そしてその頃はインターネットが一般に普及し始めたところでもあり、それが面白そうだから情報系の学科を目指してプログラマになろうと決めた。

それから数学3Cと物理を一生懸命勉強した。どちらも予備校の個別指導の先生に見てもらって、記述式の対策をみっちりした。個別指導の学費のためにバイトもしなければならなかったのが辛かったけれど、それは女のお前に学費は用意していないという両親の元に生まれたのがまぁアレだった。これ平成の話ね。あと独学だと勉強できない自分の性格のせいもある。

でもバイトしてるせいで模試はほとんど受けられず、自分の実力がイマイチわからないまま本番に臨むことになった。

しかし合格はした。第一志望の大学の第一志望の学科だった。

大学時代

入学して一人暮らしの生活が始まった。大学では電気回路とか離散数学とかプログラミング演習とか色々やった。が、残念なことに受験期を抜けてまたそれまでの勉強しないモードに入ってしまい、大学の勉強は授業を聞いているだけでは理解できないのもあって単位をポロポロ落とし始め、更にどんどん毎日がしんどくなっていって、ある日あまりにもしんどくて周りが見えず交通事故に遭いかけたのがきっかけで大学の保健管理センターにある精神科の門を叩いていた。

そこでは数ヶ月単位で時間をかけて診察していただき、最終的には統合失調症だろうという診断結果が下った。

その頃には単位も随分と落としていて、1年の留年では卒業できないくらいになっていた。最低でも2年留年しないと卒業できない。

薬はもらっていたけれど、今思うとあまり効いてはいなかった。常に首を切りたいという妄想にかられ消耗し、起き上がるのすら困難な日もあった。

そんな中なんとか単位を取って卒研に着手しそれを書いて卒業できたが、卒業時には消耗しきっていたので一人暮らしをやめて実家に帰ることにした。

大学卒業後

それから2年くらい引きこもっていた。この頃のことはあまり覚えていない。

ただ、プログラマになって手に職をつけてバリバリ働きたいという入学前の希望からは随分と遠いところに来てしまったのが悲しかった。

それからお寿司屋さんのチェーン店でのパートを始めて少しづつ社会復帰を目指した。2年にならないくらいのところでもう大丈夫だと思ってフルタイムの契約社員に転職したが、そんなに単純な話はなく体調の不良が態度にも出てしまったため、契約満了で辞めることとなった。

ここで仕方ないので障害者手帳を取り、今度は障害者枠で勤め始めることにした。この頃にはもうプログラマになりたいという思いはだいぶ燻っていた。もう30歳ぐらいで職歴もボロボロだし、無理だろうなぁと。そもそも実家を出られるほど体調が良くないため実家から通える範囲の仕事探さねばならないが、それでプログラマの仕事はほとんどなかった。

だから障害者枠の事務仕事を見つけて勤め始めたが、1年とちょっとで体調が悪化し入院するほどになったので辞めることになった。

もうどん底だなぁというところでTwitterにネガティブをぶつけていたら、大学時代の先輩から助けの声がかかり、それがきっかけで先輩と結婚し、上京することになった。

結婚してから

そして新婚生活は夫は仕事へ、私は就労移行支援事業所へ通うというものになった。また、週一くらいで某社のプログラミング教室にも通い始めた。そんな生活が約2年続いた。プログラミング教室を開いてくれていた某社さんに就職したいと考えることは何度もあったが、もしうまく行かなかったら怖いという卑怯な逃げ心でついぞそれを言い出すことはできなかった。ここで懺悔します。ごめんなさい。 

それから就労移行支援事業所経由で小さな広告会社のウェブ担当の仕事を見つけたが、すぐに子どもができて色々勘定した結果短期間で辞めることにした。出産してからしばらくは夫が育休を取ってくれていたけれど、それが終わったら日中子どもと二人きりの生活だった。そんな中知り合いの方からプログラミングで効率化しないと終わらない類の自宅でできる軽作業の請け負い仕事を紹介していただき、それをこなしたりしていた。それと並行するような形でプログラマの仕事も探していた。

今度こそプログラマになるのだ、そう思っていた。インターネットは受験前に夢見た通り楽しかったし、趣味でやるプログラミングも楽しかったからだ。それに、35歳未経験はもう手遅れかもしれないけれども、もしここで今までみたいに職種にこだわらず見つかった仕事に手をつけたら、本当にプログラマにはもうなれないと思った。

だから何社も受けてはみたが、色々なビハインドがあるせいかなかなかプログラマの仕事には受からなかった。

そうしているうちに、夫の出張についていく形でRubyKaigiに参加したのがきっかけで、知り合いの方からウェブ系の会社の仕事を紹介していただいた。どうも私が書いたQiitaなどを見てくれていたらしい。

そこはとても柔軟な働き方を許容してくれる会社で、子どもがいるから6時間の時短勤務で、さらに持病の様子を見るために週4のアルバイト勤務をお願いしたい、という私の希望を容れてくれた。障害者手帳があっても大丈夫だと。そして職種はプログラマ。運よく子どもを預ける先も見つかり、ここで働くことになった。

まとめ

もう一度言うがこの時点で私は35歳。プログラマを目指して大学に入学したのが19歳の頃のことだから、そこから数えると16年ほどかかってようやくプログラマという職につけることになった。大学卒業時から数えると10年か。

持病のこともありバリバリ働くという感ではないが、それでも憧れた仕事にようやく手が届いた。ちゃんと手に職がつくかはこれからの働き次第だと思うけれども。

頑張ります。

正しくあることを捨てる

正しい世界で生きていけるひと、それは少なくとも私ではないのだろうと思う。

私は正しくあることを捨てた人間だからだ。

正しくあることを捨てたというのは、なにも積極的に間違いを選ぶという話ではない。自分が間違えることをあらかじめ許している、それだけの話。

前にも書いた気がするが、昔は絶対に正しいことに興味があった。何故なら、絶対に正しいことに逆らわなければ自分は常に正しい、そう考えていたし、自分が正しければ何かあっても悪いのは自分以外の誰かだから、絶対に正しいことを手に入れたらきっととても楽になれる、そう思っていた。

けれども、自分さえ正しければいい世界には他の人が居られないことがわかった。むしろ自分の居場所すらなかった。

何か行動をとる毎にその正しさを検証する生き方はとてもとても辛かった。常に自分で自分を裁判にかけているようなものだったから。

だから私は正しくあることを捨てた。間違える自分をあらかじめ許すことにした。間違えたとしてもなお自分は人間であることを信じた。

そうして、ようやく生きるのが随分と楽になったのだ。

 

技術書典7でプログラミングマンガ同人誌を出した

 すっごく今更な話ですが、技術書典7でプログラミングマンガ同人誌を出しました。

 なので、どんな目的でどんな風に書いたのかという話をちょっと残しておこうと思います。

 

1. 企画を考える

 今回はズンドコキヨシを見かけた男子中学生がプログラミングを勉強していく話 第1話をマンガにしたかったのですが、多分著作権上いろいろアウトなのでエッセンスだけ取り出してマンガにすることにしました。

 そこで、ズンドコキヨシチェック相当の問題を思いつきたかったのですが、そこはうまく考えられなかったのでFizzBuzzを問題にすることにしました。

 

2. 登場させたいソースコードを全部書く

 まず普通にFizzBuzzを書いていきます。で、初心者はここでつまづきそうだな、というバグを仕込んでおりかつ未完成のバージョンをまず書き、そのバグは取れたし次の一歩に進んだけれどもその次の一歩でもまたバグを仕込んでいる、というバージョンを書きます。

 ポイントとしては、いきなり最後まで書かず、少しづつプログラムが完成していくという過程を踏んでいくことです。なぜなら、私が書きたいことはプログラムはまず完成を目指すよりも小さな問題から少しづつ作っていく方がいいということだからです。

 小さな問題から少しづつ作るのはいろんな意味でいいと思っています。バグを仕込んでも原因の特定がしやすいとか、自分が言語の使い方を覚える時にも必要なものを必要な時に調べ少しづつ動かしていくことで言語の使い方を無理なく覚えられるとか、メリットいろいろあると思っているので、本当にプログラミングの初心者が覚えるべきことは変数の宣言の仕方とか関数の作り方よりも少しづつ問題を進めていく姿勢だと思っています。

 前述のズンドコキヨシでもこの本でも、本当に書きたくて本当に伝えたいことはここだということは最初からブレていないつもりでいます。

 

3. シナリオを書く

 そしてこのプログラムを作っていく過程をセリフにしていきます。主人公が次のステップに進むための気づきを得るところが書いていて一番難しいです。

 

4. GitHubで公開してレビューを募る(しかし現れず)

 シナリオを書いたところで一旦GitHubにて公開することにしました。レビューを募ってブラッシュアップをしようと思ったためですが、お礼をちゃんと明記しなかったりとか多分いろんなことが原因でレビュアーさんは現れませんでした。

 次はもっとうまくやりたいです。

 

5. Clip Studio EXでネームを描く

 シナリオを元にネームを描いていきます。ネームってのはマンガの設計図です。コマを割り、誰がどこ向いてるのかくらいはわかる程度の絵を入れて、吹き出しの位置を決め、シナリオに書かれたセリフをさらにブラッシュアップします。

 シナリオではセリフが長くなりがちですが、吹き出しに入れて、かつ読みやすくしようとするといろんなところを省略したり、吹き出しの配置を工夫する必要がありました。

 

6. ネームを元に絵を入れていく

 ネームを元にして、絵を描いていきます。アナログ時代はネームを描く紙と絵を描く本番の紙は別物でしたが、デジタルだとレイヤーがあるので、ネームレイヤーの上に下描きレイヤーを作って更にレイヤーを重ねてペン入れをしてといった具合に作業ができて、一つのファイルで済むようになっています。

 でも、デジタルでもネームのファイルと本番のファイルを分ける人も多分いると思います。ネームだけアナログとか。

 

7. スクショを貼りこむ

 絵ができたらエディタ画面やブラウザのスクリーンショットを貼り込んでいきます。

 デジタルで白黒の絵のデータを作るときは、白黒2値(書店とかで普通に売られているマンガはこれです)を使う場合とグレースケールを使う場合があります。

 マンガだからと思って普通に白黒2値で原稿を作ってきましたが、スクリーンショットを白黒2値で表現するのは無理がありました。

 なので、印刷屋さんのウェブサイトを調べまくって、白黒2値とグレースケールを混合させることにしました。スクリーンショットのみ、グレースケールで表現するためです。

 とはいえファイルの属性的にはグレースケールで、スクリーンショット以外のところでは白黒2値以外のグレーは使わなかったというだけの話ですが。

 

8. 完成

 ちなみにこのClip Studio EXというソフトのiPad版を使っています。

f:id:KZE:20191226184702p:plain

iPad版Clip Studio EX

 

9. 振り返り

9.1 もっとネームが練れたのではないか

 ネームはもっとわかりやすくは出来なかったと思うのですが、細かい言い回しなどはもっと練ることが出来たと思っています。姉の出来ない人は必要ない、というセリフは添削したいセリフ第一位です。

 

9.2 もっと絵を丁寧にできたのではないか

 絵を丁寧にするモチベーションがなかなか湧かなかった、というのが正直なところです。絵で見せなければならない最終コマは粗い状態から描き直しましたが、その他の絵は最低限の説明ができれば良いという考えの元に描かれたものなので、本当に丁寧さに欠けています。

 マンガの楽しみの中には絵を見る楽しみも確実にあると思うので、次を描く機会があれば絵についてもっと執着を持ちたいと思います。

 

9.3 題材は適切だったか

 これは今でもわかりません。JavaScriptを採用したのは誰もが必ずブラウザという形で実行環境を持っているからです。

 でも、FizzBuzzを問題として選んだのはどうだったのか?

 試行錯誤して解いていく問題として適切だったか?

 ちなみに最初に書きたかったズンドコキヨシについては、実はほぼパーフェクトに適切で、第一話では関数を使わずに解く、第二話では関数を使って解く、第三話ではオブジェクト指向を使って解く、という三段構えの構想があったのです。二話と三話は今の所幻ですが。

 あと、プログラミング経験者である姉を出現させてしまったことによって、主人公がひとりで試行錯誤する感がズンドコキヨシの記事よりも欠けてしまったかも知れません。

 

9.4 次があるとしたら

 次に技術同人誌を描くとしたら、やっぱりマンガにしたいです。ちなみに夫からはUnityを使って子供をあやす用のガラガラアプリを作った話をエッセイマンガにしてはどうだ?と提案されています。でも、面白いネタのはずなのになぜかイマイチ心にグッときていません。

 あと、今回ニッチ本を描けたのは誇るべきものだと思いますが、もうちょっとソフトウェアエンジニアの人が面白いと思いそうな問題をテーマにして、パイが広めのところを狙いたい気持ちがあります。

 あとは、CUIの世界をダンジョンに例えてサーバというダンジョンを攻略していくマンガとか面白いかも知れません。

 えーと、つまり次は何も決めていないということです。

 何も決めていないけど、次はあってほしいです。

 

 今回の同人誌はBoothで販売しています。ご興味がありましたらお手に取っていただければ幸いです。

rotelstift.booth.pm


子ども向けにガラガラアプリを作って一年経った

f:id:KZE:20191021000047j:image

子どもが生まれてから、子どもをあやすためにガラガラのスマホアプリが欲しいと思って探したのですが、どれもしっくり来ませんでした。

スマホを振ったら表示されてるボールが動いてぶつかったら音が鳴る、そんなシンプルさでいいのですが。

という訳で、Unityを使って自作したのが一年以上前のこと。鳴らすときの音もgaragebandで自作。

その頃はまだ子どもも生まれて半年くらいだったので、スマホをタッチするという動作は入れずにただ持って振るだけで完結するようにしました。
これで遊んでくれたら嬉しいなー、と思いながら渡してみたら全くといっていいほど振ってくれなかった…。

それでも、泣いているときなどに目の前でこのアプリを振ってみせたら次第に笑ってくれるようになり、だいぶ大きくなった今では自分でスマホを振って音を鳴らして遊ぶどころか、画面上のボールをタッチして何も起きないの?と不思議な顔をみせてくれるようになりました。

もう一年以上前に作ってからほとんどコードには触れてないのでいろいろ忘れてますが、アップデートのしどきかもしれません。

今度はボールに触ったら色が変わるようにしたいな。

自由意思を望みますか?〜ある疑問が示唆するもの〜

まぁまずは以下を読んでいただきたい。

kokoro.squares.net


読んで頂けたものと思い、解説も補足もなくつづける。この記事はそう簡単に何かを要約して分かった気にさせてはならないからだ。

私も精神薬を飲み始めてからこの疑問を抱き、しかし蓋をして生きてきた。本当の自分など薬を飲んでいなくても分からないものなのだから、今感じる自分が全てだと思ってきた。この方針は記事を読んでも変わらない。
そして、この疑問は更に幾つかの疑問から構成されている。

  • 精神は肉体に隷属するものなのか
  • 本当の自分とはなんなのか
  • ありのままに生きることに価値はあるのか

このいずれが欠けても斯様に深い疑問にはならない。そしてこれらもまた難問なのだ。
ただ、これらの疑問ひいては記事で語られる疑問はあることを示唆している。それは自由意思を持っていたいという希望があることだ。
もし自分の意思が自由でなくてもよいのなら、これらの疑問は生まれる余地がない。
自分の意思が自由であってほしいからこそ、それを妨げそうな考え方が気になるのだ。
私はどうだろう?そもそも私は自由意思を望んでいるだろうか?
実は私は自分の意思が完全に自由でなくともよいと考えているのかも知れない。だからこれらの問いに蓋ができるのだ。
これを読んで下さったあなたはどうだろう?
蓋ができますか?できませんか?
ひいては自由意思を望みますか?望みませんか?

電子書籍派なんだけど気をつけていること

 前にも書きましたが、電子書籍派です。

 でも、電子書籍派として危機感を抱いていることがあります。それは、本屋で本を選ばなくなったことです。

 結局電子書籍で買うのに本屋に行くのは正直な話気が引けます。そりゃそうです。普通の本屋にとって私はお客じゃないのですから。でも、本屋で本を選ばなくなったことに危機感を感じているのも確かなのです。なぜなのか?

 電子書籍はいつでも簡単に、本を探してお店をハシゴしたりすることなく買えます。でも一方で、リアルの本屋さんにはついてこないものがついて来ます。

 それは読者レビューです。

 読者レビューを参考にすることは大いにあります。私も面白かった本などにはレビューを書いたりしています。でも、レビューだけを頼りに本を買うようにはなりたくないのです。

 レビューは所詮他人の感想であって私の感想ではない。そういうものが関係なく、実際に少し読んでみたりして本を選べるのが本屋さんのいいところなのです。

 だから時々、これを読みたい!と思ったらレビューなどは一切読まずに本を買います。自分の感性を信じられなくなったら、そもそも本を選んで買う意義があるのかとまで考えます。

 ネット時代になって、作品自体の評判だけでなく作家自身の評判まで広まるようになりました。そういう時代に、他人の意見に流されず自分の考えで本を選ぶのは難しくなって来ていると感じます。

 だからこそ、なんの前評判もなくとも、もしくはどんな前評判がついていても、自分が良さそうだと思った本を買う機会を大切にしたいと思っているのです。