SSブログ
プログラマー現役続行 ブログトップ
前の10件 | -

merpay マイクロサービスの開発とテストファースト/テスト駆動開発 [プログラマー現役続行]

私自身がメルペイで経験した、マイクロサービスの開発におけるテストファースト/テスト駆動開発がYouTubeでMercari Gearsとして公開されました。3部に分かれています(声が聞き取りにくいですが)

スクリーンショット 2021-04-06 15.13.43.png

コメント(0) 

Tech Blogの一覧 [プログラマー現役続行]

あまり多くは書いていませんが、メルペイに入社してから書いたTech Blogの一覧です。新たに書いたら、このページに追加していきます。

コメント(0) 

推薦書籍(ソフトウェアエンジニアの心得) [プログラマー現役続行]

長年、「ソフトウェアエンジニアの心得」と題して、新卒新人向けの教育を行ってきました。その中で、推薦書籍として挙げている書籍です(改訂版が出ていれば、改訂版を表示しています)。

読みやすいコードを書く

【電子合本版】Code Complete 第2版 完全なプログラミングを目指して

【電子合本版】Code Complete 第2版 完全なプログラミングを目指して

  • 作者: Steve McConnell
  • 出版社/メーカー: 日経BP
  • 発売日: 2016/04/14
  • メディア: Kindle版

プログラミング作法 (アスキードワンゴ)

プログラミング作法 (アスキードワンゴ)

  • 出版社/メーカー: ドワンゴ
  • 発売日: 2017/01/30
  • メディア: Kindle版

Clean Code アジャイルソフトウェア達人の技

Clean Code アジャイルソフトウェア達人の技

  • 出版社/メーカー: KADOKAWA
  • 発売日: 2017/12/18
  • メディア: 単行本

実装パターン

実装パターン

  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2008/12/22
  • メディア: 単行本(ソフトカバー)

リファクタリング 既存のコードを安全に改善する(第2版)

リファクタリング 既存のコードを安全に改善する(第2版)

  • 出版社/メーカー: オーム社
  • 発売日: 2019/12/06
  • メディア: Kindle版

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)

実践する開発者

達人プログラマー ―熟達に向けたあなたの旅― 第2版

達人プログラマー ―熟達に向けたあなたの旅― 第2版

  • 出版社/メーカー: オーム社
  • 発売日: 2021/01/18
  • メディア: Kindle版

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

ソフトウェア職人気質―人を育て、システム開発を成功へと導くための重要キーワード (Professional Computing Series)

  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2021/02/24
  • メディア: 単行本

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

  • 出版社/メーカー: オーム社
  • 発売日: 2017/07/15
  • メディア: Kindle版

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

アプレンティスシップ・パターン ―徒弟制度に学ぶ熟練技術者の技と心得 (THEORY/IN/PRACTICE)

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2010/07/08
  • メディア: 単行本(ソフトカバー)

Clean Coder プロフェッショナルプログラマへの道 (アスキードワンゴ)

Clean Coder プロフェッショナルプログラマへの道 (アスキードワンゴ)

  • 出版社/メーカー: ドワンゴ
  • 発売日: 2018/08/01
  • メディア: Kindle版

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/12/15
  • メディア: 単行本(ソフトカバー)


私自身は、翻訳のために読んだものも含めて、出版されるごとに(多くは英語の原著を)読んでいったので、12冊を読んでいます。しかし、若い人達は一度には読めないと思いますので、興味がある本から読んでもらえればよいかと思います。
※『達人プログラマー』と『リファクタリング』は初版を読んでいます。

今後もさまざまな良書が出版されると思いますが、20年後には、「これが私の推薦図書の一覧です」と若い人達に推薦できるようになってください。
コメント(0) 

コードの保守性とツール [プログラマー現役続行]

今日のソフトウェア開発では、使っているプログラミング言語がコンパイル言語なのかインタープリタ言語なのかに関係なく、そのソースコードを静的に解析して、さまざまな問題点を報告するツールもしくはIDEが揃っています。また、ソースコードのフォーマッタとして、Go言語標準のgofmtコマンドや、多くの言語で使われているPrettierなどがあります。

このようなツール群が存在しなかった時代(私で言えば、1978年〜)、使われていない変数、関数、メソッドなどは、コードレビューで指摘して削除してもうら必要がありました。プロジェクト(あるいは開発組織)で、ソースコードの読みやすさのために「コーディング規約」を決めることも多かったです。開発者がコーディング規約を守っているかも、コードレビューでチェックする必要がありました。

幸い今日では、コードレビューでこのような指摘をしなくても、プロジェクトで使う静的解析ツールを決めて、それをCIで実行することで、さまざまな指摘を行ってくれます。その結果、開発者自身で指摘箇所を修正できます。

見方を変えると、昔はコードの読みやすさを含む保守性を向上させるために、人によるコードレビューに頼っていたことになり、そのための工数が必要だったことになります。一方で、そのような工数を費やさなかった開発組織では、フォーマットがばらばらだったり、使われていない変数や関数が散見されたりと、保守性を下げる要因を多く持つソースコードが積み上げられていました。

今日では、ソースコード解析ツールやフォーマッタを導入してCIで適用すれば、人によるコードレビューでは、本質的なコードのロジックや保守性の観点に集中できます。その分、組織としての生産性が向上するわけです。

ソースコード解析ツールやフォーマッタを導入している開発組織に、ソフトウェア開発経験が浅い人や新卒新人が入ってきた場合、ある基準レベルのソースコードが作られることになりますが、当の本人は、ソースコード解析ツールが警告する内容の背景やフォーマッタを使う背景を理解しないままになってしまうことが多くなります。それらの背景となるようなひどい開発を経験する必要はないですが、知識としてはさまざまな書籍を通して学習してもらうのがよいかと思います。
コメント(0) 

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

2020年2月18日から在宅勤務(WFH:Work From Home)を始めて、ちょうど一年が経過しました。この一年間、一度も会社には出社していませんし、最も大きな出来事は、2020年6月20日(土)に急性心筋梗塞で緊急搬送され、カテーテル治療で一命を取り留めたことです。

急性心筋梗塞になる以前と以降では、同じ在宅勤務であっても大きく変わりました。心筋梗塞になる前は、朝食後に仕事を始めて、昼食、そして夕方には仕事を終えるという生活でした。

6月27日(土)に退院してからは、週に2回か3回の心臓リハビリテーションで午後1時から4時まで外出するようになりました。心臓リハビリテーションがない日は、朝食後1時間ほど経過してから自宅でエアロバイクを30分行い、その後、シャワーを浴びるという生活を送っています。11月からは心臓リハビリテーションも週に1回となったので、自宅でのエアロバイクが主となっています。在宅勤務でかつ柔軟な勤務が許されていなければ、心臓リハビリテーションに通うのも難しかったはずです。

生活パターン

心臓リハビリテーションがない日は、次のような感じです。
  • 4時前後に起床して、柔軟運動やラジオ体操
  • 5時:仕事始め
  • 7時30分〜8時15分に朝食休憩
  • 9時〜10時10分:エアロバイク・シャワー休憩
  • 11時30分〜12時15分:昼食休憩
  • 17時30分:仕事終わり
  • 20時30分:就寝
心臓リハビリテーションがある日は、次のような感じです。
  • 4時前後に起床して、柔軟運動やラジオ体操
  • 5時:仕事始め
  • 7時00分〜8時15分:シャワー・朝食休憩
  • 11時30分〜12時15分:昼食休憩
  • 13時〜16時:心臓リハビリテーション
  • 17時30分:仕事終わり
  • 20時30分:就寝
食事やエアロバイク、それに心臓リハビリテーションなどは、勤怠としては細かく休憩時間として申請しているので、心臓リハビリテーションがある日はほぼ8時間労働で、そうでない日はほぼ10時間労働です。

金曜日は、企業向けの技術研修を行っていることが多いので、その場合は、9時30分〜17時30分が研修となります。そのような日は、早めに朝食を取ってエアロバイクをしたり、あるいは、エアロバイクをしなかったりです。
※ 「複業を20年」の「2. 技術教育や講演」を参照してください。

最も良かった点

在宅勤務で最も良かった点は、何と言っても通勤時間がなくなったことです。以前は、朝5時40分過ぎに自宅を出て、会社到着が7時30分。夕方16時には退社して、帰宅するのが18時前という生活を送っていました。労働時間は7時30分でした。

往復の通勤時間がなくなったおかげで、時間にかなりゆとりを持てるようになり、電車に乗らなくてもよいし、天候を気にする必要もなくなりました。

開発環境

在宅でソフトウェア開発を毎日行う上でおそらく最も重要なのは、無理のない姿勢で開発を続けられるかだと思います。オフィスでは、椅子、机、ディスプレイが用意されていて、無理のない姿勢で開発ができます。しかし、自宅というのは、一日開発を行う場所ではもともとないので、何も揃っていなかったりします。そのため、コロナ禍で在宅で仕事をするために机、椅子、ディスプレイを揃えた人も多いのではないかと思います。

私の場合は、自宅には書斎があって、机、椅子、ディスプレイも揃っていたので、特に何かを準備することなく作業できる環境でした。椅子はかなり昔に購入したアーロンチェアですし、ディスプレイも27インチと21インチの2つがあるため、自宅の方がオフィスよりも快適です。出社していた頃は、平日は書斎をほとんど使っていませんでした。

オンラインのミーティングは、当初は27インチのディスプレイ(古いApple Thunderboltディスプレイ)のカメラとマイクを使っていたのですが、今はマイクだけは別途購入したものを使っています。


技術教育

以前は対面で行っていた金曜日の技術教育は、今ではすべてオンラインで行っています。オンラインで行う上での最大の問題点は、受講生の表情が分からないことです。

対面ので教育であれば、説明を行いながら表情を見ることで、理解しているのか、理解していいないのかが分かるので、理解していないと思えたら説明を変えることができたのですが、オンラインでは難しいです。

オンラインでの読書会

以前は、会社で月曜日の朝8時から技術書の読書会を行っていましたが、在宅勤務になってからは行っていません。ただ、外出こともほとんどなくなったので、土曜日にオンラインでの読書会を開催しています。土曜日のオンラインでの読書会は、いつまで続けられるか分かりませんが、コロナが収束しても続けていきたいと思っています。

今後

いつまで在宅勤務が続くかは不明ですが、基礎疾患もあり、続けられれば続けていきたいと思っています。
コメント(0) 

新たなオンライン読書会を始めます [プログラマー現役続行]

昨年から2つのオンライン読書会を開催しています。
この2つのオンライン読書会は、読んでいる書籍を読み終えたら、再び新たな参加者で最初から読むことを想定しています。

2月から追加で開催する読書会は、書籍を読み終えたら、次は別の書籍を読むことを想定しています。書籍としては、特定の技術に関するものよりは、ソフトウェア開発一般に関わる読み物的な書籍を読んでいこうと考えています。

最初は、書籍として『ベタープログラマ』を読んでいきます。

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

ベタープログラマ ―優れたプログラマになるための38の考え方とテクニック

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2017/12/15
  • メディア: 単行本(ソフトカバー)


コメント(0) 

長時間ランニングテストの勧め〜開発用ノートPCの活用〜 [プログラマー現役続行]

Merpay Advent CalendarとしてTech Blogを書きました。

長時間ランニングテストの勧め〜開発用ノートPCの活用〜

Tech Blogで言及している『APIデザインの極意』は、こちらの書籍です。

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

  • 出版社/メーカー: インプレス
  • 発売日: 2014/07/02
  • メディア: Kindle版

コメント(0) 

オンライン読書会を始めました [プログラマー現役続行]

記事「オンライン読書会を開催します」で書いたように、今月から二つのオンライン読書会を始めました。
基本的には、書籍を最初から読んでいく読書会です。どちらの書籍も、私自身が英語版の草稿のレビューアの一人であり、さらに日本語への翻訳を行っていますので、書籍の内容だけでなく、翻訳することになった経緯を話したり、謝辞に名前が掲載されている人達の簡単な紹介を行ったりもしました。

書籍『プログラミング言語Go』は、Go言語そのものを学ぶための書籍なので、理解するために必要なGoの知識は基本的に不要です。むしろ、さまざまなプログラミングの基礎知識やウェブの関する知識(HTTP、JSON、Rest API等々)は持っている前提になっています。

一方、書籍『Effective Java 第3版』を理解するために求められるJavaの知識は、膨大です。それについては、私自身が、「訳者まえがき」に次のように書いています。
この本は、初心者向けではありません。この本の内容を理解するには、私が翻訳した『プログラミング言語Java 第4 版』および『Java SE 8 実践プログラミング』で解説されている内容程度は理解しておく必要があります。
たとえば、Javaの言語仕様における「クラスのメンバー」とは何かを理解している人は多くはないと思います。しかし、『Effective Java 第3版』には「クラスのメンバー」という表現が、普通に出てきますし、読者が理解しているという前提になっています。

書籍『プログラミング言語Java 第4版』の「2.1.1 クラスのメンバー」には次のように説明されています。
クラスは、3 種類のメンバーを持つことができます。
  • フィールド(field) は、クラスやそのオブジェクトに付属するデータ変数で、クラスやオブジェクトの状態を保持します。
  • メソッド(method) は、クラスの実行可能なコードを含んでおり、オブジェクトの振る舞いを定義します。
  • ネストしたクラス(nested class) とネストしたインタフェース(nested interface) は、クラスやインタフェースの宣言の中で入れ子になっているクラスやインタフェースの宣言です。
この説明をよく読むと、「コンストラクタ」が含まれていないことに気付きます。コンストラクタは「クラスのメンバーではない」のです。

ただ、読書会参加者がこのような知識を持っているとは限らないため、都度、必要に応じて説明しながら行う読書会になっています。

Zoomなので参加者数にはそれほど制限はないのですが、1ページごとに順番に読んで、Q&Aをやったりすると、20名弱ぐらいしか読む順番が回ってこないです。

それぞれ月に1回なので、書籍全体を読み終えるのに多くの回数が必要だと思いますが、地道に継続していく予定です。
コメント(0) 

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

今までは、参加者が会場に集まる形式の読書会を開催してきましたが、新たにオンラインの読書会を開催します。
  • 『プログラミング言語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) 
前の10件 | - プログラマー現役続行 ブログトップ