家族が癌と診断されたら。最初の3ヶ月でやったこと。

いつもは勉強したことをブログにまとめているのですが、今回はちょっと毛色の違う話を書いてみます。楽しい話ではないのですが、もし近い状況の方の参考になれば嬉しいです。 

※ がんの症状や、対処すべき問題、必要なサポートはそれぞれのご家庭で異なってくると思います。以下はできるだけ一般的な情報、客観性の高い情報をまとめたつもりですが、不十分な点もあるかもしれません。確認したリソースのリンクを適宜貼りましたので、必要に応じてご確認いただければと思います。

やったことまとめ

 

自己紹介

無職になって勉強生活をしていた33歳です。父が3ヶ月ほど前に癌と診断され、通院での抗がん剤治療を行っています。母がすでに亡くなっていることもあり、私が家族の中心となって父を支えることとなりました。私の家から片道1時間強のところで父は一人暮らししているのですが、看病に行ったり、病院に付き添ったりしています。
がんという病気についてはもちろん知っていましたが、信頼性の高い情報の集め方、病院の決め方、介護体制の整え方について知らないことが多く、この3ヶ月間困ることも多かったので、最初に知っていればもっと動きやすかったなという情報をまとめておきます。
 

国立がん研究センターのサイトや本を確認し、客観性の高い情報を集めた

がんについて書かれている本やサイトはよくあるのですが、主観的なものや、医学的な根拠に乏しいものも多いです。がんの専門家にチェックされた情報がいいなと探していたところ、国立がん研究センター がたくさん情報を発信していることを知りました。「がん情報サービス」というサイトを運営していて、また書籍についても紹介されています。
 

がん情報サービス

Webサイトで情報をチェックしたい場合、まず がん情報サービス というサイトを見るといいと思います。こちらは国立がん研究センターのがん対策情報センターが作成しているサイトで、専門家の方の審議を経て、情報が提供されています(どのようにサイトが作られているかについて、詳しくは こちら)。

がんの解説についてはもちろん、治療や生活について、また臨床試験についての情報も掲載されています。また、家族ががんになったとき といったページも用意されています。

ganjoho.jp

 

国立がん研究センターが紹介している本

また、国立がん研究センターでは、一般の方向けに本を紹介してくれています。「患者さん・一般の方向けの書籍など」というページから確認できます。

各がんについて解説している本や、心のケアについての本、レシピの本など、様々な本が紹介されています。

www.ncc.go.jp

 
私もこの中から何冊か読んだのですが、特に「国立がん研究センターのこころと苦痛の本」はとても参考になりました。 診療や身体の悩みだけでなく、心の苦悩も多いこと、また専門的な心のケアが受けられることも知りました。

 

「がんになったら手にとるガイド」を読んで、全体観を理解した

これも国立がん研究センターが出している本ですが、「がんになったら手にとるガイド」を読むと、これから何を考えなければいけないか、ある程度、網羅的に書いてありとても役に立ちました。

がんとの向き合い方、経済的負担に対する支援制度、治療方法と副作用から療養生活についても書いてあります。一通り全部読むのもいいですし、最初に「患者必携ガイドマップ」というのがあるので、それをもとに気になるところをピックアップして読むのもいいと思います。

 

病院はがん診療連携拠点病院から探した

全国どこでも質の高いがん医療を提供することができるよう、全国にがん診療連携拠点病院というのが指定されています(厚生労働省の説明のページは こちら)。「がん情報サービス」の「がん診療連携拠点病院などを探す」というページから、がん診療連携拠点病院の一覧が見れるので、ここから病院を確認するといいと思います。

また「がん相談支援センター」が、全国の「がん診療連携拠点病院」や「小児がん拠点病院」「地域がん診療病院」に設置されており、がんに関する相談を無料で受け付けてくれるので、こちらもありがたく利用させてもらっています。

hospdb.ganjoho.jp 

 

限度額適用認定証を申請し、窓口での支払いを自己負担額までにとどめた

がんと診断されてから必要なお金の一部は、公的医療保険などで負担が軽減できる場合があります。治療にかかる費用のうち、公的医療保険が適用される費用については、「高額療養費制度」を利用することができます。

この高額療養費制度では、1ヶ月間の医療費の自己負担額が一定の金額を超えた場合に、その超えた金額が払い戻されます。ただ払い戻しまでに時間がかかるので、事前に「限度額適用認定証」の手続きを行うことで、窓口での支払いを自己負担限度額までにとどめることができます(非課税世帯の方は「限度額適用認定証」ではなく「限度額適用・標準負担額減額認定証」となるようです)。詳細はがん情報サービスの こちら のページをご確認ください。

この限度額適用認定証の手続きは加入している公的医療保険によって異なるので、Webサイトから確認しました。

また、民間保険にも加入していたので、あわせて申請を行いました。

利用できる制度はご家庭によって異なると思うので、がん情報サービスの お金と生活の支援 にあるリンクなどから、利用可能な制度を確認するといいと思います。

ganjoho.jp

 

介護保険の申請方法を市区町村のWebサイトで確認し、申請を行った

父は一人暮らしなので、家事のサポートなども必要です。そこで介護保険の申請も行うことにました。介護保険の対象者になると、介護度に応じて様々な介護サービスを受けることができます。

※ 40歳から64歳までの方は、がん患者さんのすべてが対象となるわけではないのでご注意ください。

ganjoho.jp

介護保険の申請方法は市区町村によって異なると思いますが、私の父の場合、まず「地域包括支援センター」に連絡し、訪問調査を行っていただくことから、手続きが始まりました。この手続きの中で、地域包括支援センターの方に福祉用具のレンタルを教えていただいたり、様々な介護サービスを教えていただいたりして、とても助かりました。

まだ要介護認定の判定は行われていませんが、認定された場合、ケアマネージャーさんにケアプランを作成してもらい、サービスを利用していく形になります。 

 

終わりに

以上、この3ヶ月でやったことをまとめました。病院に付き添ったり、 お見舞いに行ったり、家事を手伝ったりといった日常のサポートを行った上で、病気のことを調べたり、様々な手続きを進めていくことはなかなか大変です。

また、ここで書いた以外にもご家庭によって様々な悩みがあるかと思います。私の場合は社会復帰をどうしようか迷ったり、お医者さんとのコミュニケーションに悩んだり、父の気持ちに寄り添えているか不安になったりしています。

みなさんお疲れさまです。大変なことも多いと思いますが、この記事が少しでも役に立てば幸いです。

3ヶ月半で発音・英単語・英作文を学び直す

去年の秋に退職して以来、勉強生活を続けています。y-meguro です。
まとまった時間を使って、英語の勉強をやりたいなと思ったので、3月の半ばから英語を勉強していました。自分の備忘として、やったことをまとめておきます。
 

なぜ英語を勉強しようと思ったか

自分の英語力

とても雑に表現すると、以下のような現状でした。
  • 洋書でも技術書なら頑張って読める
  • Coursera とかで日本語字幕がなくても、英語字幕があればなんとか授業とれる
  • カンファレンスで翻訳機が使えないと困る
  • 英語で長文書くのは厳しい
  • 英語の対面コミュニケーションはビジネスはおろか、友人であっても非常に厳しい
ざっくり、リーディング >>>>> リスニング > ライティング > スピーキング という感じです。
 
普段ソフトウェアエンジニアとして働いていたのですが、業務では日本語しか使っていなかったので、英語に触れるのもドキュメントを読む時か、技術書を読む時くらい。技術系のリーディングだけは力が付いてるかなと思っていましたが、他はすべて自信がない状況でした。

英語を勉強しようと思った理由

このままでも特に問題はなかったのですが、たまに英語を聞いたり、書いたり、喋ったりしなければいけない時に、「もう少しできたらなぁ…」とよく思っていました。ただ、働きながらだと勉強に当てられる時間は限られていて、仕事に直結する勉強の優先度を上げていたため、長らく(英語 "で" 勉強することはあっても)英語 "を" 勉強することはない状況でした。
英語をもう少し使えたら、自分の働き方の選択肢を広げられるかなという思いもあり(現在の情勢的に海外で働くことはやや難しくなってしまいましたが)、これまで放置してしまっていた英語と向き合ってみようと決心しました。
 

学習の基本戦略

いまの勉強生活全体のスケジュールを考えて、英語の勉強に使うのは3ヶ月〜3ヶ月半程度に限定しようと決めました。

1. 基礎から順番に学ぶ

「英語の基礎」が何なのか、人によって解釈は異なると思いますが、僕の場合は「発音・単語・文法」が基礎かなと思い、重視することにしました。特に「単語」はこれまでの人生であまり頑張れたことがなかったので、今回は苦手意識を取り払うべく、優先して取り組むことにしました。
また、「書けないものは話せない」かなと思い、本当はスピーキングもやりたかったのですが、まずはライティングを重視することにしました。

2. 日頃学習しにくいところを学ぶ

せっかくなので今しかできないことをやりたいなと思いました。具体的に言うと、リーディングの多読や精読は今後、勉強生活が終わってからも勉強しやすそうかなと思ったので優先順位を下げることにしました。
また、リーディングやリスニングのインプット系と比べ、ライティングやスピーキングのアウトプット系の学習はこれまで全然できておらず、どう手を付けていいかわからない状態になっていたので、今回は優先順位を上げてみることにしました。
 

実際にやったこと

上記の方針と、現状の英語力を踏まえて、今回は「発音・単語・英作文」に注力して取り組むことにしました。計717時間使ったようです。

f:id:ymeguro:20200710003215p:plain

やったこと


f:id:ymeguro:20200709184839j:plain

お世話になりました

以下、やったことの詳細を記載していきます。

発音(25.7時間)

単語をやり始める前に、発音についての理解が怪しかったので、「英語耳」で発音から勉強することにしました。 この本では、23個の子音と19個の母音(アメリカ英語で単体で使われない3つについては省略)それぞれについて発音練習できるようになっています。各発音記号がどのような音と対応するか、ちゃんと勉強したことがなかったので、とてもためになりました。単語を覚える時には、発音もあわせて覚えたほうが学習効率がいいと思うので、ここで正しい発音を学べてよかったです。
できそうなものについては飛ばしながら学習しましたが、毎日約1時間をかけてじっくり学びました。
英語耳[改訂・新CD版] 発音ができるとリスニングができる

英語耳[改訂・新CD版] 発音ができるとリスニングができる

  • 作者:松澤喜好
  • 発売日: 2010/08/12
  • メディア: 単行本(ソフトカバー)
 

 

単語(442.8時間)

発音を理解した後は、単語に取り組みました。どの参考書にどれだけ時間がかかったのか詳細を記録していないのですが、これまでに計442.8時間使ったようです。ここが1番大変でした。

 

取り組んだ参考書

以下の4冊に取り組みました。ちょっと範囲を広げすぎた気もしますが、普段あまり触れないような単語に触れたくて、TOEICTOEFLの単語集をやりました。TOEICならビジネス系の単語、TOEFLなら幅広いアカデミックな単語を扱っていると思ったためです。

TOEIC(R)L&R TEST英単語スピードマスター

TOEIC(R)L&R TEST英単語スピードマスター

  • 作者:寿, 成重
  • 発売日: 2018/01/25
  • メディア: 単行本
 
【CD3枚付】TOEFLテスト英単語3800 4訂版 (TOEFL(R)大戦略)

【CD3枚付】TOEFLテスト英単語3800 4訂版 (TOEFL(R)大戦略)

  • 作者:神部 孝
  • 発売日: 2014/02/21
  • メディア: 単行本
 

あわせて熟語も詳しくなかったので、以下の参考書もやりました。

【CD2枚付】TOEFLテスト英熟語700 4訂版 (TOEFL(R)大戦略)

【CD2枚付】TOEFLテスト英熟語700 4訂版 (TOEFL(R)大戦略)

  • 作者:神部 孝
  • 発売日: 2014/02/21
  • メディア: 単行本
 

 

暗記方法

Anki というアプリを使って覚えました。検索すると、使い方についての記事がたくさん出てくるかと思いますが、ざっくり言うと、単語カードを登録して、効率よく学習できるアプリです。
僕の場合は、上記の参考書の中からわからないものを Anki に登録し、あとは Anki のノルマに従って覚えていきました。基本的にカードはすべて自作したのですが、「英語のスペル」に対して「発音記号・品詞・意味」を紐付けるようにしました。覚えにくいものについては用例や画像を足して覚えるようにしました。

f:id:ymeguro:20200709104800p:plain

作成した単語カードの例
後述しますが、英作文についてもすべてこの Anki を使って覚えました。一度登録してしまえば、あとは Anki に従って学習をこなしていくだけで、効率よく学習できるので、やりやすかったです。
 
また、Anki には「統計」という機能があって、毎日の回答数や回答時間、カードの種類などを表示してくれます。記憶が定着してくると「復習(熟知)」に当てはまるカードが増えてくるので嬉しかったです。
参考書から登録したのが4100〜4200語、その他にも知らない単語があれば登録しているので、現在は4449語入っています。

f:id:ymeguro:20200709105907p:plain

新規 → 復習(未熟)→ 復習(熟知)と移っていきます
やり始めた頃は、新規のカードの作成も大変だし、定着していない単語も多くて、1日中単語をやっている日も多かったのですが、最近では1日1時間程度で学習を終えています。新しくカードを追加すると、復習するカードも多くなってどんどん大変になるので、自分にとって無理のないペースで学習できるよう、気をつけるのがいいと思います。

f:id:ymeguro:20200709111903p:plain

学習日数 120/121 なので1日だけサボってしまったようです

英作文

続いて英作文に取り組みました。「文法」「構成」「表現」にわけて、それぞれどう取り組んだか記載します。

 

文法(195.2時間)

いざ英作文に取り組もうと思ったら、(読む時にはあまり意識していなかった)文法の細かい違いが全然わからないことに気づいたので、まず文法から始めることにしました。あわせて、模範となる英作文を覚えてしまえば、簡単に文を組み立てられるようになるかなと思い、「例解 和文英訳教本」と「ドラゴン・イングリッシュ」に取り組みました。

ドラゴン・イングリッシュ基本英文100

ドラゴン・イングリッシュ基本英文100

  • 作者:竹岡 広信
  • 発売日: 2005/09/21
  • メディア: 単行本(ソフトカバー)
 

和文英訳教本では、各テーマについて、課題文とともに文法の注意事項を解説しているのですが、解説がとても丁寧でわかりやすかったです。自分の場合は、時制・冠詞について特に理解が深まりました。

ドラゴン・イングリッシュでも、100個の基本英文が紹介されており、和文英訳教本と同様、各文についての解説が載っています。こちらも良い本だと思うのですが、和文英訳教本と重なる内容も多かったので、結果的に見ると自分の場合はドラゴン・イングリッシュはなくても良かった気がしています。

和文英訳教本の読書メモは以下。

y-meguro.gitbook.io

 

両方とも Anki に「和文」と「英作文」を紐付けたカードを作成して、覚えていくようにしました。全部で276枚のカードを作成しています。

f:id:ymeguro:20200709121046p:plain

作成した英作文カードの例

こちらも単語の時と同様、最初はカードの作成だったり、解説を理解したりで大変だったのですが、最近では20分程度で終わるようになりました。

f:id:ymeguro:20200710000452p:plain

最近では20分程度で終わります

 

構成(28.8時間)

続いて英語でエッセイや長文を書く時に、どういう構成・論理展開にすればいいのか知識がなかったので、英語の構成について学ぼうと思いました。

まず「大学入試英作文ハイパートレーニング 自由英作文編」に取り組みました。自分は第1部しかやっていませんが、エッセイを書くための基本知識を学べます。

大学入試英作文ハイパートレーニング 自由英作文編

大学入試英作文ハイパートレーニング 自由英作文編

  • 作者:大矢 復
  • 発売日: 2010/01/18
  • メディア: 単行本
 

 

 続いて「考える技術・書く技術」を読みました。これは英語に限らず、一般的な文書作成やプレゼンテーションに関する本なのですが、そもそも自分は「伝えること自体があまり得意じゃない」という認識があったので読んでみました。

読み手を選びそうな内容でしたが、論理展開や構成についてこれまで意識していなかった内容も多かったので勉強になりました。

 

 最後に「TOEFLテスト ライティング問題100」に取り組みました(時間の都合で Chapter 2 までしかできませんでしたが)。TOEFLのライティングだと Integrated Writing と Independent Writing の2問が出題されるのですが、Independent Writing の書き方はとても参考になりました。ただ、30分で最低300語のエッセイの作成が求められるTOEFLのライティングはとても難しく、自分の表現力が低いことに気づくきっかけにもなりました。

 

表現(24.5時間)

文法を学んだ時に、ある程度の英作文を学んだので、それがあれば思ったことを表現できるかと思ってたのですが、自分の場合は全然表現力が足りなかったので、慌てて「TOEFL iBTテスト 必修フレーズ100」もやってみました。こちらも Anki で覚えています。

時間が足りなくて、まだ使いこなせるところまでいっていないのですが、主張を述べたり、理由づけをしたりする表現がたくさん載っています。わりと使いやすい表現が多いなと思ったのでおすすめです。

 

振り返り

学習前とどう変わったか

まず、これまでずっと抱えていた単語学習への苦手意識が消えました。上記の学習とは別に、TOEICTOEFLの問題も解いてみたのですが、TOEICだとほとんど知らない単語はない気がします。TOEFLでも知らない単語はけっこう減ったと思うんですが、アカデミックな単語だと、ちょくちょく知らない単語もある印象です。洋書だとどうなるかわからないですが、「Rich Dad Poor Dad」を読んだ時は、今回覚えた単語がたくさんでてきたので、昔と比べると辞書を引く回数は3〜4割は減ったのではないかと思います。
依然として知らない単語は多いのですが、今回単語の覚え方を学べたので、今後は知らない単語を見つけるたびに、少しずつ語彙を増やしていけるのではないかと思っています。
 
英作文については、正直学習前に期待したほどの成長をすることはできませんでした。ただ、自分の書いた文章に対しての添削力は高まったと思います。また、100語以上使って何かを主張する場合の文章構成の基本を理解できました。しかし、基本的な表現力が低いので、適切な動詞を思いつかなかったり、動詞と名詞の組み合わせが不自然になったりしてしまうのは、昔のままです。ここの改善ができるように今後も頑張りたいなと思います。
 

難しかったこと

英作文を上達させるために何が必要かわかっていなかった
受験の時も含めて、これまで英作文について学習した時間が少なかったので、正しい学習方法がよくわかっていませんでした。もともと、英作文をある程度覚えれば、エッセイを書けるようになるのではと思っていたのですが、全然そんなことはありませんでした。
このままではまずいと思って、構成を勉強したり、フレーズを勉強したりしたのですが、時間が足りず、いまいちな結果になってしまいました。また、フレーズの勉強をする中で、覚えた表現を実際に自分で使ってみることの大切さを感じたので、今後はその辺も踏まえて、アウトプットも意識しながら学習を進めていければと思います。
 
英語を詰め込み型で学習するのは効率が悪かった
今さら何を言っているんだという感じですが、(私がこれまでやっていたコンピューターサイエンス系の勉強と比べて)英語は暗記するものが多いこともあり、短期間の詰め込み型の勉強より、長期間の継続的な勉強のほうが効果的だったなと感じました。英語学習の中でも、もっと違ったものにフォーカスすれば違ったのかもしれませんが、その点においても作戦ミスだったなと感じました。ただ、ある程度学習してみないと、何から勉強すればいいのかわからない場合もあり、その辺は難しかったなと思います。
日常生活の中に英語の勉強をどう取り入れていくかは今後の課題ですが、継続的に学習できるよう考えたいと思います。
 

終わりに

暗記系の学習が多く、あまり慣れていないスタイルの勉強が多かったので、なかなかしんどい3ヶ月半でした。また、結果も中途半端なところがあり、悔しい気持ちも強いです。 

ただ真面目に取り組んだ分、振り返った時に、これまでの英語学習で気付けなかったことをいろいろ気付けたような気もします。高校生の頃の英語が苦手だった自分に教えてあげたいです笑。

そろそろ勉強生活も終わりが見えてきましたが、今回学べたことも糧にして、残りの勉強生活も励んでいこうと思います。

長い文となってしまいましたが、お読みいただきありがとうございました。

 

CourseraのAlgorithms Specializationを修了しました

久しぶりに Coursera で勉強したので、備忘を兼ねてメモを残しておきます。

アルゴリズムを勉強する上で、この専門講座が選択肢の1つになる方もいると思うので、参考になれば嬉しいです。

 

※ Courseraって何?という方は以下の記事が参考になるかと思います。

 

受講した専門講座

最初に、受講した専門講座の概要と特徴を説明します。

概要

Courseraの Algorithms Specialization という専門講座を受講しました。スタンフォード大学が提供しているコースで Tim Roughgarden 先生が教えてくれます。

www.coursera.org

 

この専門講座は以下の4つのコースを受講することで、修了となります。

分割統治法からはじまって、ソート・探索・最短経路・貪欲法・動的計画法などを学び、最後はNP完全まで扱うので、ある程度網羅的に、そして体系的に学べるかと思います。

 

特徴

オンライン動画で学べる

授業は先生のオンライン動画を視聴する形で進みます。オンライン動画は基本的に10分前後で、スライド資料はPDF形式でダウンロードすることもできます。

 

クイズと演習がある

各コースはそれぞれ4週間分の授業に分かれていて、各週分のオンライン動画・クイズ・演習が提供されています。またコース全体のクイズもあります。

これらのクイズや演習で、決められている以上の成績を取らないと修了することができないので、強制的にアウトプットの機会が与えられます。

 

字幕は残念ながら英語のみ

他のCourseraのコースだと、日本語字幕が付いているものもありますが、このコースでは英語字幕となります。また、クイズや演習の問題も英語となります。

 

時間の目安は「8時間/週」で4ヶ月

専門講座の紹介ページで上記のように書かれています。自分の場合も約130時間かかりました。ただ、アルゴリズムの基礎知識だったり、実装力、英語力によって多少前後するかと思います。

 

料金は月額のサブスクリプション

自分の場合は「5296円/月」でした(料金が固定なのか、為替等によって変わるのか不明なので、ご自身で確認するようにしてください)。

無料の7日間トライアルがあったり、(修了証や演習なしでよいなら)無料で動画視聴だけできたりする場合もあるようですが、常にできるのかわかっていないので、こちらもご自身で確認するようお願いします。

 

受講しようと思った理由

実はこの授業を取り始める前に、別の本でアルゴリズムの学習を進めていたのですが、章末の演習問題をうまく消化できず悩んでいました(飛ばしすぎると理解が浅いし、かといって全部やるのもしんどいし、選んで解くにしてもどれを選べばいいか難しいし)。

そこで、問題数は少ないながらも基本的な演習問題を用意してくれるCourseraの授業を取ることにしました。

アルゴリズムを教えてくれるオンライン講座は他にも

あたりが気になったのですが、今回取ったスタンフォード大学の講座は3年ほど前に少し受けたことがあって(その時は時間がなくて挫折しました…)、良かったのを覚えていたので、この講座を取ることにしました。

 

受講した感想

良かったところ

週ごとに演習が用意されている

ここは期待通り良かったです。少ない問題数でありながらも、演習があることで、実装しながら理解を深めていくことができます。どの問題も、その週に習ったアルゴリズムを正しく使えば解けるようになっているので、自分の理解度をチェックするのにちょうどよかったなと感じました(例えばカラツバ法を習った後は、64桁の整数が2つ与えられてその積を出力する問題でした)。

また、どうしても困った場合はフォーラムで相談することも可能ですし、以下のレポジトリで様々なテストケースが公開されているので、自力でデバッグしやすくなっています。

github.com

 

問題の分析とアルゴリズムの証明が丁寧

基本的には以下の流れでアルゴリズムが紹介されます。

実装の部分だけでなく、「なぜ単純なやり方だと解けないのか」「この問題を解くためのキーポイントはどこか」が丁寧に説明されているので、アルゴリズムの実装だけでなく、考え方も含めて学習しやすかった気がします。

また、アルゴリズムが正しいことの証明も丁寧なので、納得感を持って学習を進めていくことができました。

 

自分のペースで学んでいける

自分の場合は、最初にスライドを確認した後、難しいところを動画で確認しながら勉強を進めていきました。さらにスクリプトも公開されているので、本当に難しいときは、スクリプトを1文ずつ追いながら理解を深めていくことができました。動画の再生速度を変更することも可能なので、各自のペースで学習を進めやすいかと思います。

また、発展的な内容の動画には "Advanced - Optional" の記載があるので、基本だけ学びたい方はスキップして進めることも可能です。

 

大変だったところ・改善されるといいなというところ

英語のみであること

良かったところとも言えますが、大変でもありました。特にクイズの問題がたまにトリッキーなので、正しく理解するためにけっこう時間を使ってしまった気がします。

逆に言うと、英語での表現もあわせて学べるので、そこは面白かったです。「ワーシャルフロイド法」は英語だと「Floyd-Warshall algorithm」なのか、と知って喜んでいました。

 

実装で詰まった時がつらい

1人で進めているので、詰まってしまった時はつらかったです。授業で習ったアルゴリズムの理解を間違えている時は直しやすいのですが、自分の場合は問題の理解を間違えて詰まった時が大変でした(小数点以下を切り捨てて出力するところを、小数点含めて出力してしまっていました)。

「良かったところ」で書いたように、様々なテストケースの入力・出力が公開されている レポジトリ があるので、うまく活用するようにしてから、ようやく詰まりにくくなりました。

 

スライドにたまに誤字がある

先生の板書が読みにくい、ということでスライドでは清書されたPDFが提供されているのですが、たまに誤字があるので、そういう時は動画内での板書を確認するようにしていました。スライドがダウンロードできるだけでとてもありがたいのですが、誤字が減ったらより嬉しいなと思います。

 

学習ログ

自分の学習ログは以下にアップしています。

github.com

 

各週のテーマとメモは以下となります。

Course 1: Divide and Conquer, Sorting and Searching, and Randomized Algorithms

Week1

  • Part 1: Introduction
  • Part 2: Asymptotic Analysis

Week2

  • Part 3: Divide & Conquer Algorithms
  • Part 4: The Master Method

Week3

  • Part 5: Quicksort Algorithm
  • Part 6: Quicksort Analysis
  • Part 7: Probability Review

Week4

  • Part 8: Linear-Time Selection
  • Part 9: Graphs and The Contraction Algorithm

Course 2: Graph Search, Shortest Paths, and Data Structures

Week1

  • Part 10: Graph Search and Connectivity

Week2

  • Part 11: Dijkstra's Shortest-Path Algorithm

Week3

  • Part 12: Heaps
  • Part 13: Balanced Binary Search Trees

Week4

  • Part 14: Hashing - The Basics
  • Part 15: Universal Hashing
  • Part 16: Bloom Filters

Course 3: Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming

Week1

  • Part 17: Two Motivating Applications
  • Part 18: Introduction to Greedy Algorithms
  • Part 19: A Scheduling Application
  • Part 20: Prim's Minimum Spanning Tree Algorithm

Week2

  • Part 21: Kruskal's Minimum Spanning Tree Algorithm
  • Part 22: Clustering
  • Part 23: Advanced Union-Find 

Week3

  • Part 24: Huffman Codes
  • Part 25: Introduction to Dynamic Programming

Week4

  • Part 26: The Knapsack Problem
  • Part 27: Sequence Alignment
  • Part 28: Optimal Binary Search Trees

Course 4: Shortest Paths Revisited, NP-Complete Problems and What To Do About Them

Week1

  • Part 29: The Bellman-Ford Algorithm
  • Part 30: All-Pairs Shortest Paths

Week2

  • Part 31: NP-Complete Problems
  • Part 32: Faster Exact Algorithms for NP-Complete Problems

Week3

  • Part 33: Approximation Algorithms for NP-Complete Problems

Week4

  • Part 34: Local Search Algorithms
  • Part 35: The Wider World of Algorithms

 

終わりに

なかなか時間はかかりましたが、久しぶりのCourseraは面白かったです。3年ほど前にやりきれなかった後悔が残っていたのですが、その思いを晴らすことができました。

アルゴリズム関連の学習は、他にもいい教科書がたくさんあったり、オンライン授業でもいいものがたくさんあるかと思いますが、この専門講座も選択肢の1つとしてありかと思うので、興味のある方はぜひ検討してみてください。

f:id:ymeguro:20200228230533p:plain



 

2ヶ月間で低レイヤを学ぶためにやったこと

こんにちは。来週末久しぶりに100kmマラソンを走ります。y-meguro です。

この記事は「#しがないラジオ Advent Calendar 2019」6日目の記事です。

adventar.org

 

前回、こちら の退職エントリで勉強生活を始めることを書きました。

まず低レイヤ(CPUからOS周り)から学び始めたのですが、2ヶ月間経って一区切りがついたので、ここまでにやったことをまとめてみます。

 

なぜ学ぼうと思ったか

私はもともとIBMでITコンサルタントをしていて、4年前からWeb系のソフトウェアエンジニアになりました。情報系の出身でもないので、低レイヤの勉強はほとんどしたことがなく、10年前に プログラムはなぜ動くのか を読んだくらい。苦手意識を持っていました。

業務上は、知らなくてもなんとかなる気がしたのですが「目の前で動いているプログラムがどのように動いているか仕組みを理解できたら楽しいな」「いま気付いていないだけで実は自分を助けてくれる場面があるかもな」と思って勉強することにしました。あと低レイヤの話とか用語が出てくる度に目を背け続けるのも嫌ですしね!

 

学習の基本戦略

まず勉強生活全体のスケジュールを考えて、低レイヤの勉強に使う時間は2〜3ヶ月に限定しようと決めました。

その上で自分がより効率的に学ぶために、以下の3つを基本戦略としました。

1. 下のレイヤーから順に学んでいく

これは前職の同僚からアドバイスをもらいました。また後で紹介する コンピュータシステムの理論と実装 という本でもこのアプローチが採用されています。

最も基本的な要素(回路や論理ゲート)からはじめてハードウェアの世界を学び、そこからソフトウェアの世界に入ってコンパイラやOSに進んでいくという順番で学ぶこととしました。

一番下から順々に積み上げていって、困った時に常に振り返れるよう意識しました。

 

2. まず作って学ぶ。その上で理論を学ぶ

これまでに馴染みのない範囲を学ぶので、まず手を動かして、試行錯誤したほうが効率がいいかなと思いました。思った通り動かなかったり、デバッグしたりしながら進めたほうが、なんだかんだ詳しくなりますよね。

ただ、手を動かしてある程度イメージを掴んだ後は、もう少し体系的に理論を学ばないと全体観が掴めないかなと思ったので、あわせて理論も学ぶように意識しました。

 

3. とはいえ最初に低レイヤで使われている技術の全体像をおさえる

これは自分に時間の制約があったことも大きいですが、「どの分野にどのくらい時間を使えるか」がわかっていないと安心して勉強できないなと思ったので、最初に全体像をおさえることにしました。

また全体像をおさえておくことで、各分野のつながりや、自分がいまどこにいるかも明確になるかなと思いました。最初にCPUを勉強するにしても、この後どう進んでいくかわかったほうがモチベーション高く学べますしね。

 

実際にやったこと

以下の6つに取り組みました。計450時間。

f:id:ymeguro:20191205115508p:plain

やったこと詳細

f:id:ymeguro:20191205194538j:plain

お世話になりました

ここから、それぞれの本でどのような内容を学んでいったか記載していきます。

全体像

コンピュータシステムの理論と実装(115.6時間)

まず全体像を掴むために「コンピュータシステムの理論と実装」から勉強を始めました。前述の通り、ボトムアップの流れで、コンピュータシステムの説明が記載されています。

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方

 

ブール論理 → ブール演算 / 順序論理 → ALU / メモリ → コンピュータアーキテクチャ機械語アセンブラ → バーチャルマシン → コンパイラオペレーティングシステム → 高水準言語 / アプリケーション と進んでいき、各章の最後についているプロジェクト(演習問題)を実装していくことで、手を動かしながら学ぶことができました。

HDL言語を用いた論理ゲートの実装から始まり、アセンブラコンパイラも自分で実装することになるので、この本をやるだけで、低レイヤではどのような技術が使われているか、イメージがとても明確になりました(自分が実装したコードは こちら )。

やりきるのは大変でしたが、1冊目にこの本からはじめてよかったです。より詳細な学習メモは以下になります。

qiita.com

 

CPU

CPUの創りかた(84.4時間)

「コンピュータシステムの理論と実装」ではHDL言語でCPUを実装するのですが、せっかくだから物理的にも作ってみたいなということで、「CPUの創りかた」に取り組みました。

CPUの創りかた

CPUの創りかた

 

この本ではCPUの自作がテーマとなっていて、「TD4(とりあえず動作するだけの 4bitCPU)」の作成を通じて、基本的なCPUの動作原理がわかりやすく紹介されています。 

私はブレッドボードで4bitCPUを作成しました。


LEDちかちか

電子工作については何も知らない状態からのスタートだったので、正しく部品を買うのにも苦労していたのですが、徐々に各部品の使い方を覚え、少しずつCPUができていくのはとても面白かったです。

より詳細な学習メモは以下になります。

qiita.com

 

プロセッサを支える技術(28.6時間)

CPUの創りかた」でCPUの基本的な仕組みは学んだのですが、高性能化のためにどのような技術が使われているか、どのような構造になっているか勉強するために「プロセッサを支える技術」を読むことにしました。

プロセッサを支える技術  --果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

プロセッサを支える技術  --果てしなくスピードを追求する世界 (WEB+DB PRESS plus)

  • 作者:Hisa Ando
  • 出版社/メーカー: 技術評論社
  • 発売日: 2011/01/06
  • メディア: 単行本(ソフトカバー)
 

この本では、命令アーキテクチャ・マイクロアーキテクチャの変遷に加え、マイクロアーキテクチャを支える技術(パイプライン実行・キャッシュなど)、仮想化サポート、マルチプロセッサなどについての説明が記載されています。

プロセッサの変遷を学んで、現代のCPUの偉大さを感じることができました。

読書メモは以下。

y-meguro.gitbook.io

 

コンパイラ

コンパイラの構成と最適化(34.5時間)

続いてコンパイラの勉強に入ったのですが、「コンピュータシステムの理論と実装」でコンパイラをある程度しっかり実装したこともあり、理論的な部分を補足するためにこちらの本を読みました。

コンパイラの構成と最適化

コンパイラの構成と最適化

  • 作者:中田 育男
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2009/11/01
  • メディア: 単行本
 

この本ではコンパイラを構成する各要素技術の解説に加え、最適化の手法について詳しく解説されています。

時間の関係もあり、私はすべての手法について詳細に確認できたわけではないですが、実行時間を速くするためにはまず「命令の実行回数を減らす」「より速い命令を使う」「並列度を上げる」の3つを考えればいいこと、それぞれのためにどのような手法が使われているか理解できました。

読書メモは以下。

y-meguro.gitbook.io

 

OS

作って理解するOS(70.6時間)

 OSを学ぶための1冊目として「作って理解するOS」に取り組みました。

作って理解するOS  x86系コンピュータを動かす理論と実装

作って理解するOS x86系コンピュータを動かす理論と実装

  • 作者:林 高勲
  • 出版社/メーカー: 技術評論社
  • 発売日: 2019/09/26
  • メディア: 単行本(ソフトカバー)
 

タイトルの通り、この本では実際に動作するプログラムを作成することで、OSの各機能について学習できます(自分が実装したコードは こちら )。また実装に入る前に、コンピュータの基礎についての説明があったり、x86系PCのアーキテクチャについての説明があったりするので、実装時に困ったらその都度確認しながら進めることができました。

なかなかのボリュームなのでやりきるのは大変ですが、1つずつ進めていくことでOSが何をやっているかイメージを明確にすることができました。

読書メモは以下。

y-meguro.gitbook.io

 

Operating System Concepts(116.3時間)

「作って理解するOS」でOSがだいたい何をやっているかイメージできたのですが、少し理解の浅いところがあったのと、まだLinuxのコードを読める状態じゃないなと思ったので、そこのギャップを埋めるために最後に「Operating System Concepts」を読みました(自分が読んだのは以下の第9版ですが、第10版も出ているようです)。

Operating System Concepts

Operating System Concepts

 

この本ではOSの概要に始まり、プロセス管理、メモリ管理、ストレージ管理、保護とセキュリティと網羅的に解説されています。また最後にケーススタディがあって、LinuxWindowsでは実際にどのような実装となっているか学ぶことができます。

英語で800ページ以上あってなかなかのボリュームなのですが(自分の場合、演習問題を飛ばしても100時間以上かかりました)、基本的なことがわかりやすくまとめられていて、読み応えのある本でした。

手を動かさなくても、これだけわかりやすければOSの1冊目として読むのもありだったなと思いました。

読書メモは以下。

y-meguro.gitbook.io

 

振り返り

学習前とどう変わったか

まずもともと思っていた「プログラムがどう動いているか、低レイヤでどういう技術が使われているか」ということについて、全体観を掴むことができました。また一通り学んで、手も動かしたおかげで、イメージが明確になりました。

以前だと「メモリ」「プロセス」「カーネル」等の用語に少し怖気づくところがあったのですが、今ではフラットに向き合えるかなと思います。きっと以前より低レイヤの話に付いていけるはず。

今後業務で使うかはわからないですが、ソフトウェアエンジニアとして楽しめるものが一つ増えたということはとても嬉しいです。

難しかったこと

2ヶ月間ではそこまで深く学習できなかった

どこまでやったら「深く」なのかは人によるかと思いますが、自分の場合「(教材などで)提供されているものを実装すること」はできたのですが「自分で設計から始めて実装すること」や「既存のOSやコンパイラをカスタマイズすること」はできませんでした。

逆に言うと、提供されているものであれば、CPU・アセンブラコンパイラ・OSと実装できたので、その点は満足しています。

自分で作ったり、実際のコードを読んだりしたら、さらに楽しめるんじゃないかなという思いもあるので、また時間が取れたらチャレンジしたいなと思います。

 

教材を選ぶのが難しい

ネットで調べれば良い教材の情報はたくさん出てくるのですが、その全てが自分のレベル・学習したい内容とマッチしているわけではありません。マッチしていない教材を選んでしまうと学習効率も落ちてしまうし、自分のモチベーションも下がって、勉強生活自体の存続も危うくなってしまいます。

結局いい解決方法を見つけられたわけではないのですが、「実際にその教材をやった人のアドバイスを聞く」というのはとても有効だと思います。私が取り組んだ6冊の本はどれも前職の同僚達から教えてもらったものです。とても助かりました。ありがとうございました。

私として特におすすめなのは「コンピュータシステムの理論と実装」「CPUの創りかた」「Operating System Concepts」です。よかったらどうぞ。

 

インプットだけだと理解が浅いことに気づきにくい

手を動かして学習している時は、バグが出たり、思ったように動かなかったりして、自分の間違いに気づくチャンスが多いのですが、本を読んでインプットしている時は、なかなか自分の理解が浅いことに気づきにくいなと思いました。本を読んでるとなんとなく理解した気になっちゃうんですよね。

ただそのまま放置してしまうともったいないので、自分の場合は怪しい用語や概念をあとで復習するようにしました。この問題に気付いたのが最後の方だったので、今回は2ヶ月経ってからすべての復習の時間をとったのですが、今後はもう少し定期的に復習タイムを設けようと思います。

 

終わりに

2ヶ月間あっという間に感じていましたが、こうして振り返ってみるといろいろなことを学んだなと思える2ヶ月間でした。

どの教材もけっこう時間がかかったので、まず学習時間を確保することが大変だと思いますが、自分としては意義のある楽しい時間となりました。

低レイヤを学習する方(また学び直しを考えている方)にとって、この記事が少しでも参考になれば嬉しいです。

次は3〜4ヶ月かけてアルゴリズムの学習に取り組もうと思っているので、今回の反省を活かしつつ、よりよい勉強生活を送っていこうと思います。がんばります。

 

プレイドを退職しました。しばらく勉強します。

せっかく人生の転機なので、いま思っていることを残しておきます。
 

はじめに

32歳、ソフトウェアエンジニアをやっています。この度、株式会社プレイドを退職することとなりました。
プレイドが嫌になったわけでもなく、より良い仕事が見つかったわけでもないですが、勉強したいことがたまってきたので、半年間くらいかけてゆっくりと消化したいなと思っています。
 

これまでにやってきたこと

退職後の話をする前に、これまでにやってきたことを書いておきます。
 

エンジニアを始めるまで

もともとはIBMでITコンサルタントをやっていました。お客さん先で要件定義と設計までやって、開発はパートナーさんという感じ。特にコードは書いていませんでした。
大学院の時は工学系で、少しプログラミングは書いていたものの、基本がわかっていないので、とりあえず動くプログラムが書けるくらい。Smalltalk触っていました。懐かしい。
 
お客さんと協力しながらプロジェクトを進めていくITコンサルタントの仕事も面白かったです。しかし、自分で意思決定できないもどかしさと、自分でサービスを作ってみたい気持ちがあり、4年目で退職しました。
 

プレイドに入るまで

エンジニアになろうとは決めたものの、未経験の28歳がエンジニアにキャリアチェンジするにはどうすればいいのかわかりませんでした。
 
最初は、家で勉強して何か作れるようになろうかなと考えていたのですが、どうせ勉強するならあわせて英語も勉強したいなと思い、アメリカで学べる方法はないかなと探し始めました。
 
その時に使ったのがintraxというサービス。Yuzu LabsというSan Joseのスタートアップで1年間インターンとして働かせてもらうこととなりました。
 
自分を含めて4人という小さい会社であったため、様々な経験をさせてもらいました。
フロントエンドもバックエンドもやらせてもらえましたし、Webだけでなく、iOSアプリやAndroidアプリも経験できました。
 
英語でのコミュニケーションは想像より遥かに難しく、終始苦戦していましたが、同僚とハウスメイトに恵まれ、とても楽しい1年間を過ごすことができました。
 

プレイドに入ってから

プレイドでは2年8ヶ月働かせてもらいました。
フロントエンド・バックエンド・インフラのどれについても考える必要があって、またエンジニアが仕様の決定にオーナーシップを持てる環境で、とても刺激的な時間を過ごせました。
 
社内で言われていた言葉で好きだったのは「承認より謝罪」。
「誰かの承認を取って進めるのではなく、自分達で考えぬいて、自分達の判断で最速で進める。それだけ考えて、もし間違えたら謝ろう」という意味だと理解しています。
上司の承認を取りながら進めるのが当たり前になっていた自分には衝撃的な価値観でした。
これだけ1人1人に裁量が与えられて、任されるものが多いということは、責任も大きいですが、スピード感を持って進められますし、学習サイクルも早く回るので、学びやすい環境だったのかなと思います。
 
また開発だけでなく、ビジネスや組織も含めて自分の興味を広げてもらったのもプレイドのおかげかなと思っています。
実際にカスタマーサポートやオンボーディングのチームに入らせてもらったこともありますし(その時に書いたブログが下記)、開発外のメンバーと距離が近いことで、様々な課題を自分事として捉えることができました。

これからやりたいこと

今の課題感

充実した環境で働くことができていましたが、夏頃に自分の「勉強したいことリスト」を改めて整理したタイミングで、あることに気づきます。
 
「勉強したいと思ってたのに、ほっといちゃってることがいっぱいある…」
 
日頃、朝の時間や週末の時間を使って、ある程度は勉強していたつもりでしたが、業務に直結しないものや、腰を据えてやる必要がある重めの勉強に手が出ていないことを痛感しました。
「やりたいことあるのに無視してていいんだっけ?そういう人生だっけ?」と思うと、全部消化するのは無理にせよ、ある程度時間を取って、集中して勉強する時間を作ろうかなと判断しました。
 

勉強したいこと

じゃあ具体的に何やるの?となると、すごく漠然としていますが、根本的なところで思っているのは「もっとソフトウェアエンジニアリングを楽しみたい」という思いです。そのためにいま1番自分に足りないなと思っているのは「よくわかっていない技術や、初見の技術をより正しく素早く理解する力」です。
 
そして遠回りなようですが、そのためにはコンピュータサイエンスの基礎の部分が大事かなと考えていて、この半年間ではコンピュータサイエンスのいくつかの分野の基礎を、体系的に理解できるよう取り組みたいと思っています。
 
今の時点だと
  • CPU〜OS周りの基礎
  • アルゴリズムの基礎
  • ネットワークの基礎
  • セキュリティの基礎
あたりに向かっていきたいなと思っています。半年だと全然足りないような気もするので、うまく学べそうだったらもう少し勉強期間を延ばすかもしれません。。
 

勉強期間が終わったら

まだ正直何も決めていません。
そもそもいつまで勉強するか決めていないし…。
 
また思った通りに勉強できなかったり、途中で向いてないなと思うこともあるかもしれません。
 
でも自分の中では100%でチャレンジしたことに意味が残るかなと思っています。IBMを辞めたことも、エンジニアにロールチェンジしたことも、後悔していないですしね!
うまくいかなければ、うまくいかなかったことを受け止めて、またベストな道を模索したいなと思います。
 
ただ理想としては、これまでよりもっと熱狂して何かに取り組みたいです。言い訳なく、何かにまっすぐ打ち込みたい。そういう環境を探したいし、作っていきたい。
 

終わりに

長々と読んでいただき、ありがとうございました。書くか迷ったんですが、「自分の意思決定を改めて整理したい」気持ちと「同じようなことを考えている方の参考になれば」という思いがあり、文章で残しておくことにしました。
 
また突然のタイミングで退職してしまうことになりましたが、よく話を聞いてくれて、暖かく送り出してくれたプレイドの皆さんにはとても感謝しています。ありがとうございました。
 
それではこれからしばらく勉強に励んでいきたいと思います。がんばるぞー!
 
 

その他よく聞かれること

大学 or 大学院行ったりするの?

行かないつもりです。本とオンライン動画中心でやっていこうと思ってます。
Coursera、Udacity、edXなどとても充実してますし、自分にあったリソースを探しながら勉強を進めていこうと思っています。

休職でよかったんじゃない?

勉強に100%集中したい気持ちがあり、また一度リセットして進路を考えたい気持ちがあり、退職することにしました。
最近少し自分の世界が狭くなってしまっているのではという危機感もあるので、自分の世界を広げていけたらと思っています。
 

海外行かないの?

行きたいです笑。でもまたインターンで行っても仕方がないと思っているので、そうじゃない行き方ができるように頑張りたいです。