2022-01-01から1年間の記事一覧

部分型における変性と極性 - なぜScalaの変性は+や-で指定するのか

この記事はScala Advent Calendar 2022の19日目です.Scalaではジェネリック型の変性(variance)は+や-で指定しますが, 他の言語(たとえば, C#, Kotlin)ではoutやinだったりします. この記事では変性の意味を整理して, なぜScalaでは+/-の記号を使うのか説明し…

テックリードを再生産可能にする - テックリード養成講座をやっている話

この記事はEngineering Management Advent Calendar 2022の7日目です.今はエンジニアリングマネージャ(EM)としてエンジニアリングマネジメントの4領域(プロダクト・プロジェクト・テクノロジ・ピープル)すべてを見ていますが, それ以前は長い間テックリード…

方法不確実性を下げるための松竹梅メソッド

若手メンバーのスキルアップのための相談に乗っていると, うまい設計ができるようになる, 仕様の整理やメリット・デメリットの判断がうまくなる, あるいは技術の引き出しを増やすにはどうしたらよいか, という話がよく挙がる. この手の話題にいつも同じよう…

関数の再帰的な定義に名前付けは必要か

結論から言うと, 名前を付けることなく再帰的な関数を定義することは可能. 特定のプログラミング言語でどうかというよりは抽象概念としての関数の再帰を名前なしに実現可能かどうかという話(名前なしに実現できるプログラミング言語は存在するかという話). …

スクラムでベロシティを安定化するにはどうしたらよいか

このブログではあまりこういう話は書いてこなかったけど, 以前少しだけ触れたように, 僕はここ最近エンジニアリングマネージャをやっていて, こういう話題を考える機会はけっこう多い. 具体的には, エンジニアリングマネージャとして複数チームのテクノロジ/…

デバッガを使うのは効率がよいのか

こういう話です:現代においてprintデバッグなんて恥ずかしいもの。デバッガーを使いこなさないといけない。って認識してたけど、以外とprintデバックの方がサクッと気軽にできて良いとやってる人が多くて安心した。(vim-jpより— てらまこ (@teramako) 2022…

Scala 3のマクロの練習に拡張可能レコードを実装してみる

Scala 3でコンパイル時計算がいろいろ便利になっていそうなので, 練習として拡張可能レコード(extensible record)を実装してみた. 前回はmatch typesで型レベルの操作のみでいろいろできたから, 今回もそういうつもりでやろうと思ったものの, けっきょくマク…

コンパイル時計算でラムダ計算の構文解析器・評価器・型推論器を実現 (Scala 3編)

またか. またなのか. 何回目だ. ということで, ラムダ計算のインタプリタの実装としては4回目くらい*1, コンパイル時計算でやるものとしても3回目くらいになってしまうけど, ラムダ計算の処理系をまた書いてしまった.今回の目的は, Scala 3にはmatch typesと…