40代からのHello World!

40代からのHello World!

ITエンジニアになるべく #HappinessChain に入会しました。日々の学習についての記録が中心です。

【書評】スッキリわかるSQL入門 第4版 ドリル256問付き!

こんにちは、けいすけです。

今回は、スッキリわかるSQL入門を読み終えましたので、それについての書評です。
結論から言えば、初学者の方にはとてもお勧めできる本だと思います。

そんなわけで、早速見ていきましょう!

学んだこと

SQLの基本事項+α

SQLの4大命令とその扱い方を、幅広く学べました。

タイトルにSQL入門と付されている通り、初学者向けの本となっております。
例えば、目次の前半はこんな感じ。

データベースって何よ?という解説から始まっております。
データベースの解説に始まり、4大命令(SELECT, UPDATE, INSERT, DELETE)にはしっかり紙幅が割かれています。
また、SELECT文で抽出したデータを集計したりグループ化したり、テーブルを結合させたりといった、4大命令+αの解説も丁寧でした。
更には、トランザクションやテーブルの作成といった内容も含んでおり、幅広く基礎事項をカバーしています。

個人的には、SQLはProgateで学んだぐらいでしたが、その次に取り組む教材のレベル感として、ピッタリでしたね。

難しかったこと

テーブルの設計

本の後半では、発展的な内容として、テーブルの設計についても触れられていました。
ただし、その辺りは若干解説が手薄に感じた部分もあり、そもそも内容が難しいことも相まって、消化不良の感が否めません。

難しかった理由としましては、前半のSQL文中心でデータを操作するものに比べて、抽象度が高い内容だったからかと思います。
とりわけ、要件定義と概念設計は、抽象度が高いレイヤーのため、著者の意図を汲み取れているかについては自信がありません。

とは言え、そこまでの完璧な解説をこの本1冊だけに求めるのは、少し酷なのかとも思います。
オブジェクト指向プログラミングもそうですが、抽象度の高い内容はそれだけで1冊の本が書けるぐらいですしね。

また、後述しますが、テーブル設計に関しても論理設計については、内容は悪くなかったとも思います。
(なんだか上から目線な言い方で、ごめんなさい)

よかったところ

テキスト・ドリル・docoQLの三位一体でSQL学習をしっかりサポート

SQL文については、これでもか!と言わんばかりに叩き込んでくれる、非常に充実した内容でした。
テキストそのものはもちろん、豊富なドリルはなんと256問も!
さらには、docoQLというオリジナルSQLアプリのおかげで、ハンズオン方式で学習することも可能になっております。

これだけやれば、SQLはバッチリだ!

論理設計の解説が丁寧

一方で、テーブル設計についての解説は、全体的にはやや簡潔であった点は、否めないかと思います。
ただし、そんな中でも論理設計については、比較的丁寧に解説されていたように感じました。

恐らく、この本の後には、もう少し専門的なデータ設計に関する教材に進む人が多いでしょう。
その際に、テーブル設計の基本的な流れや、そのプロセスを部分的にでもある程度把握していることは、理解の土台となるのではないでしょうか。
その意味において、次のステップへの架け橋としての役割も果たしていると感じました。

わるかったところ

固定レイアウトである点(電子書籍

ほとんど不満はありませんが、電子書籍版に限って言えば、固定レイアウトだったところは唯一の不満が残る点でした。
固定レイアウトですと、検索はできませんから、電子書籍としての利点は正直乏しかったです。
まあ、この本に限ったことでもないですし、技術書あるあるですから、致し方ないとも言えますが。

文字レベルでの検索は無理だとしても、せめて目次から各章の最初のページに飛べたりするだけでも違うのになぁと感じたりもしました。

その他雑感など

全体として、SQLの初学者には適切な難易度で、優れた技術書だと感じました。
繰り返しになりますが、Progateの次に着手するのに適している内容ですので、そういった方には強く推せます。

ところで、本を使った学習の際におすすめの方法として、目次を確認しながら進めるというものがあります。

「夢をかなえる勉強法」著者:伊藤真より
先ほど、電子書籍に難癖をつけましたが、目次の確認のしやすさで言えば、電子書籍の方が上です。
特にデュアルモニターで、ブラウザで目次を開きながらKindleアプリで読むのは、悪くない方法だと思います。
わざわざ目次のコピーを取ったりする手間も省けますしね。
そんなわけで、電子書籍は悪いことばかりでもないということも添えておきます。

最後までお読み下さり、ありがとうございました!

【補足】
後半で引用した「夢をかなえる勉強法」、やけどしそうな熱量で熱い本なので、こちらもおすすめしておきます。 Kindle読み放題に入っている人はな、なんと!無料です!!

1週間の振り返り(2024/11/16~2024/11/22)

こんにちは、けいすけです。

この時期は、個人的にとても楽しみなものがあります。
それはM-1グランプリです。
3回戦の動画は粗方見ましたが、今年もめちゃめちゃ面白い!!

昔、2004年と2005年の予選に参加したことがあるのですが(2回戦敗退と1回戦敗退)、あの時に出て良かったなと思うのは、ステージからの視点を味わえたことですね。
あれは出てみないと、絶対に感じることができません。

合計で3回上がったステージのいずれもショボかった中でも、2004の2回戦、パナソニックセンターでのステージはダダ滑りすぎて、人生で最も長い3分間でした笑
だからこそ、あのステージでドッカンドッカン受けを取れる芸人さんのネタにはバカウケしますし、心底リスペクトするようにもなりました。

そんなわけで、この土日は結構ネタを見て過ごし、勉強はちょぼちょぼでしたとさw
そんなわけで、1週間を振り返ります。

プログラミングの学習時間

結果:41時間50分
(英語:7時間10分)

40時間は一つのメルクマールですので、それを超えられたことはよかったとは思います。
ただし、達成感もないですし、実際まだまだです。

40時間を最低ラインに置きたい理由は、IT業に転職した時のシミュレーションとして、その感覚を掴むことも意図しているからです。
今の本業よりも少ない程度の時間しか注ぎ込まないと、プログラミングは息抜きだから楽しく感じているだけの可能性なども出てきますしね。

本格的にプログラミングを始めて以来、辛いと思ったことがないことは、悪いことではないと思う一方で、まだまだ追い込みが足りないとも感じております。
結局、多少の痛みを覚えるぐらいやらないとダメなのでしょう。
No pain, No gain.
とはよく言ったものです。

学んだこと

SQL

週の前半は、スッキリわかるSQL入門によりSQL文を叩き、後半は達人に学ぶDB設計徹底指南書によりデータ設計を学びました。

SQLはともかく、データ設計はじっくり学ぶ必要がありそうです。
Pythonオブジェクト指向でもそうでしたが、データ設計は一段抽象度が上がり、狭義でのプログラミングとは異なる難しさがあると思います。

ただし、個人的には面白さも覚えるので、時間をかけてでも伸ばしていきたい分野でもありますね。

REST

実験的に、SQLと並行して、RESTの学習も始めました。
その理由は、分散学習の要素を取り入れるためです。

同じ時間を投入する場合、長い時間をかけて学習する方が、成果は上がるとのこと。
そんなわけで、対象を1個1個潰していくよりも、同時並行でやろうかなと。

ネックになる点としては、学習対象が散らばることで、何をやっているのかの把握が難しくなることだと思います。
その辺りは、復習も丁寧にすることでカバーしていくつもりです。

よかったこと

日報管理をベースにした復習

現在の日報は、報告のベースというよりは、学習内容から即座に作ったテスト問題群になっております。

小テストとして、振り返りに最適
これは後で振り返りたいなと感じたものを、スプレッドシートの一つのセルに、問題と答えを詰め込んでいく感じです。
こうしておくと、翌日や週末に、学習内容を振り返りやすいです。
こういったものは、作るのに時間がかかると思って避けていましたが、思ったほどはかかりません。

当初は、プログラミングは覚える必要はないということで、復習は軽視しておりました。
ですが、最近になって、覚えていることが頭の中に多い方が、理解が早まることに気づきました(今更感がありますがw)。

若い人とかだとそうでもないかも知れませんけど、この歳になると、記憶が頭の中からこぼれ落ちるのが本当に早い。
そもそも、こぼれ落ちる以前に、入ってすらいないのかも知れない。
そんなわけで、記憶に関しては、ちょいちょい工夫していきたいところです。

わるかったこと、改善すべき点

飲酒

今週の悪かったことは、これに尽きる。
これがなかったら、今週の学習時間は、もう少し伸ばせました。

というか、今週に限った話ではなくて、私の人生の中での悪癖の最たるものがこれですね。
大学に入ってすぐに応援団に入り、1年ゴミ2年奴隷3年ヒト4年神様のカーストで飲ませられる生活が始まって以来、アルコールが人生にあるのが当たり前になってしまっています。
ですが、どう見てもマイナスの方が多い。

今までは、なんだかんだ理由をつけて飲むことを正当化していましたが、今回のプログラミングへの挑戦への阻害要因以外の何者でもないので、ここできっぱりやめる事にしました。

さよなら、アルコール。

今週の読書

土日で読んだ1冊ないしは2冊の読書に関しての、簡単な雑感。
1冊は新たに読んだ本、もう1冊は過去に読んだ本の再読です。

※プログラミングに関する本とは限りません。

再読だけが創造的な読書術である

今週の新本。
最近、再読の価値を見直しているので、この本を読みました。
ですが、飲み屋のカウンターで、おっさんが若い人に管を巻いているような内容だったので、あんまり内容を覚えていません。
そもそも、"再読だけ"は言い過ぎw

とは言え、アイデアの大半が組み合わせであることを考えれば、再読の価値はもっと強調されてもいいようにも思います。
新たに読んだ本は、意識的に過去に読んだ本や知識とリンクさせるようにしたいとも感じました。

哲学的な何か、あと数学とか

再読。
フェルマーの定理に魅せられた数学者たちの物語。
何かに挑戦している人には、これはおすすめ。
自分はまだまだであると謙虚になれますし、そもそも人と比べることの無意味さも思い知らされます。

特にオイラーの話が面白い。
オイラーは数学にのめり込みすぎて、28歳の時に片目の視力を失っているのですが、その時に思ったことは「これでもっと数学にのめり込める!」という狂人っぷり笑
その後には、もう片方の視力も失ってしまい、両目とも見れなくなってしまうのですが、むしろそこからオイラーは数学者として真価を発揮して行ったのだとか。
全盲になって数学とか、意味わからん過ぎるw
まあ、こんな天才でかつ異才は、人類史の中でもそうはいないでしょう。

こういった霊長類ヒト科の生命体が存在した、もしくは現世でも存在するのかも知れないと思うと、人と比べることのアホ臭さを思い知らされます。
人生という、自分の手札を最大化するゲームを楽しんでいくだけですね。

その他雑感など

40時間はスタートライン

もう一冊、夢をかなえる勉強法という本も再読しました。
こちらも何かに挑戦(特に資格試験)している人にはおすすめ。

著者の伊藤真さんは、伊藤塾の塾長ですね。
法律関係の資格を目指している人であればお馴染みかと。

その伊藤真さんの、司法試験受験時代の話が書かれています。
オイラーではないですが、これも狂人っぷりが酷いw

勉強時間は1日20時間!?
20時間ってw
10時間でも凄いのに。

ただし、ここには学ぶべき点があるようには思いました。
それは、20時間を真似する必要はないとしても、「なぜそこまでして目指すのか?」ということ。
そして、翻って自分を見た時に、「本当にITエンジニアになりたいのか?」ということ。
そこはこだわらないといけないですし、それがないと、結局は肝心な時にブレるのでしょうね。

ちなみに、この本は勉強時間が1日20時間の話だけではなくて、全体としても熱量が高い。

自分の人生の目標は何か?
それはなぜか?
そのために何をしているのか?

そういった重要だけれども先送りにしがちなテーマを考える、いいきっかけにもなります。

最後までお読み下さり、ありがとうございました!

1週間の振り返り(2024/11/9~2024/11/15)

こんにちは、けいすけです。

来週末も三連休だ!
やーりー!べーりー!!

って思ってたら、違ったんですね…
ガーン。

23日は勤労感謝の日ですよ!?
なのに、月曜日は普通に平日って、国が勤労者に感謝している気持ちが全く見えないんですけど!?

まあ、言っても仕方ないですし、カリカリするのはベーコンだけにしといて、1週間を振り返りますかw

プログラミングの学習時間

結果:33時間50分
(英語:8時間30分)

先週の土日の体たらくっぷりを考えれば、30時間を割ってもおかしくなかったかも。

土日合わせて4時間はひでぇ
それを思えば、よくぞ踏みとどまった!といった感じです。
逆に言えば、平日に学習時間を稼ぐ方法論は自分なりにはできつつあるので、土日さえしっかりやれたら、40時間前後をベースにできそうです。

それを踏まえて、このブログを通じた週の振り返りの機会を、日曜日の夜に設けることにしました。
その方が、土日をいい緊張感を持って過ごせるような気がしますしね。

実際、この土日は、先週に比べると充実したものとなってよかったです!

学んだこと

Python(主にオブジェクト指向プログラミング)

引き続き、Pythonをやっておりました。
今週は、特にオブジェクト指向をテーマに学習しておりました。

HappinessChainの課題を通じて、オブジェクト指向の3大概念(継承、ポリモーフィズムカプセル化)を学び、実際にクラスの実装を行ったりもました。
Udemyの講座で聞いた話ですが、オブジェクト指向は慣れが必要とのこと。
課題で頭も手も動かす中で、確かにそれを痛感しました。
今までの基礎的な関数や条件分岐、繰り返し処理よりも、一段抽象度が上がりましたので、慣れるためには少し時間が必要そうですね。

ただ、仕組み自体はとても興味深いとも感じました。

具体と抽象を行ったり来たりするのは、思考力をつける上でも、いいトレーニングになるんじゃないかな?

Pythonのロードマップとしての学習は一区切り付きましたが、また復習もするつもりですし、何よりこの後にDjangoも控えております。
少しずつじわじわと理解を深めていきたいです。

よかったこと

週報・日報のスプレッドシートによる管理開始

週報や日報、特に週報が上手く連動していない感覚がありましたので、これをスプレッドシートにまとめることにしました。
例えば、週報はこんな感じ。

週報管理のスプレッドシート
工夫している点としては、今週挙げた改善点をその後の2週に渡ってモニタリングできる点ですね。
こうすることで、自分の改善すべき点を一定の期間、振り返りやすくしました。
1週間後にダメだったと感じたらイエローカード、2週間後もダメだったらレッドカードで、視覚的にも目立たせております。

課題克服を単発に終わらせないように、点から線へ、線から面へ展開していきたいですね。

わるかったこと、改善すべき点

学びに対する言語化の弱さ

恥ずかしながら、「今日は何を学んだか?」という問いに対して、うまく答えられないことが多いです。
これはなかなかに由々しき問題。

どうやら答えられないのには、2つの類型があるようです。

1つは、言語化能力の弱さに起因するもの。
これに対しては、夜にその日の学びをツイートすることで対処することにしました。
要するに、言語化する機会を繰り返すことで、言語化能力を高めていくことを狙います。

学んだことが思い出せない

そして、何を学んだか?という問いに答えられないもう1つの類型が、単純に忘れてしまっているというものです。

これに対しては、上で書いた通り、スプレッドシートに記録することで対処することにしました。

思ったよりは手間がかからない
こうすることで翌日に振り返りやすくもなりましたし、土日にザッと復習することも容易になりました。

間隔を空けて振り返ることは、分散学習の点から考えても悪くないと思いますので、こちらも引き続き継続していきます。

今週の読書

土日で1冊ないしは2冊読書することにしたので、その簡単な雑感。
1冊は新たに読んだ本、もう1冊は過去に読んだ本の再読です。
※プログラミングに関する本とは限りません。

デジタル脳クライシス

AIに対する警告本です。
正直途中までは流れも読めるし、聞いたことがあるような話も多かったですが、中盤から面白くなりましたね。
著者が脳科学者ということもあり、脳の活動に触れている箇所は、説得力がありました。

また、マルチタスクを推奨している点は、ベストセラーともなったスマホ脳とは真逆の主張でしたから、その点でも興味深かったですね。
ちなみに後述しますが、この本を読んだことは、今後の私の読書体験に、少なからずの影響を与えることになったのかも!?

具体と抽象

オブジェクト指向を学んだこともあり、週末に読み返してみたくなった本。

抽象化は自由度が高いという話が印象に残りました。
例えば、「幸せとは何か?」という抽象的な問いに対して、金だ!地位だ!名誉だ!といった地位財を挙げる人もいれば、家族や人間関係だったり健康といった非地位的な財産を挙げる人もいるでしょう。
要するに、抽象的レイヤーは個別的であり、その人の価値観がよく表れるということですね。

これからの時代は、具体のレイヤーでは生成AIには敵わないでしょうから、そこは思い切って生成AIに任せてしまう。
その上で、抽象的な階層における自身の哲学や生き方が重要な時代になっていくんじゃないかな。

その他雑感など

今日は久しぶりにリアルな書店に行ってきました。
そこで、この2冊を買いました。
4年前ぐらいから電子書籍を買う量が増えて、ここ1年は9割以上が電子書籍になりました。
ここ数ヶ月は本を買うのは控えめですが、基本的には月に10冊程度はKindle本を買う人間としても、嵩張らずにいつでも携帯できる電子書籍は、非常にありがたい存在です。

では、上の2冊は衝動買いなのかと言えば、決してそんなことはなくて、あくまでも戦略的購入です。

いい事づくめに思える電子書籍ですが、負の側面もありますからね。
その際たるものが記憶に残りにくいということです。
上で紹介したデジタル脳クライシスやスマホ脳にもその辺りの記載があるので、気になる方は読んでみて下さい。

加えて、検索性が低い!
パラパラ読みができないのは、かなりストレスが溜まります。

「いやいや、Kindle本ならキーワード検索できるんだから、検索性はあるでしょ!」 という人もいるかも知れませんが、本によっては固定レイアウト(イメージ的にはノーOCRのPDFみたいなもの)で検索できなかったりするのです。

そして、技術書に関していうと、正にこの固定レイアウトの本が存外多くて、電子書籍だと困ることが多いです。

  • 記憶に残りにくい。
  • 検索性が低い。

この2つの理由から、技術書については、当面は紙の本を買うことにしました。
そうそう、このnoteも非常に参考になりますので、よかったらお読み下さい。
電子書籍から紙の本へ回帰しつつある
まだ、パラっと目次プラスαを紐解いた程度なので何とも言えませんが、紙の技術書と電子書籍を比べた感想は、またそのうち書きたいと思います。

最後までお読み下さり、ありがとうございました!

1週間の振り返り(2024/11/2~2024/11/8)

こんにちは、けいすけです。

アメリカ大統領は、トランプに決まりましたね。
トランプになることがあるとしても僅差なのだろうと予想していましたが、思いの外、差が開きました。
これは、民衆の経済に対する不満の帰結でしょうか?
仮にそうだとすれば、先日の国内での総選挙における国民民主党の躍進にも、似た背景を感じますね

その一方で、支持する世代の厚みが、アメリカと日本では決定的に違うとも思いました。
アメリカは働く世代の不満が国のトップを決めてしまう程ですが、高齢化が加速する日本ではせいぜい野党の議席が少し増える程度。
ハリスが破れなかったガラスの天井と103万の壁は、どちらの方が厚いのかは興味深いところです。

前置きが長くなりました。
今週を振り返ります。

プログラミングの学習時間

結果:30時間30分
(英語:7時間20分)

1週あたりの時間としては過去最低。
いまいち時間を伸ばせなかった先週の流れを、断ち切ることはできませんでした。
英語と合わせて40時間を切ってしまったのも、英語学習を並行して開始して以来初めてのことでした。

とは言え、特段酷い状態ではないという認識です。
今週に限って言えば、実家に帰っていたこともありますし、想定の範囲内といったところですね。

また、ここ3日間は平日ながらも、心理的に無理することなく、よく時間を積むことができております。
たったの3日間では評価は難しいですが、平日にこれだけできたことも珍しいですし、こちらも面白い動きだと感じております。

緊張感は必要ですが、焦る状況ではないですので、来週以降で挽回していきます。

学んだこと

Python

今週も引き続きPythonの学習に取り組み、HappinessChainの課題を中心に進めました。

今週の特筆すべき点は、アウトプット重視の姿勢に加えて、エンジニア経験が豊富なryoさんからのレビューを受けたことです。
単なる独学では得られなかったであろう新しい視点や知見に触れる機会が普段以上に多く、非常に刺激的な学びとなりました。

例えば、初学者は条件分岐を、何も考えずにダラダラと長く書いてしまいがち(私だけか?)です。
ですが、それを自分には考えたこともなかったやり方で劇的にスッキリできることを教えて頂いた時は、震えるほどでした。
ryoさん、ありがとうございました!

現在は、オブジェクト指向をテーマとした課題に取り組んでおります。
Python学習の成否を分ける重要な分岐点でしょうから、この週末はここに一点集中して、一層の実りある時間にしたいと考えています。

よかったこと

平日のがんばり

上にも少し書いたことですが、ここ数日は非常によく学習時間を積めております。

英語も含めた時間
プログラミングのみの時間
心理的に負担がない形で積めているのが、いいですね。
いくつか要因はありそうですが、先日から使い始めたStudyplusも機能しているのだろうと思います。

これをベースにできれば、週40時間程度は学習時間を稼げるでしょうから、それが当たり前になるように続けていこうと思います。

実家へ

3連休で、実家の輪島に帰省しました。

地震によるものに加えて、洪水の被害も目の当たりにしました。
7月に帰った時には、両親は仮設住宅に入っておりましたが、9月の洪水による被害で、今は使えない状態です。
そんなわけで、現在は別のところに避難している状態です。

この復旧、そして復興に、自分らしい形で携わりたい。
自分がなんのためにプログラミングをやっているのかを、改めて考えさせられました。
ksk-it043.hatenablog.com

わるかったこと、改善すべき点

一人酒

一人酒はやらないと決めていましたが、ついつい手が伸びてしまいました・・・

誰かと飲む酒はアリとしていますが、その翌日などに、まあたまにはいいでしょ!みたいな軽い気持ちで飲んじゃいましたねぇ。
しかも、そうなると、2日連続とかでも罪悪感が薄くなってしまったり。

とりあえずは、飲まない!と決意するだけだとあまり意味がないので、習慣チェックカレンダーというアプリを使って防ぐことにしました。
弱い自分の意思だけではなかなか変えようがないので、そんな自分でもなんとかなるシステムを作るしかないですね。

Xとの距離感

今週は、何気なくX(旧Twitter)を開く頻度が多かった気がします。

意識的な理由はないのですが、まさにこの「なんとなく開いてしまう」という無意識の行動こそが、SNSの怖いところ。
この時間を学習に充てられたら、1日あたり20分から30分ぐらいは増やせるのではないだろうか?

一方で、SNSには光の部分もあります。
適切に活用すれば、よい習慣を形成・維持するための強力なツールにもなり得ますよね。

例えば、私は8月から始めた毎日のランニング(または室内ローラー台での練習)の継続に、Xが役立っています。
毎朝のツイートにランニング記録のスクショを添付していることが、(8月3日に1日だけサボりましたが)継続を可能にしている一因となっています。

そういった効用を最大化しつつ、負の側面を限りなくゼロに近づける使い方を、今一度考えて実践しようと思います。

その他雑感など

今週は、ゆうだいさんのツイートが炎上していましたね。
このツイートには、主に2つの論点があります。

1.プログラミングのコスパのよさ
2.3年で時給5000円という具体的な数字

第一の論点については、IT業界と他業界を比較する限りでは、相対的に当てはまる話かと思います。
スタートラインに着くために、学歴もいらないですし、意味不明に難しい資格を取る必要もない。
その上、そこから走り出した後の見返りも悪くない。
そんな業界、IT業界以外にはほぼないのではないでしょうか。

そして第二の論点は、総論的な第一の議論に対する各論です。
数字の程度はさておき、1が真であれば、2は方法次第だと認識しております。

個人的には、この話で最もネックとなるのは、時給5000円の達成以上に「高い熱量を3年間維持し続けること」だと見ています。
例えば、私は以前に、司法書士の資格を取るために4年半の年月を費やしたことがありますが、その間の熱量の乱高下は、当初想像していたものよりも遥かに大きかったです。

その原因の中でもとりわけ大きかったものの1つとして、真に誰とも繋がりのない独学だったことが挙げられます。
独学だろうがなんだろうが、気持ちさえあればなんとでもなると高をくくっていたわけですね。
ですが、上に書いた「一人では飲まないぞ!」と決心するだけではなにも変わらないのと似た話で、「たくさん勉強するぞ!」と思うだけでは、何も変わらなかったのでした。
少なくとも自分の場合はそうでした。

そんなわけで、一人でのプログラミング学習の継続は現実的ではないと判断しましたし、それがHappinessChainを選んだ理由の1つでもあります。
何かを変えたい、自分を試してみたいという思いの集まる場に自分の身を置くことを通じて、自分を変えてみたかったわけです。

今のところ、この選択は正しかったと確信していますし、3年後の自分もそう感じていられることを信じて、励むのみですね。
これからも改めてよろしくお願いします!

今週も長くなってしまいました笑
最後までお読み下さり、ありがとうございました!

Pythonのsysモジュールについて

sysモジュールとは?

sysは、Pythonの標準ライブラリに入っているモジュールです。
検索すると、ライブラリと言われていたり、一方ではモジュールと言われていたりして、よく分からなかったりします。

が!

Python公式ドキュメントによれば、モジュールとのこと。

困った時の公式ドキュメント
ここで念の為、フレームワークからモジュールまでの階層構造も、抑えておきましょう!

フレームワーク

ライブラリ

パッケージ

モジュール

sysモジュールはその名から想像できる通り、システムに関連するモジュールであり、Pythonプログラムの実行環境を操作・管理するための便利ツールです。
例えば、コマンドラインから引数を取得したり、エラーコードを指定してプログラムを終了したりすることができます。

そんなわけで今回は、このコマンドラインから引数を取得する方法と、プログラムを終了する方法を、具体的に解説致します。

コマンドラインからプログラムに引数を渡す

python3 calender.py -m 9
import sys
from datetime import datetime, timedelta

# コマンドライン引数のチェック
month = datetime.now().month

if len(sys.argv) >= 3:
    if sys.argv[1] == '-m':
        try:
            month = int(sys.argv[2])
            if month < 1 or month > 12:
                print(f"{month} is neither a month number (1..12) nor a name")
                exit(1)
        except ValueError:
            print(f"{month} is neither a month number (1..12) nor a name")
            exit(1)

これは何をやっているかと言いますと、コマンドラインからcalender.pyというプログラムを実行しております。
次の1行がコマンドラインからの操作になります。

python3 calender.py -m 9

ここでは、calender.pyの後ろに位置している、-m9が引数となります。
この引数をcalender.pyというプログラムに渡すために、sysモジュールが機能するといったイメージですね。

ちなみに、calender.pyがどのようなプログラムかと言いますと、カレンダーを表示するプログラムです。

このプログラムの核となる部分は、今回のテーマからは逸れるので解説しませんが、このプログラムの冒頭部に上記のコードを書くことで、引数を渡すことができるというわけです。

デフォでは現在の月が表示されるのですが、それのみならず、指定した月を表示できるようにするために、引数として月の値を渡す感じです。
つまり、-m 9という引数をcalender.pyというpythonプログラムに渡すことにより、9月のカレンダーを表示できるわけですね。

それでは引き続き、pythonプログラムの方を見ていきましょう。

ファイル名に注意

それでは、引数を渡されるpythonプログラムの方を見ていきましょう。

import sys
from datetime import datetime, timedelta

1行目のimport sysにより、標準ライブラリからsysモジュールをインポートしております。

ここで注意すべきは、pythonのファイル名ですね。
pythonの標準ライブラリの中には、モジュールとして、既に各.pyファイルが存在しております。
ライブラリを工具箱、モジュールを各工具としてイメージしてみましょう。

ライブラリ(工具箱)

パッケージ(箱の中の仕切り)

モジュール(各工具)

このモジュールとして様々な.pyファイルが、pythonをインストールした時点で、標準装備されております。
ですので、それらを使うために、別途インストールしたりする必要はありません。

一方で注意すべきなのは、これらと同名のファイル名をつけた場合、インポートしようとしても干渉してしまい、それができなくなってしまう点です。
例えば、標準ライブラリの中には、sysモジュールやcalenderモジュールも入っております。

今回で言えば、ファイル名がcalender.pyですので、sysモジュールをインポートはできますが、calenderモジュールは干渉してしまい、インポートできません。
今回は学習目的で、あえてcalender.pyというファイル名をつけておりますが、実務ではよくよくご注意下さい。
※ちなみに、ファイル名を変える以外の方法もありますので、意欲がある方はチャレンジしてみて下さい!

sysモジュールで渡される引数について

次に、コマンドラインから渡された引数が、pythonプログラムの中でどのように処理されるかを見ていきましょう。

if len(sys.argv) >= 3:

sys.argvは、コマンドラインから渡された引数を格納するリストです。
ですので、ここではlen関数により、リストのサイズを確認していることになりますね。

「ん?渡した引数は2つなのに、なぜ3なの?」
と思われたそこのあなた!鋭い!

面白いことに、このリストのサイズは実際に渡した引数の数より必ず1つ大きくなります。
その理由は、sys.argv[0]にプログラム名自体が格納されるためです。

ですので、今回で言えば、sys.argvというリストには、以下の3つの要素が格納されていることになります。

  • sys.argv[0]: 'calender.py'(プログラム名)
  • sys.argv[1]: '-m'(1番目の引数)
  • sys.argv[2]: '9'(2番目の引数)

つまり、ここではプログラム名に加えて-mと月の数字の3つが正しく渡されているかをチェックしているというわけです。

sysモジュールによるプログラムの終了

そして、1番目の引数が'-m'であることを確認します。

if sys.argv[1] == '-m':

この引数はあくまでも任意のものですので、適宜決めればOKです。
今回は月を渡しているので、monthのmとしております。
同じカレンダーでも、日を渡すのであれば、dayのdとなるでしょうね。

この後に、2番目の引数を整数に変換して妥当性をチェックします。

try:
    month = int(sys.argv[2])
    if month < 1 or month > 12:
        print(f"{month} is neither a month number (1..12) nor a name")
        exit(1)
except ValueError:
    print(f"{month} is neither a month number (1..12) nor a name")
    exit(1)

このコードでは2つのエラーケースを想定しています。

  1. 数値に変換できない場合(例:python3 calender.py -m abc)
  2. 1-12の範囲外の数値の場合(例:python3 calender.py -m 13)

どちらの場合もエラーメッセージを表示して、exit(1)でプログラムを終了します。
このexit(1)の「1」はエラーコードで、プログラムが正常終了でないことを示します。
ちなみに、正常なケースの場合は、exit(0)により終了することになります。

どういった形でプログラムが終了したかを把握できるようにすることは、デバッグのしやすさにもつながります。
今回のような簡単なケースでは大して必要性も感じられませんが、大規模なプログラムであれば、こうやってエラーの原因を辿りやすくすることは、一層重要になりそうですね。

まとめ

今回は主に以下の2つの機能を学びました:

  1. sys.argvによる引数の取得
  2. exit()による終了コードの設定

1番はプログラムをより柔軟に扱えるようになりますし、2番はデバッグのしやすさに繋がる点で、開発実務では欠かせない機能だと思います。
sysモジュールをうまく活用して、pythonの可能性を更に引き出していきましょう!

最後までお読み下さり、ありがとうございました!

1週間の振り返り(2024/10/26~2024/11/01)

こんにちは、けいすけです。

現在、実家のある輪島に向かうバスに乗っております。

こちらは金沢駅の鼓門。雨に打たれる姿も悪くないです。
昨日は仕事に集中していて、うっかり黙祷の時間が過ぎていたという体たらくな有様でした。
世間がどうこうではなくて、自分の中で風化しつつあるというのが怖いですね・・・
そんなわけで、輪島の今を目と心に刻むべく、向かっている次第です。

さてさて、前置きはそのぐらいにしまして、1週間の振り返りです。

プログラミングの学習時間

結果:33時間
(英語:8時間20分)

週の学習量としては過去最低でした・・・

が!

35時間以上を確保できた先週よりは、満足度は高いですね。

やるべきことはやりましたし、方向性の振り返りや修正もしました。
単に目の前のロードマップのみならず、もう少しメタ的な視点で自分を見れたことには、一定の意義があったかとも思います。
視界が近くて狭いのは、初心者ドライバーの視点がベテランに比べて近いのに似て、初学者あるあるなのかも知れませんね。
何にせよ、今までの自分に欠けていた意識や実践を思い知らさたことは、今後の学びの糧になることでしょう。

とは言え、1週間だけではあまり意味がないので、メタ的に自分を見ることは、今後も継続していきたいと思います。
この週報ブログも、その習慣づけに寄与することを期待しております。

学んだこと

Python

今週も引き続き、Pythonを学習しておりました。
先週までとの違いがあるとすれば、今週からはアウトプット寄りの学習がメインとなりました。

ただし、アウトプットと言いましても、データ型に応じた基礎的な問題を中心に行なっておりました。
ですので、例えばオブジェクト指向に基づくクラスを扱ったようなアウトプットは、まだ行なっておりません。

そんな訳で、来週はもう少し応用的な問題や、オブジェクト指向のアウトプットなどをやっていこうと思います。

よかったこと

学習方法の見直し

Happiness Chainに入会して3ヶ月が経過したこともあり、学習方法を見直しました。

仮に学習成果=学習の量*学習の質とした時に、量的な伸びしろは少ないものの、質的なそれはまだまだ多分に残されていると感じております。
それを踏まえて、質にアプローチして学習成果を上げたく、その方法の一つとして学習法の見直しを図った次第です。

具体的には、数冊の本を読んで、それを実践することにしました。
読んだ本は、科学的アプローチで勉強がとまらなくなる ストレスフリー勉強法科学的根拠に基づく最高の勉強法の2冊です。
加えて、昔読んだ最短の時間で最大の成果を手に入れる 超効率勉強法も、少しおさらいしました。

3冊ともそれぞれに興味深い内容でしたが、アクティブラーニングや分散学習を核とすること、そしてメタ認知やストレスフリーな学習の重要性が説かれている辺りは共通しておりました。
それぞれの細かい言及は省略しますが、いずれもわかりやすい上に、具体的な行動にも繋げやすい内容でした。
例えば、今週から始めたアプリを通じた学習記録の精緻化も、メタ認知の重要性を思い知らされてのものです。

学習法の情報ばかりを集めて肝心な学習をしないのは、論語読みの論語知らずの如く本末転倒でむしろ害悪ですが、ある程度は知っておいてもいいようには思います。
上の3冊について言えば、いずれも体系的にまとまっているので、おすすめです🎵

あと余談ですが、私は基本的には電子書籍推しです。
電子書籍は電子データなので、拡張性が高く、昨今の生成AIとの相性もいいです。

例えば、Kindle本だと、ハイライト(マーカーを引くこと)のまとめページがありますので、それをコピーしてまるっと生成AIにぶち込めば、対話的なやり取りができます。
要約なんかも簡単にできますね。
中でも、NotebookLMはめちゃめちゃ優秀で、複数のソースをぶち込んだ上で、解答のソースを示してもくれます。

NotebookLM、賢すぎて怖い
同じテーマの本を読んだ後に俯瞰的に捉えたり、しかも気になったら、そこを再度振り返ることもできて大変便利です。

ただし、電子書籍の中にはハイライトできないものもあるので、その点には注意が必要ですね。
特に、技術書はそういったものが多いので、買う前によくよく確認はするべきでしょう。
加えて、電子は紙よりも記憶には残りにくいです。
詳しくは、スマホ脳にも書いてあったことですし、実感としてもそれはあります。

ですが、それらのマイナス面を踏まえても、電子書籍の方がいいと思いますね。

Studyplusの導入

今週の月曜日から、Studyplusというアプリで、学習記録をとることにしました。
今までの3ヶ月は、かなりざっくりとした記録・・・というか記録らしい記録はしてきませんでした。

正確に言えば、日報、週報、月報などは記録に当たりますが、そもそもそれらを書く上での材料が、自分の曖昧な記憶ぐらいしかありませんでした。
そこで、学習の振り返りの精度も上げるべく、記録を残すことにしたという感じです。

Studyplusを導入したことによる効果は、自分が想像していた以上のものがありました。
先ず、振り返りの精度は、間違いなく上がります。

例えば、1週間を振り返る時に、日毎の時間も見れますし、それをカテゴリー別に見ることもできます。
ですので、1週間を通じて何時間学習したのか?その中で、プログラミングは何時間やったのか?それに対して英語は何時間やったのか?
それらを全体としても見れますし、日毎にもパッとグラフで見れるので、サボった日も一目瞭然です。

日毎の時間や教材別、カテゴリー別の時間がまるわかり!
さらには、タイムラインもありますから、サボった日の1日を振り返り、反省して改善に向けることもできますね。

そして、これは予想していなかったことですが、トータルの学習時間がアップします。

より具体的に言うと、学習時間を伸ばしたいという意識が強くなって、ちょっとしたスキマ時間にできることをやるようになり、マイクロ学習とも言うべき5分とか10分程度の学習時間が増えます。
イメージとしては、家計簿をつけると金銭的にケチになるのと同じように、学習記録をとると時間的にケチになるような感じです。

特に、英語の音読や瞬間英作文はマイクロ学習をやりやすいので、Studyplusによるモニタリングは、これからも自分の学習には必要不可欠なものとなりましたね。
無料ですので、気になる方はぜひお試し下さい🎵

わるかったこと、改善すべき点

休日にサボりがち

私の学習の特徴は、仕事がある平日は比較的しっかりやる一方で、休日はサボりがちな点だと思われます。
この3ヶ月を振り返ってみても、土日両日共に8時間を越えた週がどれだけあったことか?
そもそも、土日のいずれかだけでも8時間を越えた週すら、実は思いの外、少なかったのではないだろうか?
(学習記録を詳細に残していないと、こういうことが気になった時に振り返れない・・・!)

恐らくは、土日だということで、ダラダラと起きて、なんとなくスマホをいじり、パソコンを開くのは午後になってから・・・みたいな生活サイクルに原因がありそうです。
土日だからというのは全く理由になってないですよね、平日と同じように起きて、同じようなサイクルを回すべきでしょう。
家にいるとサボりがちなのであれば、図書館やカフェに行くのもありでしょうしね。
混んでいるのが嫌であれば、季節によっては、外でもパソコンをいじれる場所はいくらでもあります。
特に、田舎はそういうところが多いです。

上で、量については伸びしろが少ないと書きましたが、土日を中心とした休日に関して言えば、まだまだ伸ばせる余地はありそうです。
この余白を有効活用することで、こういった振り返りはもちろんですし、日頃なかなかできない復習をやることもできます。
読書をしたりするのも、間接的にはプログラミングにいい影響を与えそうですしね。

積ん読状態だけど、名著臭がハンパないw
予定がある土日はその予定にフルコミットするべきですが、予定のない土日をいかに有効活用できるかは、学習成果の大きな分岐点になることでしょう。

その他雑感など

T型キャリアのL型化やC型化

「AI時代に残る職種は何か?」という問いは個別的過ぎて、あまり意味がないような気がしますが、「AI時代に人間に求められる能力は何か?」という問いは、中長期的に見ても考えるに値するものだと思います。
私は、キャリアにおけるT型の価値が下がる分、相対的にC型やL型の価値が上がるのだろうと考えております。

T型、C型、L型というのは森岡毅さんが提唱されている概念であり、T・C・LはそれぞれThinking、Communication、Leadershipの略です。
例えば、T型であればコンサルや士業、C型であれば営業職、L型であれば経営者といった職業や職能が挙げられます。
(詳しくは、名著苦しかったときの話をしようかをお読み下さい!
TCLだけで言えば、このページでも、ざっくりとはわかります。
森岡毅氏が全就活生に送る、「働くこととは、キャリアとは何か?」 | 達人に学ぶキャリアと働き方 | ダイヤモンド・オンライン

至極単純な話で、人工知能は知能の一種ですから、それによる知的成果物の割合が増えていくのは間違いないでしょう。
ですので、T型のアウトプットが大きな要素を占める職業は、その影響を大きく受けるはずです。
ITエンジニアもどちらかといえばT型のキャリアですから、その増減の話はさておき、そのあり方が変わることは避けられません。
そもそも、そんな未来の話ではなくて現時点でも、GitHub CopilotやCursorによるコーディングは、当たり前になってきていますよね。

じゃあ、こうなった時に何が重要になるのかといえば、CやLの要素なのではないでしょうか。
人工知能の影響をダイレクトに受けるTに比べれば、CやLといった要素は、人工知能による影響は比較的少なく緩やかだと思われます。
また、イメージ的にも、Tは「何を言うのか?」というWhat?が問われることに対して、CやLは「誰が言うのか?」といったWho?、つまり属人性が問われることも多いです。

このことを考えた時に、ITエンジニアという仕事が消えるか残るかはともかく、そのあり方はCやLの要素が強くなる方向にシフトしていくのではないかと想像しております。
もちろん技術の理解は必要ですし、それが大前提なのは言うまでもないのですが、単なる技術ヲタでは厳しいのかなと。
まあ、ITエンジニアのなんたるかを全く知りもしない初学者の戯言ですけどね笑。

「コミュニケーション能力に長けた、リーダーシップに溢れるエンジニア」
そのそびえ立つ頂は雲よりも遥か高くにあり、今の自分の位置からは全く見えません。
それでも、理想を描きその下に目標を立てて、そこを目指して歩いていくことは、とても素敵でエキサイティングな営みです。
その道中での学びや発見を大切にしながら、また1週間を楽しく強く歩んで行こうと思います。

最後までお読み下さり、ありがとうございました!

プログラミングの旅:3ヶ月目の振り返り

こんにちは、けいすけです。

さ、さ、3度〜!?
最近はめっきり冷え込んできて、朝の気温が一桁台となる日も増えてきましたね。
自分が住んでいる所は、来週には一桁台前半になる日も出てくるようで、萎え萎えです・・・
周りでも体調を崩す方が増えてきましたので、皆さんも気をつけて下さいね!

それでは、HappinessChainへの入会3ヶ月目を、振り返ります。

10月(9/25~10/24)の学習時間

結果:139時間30分
(累計:453時間)

時間だけで言えば、過去3ヶ月の中では最低でした。
月間の数値目標である150時間(1週35時間*4週+10時間のイメージ)を下回ったことは、反省する必要がありますね。

ここ1ヶ月に関していえば、コンスタントに4、5時間できていた平日はまだしも、休日の学習時間がショボ過ぎました。
土日合わせても10時間に満たない週もあったりして、そりゃあこうなるわな!といったところです。

加えて、今更ですが、学習時間の管理がかなりザルでした。
特に、英語はどの程度やっているのかを、ほとんど把握できておらず・・・

そんなわけで、Studyplusというアプリで記録することにしました。
まだ使い始めて数日しか経っておりませんが、分かりやすくて使い勝手のいいUIで、非常に気に入っております。

また、学習して記録することがちょっとした快感ですので、隙間時間を無駄にすることも減ったように思います。
プログラミングは難しいにしても、英語の音読であれば、5分とか10分でも十分やれるんですよね。

このアプリがベストプラクティスかは分かりませんが、学習記録アプリを使ったことがない方は、一度使ってみるのもアリかも知れませんよ!

9月に取り組んだ学習

10月の進捗

  • Docker

必要以上に時間がかかってしまいました。

一番の反省点は、インプットにいたずらに時間をかけてしまったことですね。
詳しくは後述しますが、どこを切り捨てるかの見極めが甘かったのだと思います。

仮に時間をかけるとしても、先ずはアウトプットありきとすべきでしょう。

Pythonは、ただいま絶賛学習中ということもあって、現時点では学習プロセスに対して評価する材料に乏しいです。
ただ、少なくとも今の所は悪くないですし、Dockerでの反省も踏まえて、アウトプットを意識した学習ができていると思います。

この後は課題に向けて、オブジェクト指向の理解と実践が問われるようです。
そこでどのように振る舞えるかは、 Python学習での山場となりそうですね。

よかったこと

リアルイベントの参加

先日のオフ会に参加したことは、10月の一番のハイライトでした!

リアルに人と会うと、情報以外のものが手に入るんですよね。
情熱、憧れ、モチベーション、知識(≠情報)などなど。

私は極々平凡な人間なので、長期戦を己の意志力だけで突っ走ることは到底不可能。
転んで挫けそうになった時に、再び立ち上がるための活力をいただけたことには、感謝に堪えません。

それに何より、学びで未来を切り拓こうとする同志に会えたことが、本当に嬉しかった。
日本人は社会人になってから全然勉強しないと言われますし、一般的にはそうなのでしょう。
それを思えば、これだけ学ぼうとする人たちが集まっているというのは、ほとんど奇跡ですよ笑
今の環境に感謝し、学び続けて、社会に価値を与えるエンジニアになるっきゃない!

アウトプット意識の高まりと実践

緩やかな歩みではありますが、アウトプットの意識が高まってきました。

コードを書く時間をできる限り増やしたり、アウトプット課題はよくわからなかったところに再チャレンジしてみたり、インプット時でも復習時のトリガーとなる問題をメモしておいたり。
油断していると、またインプット過多に逆戻りするでしょうから、意識的にやっていかなければなりませんね。

なんでインプットに流れるかといえば、その方が楽だからでしょう。
インプットは考える必要がありませんしね。

読書は、他人にものを考えてもらうことである。本を読む我々は、他人の考えた過程を反復的にたどるにすぎない。 習字の練習をする生徒が、先生の鉛筆書きの線をペンでたどるようなものである。だから、読書の際にはものを考える苦労はほとんどない。(中略) 熟慮を重ねることによってのみ、読まれたものは、真に読者のものとなる。食物は食べることによってではなく、消化によって我々を養うのである。

この文章は、 ショウペンハウエルの「読書について」からの引用です。
ショウペンハウエルはこの本の中で、読書オンリーで思考停止することの危険性を訴えておりますが、これはインプット過多でアウトプットが乏しくなること全般にも通ずるような気がしております。

アウトプットの中で湧き起こる疑問と向き合いながら、投下した時間をしっかり血肉に変えていきたいものですね。 

悪かったこと・改善点

取捨選択が下手くそ

大して重要でもなさそうなところに、時間をかけ過ぎていたように思います。
時間は限られているのだから、いつまでも同じところで足踏みしている場合ではないですよね。
永遠は短い。

なぜ取捨選択ができないのかといえば、問いと解(仮説)の解像度が低いからでしょう。
「どこがわからないのか?」「何がわからないのか?」「なぜわからないのか?」「どうすればわかるのか?」
そういった問いから始まり、解との往復運動を繰り返しながら掘り下げていかないと、いつまで経ってもふわっとした「わからない」域を出られないでしょう。
「なんとなく」わからないから、ずるずると深みにハマり、やる必要が(少なくとも今は)なさそうなものにまで、「なんとなく」時間をかけてしまっている気がします。

やるにせよやらないにせよ、しっかり自分の頭で考えて、その理由づけをすべきですね。

プログラミング以外に触れなさ過ぎ問題

この3ヶ月間、余暇はプログラミングと多少の英語ぐらいしかやっていません。
勉強熱心なのはいいことだと思う一方で、バランスが悪すぎるような懸念があります。

とりわけ、読書ができていないことには、かなりストレスを覚えております。
本は私にとっては存外重要な存在なのだと、改めて気づかされました。

まあ、上でも触れた通りで、読書は単に人の思考をなぞるだけになる危険性もありますし、そもそもプログラミングが最優先事項であることには変わりはありません。
これらを踏まえて、週に3、4時間程度に留めた上で、過去に読んだことがある本を読み返してみようかと思います。
そのぐらいであれば、プログラミングへの影響も少ないでしょうし、一方で、精神的にプラスの効用もありそうですしね。

3ヶ月が経って

Happiness Chainに入会して以来、3ヶ月が経過しました。
この3ヶ月の節目をどのような精神状態で迎えられるかは、当初1つのポイントだと考えていました。

なぜなら、過去の年単位に及んだ資格試験などの長期戦では、この頃の感覚が、結局その後もずっと続いて行っていたからです。
具体的には、大学浪人時代に感じていた学びへのあの前向きな気持ちは、あれ以来感じることのないまま、30年近くの月日が流れました。

そういった意味では、プログラミングそのものへの好奇心や楽しさ、そしてプロフェッショナルへの渇望がとめどなく湧いてくる今回は、私のキャリアにおいては非常に稀なケースと言えそうです。
これは実に幸せなことであり、今後もこの良好な状態が続くことを期待して止みません。

このような充実した状態で四半期を終えられたのは、ひとえにHappiness Chainに入ったおかげに他なりません。
本当にありがとうございます。
今後とも、改めてよろしくお願いします。

ところで、今月末の転職や配置転換ラッシュは素晴らしかったですね!
希望を叶えられた皆さん、おめでとうございます。

自分も、いつか・・・

またもや、随分と長々と書いてしまいました。
最後までお読みくださり、ありがとうございました!