give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

2022年1月の伊藤さんの登壇予定(Qiita Advent Calendar Online Meetupと銀座Rails#41)

登壇予定、といっても2本だけですが、今月の登壇情報を簡単にお知らせしておきます〜。

登壇その1:1月21日(金) Qiita Advent Calendar Online Meetup

1月21日(金)にQiita主催のオンラインイベントに登壇します。

f:id:JunichiIto:20220111083917p:plain
increments.connpass.com

僕は20:25からの「Qiitaトップコントリビューターによるパネルディスカッション」というコーナーで、けんちょんさんと無職やめ太郎(本名)さんと一緒に登場する予定です。

パネルディスカッションということで具体的に何を話すかは当日の流れ次第なのですが、「最近のQiitaってどうよ?」とか「アウトプットで得られたものって何かある?」みたいな話題をざっくばらんに話す予定です。

なお、基調講演はMicrosoftのちょまどさんです。イベント参加者にはM1チップ搭載のMac miniのプレゼントもあるみたいですよ。

詳しい内容や参加申込みは上に載せたConnpassのイベントページからどうぞ!

Top Contributor賞の結果発表もあります

2021年のQiitaアドベントカレンダーでやっていた「Rubyプログラミング問題にチャレンジ! -改訂版・チェリー本発売記念-」のTop Contributor賞もこのイベントの中で発表します。

qiita.com

アドベントカレンダーに参加していた人はもしかしたら自分の名前が呼ばれるかも!?ぜひチェックしてください!

登壇その2:1月25日(火) 銀座Rails#41

1月25日(火) は銀座Rails#41に登壇します。こちらもオンライン開催です。

f:id:JunichiIto:20211220080800p:plain
ginza-rails.connpass.com

このイベントではQiitaのアドベントカレンダーでも出題した「点字メーカープログラム」を参加者のみなさんに書いてもらい、それをその場でコードレビューするという、ちょっと変わった形式で講演します。また、講演の中で僕が書いた解答例も紹介します。

誰かの話を聞いておしまい、ではなく、参加者のみなさんにもコードを書いてもらって、「なるほど、そんな考え方があるのか」とか、「こんなRubyのメソッドがあるとは知らなかった!」と、具体的なコードを交えながらみなさんと一緒にRubyプログラミングの勉強ができれば、と考えています。

「点字メーカープログラム」の具体的な仕様や、プルリクエストの作成方法についてはこちらをご覧ください。
github.com

また、このイベントについては以下のエントリでも詳しく説明しています。こちらもあわせてどうぞ。
blog.jnito.com

銀座Rails#41に参加される人なら初心者・上級者を問わず応募OKなので、お気軽にみなさんの書いたコードをプルリクエストとして送ってやってください😄

まとめ

ここ数年、コロナ禍の影響もあってイベント登壇数はちょっと減ってしまいましたが、久々の登壇なのでたくさんの人に参加してもらえると嬉しいです。

いずれもオンライン登壇なので、日本全国どこからでも参加できます。みなさんの参加申込みをお待ちしています!

動いたからそれでOK、のその先へ 〜フィヨルドブートキャンプのメンターとして僕が大事にしていること〜

はじめに

これは「フィヨルドブートキャンプ Advent Calendar 2021」26日目の記事です。
adventar.org
adventar.org

すいません、ウソつきました。
昨年末はバタバタしてたのでアドベントカレンダーを書く時間が取れず、結局カレンダーも全部埋まってしまったので、本来ならアドベントカレンダーに書いていたであろう内容をこのタイミングで書きます。
なので、僕の中では勝手に「26日目の記事」ということにしています。はい。

僕がメンターとして大事にしていること

フィヨルドブートキャンプでメンターを始めてからもうすぐ2年になります。
メンターとしてどんなことをやっているのか、どんなことを感じているのか、というのは2020年のアドベントカレンダーに書いたのでそちらを参照してください。
細かい部分では変わっているところもありますが、根本的な部分は大きく変わっていません。
blog.jnito.com

今年(2021年のアドベントカレンダーだから去年か?)はメンターとして僕が大事にしていることを書いてみようと思います。

フィヨルドブートキャンプでは「ボウリングのスコアを計算するプログラム」や「lsコマンドをRubyで再現するプログラム」を生徒さんに作ってもらい、それをメンターがコードレビューする、というプラクティスがあります。

自分で言うのもなんですが、僕のコードレビューは結構細かいです。
「相手はまだプログラミング初心者なんだし、まだそのへんはちょっと手加減してもいいんじゃない?」と僕自身が半分自覚しつつも、「いや、でもやっぱり」とついレビューコメントを入れてしまいます。

プログラミングを今までやったことのない人が「ボウリングのスコアを計算するプログラム」や「lsコマンドをRubyで再現するプログラム」を作るのはそれだけでめちゃくちゃハードルが高いと思います。
なので、僕自身も「プログラミングを始めて間もないのに、動くものを作れただけでもすごい!!!」と感じています。

ただ、その一方で、フィヨルドブートキャンプはプログラマとして就職を目指していたり、プログラマとしてもっと腕を磨こうとしたりしている人が集まっています。
それゆえ、「実務でこのコードを見かけたら、自分だったらどう思うか」ということを考えてしまうんですよね。

となると、たしかにちゃんと動きはするが、「ロジックに重複があってDRYになってない」とか「配列の変数名が単数形になっているのは誤解の原因になるぞ」といった点が気になってきます。

学習用のプログラムと仕事で書くプログラムは何が違うか

プログラミングスクールで学ぶプログラムと、仕事で書くプログラムは同じプログラムでもいろんな点が異なります。

具体的には、

  • 仕事で書くプログラムはめちゃくちゃ規模が大きく、仕様も複雑である
  • 自分一人ではなく、チームで開発する
  • プログラムの寿命が長い

といった点です。この話は以前Qiitaに詳しく書きました。

qiita.com

上のQiita記事の中で、僕は学習用のプログラムと仕事で書くプログラムの違いをジェンガに例えてみました。

学習用のプログラムは自分一人で遊ぶ背の低いジェンガです。
ジェンガを触るのは自分一人だけですし、背が低いのでめったなことで倒れません。


しかし、仕事で書くプログラムはその何十倍、何百倍もの高さを持つ背の高いジェンガです。
しかも、自分一人でなく、他のチームメンバーと一緒に積み上げていく必要があります。
下手な積み方をすると、すぐにぐらぐらとバランスを崩して倒れてしまいます。
よって、バランスが崩れないよう、「しっかり安定させながら、きれいにブロックを積み上げていくスキル」を身につける必要があるのです。

【新人プログラマ応援】学習用のプログラムと仕事で書くプログラムは何が違うか - Qiita

f:id:JunichiIto:20220103095509j:plain

子ども相手に遊ぶジェンガであれば「はーい、よくできたね。パチパチパチ〜👏」でいいのですが、僕らは仕事でお金をもらいながら毎日ガチのジェンガを積み上げているので、「はい、よくできました〜」で終わらせることはできません。

ジェンガで例えるなら、

  • ちゃんとジェンガは安定しているか?
  • まだ抜き取れるブロックは十分残してあるか?
  • このあとに積み上げる人のことを考えた置き方になっているか?

といったポイントがどうしても気になってきます。

たとえプラクティスで扱っているのが学習用の小さなジェンガであったとしても、「このあとに実務で3メートルのジェンガを組む仕事が待っている」ということを考えると、「いや、待て待て。このまま合格を出すわけにはいかないぞ」と思ってしまうんですよね。

その結果、コードレビューがついつい細かくなってしまう、というわけです。

「きれいなジェンガを組み上げられるプログラマ」を増やしたい

僕は人一倍「コードの可読性や保守性」にこだわってしまうのですが、それは前職や前々職で「なんじゃこりゃあ!?」というようなコードをたくさん見てきたから、という理由も大きいと思っています。

つまり、あるプロジェクトに配属されたら「ぐらんぐらんの3メートルのジェンガ」が目の前にあって、「はい、伊藤さん、これからよろしくね」とそのジェンガのメンテナンスをお願いされたことが何度もあるわけです。

そのあたりのエピソードは昔このブログに書きました。

blog.jnito.com

こういうプロジェクトに当たってしまうともう苦痛しかありません。そんな仕事は楽しくないですし、僕は楽しく仕事がしたいので、「きれいに組み上げられた3メートルのジェンガ」を作りたいと思っています。

ちなみに、僕が何かに付けて「テストコードを書け」とうるさいのも同じ理由です。テストコードがあればジェンガが実際に崩れてしまう(=本番リリース後に大きな不具合を出す)前に「ここが危ないよ!ほら見て、崩れかけてるよ!」というのをテストコードが教えてくれるので、ジェンガの安定性に大きく寄与してくれます。

せっかくプログラミングスクールで「未来のプログラマ」を育成しているんだから、それであれば僕は「きれいなジェンガを組み上げられるプログラマ」を増やしたいです。そのために僕が持っているノウハウを僕はコードレビューを通じて受講生のみなさんに伝えていってるつもりです。

参考:きれいなコードってどんなコード?

ところで、きれいなコードってどんなコードなんでしょうか?

「メソッドの命名が〜」とか、「クラスの凝集度が〜」みたいな個別のテクニックはいろいろあるのですが、究極的には

初めて見たコードでもなんとなく意味がわかるコードになっていること

です(この考えの元ネタとなる動画はこちら)。

逆にいうと、ぱっと見ても意味がわからないコード(無駄に長かったり複雑だったりするコード)や、読み手の誤解を招きやすいコードはNGです。

そのあたりの話は以前Twitterであれこれつぶやいているので、こちらも参考にしてみてください。



まとめ

というわけで、このエントリでは「フィヨルドブートキャンプのメンターとして僕が大事にしていること」というテーマで、普段どんな考えで提出物のコードレビューをしているのか、という話を書いてみました。

「伊藤さんのコードレビュー、細かいから大変だわ〜」と思っている受講生の方がもしいたら、「あ、そういうことなのね」と思ってもらえると幸いです(笑)。

PR:お正月の学習応援キャンペーンやってます

そういえば、ちょうど明日(2022年1月4日)までフィヨルドブートキャンプではお正月の学習応援キャンペーンをやっています。

キャンペーン中は通常3日間の無料体験期間を7日間へ延長していますので、興味がある方はこの機会に無料体験してみてください!

prtimes.jp

「プロを目指す人のためのRuby入門 改訂2版」を地元の西脇市図書館に寄贈しました

第1版に引き続き、「プロを目指す人のためのRuby入門 改訂2版(通称・チェリー本)」を僕が住んでいる西脇市の図書館に寄贈しました。

f:id:JunichiIto:20211228072022j:plain:w350
たしかに寄贈しましたよ、の図

寄贈したのはちょっと前で蔵書登録されるのを待っていたのですが、昨日西脇市図書館の蔵書検索をしてみたら貸し出し可能になっていました。

f:id:JunichiIto:20211228072310p:plain
第2版が検索結果一覧に上がってきてます。ちなみに第1版は現在貸出中のようです😄

西脇市民の方はもちろん、西脇市周辺の図書館なら西脇市図書館から取り寄せることもできると思うので、興味がある方はぜひチェックしてみてください〜。

全国の図書館に展開中!?

西脇市以外の図書館でも「プロを目指す人のためのRuby入門 改訂2版」が借りられる図書館は増えてきているようです。

図書館で借りて読んでみようかな、と思う人は、地元の図書館の蔵書検索や、カーリルのような検索サイトで探してみてください。

ちなみに以下はカーリルで東京の図書館を検索してみた結果です。東京だと、現在13ヵ所に置いてあるみたいですね。

まとめて探す - プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plus) | カーリル
f:id:JunichiIto:20211228073218p:plain

FAQ「著者としては図書館で借りるよりも買ってもらった方がいいのでは?」

「図書館で借りると売上にならないから買ってもらった方がいいのでは?」という質問をもらうことがありますが、僕個人の考えとしては図書館で借りて読んでもらえるのも嬉しいです。

もちろん、買ってもらった方が売上になる(つまり印税が入る)のでありがたいものの、3,278円という価格は人によっては「ちょっと手が出しづらい」と感じるかもしれませんし、買うか買わないかを判断するために図書館で借りて読んでみる、みたいな考えもあると思うからです。

もしかすると、もともと購入するつもりはなかったが、図書館で借りて読んだら思った以上に良かったので、そのあと自分で購入した、なんて人も中にはいるかもしれません。

そもそも図書館という存在自体が違法コピーでも何でもない、正当な公共施設なので、そこに本を置いてもらって少しでも多くの人に読んでもらえるというのは、著者として大変嬉しいことです。

なので、「伊藤さんに申し訳ない」とかまったく思わず、どんどん借りて「貸出中」マークをいっぱい付けちゃってください!

そして、もし気に入ったら本屋さんで「プロを目指す人のためのRuby入門 改訂2版」を買ってやってくださいね😊

おまけの裏話

図書館の人に「こちらの本を寄贈したいんですが」と自分の本を差し出したところ、事情を全く理解していない受付のお姉さんから「書架に並べるか、リサイクルに回すかはこちらで判断させてもらいます」とか言われて、「おいおい、ちょっと待ってー!!」となりました💦

ちゃんと背景を説明した結果、「あ、それだったらちゃんと書架に並べておきます」と約束してもらいました😅