matobaの備忘録

育児しながら働くあるエンジニアの記録

何度も説明しないためにブログに書く

「何度も説明しないためにブログに書く」という考えを思い出した。

思い出したついでに備忘録に書いておく。

書くのが億劫?

以前はブログに記事を書いていたけど、最近は書くことが減った。なんとなく、書くのが億劫になったから。

なぜ、書くのが億劫になったのかはいまいち言語化できていなかったけど、書いている途中で「仕上げるのがめんどくさい」という気持ちになってしまうのはわかっている。

だから厳密にいうと「書くのが面倒」ではなくて「書いた記事を公開することが億劫」という話のように思う。

勉強会に参加して気づいた

昨日、ゆるい雑談の勉強会に参加した。

cokonpile.connpass.com

で、ゆるゆると2時間ほど雑談をしていたのだけど、雑談をしている中で自己紹介をしたり聞かれたことに答えたりしていた。

この中で「ああ、そういえば、僕は何度も説明しないためにブログに記事を書いていたのだなあ」ということを思い出した。

よく聞かれることを記事に書いていれば、話している中で説明が必要になったらペタッとリンクを貼れる。これが便利だったんだな。

ついでに思い出した

ついでに、思い出したこととして、何度も調べないためにブログに書くというのもあったのを思い出した。

技術的なことを雑談的に他の人に話しているとき、自分が喋ろうとしている内容を念のため確認するため、再度調べたりする。

そのときに、辿りやすくするために記事を書いていたことがあったのも思い出した。

人と話す回数が減るとブログ記事が減る

ここから気づいたことが人と話す回数が減ると執筆するブログ記事が減るということ。

コロナ禍になってから圧倒的に新しい人と話す回数が減っている。

新しい人と話すことが減ると、自分は知っているけど他の人は知らないことが多い話を何度も説明することが減る。

僕は、「自分は知っているけど他の人は知らないことが多い話」を記事に書いたりするので、ブログの記事が減っていたのもあるんだろうな、と思った。

FreenoveのRaspberry Piスターターキットを買った話

以前から、ラズパイに興味があった。なんとなく触ってみたいなあ、というレベルの興味。

「興味がある」と言いつつ触っていない状態が続いてることを自分で認識すると、なんとなく自分にイラッとしてくる。なので、今回はとりあえず入門キットだと思われるものを購入した。触る時間作れるのかなあ、このメーカーで大丈夫かなあ、とかいろいろ思うことはあるが、ここは深く考えないことにした。

購入したものはこちら。

Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード

PythonとJavaとCのコードなので、なんとなくとっつきやすい印象があった。

そして、購入したものが届いた。

f:id:mtb_beta:20210723100527j:plain

この製品は、マニュアルがWebからダウンロードする形式になっている。

こんなふうにAmazonにリンクがついている。

f:id:mtb_beta:20210723095826p:plain

「変なファイルをばらまかれるリンクだったらどうしよう?」という防衛意識が働いて、少し抵抗があった。

実際にダウンロードすると、中にはサンプルコードやチュートリアルが入っている。

というか実際に入ってるファイルはGitHubで公開されている。

じゃあ最初からGitHubのリンク貼ってくれ....!!!と思ったりもした。

github.com

それからリポジトリの中にはPythonのサンプルコードがたくさん入っていた。

Pythonのコードをいくつかみてみたが、「読める...!!これはらわかるぞ...!!!」みたいな気持ちになった。

まだ、大量のチュートリアルがあるので、まずはざっと把握してみるところかなあ、と思いつつ楽しみにしている。

学ぶ順番を考えるのが難しいんだよなあ、と感じている話

「独学大全」という本を見つけて読んでいる。その中で「学ぶ順番を考えたり、学ぶことの優先順位づけが難しいんだよな」と感じた話を雑記的につらつらと書く。

前提として、もともと自分は独学するタイプの人なので、独学についての動機づけで困ることは少ない。

本の中では「ゲートキーパー」と呼ばれているテクニックがあった。これは、何をいつまでにどれくらいやるか、できなかった場合どうするか、という話を他の人に宣言して、独学の環境を作る話。このテクニックは、「学ぶことを少なくしたい」とか「独学で何かを学ぶのがめんどくさい」と感じている人にとって、動機付けにつながるのだと思う。

ただ、自分の場合は、「可能な限り、多くのことを学びたい」というような知識欲があって、独学自体が面倒だと思うことはないので、動機付けにはならないと思った。(他の人に言ったかどうか、に関係なく、独学自体はするので)

とは言え、学ぶことの優先順位は、「その知識があったときにど自分はどう使えるか。今、必要か。」で判断している部分が多くて、「必要になったら学ぶし、今、必要じゃないなら後で学ぶ」みたいな感じになってる。なぜかと言うと、同じことを学ぶにしても、後で学ぶ方が資料が整理されていたり、書籍の評価が見える化されていて、学びやすい傾向があると思っているから。

ただ、この優先順位で学ぶことを考えていると、「ニーズを満たすために学ぶ」みたいな性質が強くなっていくことがあって、それだけだとなんか微妙だなあと思っている。なぜ微妙かと言うと、自分の知識編成が、ニーズを中心によって構成されすぎているような気がするから。

知識を活かすためには、ニーズが必要なのだけど、「知識を学んでニーズを探す」だとその知識が求められているところにたどり着けない場合があるし、知識が風化していくこともあって、なんかそれは辛みを感じる。「ハンマーを持つ人には、すべてが釘に見える 」みたいな話が関係するけど、先に知識を学ぶと、手段と目的が反転しがち。

だから「ニーズを探して、知識を集める」の順番にした方が役に立つと思うし、有意義な感覚は得られるのだけど、これだと「自分が学びたいこと」とか「自分が伸ばしたいスキル」みたいな視点が結構無視されているような気がする。あと、ニーズについての気づきは、普段の生活環境から得ることが多いと思うので、自分が普段生活している流れに乗ってこないニーズに気づかないし、その辺に対する知識が優先度低くなりすぎる気もする。

この行動基準で進むとガラパゴス化してしまうので、なんだかなあ。と思ったりしている。

まあ、結論はないんですが。

12/12 加筆

よく考えたら「まず、身近な問題を解決するための知識を集める。その後、自分の将来の問題を解決するための知識を集める」と言う順番で学んでるので、今のまま学ぶことを進めても結局は「自分が学びたいこと、や自分が伸ばしたいスキル」と言うのは伸びているかもしれないと感じた。

そもそも「自分が学びたいこと」や「自分が伸ばしたいスキル」と言ってるのが何なのか、と言う部分が自分の中で曖昧なので、もう少しその辺を言語化したら前に進みそうだなあ。

参考図書

Rustで標準入力を受け取って、標準出力に出してみただけの話

Rustで標準入力を受け取って、標準出力に出してみただけの記録を書きます。

以下の本を読んでいたら、こんなサンプルがありました。

数当てゲームをプログラムする - The Rust Programming Language 日本語版

use std::io;


fn main() {
    println!("Guess the number.");

    println!("Please input your guess.");

    let mut guess = String::new();

    io::stdin().read_line(&mut guess).expect("Failed to read line.");

    println!("You guess: {}", guess);
}

このページは、解説を読みながら、自分なりの理解をメモしていきます。

ライブラリを読み込む

以下の行で、標準ライブラリstdの中に存在するioライブラリを読み込む。

use std::io;

関数を定義する

関数は以下で定義できる。

fn main() {
}

mainはエントリーポイントでもある。

fnで関数を表す。上記は引数や返り値を持たないが、持つケースは追々学べるハズ。

こんな風に構造化できる。

fn hello() {
    println!("hello");
}

fn main() {
    hello();
}

変数を宣言する

以下のようにして、変数を宣言できる。

let foo = 5;

ただし、このfooはimmutableになる。つまり、変更することができない。

以下のような関数があってコンパイルするとエラーが出る。

fn define_foo() {
    let foo = 5;

    foo = foo + 1;
    println!("foo: {}", foo);
}

エラー内容

 --> src/main.rs:6:5
  |
4 |     let foo = 5;
  |         ---
  |         |
  |         first assignment to `foo`
  |         help: make this binding mutable: `mut foo`
5 |
6 |     foo = foo + 1;
  |     ^^^^^^^^^^^^^ cannot assign twice to immutable variable

可変の変数を宣言したい場合は、mutをつける。

fn define_foo() {
    let mut foo = 5;

    foo = foo + 1;
    println!("foo: {}", foo);
}

これでコンパイルが通る。Rustでは変数は標準が不変らしい。

変数が標準で不変になっていると何が嬉しいのかは今のところよくわかっていない。

変数の型を束縛する

以下の行は、guessという変数にString型のオブジェクトのnew関数を呼び出した結果で束縛している。

let mut guess = String::new();

現時点では、「束縛する」という概念が何なのかはよくわかっていない。 とりあえず、その型しかいれられないようになるのかな、くらいのイメージで進む。

なお、Stringは標準ライブラリによって提供される文字列の型らしい。 newといういわゆるスタティックメソッドを持っている。Rustでは「関連関数」と呼ぶらしい。

読み込んだライブラリの関数を呼び出す

use std::io; で読み込んだioライブラリのstdin関数を呼び出す場合、以下のようになる。

io::stdin()

なお、 use std::io で事前に読み込んでいない場合、 次のように呼び出せるらしい。

std::io::stdin()

std::io::stdin() の返り値は std::io::Stdin というオブジェクトらしい。

オブジェクトのメソッドを呼び出す。

以下のように書くと、返ってきた std::io::Stdin に対してread_lineメソッドを呼び出せるらしい。

io::stdin().read_line(&mut guess)

&mut guess は変数として参照渡ししている。らしい。

guessって変数として定義したんじゃなかったっけ?とか思うけど、メソッドや関数に参照渡しして、書き換える時は、 mut が必要なのかな。 & が参照渡しを意味している様子。

今のところよくわかってないけど、関数とかメソッド呼び出しを学ぶときにもう少し詳しく知れるのだろう。

メソッドの処理結果を解釈する

io::stdin().read_line(&mut guess) を実行すると Result 型というものが返ってくるらしい。

Result側は、OkかErrらしい。

Rustでは、エラーが発生する可能性がある行で、エラーの際の処理を書いていないとコンパイル時に警告が発生するらしい。

io::stdin().read_line(&mut guess)
warning: unused `std::result::Result` that must be used
  --> src/main.rs:19:5
   |
19 |     io::stdin().read_line(&mut guess);
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: `#[warn(unused_must_use)]` on by default
   = note: this `Result` may be an `Err` variant, which should be handled

エラーハンドリングするの忘れなくて良さげ。

io::stdin().read_line(&mut guess)
    .expect("Failed to read line.");

ここでは、expectを書いて、わざとクラッシュさせているらしい。そのほかのハンドリングは追々学ぶ。

標準に入力に変数を埋め込む

printデバッグするために、変数を標準出力に出したいことはある。

そのときに使えそうな例。

println!("You guess: {}", guess);

説明は省略。

所感

とりあえず、標準入力を受け取って標準出力に出すサンプルを見つつ、勉強したことを記録した。

今のところ「へー。そうなんだー」という感じ。

この記事はわざわざ公開する必要もない内容を書いている。

Notionとか非公開のところに書けばいいと言う話もあるかもしれないけど、別に隠す話でもないのと、ブログなどを介して、「なんかやってる感」を出していきたかったり、自分の中で非公開状態のところにメモするより公開状態のところにメモする方が記憶に残るので、ブログに書いてみました。

まあ、気が向いたらRustについて学び進めていきます。