valid,invalid

関心を持てる事柄について

『みんなのコンピュータサイエンス』読んだ

コンピュータに対するコンパクトな知識地図」と銘打たれていたので、何か自分の脳内地図に抜け漏れがないかを知りたくて読んでみた。

離散数学、データ構造、アルゴリズム、データベース、コンピュータアーキテクチャプログラミング言語…等々の広大な分野について、駆け足で鍵となる概念を紹介する本。9章にて述べられている「優れたプログラマであれば知っているべきコンピュータサイエンスに関する最小限の知識」というのがこの本の本質であった。

個々を詳解しているわけではないので理解のためには個別の領域について掘り下げる必要がある。何より手を動かして実践していく必要がある。

良かった点

個人的には『CPUの創りかた』『コンピュータシステムの理論と実装』あたりで学んだコンピュータアーキテクチャが簡素で最適化手法を一切省いたものだったので、L1キャッシュなど現代で一般的な最適化をいくつか例示していた点は学びがあった。

また、紹介する概念が現実世界の応用でどのように顕れてくるかにフォーカスしている点も興味を削がない工夫として良かった。

物足りなかった点

逆に言うとそれ以外は自分にとって知識のおさらいという感じだった。

データ構造についていえば『みんなのデータ構造』、アルゴリズムについては競技プログラミングCourseraのアルゴリズム講座、コンピュータアーキテクチャについては『CPUの創りかた』『コンピュータシステムの理論と実装』、データベースやプログラミング言語については実務で学んできた内容でだいたいカバーできていた。

明らかにヤバい抜け穴がないと追認された心持ちではある…が、大きい抜けがあるとしたら離散数学か…。

どういう人向きか

今の自分にとって既知の内容が多かったとはいえ、コンピュータサイエンスを学び始める前に読んでおけば自分の現在地や無知を知るのに有用なのは間違いなかった。


読書メモ: みんなのコンピュータサイエンス - ohbarye

『フリーランスの教科書』読んだ

会社員でも知っているべき税金、保険、年金の基礎知識に加えて「個人事業主になったときに何が変わるのか」や、「確定申告のやリ方」「個人事業主・法人としての節税方法」「法人化のメリット・デメリット」あたりを平易に説明した本。

基礎知識部分はあっさり読み飛ばしたが、確定申告(青色申告)まわり、付加年金、専従者給与、小規模企業共済あたりは耳慣れなかったので勉強になった。

現在個人事業主は検討しているけれども法人化はまったく検討していないこともあって、4章の法人化個人的には身近には感じられなかった。

全体的にフリーランスびいきではなく、むしろ、税理士と社会保険労務士の視点から会社員の恵まれているポイントを指摘しつつ、その恩恵を受けられないフリーランスがどのように対応しなければならないのかを解説していてフェアだと感じた。

『難しいことはわかりませんが、お金の増やし方を教えてください!』読んだ

Kindle Unlimitedで0円で読めた。

説明は平易でわかりやすかった。

内容は普通の人が資産運用で99点をとる方法とその考え方 - hayatoと大きい差分はなかった。違いを挙げるとしたら、

  • 安全資産で個人向け国債変動10年型を買う
  • 余剰資金があるならNISAは積み立てずに一気に買う

ぐらい。あとはひたすらおすすめしない金融商品を切り捨てていく感じ(FX,個別株、外貨預金、保険*1とか)。

主張

貯蓄を安全資産(絶対に減らしたくないお金)とリスク運用資産(5%の利回りを期待するが最悪2.3%程度の確率で1/3になる)に分ける。

リスク運用資産から当面3ヶ月で必要なお金を引いて銀行に預けたままにする。

安全資産で個人向け国債変動10年型を買う。

あとはリスク運用資産をお得度の高い順に使い切っていけ。

1. 確定拠出年金

  • 控除されるので会社員の上限23,000円をかけると年間5万円ぐらい得
  • 自営業で上限68,000円かけると16万ぐらい得
  • 運用益は非課税
  • ただし60歳までは原則引き出せない

2. NISA

  • 120万円/年以下の範囲内で購入した金融商品の利益には非課税*2
  • 非課税期間は5年
  • つまり、非課税で同時に保有できる金融商品は、最大で600万円
  • ハイリスクハイリターンの投資をするならNISA。非課税であることを利用できるから(株などによる雑所得だと20%持っていかれる)

3. 投資信託でインデックスファンド

  • ここにお金を回す前にNISAに突っ込め
  • 毎月分配型は手数料で損するのでずっと持っておく

全体

  • 国内( 上場インデックスファンドTOPIX)と国外( ニッセイ外国株式インデックスファンド)を50:50で買え
    • ここは意見が分かれそう
  • 追加で買い足す場合は、どちらか40%を下回っているほう(リバランス)

期待値としては年間5%程度の利回りになる。

その他 知らなかったこと

  • 72 を『利率』で割ると『2倍になるまでにかかるおおよその年数』がわかって便利(e.g. 利回り6%で運用すると12年で2倍になる)
  • 競馬の期待値は-25%
  • 宝くじの期待値は-55%(無知の税金といわれる所以)
  • 歴史的に、インデックスファンドの成績にアクティブファンド*3が勝ち続けたことはない
  • 消費税も年金の財源になっているから年金未納で貰う額が減ると損する

現時点での自分とのdiff

1. 確定拠出年金: 拠出額を上限にしてるので特にやることなし。個人事業主になったら拠出額を変更する

2. NISA: やってない。就職決まるか、個人事業主になったら開始する(会社の情報書いたり、手続き面倒なので)

3. 投資信託でインデックスファンド: コロナ前に10万円だけ入れてた。積立もしてない。もっと突っ込む。

全体: 海外インデックスファンドに8割ぐらい突っ込んでる

以上

*1:高額療養費制度を利用できるし、がんは半分が罹るなら保険でなく貯蓄でカバーしろ、という主張

*2:書籍が出た2015年のあと、2016年に100->120万円に引き上げられた https://www.fsa.go.jp/policy/nisa2/about/nisa/knowledge/index.html

*3:プロが株や債券を買うやつ

ソフトウェアエンジニアとして求職活動中です

令和2年6月1日より、ソフトウェアエンジニアとして"求職活動"を開始します。職務経歴書 (CV) を以下のページで公開していますので詳細はそちらをご覧いただければと思います*1興味をお持ちいただけた方はCVに記載のメールアドレスにご連絡いただけると嬉しいです*2

ohbarye.github.io

※英語版はこちらです: https://ohbarye.github.io/en/cv/ *3

※ (2020-06-03 追記) メールでの返信には~3日を要しています。Twitter DMは本記事公開以前から無法地帯となってしまっているため確認しておりません。

※ (2020-06-12 追記) 2020-06-12 21:00 JST 時点までに送られたメールについて、すべて一次回答はさせていただきました。もし漏れていましたらお手数ですが再度ご連絡いただけると幸いです。

本記事ではCVとは違った角度から、"柔和-くだけた-"表現でいくつか補足をしていきたいと思います。想定の8倍ぐらい長くなってしまったので「採用候補者としてコイツどうなんだ」と思って見に来られた方はCVだけ見れば大丈夫です。

*1:CVもブログに負けず長い…のですが、とある方から「情報の取捨選択は採用側で行うので多いほうがよい。見る人はちゃんと見るし、そういう会社こそマッチするのでは」とフィードバックいただきました。自身も採用担当やっていたときも確かに、情報量が多すぎて落としたことはないが少なすぎて落としたことはたくさんありました。

*2:やり取りがTwitter DMや各種媒体に分散するととても辛いということがわかってきました

*3:内容はほぼ同じつもりですがDeepL頼りの未添削の英文なので、日本語が読める方には日本語CVを推奨します

続きを読む

Now.sh (Vercel) で x-now-deployment-url が x-vercel-deployment-url になっていた

Now.sh (現Vercel)でホストしているアプリがいつの間にか落ちていた(index pageでいきなり500になっていた)ので直した。

goofi.now.sh

少しdebugしたところ、x-now-deployment-url というheaderがいつの間にか x-vercel-deployment-url にrenameされていたせいでリクエストするURLを正常に組み立てられずにいたようだった(これはstagingやproduction問わずdeploymentごとに値が変わるもので、HerokuでいうDyno metadataみたいなやつ)。他のheaderも軒並みnow=>vercelへrenameされているように見えた。

「何もしていないのに壊れた」というか破壊的な変更がいつの間にか入っていたという印象なのだがドキュメントに記述されていないうえに "x-vercel-deployment-url" で検索しても情報がまったく出てこない。

https://vercel.com/docs/v2/edge-network/headers#inlinecode

(2020-05-30 22:34 追記) 「以下に記載あるよ」と友人に教えてもらった。(彼は本番運用でこの問題に遭遇したらしい)

www.notion.so

カリキュラム標準J17でスキルの棚卸しをする

なんやかんやあり、伸ばしたいスキルを整理したり自分のスキルセットの棚卸しをしたりしていた。また、最近は有給消化期間で暇なのでふだんの業務から離れた領域の学習をしてみたいと思い、基礎分野であるデータ構造やアルゴリズムやコンピュータアーキテクチャについて学んだりしている。

そんな中、漠然と「ソフトウェアにもっと詳しくなりたい」「基礎を学びたい」と思いつつもそもそも基礎ってなんだっけ?という問いがあり、色々調べていたら"情報専門学科におけるカリキュラム標準"という便利そうなものを見つけた。自分で場当たり的に学習計画を立てるよりは既存の体系立てられたカリキュラムを参考にするほうが良いだろう、ということで"掘-ディグ-"ってみた。

情報専門学科におけるカリキュラム標準とは

日本には情報処理教育委員会という組織があって情報専門教育に関するあれこれをやっており、その活動の一つにカリキュラム標準の策定があるとのこと。

カリキュラム標準J07

カリキュラム標準J07-情報処理学会からそのまま引用する。

世界標準である米国IEEE/ACMのCC2001-CC2005を土台として、日本の情報専門教育の状況に対応した見直しを行い、コンピュータ科学(J07-CS) 情報システム(J07-IS) ソフトウェアエンジニアリング(J07-SE) コンピュータエンジニアリング(J07-CE) インフォメーションテクノロジ(J07-IT) の5つの領域と、広く情報について学ぶ内容を定めた一般情報処理教育GEについてまとめたカリキュラム標準です。幅広い情報教育分野のなかで、各知識領域について体系的に学んでいくべき 指針となるカリキュラム構成や最低限習得させるべき項目をコアと指定 しています。

計算機科学、と漠然と捉えていたものはJ07以降の教育カリキュラムでは5領域にわたるらしい。

また、ボリュームを変えずに5分割というイメージかと思いきや、総体のボリュームは増えていそう。その背景には「もともとの計算機科学のカリキュラムが数学など基礎分野に寄りすぎている」という指摘があったようだ。大学なので基礎を教えるのは当然な気もするが…。*1

とにかく、従来は計算機科学1領域がカリキュラムの対象だったが、社会の変化と計算機の爆発的な普及により、ACMIEEEが定めた大学カリキュラム案CC2005では5つの領域になった。

image

カリキュラム標準J07-情報処理学会 より。

この図はCC2205 Overviewを元にJ07用に改変したもので、各領域の分担範囲がわかる便利図(以下、分担範囲図と呼称する)だ。各領域の具体的な内容については後で見ていく。

カリキュラム標準J17

カリキュラム標準J17-情報処理学会からそのまま引用する。

J07の策定から10年が経過し、技術の内容が大きく変化したこともあり、今回全面的な見直しを行い、J17として公表することとした.

J17は、従来からの6カリキュラム標準に加えて、世の動きに合わせて情報セキュリティ、データサイエンスという発展中の対象領域についても、別立てに側面別カリキュラム標準をおく方針を立てている.ただし、現時点では、サイバーセキュリティに対する側面別カリキュラム標準J17-CyberSecurityの素案だけを提示する段階にある.

要はJ07はアップデートされ、現在ではJ17が運用されているということだった。

CyberSecuriry領域はまだ素案のみ、追加されたGEは基礎教養的な内容で既存の領域を薄くカバーするものなので本記事で掘り下げるのは元々の5領域のみとする。

各領域の担当

情報処理教育委員会に便利な説明があるので引用しながら見ていく。

CS (Computer Science)

CS は,情報の表現・蓄積・伝達・変換に関するアルゴリズム的プロセスを,理論・分析・設計・実現・評価の各面にわたって系統的に扱う領域である。この領域の根底にある問題意識は,「何が効率よく自動化できるか」である。

http://www.ipsj.or.jp/12kyoiku/acre/CS.html より

一般的に…かどうかは知らないが自分がイメージするコンピュータサイエンスはまさにこんな感じの領域だ。分担範囲図でもわかるように基礎領域であり、この分野の応用範囲は非常に多岐にわたる。

以下のトピックを扱い、掘り下げていく領域。

IS (Information System)

IS は,社会や組織の問題点を見つけ出し,組織の変革を行い,費用対便益の高い情報システムの開発・導入を創造的・効果的に実現するために必要となる,理論・技術・技量を幅広く扱う領域である。この領域の根底にある問題意識は,「いかにして最大の費用対便益をもたらすか」である。

http://www.ipsj.or.jp/12kyoiku/acre/IS.html より

突然"社会"とか"組織"とか出てきて応用感が強い。

学習領域もわリと応用感強いのだが、CSやSE領域の学習の土台の上で以下をやっていくらしい。

  • データ管理
  • 分析と設計
  • 組織における情報システムの役割
  • 情報システムを囲む環境
  • 多様な情報システムの事例理解
  • 情報システム開発の実践に必要な問題形成・モデリング・プロジェクト管理についての十分な量の実習
  • 立場や国を超えてのコミュニケーション能力・プレゼンテーション能力を得させるための十分な量と深さをもった学習

SE (Software Engineering)

SE は,CS およびソフトウェア工学 を基にし,「体系化された方法論および計量技法を用いて,ソフトウェアシステムを開発,運用および保守すること」を目的とする領域である。

http://www.ipsj.or.jp/12kyoiku/acre/SE.html より

クライアントワーク・受託開発における開発サイクル全般をカバーするような内容だ。産業界からの要請にめちゃめちゃ応えている感があるが、これもCSの基礎や数学の土台の上で学ぶもののようだ。

  • ソフトウェア技術者としての社会的責任の遂行と実践に必要となる,情報倫理・社会・法律・経済・安全に関する事項の学習
  • ソフトウェアシステムに関わる,要求分析,設計,検証・正当性確認,実現および保守に関する基礎的技術の学習
  • ソフトウェアシステム開発の実践に必要な,プロジェクト管理・プロダクト構成管理・プロセス管理・リスク管理・品質計量尺度に関する基礎的技術の学習
  • ソフトウェア開発プロジェクトに参加するために必要な,つぎの視点からのコミュニケーション能力養成
  • 提案作成,プレゼンテーション,聞き取りと分析
  • 計画,折衝,協調,技術・経済の両面からの意思決定,統括

シラバス的なものを読むとOOP、形式手法、アーキテクチャ設計、テスティング、CI/CDとかに触れていたりもする。

CE (Computer Engineering)

CE は,情報のプロセスを応用各面にわたって系統的に扱い,ハードウェアでの実現を目指す領域である. http://www.ipsj.or.jp/12kyoiku/acre/CE.html より

分担範囲図の中で唯一最下部をカバーするのがCE。基盤技術、システムプログラムに関する項目が並ぶ。

  • コンピュータシステム(論理設計,集積回路,コンピュータアーキテクチャ,電子回路,ディジタル回路,など)
  • 情報通信(信号処理,符号理論,情報ネットワーク,ディジタル通信,など)
  • コンピュータ応用(画像処理,音声処理,マルチメディア処理,データベース,人工知能,など)

かなり応用ぽい内容も含まれているじゃん、とは思った。

IT (Information Technology)

ITは,情報システムから,アプリケーション技術,そしてシステム基盤に至るまでの広い範囲にわたって,組織や個人の情報技術に関する広範なニーズに答えることを目指す領域である.

https://www.ipa.go.jp/files/000024071.pdf より

これはめちゃめちゃ広い…。

具体的な要素のプロット

さて、5領域のイメージがわかったところで、各5領域のBOK*2シラバスから具体的なトピックを抜粋し、分担範囲図にプロットしてみた。そうすることでより具体的なスキルマップとしての価値が生まれると考えたからだ。

結論から言うと、難しすぎて頓挫した。情報科学全般で扱う項目の数が多すぎる*3のですべてを抜き出すことはできず、また、複数領域にまたがる項目が多すぎて図上に正確にプロットできない。

いちおうできたのはこんな感じ。

f:id:ohbarye:20200524185933p:plain
カオスマップ感

要素が隣接していることや重なっていることや要素の大きさなどに全く意味はないので注意。

観察

当然ながら特定の技術要素や製品の名前などは浮かんでこない*4。大学で扱う基礎分野なので基礎分野なので数年〜十数年は廃れない内容が並んでいるはず。雑多ではあるがこの概観から「自分に足りないもの」を見つけてやっていけるかも。項目間の関係性のグラフこそが本当に欲しかったもののような気がしてきた。


CS領域≒情報科学という誤った認識を抱いていたため、扱う範囲の広さに面食らった。実際には各要素の背景や周辺には数学であったり電子工学であったり組織論であったりが存在するので、全てを修めるのは数年かけても難しそうだとわかってきた。


コミュニケーション・リーダーシップ・ネゴシエーションなどといったソフトスキルも情報科学の一分野(IS, IT, SE)に含まれていることもまた意外だった。コラボレーションや開発の手法も確かに大きくは変わらない…か。


区分けを見るとわかるようにScienceとEngineeringは密接に関わってはいるものの問題意識が異なるということが再確認できた。

自分と照らし合わせて

2020年5月現在の自分の経験・専門領域を重ねてみた。右上から中心にかけての黄色部分がそれ。

f:id:ohbarye:20200524190014p:plain
カオスマップがさらにヤクいことに。

調べながら「そうだろうな」とは思っていたのだけど、やはり過去7,8年の経験とそこで得た知識の大半はIT, IS, SEあたりとわかってきた。まぁITは広すぎるので上の表現でカバーしている範囲はちょっと盛り過ぎている気がするが…。

最近は学べば学ぶほど「ワイ、何も知らんな…」という気持ちになっていたのだが、業務や趣味の開発を通じて(それとは知らずとも)基礎領域の一部には足を突っ込んでいるとわかりちょっと安堵した面もある。


現在学んでいるデータ構造やアルゴリズムやコンピュータアーキテクチャ、そしてその周辺やさらに背景にある領域が、5領域全てに登場する基礎分野であると改めて再確認できたので引き続きやっていく気持ち、というか避けられない気持ちになった。

T字とかΠ型とかH型とかトライアングル型とかの分類から外れたこういうスキル棚卸しと分析もたまには良いかもしれない…と思ったけど棚卸しにはなってないな、これ。

*1:http://next49.hatenadiary.jp/entry/20080618/p1 に詳しい

*2:Body of Knowledgeのこと。PMBOKとか https://ja.wikipedia.org/wiki/%E7%9F%A5%E8%AD%98%E4%BD%93%E7%B3%BB

*3:とりわけIT領域は本当に広すぎる…これだけで全部カバーしているのではと思うほど。 http://www.acm.org/binaries/content/assets/education/it2017.pdf

*4:そういうのが見たい人はDeveloper Roadmap

2年半のエンジニアリングマネジャー経験から学んだこと

2017年6月〜2020年3月まで、Quipperという会社でEngineering Managerをやってみての振り返りです。

ここ数日こつこつと退職エントリを執筆していたのですがこのセクションが長くなりそうだったのと、単体で読まれても良さそうなので1エントリとして切り出しました。*1

マネジャーになった背景から失敗から学んだことから思いついたことをぐだぐだ書いていきますがはっきり言って個人の日記レベルなので野暮なツッコミはなしでお願いします。*2

というかこれは個人の日記ですよ〜。(ここまで防衛線)

*1:いっそ削ろうと思ったが、いま書かないと一生書けなくなりそうなので

*2:インターネットでマネジャーが失敗について語ると息巻いて攻撃する方を一定数見てきたのですが、せっかくの知見や経験の流通を妨げていて本当によくないと思っています

続きを読む