Monoxer Intern Report #15_タブレットUIのレスポンシブ化

自己紹介

夏からモノグサでソフトウェアエンジニアインターンをしていました、筑波大学情報科学類一年の甲賀です。

参加を決めた理由

AtCoderのコンテストで会社の存在を知り、AtCoder Jobsの求人から応募しました。 X(Twitter)などで所属を公表している競技プログラマの社員の方がいることや、ハッカソン形式などではなく実務に近い形式で参加できるという点に魅力を感じ参加を決めました。

取り組んだこと

主にアプリUIのレスポンシブ化に取り組みました。 Monoxerのアプリは主に教育現場で使われていることもあり、利用者の過半数がタブレット(特にiPad)ユーザーです。しかし、当時のアプリのUIはタブレットでの表示に最適化されておらず、レイアウトが崩れてしまうことがありました。

私は主に、

  • ホーム画面
  • キーボード入力形式の問題の画面
  • 選択肢形式の問題の画面

の三つの画面についてUIの改善に取り組みました。

iOS版アプリのUIはstoryboardというファイルで管理されています。主にこのファイルにレイアウトについての制約を追加し、必要に応じてコードにも変更を加えていくといった形で開発を進めていきました。デザイナーの方とデザインを相談しながら、最終的には次のようなUIとなりました。

画面にしてみてみると単純ですが、映っているUIの他にも細かい機能や考慮する点が多く、アプリ開発の経験がなかったこともあり、思いの外大変で苦戦しました。 例として、上記のりんごの画像のように問題画像の横幅の最大長を制限する変更をする際、storyboardでは各制約にpriorityを設定でき、矛盾する制約がある場合などにはpriorityの高い制約が優先されます。そのため、単純に「画像の幅を⚪︎px以下にする」というような制約を追加しただけでは、すでにある他の制約が優先されてしまいうまく反映されないといったことが起こります。そのため、矛盾している他の制約を探してpriorityを下げる、もしくは矛盾しないよう制約の条件を変更する、などといった変更が必要でした。

また、メインで取り組んだタスクの他にも、様々な領域で細かいバグ修正といった開発をしました。結果的にはこれらのメインタスク以外のタスクがインターン期間の開発の1/3ほどを占めていた気もします。 Web、サーバー、アプリといった様々な領域で、触れた言語としてはSwift、Kotlin、Scalaと、幅広い分野に新しく触れることができ、とても勉強になりました。

インターンの感想

私は、このインターンに参加するまでは個人開発の経験しかなかったため、自分の書いたコードをちゃんとレビューしていただき、より良い設計方針を提案していただいたくなど、今後の開発やエンジニアとしてのキャリアに役立つような多くの経験を得ることができました。 また、多くの利用者の方の満足度に関わるインパクトの大きいタスクに取り組ませていただいたことが、開発のモチベーションにもつながった気がします。

メンターの方だけでなく、デザイナーの方や他のエンジニア、インターン生など色々な方と関わることができ、 ランチやボドゲなどにも誘っていただき楽しくインターン期間を終えることができました。ありがとうございました!

PG BATTLE 2023に参加して飛び賞をゲットした話

ソフトウェアエンジニアの@tobisatisより、競プロ部の活動報告をお届けします。

2023年10月21日に開催されたPG BATTLE 2023に参加しました。PG BATTLEは、同じ会社内や学校内の3人を1チームとして出場する競技プログラミングの団体戦です。2021年の大会から数えて3度目の参加となりました。

チーム結成

部員数が増えたこともあり、今回は6人で2チームを編成できました。アンケートに回答し、参加意欲の高い順、参加意欲が同じなら提出が早い順で、上から3の倍数人を集めるという手順でメンバーを決めました。チーム名とAtCoder(日本最大の競技プログラミングのサービス)での各メンバーの最高レベル(色)は次の通りです。

  • チーム1「モノグサでいこう」
  • チーム2「Monoxer Blues」

結果

両チームとも240点を記録し、企業の部184位中「モノグサでいこう」が14位、「Monoxer Blues」が20位でした。企業の部では130位までの10位ごと13チームにスポンサー賞が与えられ、「Monoxer Blues」が「国際ソフトウェア賞」を獲得しました。

「Monoxer Blues」、左からscrblbug、tamura2004、konayuki

国際ソフトウェア株式会社様、ありがとうございました!部員一同、この場にて御礼申し上げます。

問題の感想

問題と詳しい解説は、PG Battleの公式サイトに掲載されています。

ましゅまろ

「モノグサでいこう」のましゅまろで参加しました。言語はC#です。

  • 1問目、コイントス

(1/2)Nを求めます。Nが小さいので、1.0をN回2で割ることで十分小さい誤差の値を得られます。

  • 2問目、微分

x^で文字列を分割して数値を得て、問題文にある通りに計算をすればよいです。オーバーフローに注意しましょう。

  • 3問目、2進数と10進数

BigIntegerを使ってBを2進数から10進数に変換し、適当にゼロ埋めを行って文字列で比較しました。組み込みの文字列比較で正しい答えを得られるのですが、1度しか提出できない緊張感のため、本番では上の文字から1文字ずつ比較しました。

  • 4問目、ダンス

「L番目からR番目の人をすべて取り除く操作の数」という小問題を再帰的に解いていくことで求まります。小問題は、左端の人を誰とペアにするかを決めていくことでより小さい問題に帰着させます。状態数O(N2)、遷移O(N)よりO(N3)で解けます。やはり緊張しましたが、入出力例の4が大きいケースだったので、ある程度安心して提出できました。

本番提出コードの一部を掲載します。(NとSの入力、ライブラリを省略)

var v = new bool[n + 1, n + 1];
var f = new ModInt[n + 1, n + 1];
ModInt F(int x, int y)
{
    if (x >= y)
    {
        return 1;
    }
    if (v[x, y]) return f[x, y];
    ModInt res = 0;
    for (var i = x + 1; i < y; i += 2)
    {
        if (s[x] == s[i]) continue;
        var l1 = (i - x - 1) / 2;
        var l2 = (y - 1 - i) / 2;
        var w = F(x + 1, i) * F(i + 1, y);
        var h = (l2 + 1).H(l1 + 1);
        res += w * h;
    }
    v[x, y] = true;
    f[x, y] = res;
    return res;
}
var ans = F(0, n);
return ans;

終わりに

競プロ部の普段の活動としては、主にコンテスト後の感想や考察の共有をslackにて行っています。

興味を持っていただけましたら、ぜひ過去の記事もあわせてご覧ください!

Monoxer で作れる問題あれこれ

Monoxer Advent Calender 2023 22 日目の記事です。

モノグサで Software Engineer として働いている杉江です。学習コンテンツの作成や表示に関わる領域を中心に、Monoxer をアップデートするべく日々開発しております。

Monoxer では様々な形式の問題を出すことができます。技術的に面白い形式や機能もたくさんあります。そこで今回は、2023 年 12 月現在に対応している問題形式について書いていきます。「Monoxer ってこういう問題も出せるんだ!」「この機能おもしろい!」などなど発見があればうれしいです。

選択問題

一方が問い・他方が答えになっているような一問一答形式の問題集に取り組んだ方は多いのではないでしょうか? Monoxer ではそういった形式の問題を出すことができ、問題文・答えの選択肢・誤答の選択肢を指定して問題を作ります。画像や数式が選択肢になることもあります。

選択問題であっても、答えを直接入力させる回答方式になることもあり*1、選択肢の並びだけでなんとなく記憶してしまうことを防止しています。

ペアエントリ

表に英単語・裏に日本語が書かれている単語帳や、表にイラスト・裏に名前が書かれているフラッシュカードを思い浮かべてみてください。Monoxer のペアエントリでは、このような「モノとモノのペア」の記憶ができます。ペアのそれぞれの要素が、問題文にも回答にもなりうる点が、選択問題の形式とは異なっており特徴的です。

回答は手書きにも対応しており、アルファベットや漢字など、文字そのものを記憶したいときに役立ちます。

アルファベット手書き機能についての Tech Blog 記事もぜひご覧ください!

tech.monoxer.com

余談ですが、Monoxer のプロダクトはペアエントリの機能からスタートしました。その後はクライアントやユーザーの声を聞きながら、次々と新しい機能・学習形式を提供しています。

文章穴埋め

問題文の一部が欠けており、その部分を穴埋めする形式です。ひとつの文章に対して、穴埋めにしたい箇所は複数選ぶことができ、出題するごとに穴埋めすべき場所が変わります。

ディクテーション

音声を聴いて、その内容を一字一句書きとる形式です。 音声はテキストから自動で作れるため、教材を作る際はテキストだけを用意すればよく、手軽に教材を作ることができます!(用意した音声をアップロードして、それをお手本とすることもできます)

文章全体のディクテーションだけでなく、指定した部分のみを空欄にしたような、部分的なディクテーションにも対応できます。

文章全体のディクテーションの例部分的なディクテーションの例

スピーキング

ユーザーがデバイスに向かって話し、その結果を評価できる形式を指しています。学習後にお手本の音声を聴いて復習することもできます。

この形式もディクテーションと同じく、自前の音声をお手本として使うこともできますし、テキストからお手本の音声を自動で作ることもできます。

数式

数学や物理などの問題を想定した形式もサポートしています。スマホやタブレット上で、こういった教科の学習ができるのを新鮮に感じる方もいらっしゃるかもしれません。

問題文の部分は 2 本指でズームイン・ズームアウトができます。途中式などのメモを手書きで書くこともできます。このように、実際に手を動かして計算したり考察したりできるように工夫されています。

回答するときは、数式を手書きするか、キーボードで答えの数式を入力します。

手書き数式認識については、過去にも Tech Blog に記事を出しています。以下もぜひご覧ください!

tech.monoxer.com

tech.monoxer.com

文章記憶

文章をチャンク(情報のかたまり)に分割したうえで、チャンクごとの記憶を促すための出題する機能です。今年リリースされたばかりの新しい機能です!

試験勉強に必要な文章や歴史的に有名な詩、業務に必要なマニュアルやトークスクリプトなど、様々なシーンで活用できます。

corp.monoxer.com

Monoxer でさまざまな問題が出題できることが伝われば幸いです。Monoxer が今後も進化を続け、よりよい学習体験が提供できるように、これからも開発を頑張っていきたいです。

Monoxer Advent Calendar 2023

Monoxer Advent Calendar 2023では、開発、ビジネス、コーポレートの様々な職種のメンバーが毎日1つずつ記事を公開していく予定なので、是非明日以降もチェックしてください!

Monoxerのカレンダーページです。 qiita.com

またモノグサ株式会社では一緒に働く仲間を募集しています。 少しでも興味を持ってくださった方は、ぜひお話しましょう! モノグサ株式会社の採用サイトです。モノグサは「記憶定着」をサポートする学習サービス「Monoxer」を運営する会社です。

採用サイト

careers.monoxer.com

*1:問題によってはそのような形式の出題が不都合になることもあるため、選択問題のみを出題する設定することも可能です

学習継続:モティベーションについて色々考えてみた。

Monoxer Advent Calender 2023 20日目の記事です。 モノグサでProduct Managerとして働いているマチューです。英語四技能のプロダクト、又新領域関係のプロダクトの担当をしています。 今回は、学習という観点で「モティベーション」について記事を書きました。

はじめに

真剣に勉強を始めようと決めたとき、学習者の皆さんは長い旅に出ることになります。通常、追い求めるゴールは遠く、到達するまでに数週間から数ヶ月かかることもある。例えば、英検2級から準1級を目指したとして、平均11ヶ月、約450時間勉強する必要があると言われています。これは膨大な労力である。やり遂げられる人もいれば、残念ながら目標に到達できずに途中で投げ出してしまう人も多くいるでしょう。

その違いはどこかから生まれるのだろうか? 「モティベーション」が一つの大きな要因だと考えられます。

モティベーションとは?

ウィキペディアによると、モティベーションは「個人が目標指向的な行動をとるように駆り立てる内的状態」と言われています。この定義から、すでにいくつかの重要な概念が浮かび上がってきます:

  • モティベーションに目標が必要であること。目標がなければ、行動を取る必要がない。
  • モティベーションの結果は、勉強する、体を鍛える、あるいは単に本を開くといった具体的な行動であること。
  • モティベーションは静的なものではなく、状態であること。様々な要因によって変化する。

そして最も重要なことは、モティベーションは人によって異なり、モティベーションに影響を与える様相も異なることです。

自分の学習経歴を振り返ってみたら

モティベーションへの理解を深く掘るために、自分の過去の学習を振り返って、下のグラフでまとめてみました:

このグラフをみて、私の学習経歴は成功、失敗、又は苦労の連続であったことがわかります。

一つの様相として、目的がボンヤリしていたり、弱かったりすると、学習を継続することは中々できなかったことがわかります。例えば、昔スペイン語の勉強を始めたのは、当時スペイン語圏への出張が多く、「スペイン語が話せたらかっこいい」・「便利かもしれない」と感じたからでした。あまり強い「理由」ではなかったことが原因だったのか、結局、スペイン語の教材を買って、2週間勉強して、それ以来一度も開きませんでした。皆さんもこのような体験ありますか?

加えて、勉強が自己中心的なものなのか、強制的にやらされているかによって、学習の継続に影響しているみたいです。私はフランス育ちの日仏のハーフで、中学時代、フランスで生活しながら、放課後日本語の漢字を勉強させられました。当時、日本語を覚えることに対して目的もなかったし、必要性を感じていなかったが、親の強制によって(今は親のモティベーションに感謝しています)、やめないまま高校の漢字まで覚えました。

結局のところ、途中でやめた学習と最後まで頑張ってできた学習の決め手は何でしょうか? それはやっぱり「モティベーション」なのではないか?と思いつつ、なぜ場合によって、モティベーションがでたり、でなかったりするかはわからない。もっと深ぼっていく必要があります。

モティベーション理論

モティベーションは心理学において非常にポピュラーな研究対象であり、モティベーションのメカニズムを説明しようとするモデルやセオリーが数多く存在します。 様々な理論の中で、”Situated Expectancy - Value Theory” (Eccles,2020) は、教育の文脈で人気の理論である。 次のグラフに以上のセオリーをまとめました。 このモデルによって、学習タスクを実行するかしないかの選択を迫られるたびに、学習者は「成功への期待」と「タスクの主観的価値」に基づいて判断することになっています。この判断は学習者の過去の学習経験や文化、自尊心、目標などの個人的要因にも影響されると思われます。簡単に説明すると、出題された時に、学習者は:

  • この学習タスクをうまくこなせる自信があるのか?
  • この学習タスクは自分にとって価値があるのだろうか?

と(無意識に)考えてしまう。もし上記の質問のどれかが否定的な答えにつながれば、学習者のモティベーションが低く、行動(学習)しないことになります。

モデルをさらに詳細に調べると、”タスクの主観的価値”は、下図のように3つのプラス(外在的価値、内発的価値、効用価値)とマイナス(機会費用、努力費用、感情費用)要素に分解されます: これは、個人が与えられた学習タスクの主観的価値を量るとき、無意識のうちに6つの価値要素を全体として見積もり、コスト・ベネフィットに見合うかどうかを自分で判断することを意味している。 この理論によると、学習体験がモティベーションにどのような影響を与えるかは、以下のように容易に想像できます: このように、学習体験や内容ににより、タスクの主観的価値が変わり、学習の継続判断に最終的に反縁されます。

プロダクトでできる、モティベーション対策

以上のモティベーション理論によって、プロダクトで学習者のモティベーションを支える手段は大きく3種類考えられます:

  • 学習で成功体験させるための工夫
  • 学習に纏わる苦しみの解消
  • 学習の価値の最大化

Monoxerのアプリの中に、そのような工夫はすでにいくつか用意されています。例えば、サクサクとクイズを解く学習体験の楽しさ、先生から送られる励ましのスタンプ、あるいは学習をする中で、記憶していく感覚そのものは学習者のモティベーションを支えてくれていると考えられます。それに加えて、ユーザーからのフィードバックに基づき、機能や学習体験の改善を進めています。例えば2023年12月に機能のアップデートをリリースし、スピーキング学習での認知的労力を大幅に軽減できたと思われます。

以下のグラフは、カテゴリーごとでのアプリの平均継続利用率と利用頻度を示しています。ご覧の通り、「Education」のカテゴリーは最も低い位置にあり、学習を長く続けるためのモティベーションはEdTechで最大の課題かと思われます。

(source: https://www.insiderintelligence.com/content/driving-engagement-with-analytics-flourishing-mobile-app-economy-sponsored-content)

モノグサでも今後モティベーションの課題に更に取り組み、全ての学習者のゴールまで辿り着けるようになることを目指します。

Monoxer Advent Calendar 2023

Monoxer Advent Calendar 2023では、開発、ビジネス、コーポレートの様々な職種のメンバーが毎日1つずつ記事を公開していく予定なので、是非明日以降もチェックしてください✏️

qiita.com

またモノグサ株式会社では一緒に働く仲間を募集しています。 少しでも興味を持ってくださった方は、ぜひお話しましょう!

careers.monoxer.com

ありそうでなかった学習と記憶のデータ

Monoxer Advent Calendar 2023 13日目です。

ごあいさつ

こんにちは。モノグサ株式会社の大橋です。以前の記事でも自己紹介しましたが、現在ソフトウェアエンジニアとしてデータ基盤の構築からデータ解析まで、データと名のつくことは何でもやっています。

この記事を読まれる皆さんの多くは日本の学校を卒業されたかと思いますが、学校での勉強というとどういうものを思い浮かべるでしょうか? 自分はなんだか問題集やプリントをたくさん解かされていたような気がします。

ところで、学校では日々大量の問題演習が行われる割にその効果検証を科学的に行っているという話はあまり聞きません。解いて丸付けしたデータが文字通り捨てられているのです。モノグサはデジタルツールの強みを活かし、創業以来蓄積された38億問以上の採点結果が全て保存されています。今回はこの「ありそうでなかった」データを集計して反復練習の効果について調べてみます。

反復と正解率の関係

単語問題の各回答について、同じ学習者が同じ問題を前に解いた回数を計算し、回数の小さい順に正解率を計算してプロットしたもの。1番左が初見正解率、次が2回目の正解率……

反復して覚えられるというなら、前に同じ問題を解いた回数が多ければ多いほど正解率が高いはずです。このグラフはその仮説を検証するものですが、10回前後までは順調に正解率の上昇が見られるもののそれ以降低下しています。これは反復練習の無意味さを意味するのでしょうか?

未検証ではありますが、私の仮説では正解率が反復効果だけでなく単語の覚えやすさにも依存していることが原因なのではないかと思っています。Monoxerで学習を続けると記憶済みになったものはほとんど出題されず、なかなか覚えられない覚えにくい単語だけが繰り返し出題されるようになります。すると、反復回数が多いことはその単語が覚えにくいことを暗示し、結果として正解率が下がってしまうのです。

1つの問題に固定してこのグラフをプロットすればこの仮説が検証できると思いますが、今回はアドベントカレンダーなので割愛します。気になる人は入社してね! (右肩上がりのグラフが出てくると思っていたので深掘りする作業時間を用意してませんでした……)

接触間隔と正解率の関係

やらないと忘れるという話も調べてみました。これについては、前に同じ問題を解いてからの経過時間が長いほど正解率が低下するという仮説を立てて検証しました。 ディクテーション問題(中難易度の出題形式)の各回答について、同じ学習者が同じ問題を前に解いてからの経過時間を計算し、経過時間の小さい順に20等分。それぞれのグループについて正解率を計算し、左から並べたもの。

上のグラフからわかる通り、経過時間が伸びるほどきれいに正解率が低下しています。この関係はディクテーションだけでなく単語入力や選択問題の形式でも観察されました。1番右(経過時間が最も長い群)の平均経過時間は1ヶ月程度なのですが、2番目に左(平均経過時間11.5秒)の3分の1以下の正解率になっています。

最も左の群の正解率がなぜ低いかは分かりませんが(データ不備でしょうか)、それ以外については予想以上にきれいな減少傾向が見られ、人間は忘れちゃうんだなあという事実を思い知らされます。

ほんとうはこの1番右の群がどういう分布になっていて、この群にいながら正解できる人にはどういう特徴が出るか調べたいのですが(これこそが長期記憶に他ならないのですから!)これも時間の関係で割愛です。やりたい人は入社してください!

エビデンスに基づいた学習体験を作りたい

反復回数や接触間隔が正解率に影響するという直感的には明らかな事実も、実際に裏付けられると今までより自信を持って反復練習を勧められるようになったのではないでしょうか。世の中には根拠が怪しかったり賛否が真っ二つに分かれるような教授法もたまにありますが、モノグサではエビデンスに基づいた学習体験を作ってみなさまにお届けしたいと思っています。

Monoxer Advent Calendar 2023

Monoxer Advent Calendar 2023では、開発、ビジネス、コーポレートの様々な職種のメンバーが毎日1つずつ記事を公開していく予定なので、是非明日以降もチェックしてください!

Monoxerのカレンダーページです。 qiita.com

またモノグサ株式会社では一緒に働く仲間を募集しています。 少しでも興味を持ってくださった方は、ぜひお話しましょう! モノグサ株式会社の採用サイトです。モノグサは「記憶定着」をサポートする学習サービス「Monoxer」を運営する会社です。

採用サイト

careers.monoxer.com

Tech Lead Manager 1年目を振り返ります

Monoxer Advent Calendar 2023 11日目の記事です。

 モノグサ株式会社でCustomer Reliability Engineerとして働いている大野敦です。現在Customer Success and Customer Reliability (CSCR)という領域のTech Lead Manager (TLM)として働いております。

 CSCR領域では「Monoxerの利用における”不安の最小化”(Reliability観点)と、”成果の最大化”(Success観点)の両面から顧客を支援すること」をミッションとし、日々プロダクトの開発からプロダクト外の社内ツールの整備などを行っております。直近の開発では顧客向けCSVデータ出力機能や契約請求関連の社内向けサービスの整備などに取り組み中です。

この1年の振り返り

 2023年の中で一番の環境の変化といえばCSCR領域のTLMとして一定の開発領域に対して責任を持つ立場になったことです。23年の1月時点ではそもそもCSCRという領域が何をMissionに活動するのかさえ不明確であったのが、PdMの助けもあり3月末にはCSCRのMissionが明文化され、そして4月よりCSCR領域のTLMとなりました。

 自分が関わった個別の開発のことも書きたいという気持ちもありつつ、今回はTech Lead Manager 1年目としての振り返りをしたいと思います。

ソルジャーとコマンダー

 TLMとして日々業務に当たるなかでたびたび思い出す昔の出来事を書きたいと思います。私が大学に在籍していたときにお世話になったポスドクの方との雑談の中であった話です。当時のことはあまり鮮明には憶えていない(記憶の会社にいるのですが記憶力は高くない)のですが、一つ鮮明に今でも憶えている出来事です。

 お世話になったポスドクの方が、研究者というのは個人の学問に対する洞察の深さとそれを適切に研究者にわかるように説明できる形で仮説を立て検証する能力が求められる、という話をしてくれました。研究活動の中で自走して研究を続け成果を出し続けられる研究者が限られたアカデミックのポジションを獲得し、また次の新たな研究をしていくのだということで、常に競争にさらされる非常に厳しい世界であるということを話してくれました。一方そのような競争にさらされることは大変ではありつつ、他の環境では出来ないような最先端を見れるからこそ面白いという話であり、おそらくそのポスドクの方は純粋に研究の面白さを話してくれたのだと思います。そしてその分野で実績を残し生き抜いてきた人のことをソルジャーという言い方をしていました。

 一方で、ソルジャーとして大きな成果を出し、その分野におけるポジションを上げていくと研究室のトップとして(わかりやすくは教授として)自分の研究を主導しつつ、組織の運営をしていかなくてはならないという話をしていました。そうなるとソルジャーとしての強さだけではうまく組織を回していけず、組織や人のマネージメントが必要となります。組織や人のマネージメントをしつつ研究を主導していく人のことをソルジャーの対となる表現としてコマンダーという言葉でそのポスドクの方は説明していました。

 そしてソルジャーである人が必ずしもコマンダーとして優れた人であるかというとそういうわけではなく、逆にソルジャーが自分自身のものさしでメンバーを指導してしまい組織としてのパフォーマンスを最大化出来ないということがあるという話をしていました。当時私はソルジャーとしての能力を高めるだけではコマンダーにはなれないのだということを漠然と感じていましたが、この話を聞いたときにやはりどの分野であってもソルジャーの能力とコマンダーの能力には根本的にことなるベクトルのスキルが存在するのだと納得しました。

 私がTLMとしてCSCR領域を担当することになった4月に社内のマネージャー研修がありました。そのモノグサのマネージャー研修ではマネージメントには3つの種類があるという話があり、それは「仕事のマネージメント」「人のマネージメント」「チームのマネージメント」であります。人やチームのマネージメントはおそらくわかりやすいコマンダーの責務だと思います。また仕事のマネージメントと聞くとマネージャー自身が様々な仕事にたいして主導権を握り円滑に進めるというのを想像するかもしれませんが、どちらかといえば仕事を始める前の目標設定やメンバーの業務支援という意味でのマネージメントが詳細の取り組むこととして書かれており、先のソルジャーとコマンダーという話で言えばコマンダー的な責務であります。これまではソルジャーとしていかに新たなことに挑戦し成長していくかという意識がほぼ全てであったのが、このマネージャー研修のタイミングでコマンダーとしての意識を強く持ち合わせなくてはならないと感じたのを憶えています。

モノグサのエンジニアキャリアパス

 モノグサではマネジャーというのは単純なバッジのようなものであるとマネージャー研修で説明されています。すなわち本人がやりたいという意志があり社内における合意が取れればマネージャーになれますし、逆にマネージャーになったけれどもやはりマネージメント以外の業務をより集中して取り組みたいという気持ちになればマネージャーをやめることも可能とされています。

 Product Developmentグループに限定して話をすれば、開発領域ごとにEngineering Manager(EM)、Tech Lead(TL)、Product Manager(PdM)が割り当てられており、TLとして活躍をしていくというエンジニアキャリアパスもあります(他社ではTLとは別にIndividual Contributor(IC)と呼ばれる個人の技術力を高めることで貢献するロールも存在するようです)。モノグサにおいてTLは担当領域の開発を技術的にリードし、Design Docのレビューやコードレビューなどを行い担当領域内のプロダクトやプロジェクトのマネージメントは行いますが、人のマネージメントは行いません。

 私自身は一人のエンジニアとして能力を高めていきたいというのはもちろんですが、組織や人をマネージメントすることで成果を最大化するということについても興味があったため2023年の4月からCSCR領域のTLMとなりましたが、モノグサではTL(や他社でいうIC)として活躍するキャリアパスも存在しますし、実際にTLの方で非常に社内の多くの人からも信頼されているエンジニアも在籍しています。

挑戦できる環境である

 この1年の最大の環境の変化はCSCR領域のTLMになったことであるというのを冒頭に書きましたが、もともとモノグサに入社してすぐのとき(約2年前)にCTOの畔柳さんとの1on1の場で「まずは一人のエンジニアとしてプロダクトを開発する能力を身に着けたい。そのうえでどこかのタイミングでマネージメントも経験したい」と希望を伝えていました。当時考えていたこととしては一人のエンジニアとしてある程度の開発を自走できるようになるには、よく言われる1万時間の法則をふまえると5年くらいかかるのではとおもっており、そのくらいのタイミングでマネージメントにも挑戦することになれば良いと考えていました。

 そしてCSCRのTLMにならないかと声をかけてもらったのが2023年の1月か2月のタイミングでした。最初は自分自身がまだまだエンジニアとしての能力が不足しているのではないかということを感じており、もう少し自分自身の能力を高めて一人のソフトウェアエンジニアとして活躍したいという話をしてマネージメントは時期尚早なのではと思っていました。しかし、CSCR領域のPdMとも話をする中で自分がTLMとなることが自分自身だけでなく周囲にも良い影響を与えることができると思い始め、3月にTLMとしての挑戦をすることを決意しました。

 いま振り返ると挑戦できる環境が整備され挑戦を後押ししてもらえたことは幸運であったと思うと同時に、挑戦するという判断をしてよかったと感じています。

Tech Lead Manager 1年目としての振り返り

 4月から約8ヶ月経過し振り返ってみると様々失敗したことや反省すべきだったことはあります。今回は判断と余裕というキーワードで振り返っていきたいと思います。

 TLMになる前となった後を比べると、プロダクトの開発における技術的リードからチーム・人のマネージメントまで様々な場面で判断することが増えたと感じています。その中で自分自身に余裕があるときには必要な情報を整理し、分からない点や曖昧な点を明確にして判断することが出来たと思います。一方で自分自身に余裕がないときに、それまで必要な情報を整理しその領域について深く把握している状態であっても、瞬発的に視野が狭まりあまり深く思考せずに表面的な情報で判断してしまうこともありました。そして振り返ってみると余裕がない場面での判断は結果的に良くない選択をしていることが多かったと感じています。

 どのようにして余裕を持てばよいのかは、人それぞれやり方があると思いますが、私自身は一つの方法として計画を立てるというのを意識しています。計画を立てることで自分自身が取り組むべきことを明確にすれば、いつ自分が余裕を持てなくなりそうなのかを予測することができると思います。そうなれば事前に関係者に連絡を取っておくなど立ち回ることができますし、自分の状況を正しく周囲に伝えること自体が最終的には自分を助けることにもつながるのではないでしょうか。

 また、この計画を立てるというのは表面的にはいつまでに何をするかを決めること(極端な表現をすると四半期ごとのOKRやKPIを決めるだけ)のように思えますが、重要なのはその計画を完遂するために必要な項目を洗い出し自分に不足していることや事前にやるべきことを明確にし、計画を自分が取り組むべき課題を細分化していくことだと考えています。計画を細分化する作業を進める中では課題の構造的理解が必要となり、単純な一本道での計画の完了とはならない中で関連しあう課題をどのように組み合わせ効率よく進むことができるのかを検討する。その思考を細部にわたって巡らせて自分の取り組むべきことを明確にしておくことで自分の取り組む課題の進捗を管理することができ、素早い判断をする余裕を生み出すことができるのだと思います。

さいごに

 Tech Lead Manager 1年目としての振り返りを行ってきましたが、しばらくは継続してCSCR領域のTLMとして開発を推し進めていくことになります。まだまだ自分自身が一人のエンジニアとして知識・経験が不足していると感じているのでそれらを深めていきたいですし、またマネージメントについても継続してよりよいやり方を模索していきたいです。1年後もTLMのままでいればですが、2年目の振り返りを書きたいとおもいます。

 モノグサ株式会社では一緒に働く仲間を募集しています。 少しでも興味を持ってくださった方は気軽にご連絡ください。

Monoxer Advent Calendar 2023

qiita.com

採用サイト

careers.monoxer.com

Monoxer Intern Report #14_手書き領域のフィードバック改善

自己紹介

モノグサの2023年のサマーインターンに参加させていただきました、北村と申します。(この北村さんとは別人です) 所属は千葉大学大学院の1年で、プログラム検証の研究を行っています。

参加を決めた理由

AtCoder Jobs の求人を拝見して、記憶定着にまつわるサービス開発という革新的なプロジェクトに目を惹かれたのが大きな要因です。 さらに AtCoder や ICPC のスポンサーとなっていたことも認知していたため、競技プログラミングに造詣が深い会社なのだと推察し、応募に至りました。

取り組んだこと

主に手書き領域のフィードバック改善に取り組みました。

当初の手書き形式の問題は学習者がなぜ間違えたのかわからないケースが多く、ユーザビリティの低下を招いていました。

(形が悪い)

(線が1本多い)

手書き文字の評価器は、お手本を元にユーザーの書いた文字を評価し、それぞれの画のスコアと文字全体のスコアを返す仕組みとなっていました。

文字全体のスコアが一定値を超えた場合不正解と判断し、スコアの高い画を赤く表示することでユーザーにどの画の形が悪いかを伝えています。さらにこの際、書き順が異なるなどの画は黄色で表示します(これは正誤に影響しません)。

しかし正解不正解の判定は文字全体のスコアのみで行われる上に、文字全体のスコアが一定以上であることと画のスコアが一定以上であることは同値でないため、なぜ間違いなのかがわかりにくいケースが多々ありました。

そこで、評価器がなぜそのスコアに評価したかの評価理由を返すよう改良しました。これは評価フローにおいてどこの if 文を通ったかなどを見て判断する形で組み込みました。 評価理由はデータの圧縮と実装の軽さの観点から、エラーコードのような数値で表現しています。

それに加え、取得した評価理由とパラメータを用いてアプリ側で適切なフィードバックテキストを表示する機能を追加しました。 フィードバックは吹き出し形式で表示することで視覚的にも情報が得られやすいものとなっています。

※この機能は当記事公開時点では未リリースです。
※画像は開発段階のものであり、リリースされるものと異なる場合があります。

これにより、学習者が不正解の理由を一目で理解できるようになりました。実際に使ってみても、以前と比べて間違えた時の納得感が増えたように感じます。

学び

入社当初は競技プログラミングと簡単な web 開発の経験しかありませんでしたが、実践的な業務を通じて GitHub での PR→レビュー→マージの流れや、仕様変更に強いコード設計の考え方を学びました。 さらに PR の過程でデザイナーさんと方針のすり合わせのためにやりとりすることもあり、組織的な開発プロセスについて多くの知見が得られました。 Kotlin でのコーディングは初めてでしたが、既存の洗練されたコードから学ぶことで強い静的型付けによる型安全性を実感することができました。

インターンの感想

社員さんと交流する機会が多くありましたが、ユニークな方が多く毎日が楽しかったです。それだけでなく、各々がモノグサをより良くしようという意志を持ち、自発的に動いているのを実感しました。 社内の雰囲気が厳しすぎず緩すぎず、まさに「ものぐさで行こう」というバリューを体現しているように感じました。

また、インターンであるにもかかわらずプロダクトの改良に向けてしっかりコードを書かせていただき、多くの学びが得られました。 実際に広く使われているコンテンツに自分の書いたコードが組み込まれていると考えると、不思議な気持ちになります。

非常に価値ある経験をさせていただき、大変感謝しています。