$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

育児で大切なことを学ぶため「子どもへのまなざし」を読んだ

以前 年間120冊読書する『スゴ本』中の人が選ぶ「10年前の自分に読ませたい」珠玉の6冊 - それどこ で見かけて、「子どもへのまなざし」が気になっていたのだが、最近子どもが産まれてついに育児が始まったので読んでみた。

子どもへのまなざし (福音館の単行本)

子どもへのまなざし (福音館の単行本)

久々に本当に良い本を読んだという印象を持った。とにかく産まれてすぐ〜幼児期の子どもを持つ親は是非読んだほうが良いと思う。


この本は、児童精神科医である著者が、特に子どもが乳幼児〜幼児の時期に、親はどのような気持ちで育児に取り組めば良いのかについて教えてくれる本。なぜその気持ちでやったほうが良いのかについて、ある程度研究成果などを元に説明してくれるので、納得もできる。最近はやれ幼児教育だなんだのといろいろ言われたりするが、そんなものに右往左往するより、この本一冊のほうが参考になるし納得もできた。

この本は、

  • 乳幼児期は子どもからの要求や期待をできるだけ全てこたえてあげる
  • しつけの時も、こちらから伝えたいことを何度も何度もくり返し伝えてあげて、それができるのは子どものタイミングに任せる

ということをずっとくり返し述べている。それにより、人を信頼できるように育ち、また自律心のある子どもが育つようだ。

子どもの要求を全てこたえてあげるのは、子どもをダメにするのではないかという意見もあるが、著者は今まで多くの子どもと関わってきたが、それで子どもが駄目になった例を見たことがないらしい。それよりも、親の理想を子どもに押し付けるような過剰干渉のほうが、子どもの自分自身で考える力が育たないもとになっているらしい。最近よく育児書だったりテレビだったりで多くやっているのは、過剰干渉であることが多いので、出来る限り自分も気をつけておきたい。


とにかく今の時期に読んでおいて良かったという本だった。最高。

読書ノート

  • 乳幼児期の育児は、せんじつめれば、子供の要求や期待にできるだけ十分にこたえてあげることだけ 19
    • 子供の要求にこたえてあげて、こちらから伝えたいことはおだやかに何回もくり返し伝えて、待ってあげたら良い
  • 育児の下手な親はほとんどが孤独 37
    • 孤独を解消するために、子供に依存し、思い通りに動かそうとする
    • 夫婦の仲があまりよくなかったりすると、問題が深刻化する
  • 親とだけ遊びに行くより、何家族かで遊びに行くほうが、子供の社会性という意味では何倍も成果がある 48
  • 子供は子供同士で育ち合う。これを理解しないと親が教育しようとしすぎてしまう 52
  • 乳児期から幼児期の始めが一番要求を満たしてあげやすい 63
  • 育児で大切なことは待つこと 64
    • 育児書に書いてあるよりゆっくりめで良い
  • 親の理想を押し付けた過剰期待をされている子供は、他の人からの指示や束縛のなかでしか行動が取れなくなることがある 79
  • エリクソンの発達課題 111
  • エリクソンの発達課題によると、乳児期に大切なのは「人を信頼することができるように育てる」こと 113
  • 要求を満たす時に重要なことは、親自身にしかできないことをできるだけたくさん聞いてあげること 124
  • 望んだことに望んだとおりにこたえてあげるのは二歳くらいまでが特に大事 125
  • ソーシャルレファレンシングは分かち合いから育つ 131
    • できたことを一緒に喜んであげるとか
  • 過保護(子供の要求に全て答えてあげる)は良いが、過剰干渉(親がやってほしいことを強制する)は子供をダメにする 141
  • 生き生きと楽しく意欲的に考え、行動し、学ぶという完成を習得してもらう 154
    • 好奇心を阻害しない
    • 大人からするとバカみたいなことを何回もしても見守ってあげる
  • 子供は同じことをなんどもくり返し、同じ結論を何度も得た時に、やっと納得する 156
    • なので出来る限り飽きるまでやらせてみる
  • しつけの時期には、親の希望を繰り返し伝え、それができるのは子供のタイミングを待ってあげる 172
    • いつからできるようになるかは子供任せ 174
    • 子供のタイミングを待つことで、自律心の発達が育つ
  • 友達と遊ぶことの重要さ 214
  • 思春期には自分探しが必要なので、色々やらせてみたら良い 247
    • 子供の言っている目標がコロコロ変わってもいい
  • 「昼間仕事でいそがしくて疲れているのだから、がまんして自分でやりなさい」というようなことは絶対に言ってはいけない 308

「ふつうのLinuxプログラミング」でLinuxの基本概念やシェルの仕組みについて学んだ

最近golangCLIツールを作っていたのだけど、Linuxのお作法とかいまいち分かっていなかった。そこでそのあたりのことが学べそうな「ふつうのLinuxプログラミング」を読んだ。


この本はLinuxにおいてC言語でプログラミングする方法を、Linuxでの重要な概念も含めて教えてくれる本。この本を読めばとりあえずC言語を使ってLinux用のプログラムを書き始めることが出来るようになりそうだった。

それでC言語を使わない場合でも役に立つの?ということだけど、非常に役立ちそうで面白かった。なぜなら、単なるプログラミングの方法を教えてくれるだけではなくて、

からである。このあたりの概念はgolangでプログラムを書くときにも役立ちそうで、この本を読む目的を満たせて良かった。おすすめ。


この本の中で個人的に印象に残ったのは以下の二つである。

  • バイトストリームという考え方
  • Ctrl-Cでのシェルでのプロセス中断を実行する仕組み

バイトストリームという考え方

この本の中ではLinuxの概念をファイルシステム・プロセス・ストリームという言葉で教えてくれるのだけど、その中でも僕は最後のストリームという概念が非常に面白かった。この本におけるストリームとはバイトの流れる通り道のこと。他のLinuxの書籍とかではこの概念は単に「ファイル」と言われていたりするみたい。しかし、僕はストリームという言葉の方がなんとなくしっくりきた。

全てのデータの入出力は、バイトの流れる通り道であるストリームをopenし、read/writeし、closeすると考えれば様々な操作がこのストリームという概念だけで表現できることが分かる。

  • ファイルの読み書きは、ファイルとの間にストリームを用意し、read/writeする
  • キーボードの入出力は、キーボードと端末との間にストリームを用意し、キーイベントのデータをreadする
  • プロセス間通信は、プロセスとプロセスの間にストリームを用意し、データをread/writeする
  • ネットワークは、通信したい端末と端末間にストリームを用意し、read/writeする

こうすることで、どのようなデータの入出力も同じopen/read/write/closeのAPIでやりとりが出来て非常にすっきりする。

Ctrl-Cでのシェルでのプロセス中断を実行する仕組み

Ctrl-Cでのシェルでのプロセス中断を実行する仕組みについて解説されていたのも面白かった。Ctrl-Cを実現するためには以下のような仕組みになっている。

  • 1. コマンドを実行すると、シェルがパイプを構成するプロセスをfork()する
    • パイプでつながれたコマンドはそれぞれ1プロセスとしてforkされる
  • 2. シェルがパイプのプロセスグループIDをtcsetpgrp()で端末に通知する
    • パイプでつながれたコマンドは1つのプロセスグループIDに属する
  • 3. forkされた各プロセスがコマンドをexecする
  • 4. ユーザがC-cをおす
  • 5. カーネル内の端末ドライバがそれをSIGINTに変換、動作中のプロセスグループに発送する
  • 6. プロセスグループがデフォルトの動作に従って終了する

こんな感じで、コマンド実行はすべてシェルからのforkで表現され、パイプで繋がったコマンド群がプロセスグループとして表現されることで、Ctrl-Cはそれらのプロセス全てにシグナルを送れるようになっているという感じ。単純な機能に思えるけど、その中にもいろんな仕組みが入っていて面白い。

ちなみにシェルについては最近読んだ以下の記事が非常に分かりやすかったのでおすすめ。

language-and-engineering.hatenablog.jp

まとめ

「ふつうのLinuxプログラミング」は、Linuxのお作法を気軽に学ぶのに非常に良い本だった。今後CLIツールとかミドルウェアのコードに関わった時に参考になりそう。おすすめ。

さらにLinuxカーネルについて知りたければ、詳解UNIXプログラミングや詳解Linuxカーネルがおすすめのようだった。

詳解UNIXプログラミング 第3版

詳解UNIXプログラミング 第3版

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

読書メモ

  • Linux世界はファイルシステム、プロセス、ストリームの3つの概念によって成立している 5
  • ファイルの種類 39
  • ファイルとは 43
    • 何らかのデータを保持する
    • 付帯情報がついている
    • 名前(パス)を指定できる
  • バイトストリームという考え方 48 ※
    • バイトが流れる通り道をopenし、read/writeし、closeすると考えると、ファイル・デバイス・パイプ・ネットワーク通信何にでも使える
  • 「ユーザAとしてアクセスする」とは「ユーザAの属性を持ったプロセスがアクセスする」ということ 60
  • open/close/read/writeを使ったストリーム操作でcatを作る 86
  • ストリームのつながっている位置のことをファイルオフセットという 96
  • Linuxディレクトリ構造(FHS)と主要ディレクトリの説明 180
  • ディレクトリはバイト列であり、ディレクトリエントリという構造体の列 196
  • ハードリンクとリンクカウント 208
    • ハードリンクはあるファイルに新しい名前を付けること 208
    • 実体を指す名前の数をリンクカウントという 209
    • rmが消すのはファイルでなくファイル名で、リンクカウントが0になると実体が削除される 210
  • シンボリックリンクの特徴(ハードリンクとの違い) 213
  • Linuxにとって「ファイルを消す」とは「実体に付けた名前を減らすこと」 216
  • Linuxにおいて「ファイルを移動する」とは、「1つの実体に対する名前を付け替える」こととだいたい同じ 218
  • 仮想メモリ機構の応用 240
    • ページング: HDDやSSDなどのストレージを物理メモリの代わりに使う機構
    • メモリマップトファイル: ファイルをメモリとしてアクセスできるようにしてしまう仕組み
    • 共有メモリ: 特定の範囲の物理メモリを複数プロセスで共有する機構
  • アドレス空間の覗き見 243
    • proc/n/mapsをcatで見るとプロセスのメモリ配置が覗き見れる
  • メモリの確保の分類 245
    • 1. ビルド時にわかっているサイズをBSS領域から取る
    • 2. ビルド時にわかっているサイズを実行時にスタック領域から取る
    • 3. 実行時に決まるサイズをヒープ領域から取る
    • 4. 実行時に決まるサイズをスタック領域から取る
  • ゾンビプロセスの処理 267
    • 子プロセスが終了したのに親プロセスがwaitで終了値を受け取らない状態
  • プロセスグループとセッションの役割 277
    • プロセスグループはパイプでつながれたプロセス群全てにシグナルを送ることが出来るような仕組み
    • セッションはユーザーのログインからログアウトまでの流れを管理するための概念
  • シェルで特殊な働きをするキーはstty -aで見れる
  • ctrl-cの挙動 297
    • 1. シェルがパイプを構成するプロセスをfork()する
    • 2. シェルがパイプのプロセスグループIDをtcsetpgrp()で端末に通知する
    • 3. forkされた各プロセスがコマンドをexecする
    • 4. ユーザがC-cをおす
    • 5. カーネル内の端末ドライバがそれをSIGINTに変換、動作中のプロセスグループに発送する
    • 6. プロセスグループがデフォルトの動作に従って終了する
  • set-uidビットが立っていると、起動したユーザーにかかわらず、常にプログラムファイルのオーナーの権限で起動される 306
  • ログインの流れ 321

英語リーディング教本再再読した

基本からわかる英語リーディング教本

基本からわかる英語リーディング教本

blog.shibayu36.org

最近英語のドキュメントとか読んでいて、また英語読めなくなっているなーと思っていた。そこで英文を読めなくなった時の自分の中の鉄板の本となっている英語リーディング教本を再再読した。やはり最高の本なので英語を勉強している人にはとにかくおすすめできる。

この本を読む前は、なんか読めているようで本当にこの解釈で良いのかと不安に思いながら英文を読んでいた。しかし、この本を読んでいくと文法の解釈が明確になっていって、自信を持って英文をどんどん読むことが出来るようになってくる。分かる分かるぞって感じ。この感覚はこの本を読んでみないと分からないので、気になっている人はとにかく騙されたと思って読んでみると良さそう。

まだ再再読の一周目なので、あと何周かして、この本に書かれている内容をもっと頭に入れておきたい。