So-net無料ブログ作成
プログラマー現役続行 ブログトップ
前の10件 | -

オンライン読書会を開催します [プログラマー現役続行]

今までは、参加者が会場に集まる形式の読書会を開催してきましたが、新たにオンラインの読書会を開催します。
  • 『プログラミング言語Go』オンライン読書会(第1回
  • 『Effective Java 第3版』オンライン読書会(第1回
それぞれ、該当する書籍の読書会です。『プログラミング言語Go』の方はおそらく12回か13回ぐらいで読み終えると思います。『Effective Java 第3版』は、一年以上を要すると思っていますが、実際にはやってみないと分からないです。

書籍を読み終えたら、再度読むとことを想定しています。それは、一年経過すれば新たに学び始める人達もいるという想定です。また、オンラインで行うことで、地域を問わず参加できます。

会場に集まる形式で行っていた「横浜Go読書会」は、集まってできるようになれば、再開する予定です。
コメント(0) 

在宅勤務 [プログラマー現役続行]

2月18日(火)から在宅勤務を始めたので、2か月が過ぎました。新型コロナウィルスのために会社として在宅勤務が始まったのが2月19日(水)だったのですが、通勤時間が長いということで、マネージャの許可をもらって在宅勤務を始めた翌日に会社として正式な在宅勤務となりました。

仕事は、マイクロサービスのソフトウェア開発のため、会社でも自宅でもソフトウェア開発はもともとできました。ただ、原則出社でしたので、往復4時間弱をかけて通勤していたわけです。2か月間、在宅勤務をしたことになるのですが、出社する場合との違いを簡単にまとめてみます。

通勤時間からの解放

往復4時間弱の通勤でしたので、朝は5時54分の始発(初電)電車に乗車して、7時30分に六本木ヒルズのオフィスに到着していました。16時には退社して、帰宅するのは18時前という生活を送っていました。そのため、会社にいるのは実質的に7時30分でした。

在宅勤務を始めてからは色々と試行錯誤したのですが、現在は8時から仕事を始めて、17時過ぎには終えるようにしていますが、18時過ぎることもあります。

通勤時間がないため、起床時間や就寝時間がゆるくなりました。7時間の睡眠時間を確保して、往復4時間弱の通勤のために、起床時間も早かったですし、就寝時間も早かったです。在宅だと、起床時間は以前よりも確実に2時間遅くなっています。その部分、就寝時間も遅くなっています。

自宅でのソフトウェア開発

在宅でのソフトウェア開発となると、オフィスの環境と異なり、机、椅子、ディスプレイなどが異なって、快適に開発に専念できない人も多いようです。会社としては、在宅の環境を整えるための在宅勤務手当や、ディスプレイの購入補助制度を用意してくれています。

私の場合は、書斎として使っている部屋があり、机、椅子、ディスプレイ(27インチと21インチ)は整っているので、オフィスよりも環境は整っています。そのため、在宅でのソフトウェア開発には何の支障もありませんでした。

オフィスでのソフトウェア開発と大きく違うのは、夕方になって焦る必要がないことです。オフィスでは、16時に退社するために、夕方になるとPRのレビュー依頼を出す前の見直しを省略しがちになっていました。自宅だと時間があるので見直せます。

ミーティングはGoogle Hangoutで行います。ミーティングが続いているときに、オフィスだと会議室を移動しなければなりませんが、在宅だと移動がないので楽です。ただ、自分の作業に集中しているとミーティングに参加するのを忘れることがあるので、10分前にカレンダーで通知があったときに、早めにGoogle Hangoutに参加した状態にして作業しています。

運動不足

在宅勤務での問題点は、通勤が無くなったために、運動不足になることです。通勤はそれなりに歩いたり、階段の上り下りで運動になります。また、脊柱管狭窄症がよくなって、昨年の5月からは、毎朝、大江戸線の六本木駅の一番深いホームから階段を歩いて登っていました。

現在は、脊柱管狭窄症で歩行が困難になった頃に購入したエアロバイクを毎朝30分行うだけです。夕方仕事を終えて、天気がよい日は、散歩に出かけることもあります。

技術研修

金曜日に複業として行っている企業向けの技術研修(JavaとGo)は、3月はすべて中止しました。しかし、対面での研修はしばらく無理そうなので、4月からはオンラインで研修を再開しています。ただ、オンライン研修は初めてなので試行錯誤の段階です。

まとめ

いつ頃出社可能になるのか見通しが不明ですが、在宅勤務を2か月行ってみて、仮に出社可能になっても、出社する必要はないのではないかと思い始めています。私の場合、出社するよりも、在宅の方が多くの時間をソフトウェア開発に費やせます。

でも、旅行したり、スターバックスで翻訳作業したり、外食したり、映画館で映画を見たり、対面で研修したり、外で飲み会したりという日常が早く戻ってきて欲しいと思います。
コメント(0) 

第142回RITS技術交流会で話します [プログラマー現役続行]

2月12日(水)に開催される第142回RITS技術交流会で、『40年間で経験したソフトウェアテストとテストファースト開発/テスト駆動開発』と題して話します。内容としては、JaSST’19 Tokaiでの特別講演とGDG DevFest 2019 Tokyoでのセッションを合わせたものとなります。

第142回RITS技術交流会
第142回RITS技術交流会

RITS技術交流会は、リコーITソリューションズ株式会社がリコーグループ向けに毎月、講演会などを開催しているイベントです。リコーグループ内に限定している場合と、今回のように一般公開している場合があります。リコーグループ内に限定している場合は、新たな商品、サービス、技術といった社外秘の紹介が行われることが多いです。一般公開しているものは、外部からスピーカーを招いてのものが多いです。

似たようなものとして、PARCで働いていた頃(1991年〜1993年)、毎週木曜日にPARC Forumが開催されていました。また、以前、富士ゼロックスでは「新百合フォーラム」が開催されていて、いろいろな話を聞いたのですが、記憶にあるのがカーボンナノチューブがまだ知られたばかりの頃に聞いた飯島澄男氏によるカーボンナノチューブの発見の話です。

RITS技術交流会への登壇は、今回が3回目となります。過去は、以下の通りです。
  • 第8回 『ソフトウェアエンジニアの心得』(2010年2月23日)
  • 第87回 『ソフトウェア開発組織が持つべきカルチャー ~31年間のソフトウェア開発を振り返って~』(2016年7月29日)
JaSST'19 Tokaiが60分で、GDG DevFest Tokyo 2019が40分だったので、今回はその両方を合わせた内容として90分の予定です。Q&Aの時間を考慮すると75分ぐらい話すと思います。

RITS技術交流会では、懇親会も開催されますので、(リモート参加ではなく)直接会場で参加されれば、懇親会でもいろいろと話ができると思います。
コメント(0) 

2019年の技術研修 [プログラマー現役続行]

複業として行っている技術研修ですが、今年コースが終了したのは以下の通りです。

Go言語研修

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

  • 作者: Alan A.A. Donovan
  • 出版社/メーカー: 丸善出版
  • 発売日: 2016/06/20
  • メディア: 単行本(ソフトカバー)

リクルートテクノロジーズ社だけでしか実施してきていませんが、すでに30名以上が修了されています。書籍『プログラミング言語Go』の内容を理解するだけでなく、すべての練習問題に取り組むため、かなりきつい研修となっています。

研修では、質問表に記入された質問に答えた後、練習問題の解答を確認するという形式です。練習問題は130問以上ありますので、予習にはかなりの時間を必要とします。

『Effective Java 第3版』研修

Effective Java 第3版

Effective Java 第3版

  • 作者: Joshua Bloch
  • 出版社/メーカー: 丸善出版
  • 発売日: 2018/10/30
  • メディア: 単行本(ソフトカバー)

『Effective Java 第3版』研修は複数の企業で実施させてもらったのですが、受講生のJavaでの経験と知識レベルによって、進め方はそれぞれ異なっています。予習としては、毎回指定された範囲のテキストを読んで不明点を事前に質問表に記入しておいてもらいます。

この研修に関しては、どの程度質問するかに関して、次のように分かれます。
  1. 全く質問を記入しない人
  2. 多少は、質問を記入する人
  3. かなりの数の質問を記入している人
内容がそもそも難しいので、ある程度Javaの経験や知識があっても、きちんと理解できていないことが多いはずなのですが、1.か2.の人が多いです。1.か2.の人に対して他の人の質問を聞いてみても、答えられない場合が多いです。

3.の人は、Javaの経験が少ない人なのですが、テキストをきちんと読み込んで理解できない部分を質問してくれるため、「良い質問」が多いです。

プログラミング言語Java基本技術習得コース

『Effective Java 第3版』研修で痛感するのは、テキストを理解するためのJavaの知識が不足している人が多いことです。そのため、一年半を要しますが、私にとって通算第26期の「プログラミング言語Java基本技術習得コース」を9月から開講しました。予習がかなりきつく、期間も一年半なので、受講生が集まりやすいリコーグループで実施しています。

Go言語研修も予習がかなり大変なのですが、予習が大変な研修は、その企業内で「きつい研修である」という評判が定着しているにもかかわらず多くの修了生がいる場合、受講生が集まりやすいです。第26期も現在は14名が受講しています。
コメント(0) 

2019年の講演 [プログラマー現役続行]

今年は、三つのカンファレンスで話しました。
  • 「私が取り組んだレガシーコード改善」
    6月1日(土)Legacy Code Meetup Kagoshima 2019(鹿児島)
  • 「私が経験したソフトウェアテスト 〜 ワークステーション、組み込みシステム、ウェブサービス 〜」
    10月4日(金)JaSST '19 Tokai
  • 「マイクロサービスの開発とテストファースト/テスト駆動開発」
    12月14日(土):GDG DevFest Tokyo 2019
鹿児島は、私のJava研修の修了生が主催のメンバーの一人でしたので、声をかけてもらいました。

JaSST'19 Tokaiは、JaSST'16 Niigata、JaSST'18 Tokyoに続いてJaSSTでの三回目の講演でした。JaSSTでの三回の講演には、三回とも富士ゼロックスの秋山浩一さんが(JaSST'19 Tokaiでは日帰りで)聞きに来てくれました。

GDG DevFestは「メルペイEngineering Office」の@kikoさんを通して講演の打診があったものです。DevFest Tokyoのように技術を中心とした大きなカンファレンスで話すのは初めてでした。最新の何らかの技術動向について話ができる訳でもないので、メルペイで私自身が日々行っているテストファースト開発を中心に話しました。

幸い、GDG DevFestへの参加者アンケートで、「一番良かった・役に立ったセッション・ハンズオン・コードラボはどれですか?」という質問では、基調講演に次いで、私のセッションが2番目でした。

2020年も機会があれば、いろいろな場所(特に訪れたことがない土地)で話したいと思っています。
コメント(0) 

メルペイで一年間プログラミングしました [プログラマー現役続行]

2018年6月にメルペイで働き始めて、今年は2年目でした。ちょうど一年7か月働いたことになります。今年一年間は、Backendのマイクロサービスの開発で、ずっとGo言語とVimでプログラミングしていました。昨年は、5月は全く仕事をせずに休みだったのと、メルペイに入社してしばらくはAPI仕様ばかり書いていたので、振り返ってみると最後に一年間プログラミングした年は2008年だと思います。

リコーに勤務していた8年間(2009年9月〜2017年8月)では、現場のソフトウェアをレビューすることはあっても、自分でプログラミングすることはほとんどありませんでした。

一年間プログラミングし続けたと言っても、月曜日から木曜日までなので、40代の頃と比べると時間的には少なかったです。また、40代に行っていた複雑なマルチスレッドプログラミングと比べるとそれほど複雑なプログラミングは行っていないです。

基本的に一年間、テストファースト開発で担当する機能を開発し続けました。たとえ、開発するソフトウェアが複雑でなくても、自分自身で機能を作り終えたことを確信するためには、私自身はテストファースト開発しかないと思っているからです。

この一年間で一番苦労したデバッグは、自分で作成したPubSubのFakeサーバを使って書いた(担当しているマイクロサービスの新機能の)テストコードと実装が期待通りに動作せずに、3日間(12月24日〜12月26日)を費やして原因調査したものです(調査した結果として発行したgoogle-cloud-goのissueはこちら)。幸い、原因が分かり対策(回避策)もできたので、安心して年を越えられます。

2020年も、一年間プログラミングを続けていきたいと思っています。
コメント(0) 

GDG DevFest Tokyo 2019に参加しました [プログラマー現役続行]

東京電機通信大学で開催された「GDG DevFest Tokyo 2019」にスピーカーとして参加しました。ソフトウェアテストのシンポジウムであるJaSSTを除くと、大きなソフトウェア技術系のカンファレンスとしては初めて登壇しました。

DevFest2019.png


カンファレンスの説明としては次のように書かれています。
DevFest は、Google Developer Group (GDG) コミュニティによって世界各地で開かれるデベロッパー向けイベントです。東京では、Android、Google Cloud Platform(GCP)、Web、Firebase、Machine Learning (ML)、Assistant、Flutter、Goといった様々な技術の最新情報や現場でのノウハウを一日で学べるコミュニティイベントとして開催しています。
残念ながら何らかの技術の最新情報として話すものがなかったので、「現場でのノウハウ」ではないですが、メルペイで私がどのようにマイクロサービスを開発しているかを話しました。

話としては大きく次の3部です(スライドは、こちらです。)。
  • テスト駆動開発の登場は2000年前後
  • 私自身のテスト駆動開発の経験
  • メルペイで、私がマイクロサービスをどのようにテストファーストで開発してきたか
私のセッションはB101教室(150名)だったのですが、満席で立ち見の人も多くおられました。そのため、TwitterのTLを見るとセッションを聞けなかった人もおられたようです。

セッション後は、会場の「Ask the Speaker」コーナーで4〜5名の方が質問に来られました。
コメント(0) 

『プログラマー現役続行』から12年 [プログラマー現役続行]

雑誌に執筆した記事をまとめて書籍にした『プログラマー現役続行』から12年が過ぎ(改訂版である『プログラマー”まだまだ”現役続行』からは9年)、60歳になりました。

プログラマー現役続行 (技評SE新書)

プログラマー現役続行 (技評SE新書)

  • 作者: 柴田 芳樹
  • 出版社/メーカー: 技術評論社
  • 発売日: 2007/09
  • メディア: 新書

この本で現役続行に必要な7つの力として、「論理思考力」、「読みやすいコードを書く力」、「継続学習力」、「コンピュータサイエンスの基礎」、「朝型力」、「コミュニケーション力」、「英語力」を説明しています。それらに関して、この12年間私自身がどうであったかを簡単に振り返ってみたいと思います。

論理思考力

現在、メルペイでbackendのソフトウェアエンジニアとしてソフトウェア開発を行っていますが、何か問題が発生した場合に、仮説によって推定された原因から、発生している問題が論理的に説明できるかという問いは常に行っています。一方で、間違った仮説を立ててしまい、問題が説明できずに、さらなる調査にさらに時間を要してしまうこともあります。

ソフトウェア開発では、デバッグや問題調査は避けて通れないため、論理的に説明できなければ納得しないという態度は常に必要です。

読みやすいコードを書く力

長年ソフトウェアを開発していても、他人が読んだときに読みやすいかと振り返りながらコードを書くのは簡単ではないです。自分ではよいと思っても、レビューで指摘されることもあり、まだまだなと思うことがあります。

継続学習力

継続的に学習することに関しては、この12年間でさまざまな社内外の勉強会を開催したり、技術書を翻訳したり(この12年間で12冊)、技術書の英語の原著の草稿をレビューしたりとやってきました。ただ、それ以外の一人で学習するというのが少なかったと思います。現在は、私にとって18冊目となる技術書の翻訳(2020年春の出版予定)を通して、Java 10以降のJavaの概要を学んでいます。

コンピュータサイエンスの基礎

この12年間では、リコーに勤務している頃に『Linux Kernel Development』の社内読書会をやったり、『プログラミング作法』の第1章「スタイル」と第2章「アルゴリズムとデータ構造」の指導を新卒新入社員に行ったりしました。

現在も行っているGo言語研修やJava言語研修では、必ずと言ってよいぐらいハッシュテーブルを説明することが多いです。逆にきちんと説明できる受講生はほとんどいないです。

最近では、復習を兼ねて、『Introduction to Computing Systems: From Bits & Gates to C & Beyond』を読んでいますが、忘れていることも多いです。P型トランジスタとN型トランジスタから始まりますが、コンピュータがどのように構築されているかを知るにはお勧めの本です。

朝型力

早朝に何らかの活動を行うことは、ずっと続いています。特に、技術書の翻訳作業は基本は朝です。出社前のスターバックスだったり、通勤電車内だったりします。メルペイで働き始めてからは、出社前にスターバックスへ行くとことはなく、もっぱら通勤電車内で翻訳作業をしています。

コミュニケーション力

相手に分かるように説明することに関して、自分自身が向上しているかについては、何とも言えないかなと思っています。ただ、Java言語研修やGo言語研修では、できるだけ受講生の理解レベルに合わせて質問に回答するように努めてはいますが、なかなか難しいです。

英語力

英語に関しては、ほとんど進歩していないと思います(「英語とTOEIC」)。普段は、ポッドキャストでBBC、NBC、CBSといったニュースを聞いてはいますが、日本語のニュースを何かしながらながらで聞いていても理解できるように、何かしながらながらでも英語のニュースを聞いて理解できるレベルには到達しそうにないです。おそらく、多くの英語を速く読む努力が足りないのだと思います。話す方に関しても、普段英語で話す機会もこの12年間はほとんどないので、後退しているのではないかと思います。

まとめ

何歳までソフトウェア開発を仕事として続けられるかは分かりませんが、スマフォ決済の始まりの時代にそのシステム開発に従事でき、一方でGo言語研修やJava言語研修を通して言語の知識だけでなく、私自身の経験を伝えていくことができるのは、幸運なのかもしれません。
コメント(0) 

技術研修の予習 [プログラマー現役続行]

長年、いわゆるバイブル本を使った技術教育を行っていますが、昨年から始めた『Effective Java 第3版』研修では、事前予習での質問数がかなり少ないです。本来、さまざまな基礎知識を学んだ後に読まないと理解するのが難しいのが『Effective Java 第3版』なのです。そのため、通常のJava研修では、一年以上の研修の最後に学習してもらいます。

私のJava研修やGo研修の事前予習では、「読んで理解できていない箇所」を質問表に記入して欲しいのですが、そもそも、きちんと「理解できているか」という自問自答をせずに、流し読みしている人が多い印象を受けます。なぜなら、質問がない部分の記述に関して、「○○○○の部分はどのような意味か説明してください」と逆に私から質問すると、答えられない人がほとんどです。

感覚的なものに過ぎませんが、真剣に理解できているかと自問しなが予習する人ほど質問数が多くなります。逆に、質問が全くない人は、「完全に理解している」のではなく、「ほとんど理解していない」ことが多いです。

最近の例として、Go言語研修で多くの質問をされたのは@yosuke_furukawaさんですし、『Effective Java第3版』研修では、@orisanoさんです。
コメント(0) 

バグの修正の前に再現テストを先に書く [プログラマー現役続行]

2003年以降、私自身のソフトウェア開発は、テスト駆動開発が基本です。ただ、私自身が開発せずに、指導やレビューを行ったテスト駆動開発もあります。

経験した中で大規模で技術的に複雑だったテスト駆動開発は、以下の二つです。
  • 2003年2月から2009年8月:Linux/C++によるデジタル複合機コントローラソフトウェア
  • 2013年7月から20015年5月:Linux/Goによるデジタル複合機コントローラソフトウェア
残念ながらどちらのプロジェクトも最終的なデジタル複合機製品とはなりませんでした。

コピー/スキャン/プリントなどの複合機をテスト駆動開発でスクラッチから開発した経験やノウハウは、部分的にJaSST'18 Tokyoの招待講演とJaSST'19 Tokaiの特別講演で話しました。
※ 今日のオフィスにある富士ゼロックスやリコーなどのデジタル複合機のソフトウェアは、ソースコードの量として1,000万行に達しているようです。残念ながら、ほとんどが自動テストがないレガシーコードです。

テスト駆動開発の経験がない人がテスト駆動開発のプロジェクトに従事したときに、テストコードを書くことに加えて難しいのは「テストファースト開発」と「バグの修正の前に再現テストを先に書く」ことです。

不具合への対処手順

何らかの不具合が発見、あるいは報告されたときの手順は次のようになります。
  1. 不具合の原因の調査
  2. 不具合の再現テストの作成
  3. 不具合の修正
1.で原因の調査を行って、不具合の原因を調べます。原因は、条件判定の漏れや間違いだったり、想定外の事象が発生していたりとさまざまです。

2.では、原因が分かったので、「パスしない再現テストを作成する」ことが重要です。そのようなテストを作成した経験のないエンジニアの場合、作成せずにいきなり不具合修正を行ってしまいます。不具合を修正したと報告を受けたときに、「再現テストは書いた?」と聞くと「書いていません」という返事をもらったことが多々ありました。

最後に不具合を修正して、2.で作成したテストがパスすることを確認します。同時に、既存のすべてのテストがパスすることも確認します。

不具合の原因によっては、再現テストを書くのが非常に難しことがあります。特に不具合の発生がスレッドのスケジューリングに依存する場合です。その場合には、ロギングを工夫して、テストコードからスケジューリングを指定できる機構を入れたこともあります。

まとめ

パスしない再現テストを書く習慣を持つことは重要です。テスト駆動開発を行っているのであれば、テストファースト開発と共に意識して行ってみてください。
コメント(0) 
前の10件 | - プログラマー現役続行 ブログトップ