【技術書紹介】達人に学ぶDB設計徹底指南書

www.shoeisha.co.jp

以下の記事でも触れましたが、2024年の読みたい技術書の中の本を1冊読みました。 2024年 読みたいエンジニア本リスト一覧 - ITエンジニア Umedaの雑記ブログ


この本はSQLの知識をある程度身につけた初心者が、DB設計を勉強するために学習をする本になります。 エンジニアの必読本の一つに挙げられる名著です。

敷居の高い本でもあり「自分にはまだ不適格なのでは?」と思ってためらっている人も多いのではないでしょうか?(自分はそうでした)

不安も多かったですがSQLの基本文法を身に着けた段階で、この本に取り組んでみました。 以下にその感想をまとめたいと思います。


読み方

所感になりますが、この本は「入門本」ではないため難しいです。

そして量が非常に多く、ボリュームがあるため読み方を間違えてしまうと、 各章の関係性がつかめずになんとなくで読み終わってしまい内容が頭の中に入ってこない可能性があります。 (実は自分がそうでした)

そのため、初級者がこの本を読む際にどのように読めばいいか?優先的に読むべき章はどの章かをまとめたいと思います。


私が考える優先的に読むべき箇所は以下になります。

1,2(2-1までで一旦OK),3,4,5,7章


このような本格的な難しい書籍を読む際にはまずその「書籍の軸」の箇所を重点的に理解することを最優先にするべきだと思っています。そのエッセンスが上記の章に記載されています。


ではこの書籍の軸とは何でしょうか?それは「論理設計」です。


  1. 要件定義
  2. 設計
  3. 開発(実装)
  4. テスト

上記のようなアプリケーション開発の工程の中で、論理設計はどこのフェーズのものであるか? そして論理設計はどのようなステップ(4つ)があるかをしっかり抑えながら読みましょう。

この大きな流れを掴むことで、自分が今どこの箇所の分野を勉強しているのかということが明確になります(立ち位置と出口がわかる)。


良かったところ

  • DB設計の原理原則を勉強できます

筆者はアプリケーション開発の中でデータベースの設計がいかに重要かというのを繰り返し強調します。

初心者は「実装(プログラミング)」に注目しがちですが、その前段階の「設計」によってアプリケーションの良し悪しがほぼすべて決まってしまう ということについても強調します。 また、正規化について「正規化と非正規化の問題」についても「非正規化は原則認めない」など一見すると「非常に主張の強い」印象を受けます。

私はまだまだ初心者のためわかりませんが、もし現場経験の多いベテランエンジニアが読んだ場合の感想は人によって変わって来る場合もあると思いますが初心者の間はこのような「原理原則」をハッキリと明示する本で勉強したほうが迷いがなくなると思っています。

常に迷ったときに戻ってくることができる本として機能するのではないでしょうか?


学んだこと

非常にボリュームのある本のためすべてを記述はできませんでしたが DB設計における重要なキーワードをまとめます。

  • エンティティ
  • 正規化
  • パフォーマンスと正規化の問題について
  • ER図(IE表記)
  • バッドノウハウ(非スカラ値・ダブルミーニング・単一参照テーブル・テーブル分割・不適切なキー・ダブルマスタ)

この用語をしっかりと理解して3,4章の章末問題に取り組んでみてください。 私は、この本の前に以下の「オレンジ本」に取り組んでいたため、「オレンジ本」の巻末の特訓ドリルのDB設計の箇所についても復習しました。

book.impress.co.jp


難しかったこと

  • SQL木構造を扱うことについて

  • ボイス-コッド正規形


SQL木構造を扱うことについての、学習の優先度は低いと思います。そして読み進めるのも難しいため一旦後回しで問題ないです。

この本では「オレンジ本」で解説がなかった第3正規形よりも先の正規形(ボイスコッド正規形や第4,5正規形)の説明があります。第4,5正規形は難しそうに見えますが、実は「当たり前」の概念だとわかります。 しかし、ボイス-コッド正規形については自分の中でうまく納得することができずこちらの記事や動画などを参考にしました。

【DB】第一正規形~第五正規形までを図解 | bbh

イラストで理解するデータベースの正規化


youtu.be

6月の学習振り返り

Rubyのロジックと向き合った6月の学習の振り返りになります。


6月の学習時間

結果:107時間

勉強のステータスの推移は以下になります。

  • 6月上旬-中旬:仕事の関係でほぼ毎日が終電で勉強時間をなかなか確保できない日々が続きました。

  • 6月中旬:仕事の疲れなのか、扁桃炎になってしまい約10日間寝込んでしまいました。(熱がなかなか下がらずに、病院を受診したら扁桃炎で抗生物質を飲んだら一気に身体が楽になりました。疲れですね。。。)

  • 6月後半:勉強の遅れを取り戻すために、猛チャージ。仕事も一段落したこともあり有給休暇も取得して猛勉強をしました。

ここまで継続して勉強をしていると自分の限界がわかってきたような気がしています。 6月上旬の段階で、あまりにも仕事が忙しすぎて完全に限界を超えていました。反省ですね。

身体は資本なので、やはり「限界値」を超えないところで身体をしっかりと休ませてあげることが大切だなと感じました。


6月に取り組んだ学習

  • Ruby基礎文法でロジックを作成する問題

  • SQL/DB分野の課題

Ruby課題を完了して、SQL/DBへと勉強内容はシフトしているのですが SQLの文法を一通り勉強して、本格的なDB設計に取り組む課題は初心者には非常に難しいと思います。


Ruby基礎文法を使用したロジック問題

この課題は、時間はかかりましたが、ヒントをもらいながらもなんとかほぼ自力で実装をすることができました。 久しぶりに「簡単なロジックを組み合わせて一つの動くプログラムを作成する」という課題に取り組んでJava,JavaScript(Typescript)のみの勉強の経験がなかった自分にとって、Rubyはある意味で非常に「独特」で「新鮮」に感じました。

Javaではあまり見かけないような機能が標準で搭載されていて非常に便利な印象を受けました。 まだまだ自分は初心者ですが、複数言語を経験すると言語の特徴や考え方の違いに驚く反面、学習していてとてもおもしろいです。 もっとRubyの学習を進めたらJavaScriptJavaとの比較をする記事をQiitaなどで投稿できたらと思っています。


SQL/DB分野の課題

現在、こちらに取り組んでいます。SQLの基本文法はもちろん、正規化・ER図などの設計フェーズでは欠かせない知識、そして実際のSNSのテーブルを設計していきます。SQLの基本文法は昨年も独学で何度も勉強したのですが、正規化などの勉強はしてこなかったこともあり、とても苦戦しています。

苦戦していますが、去年の自分と今の自分、比較すると着実に成長しています。まさか、自分がDB設計のテキストを読み、なんとか理解してテーブルを考えて正規化をしていくことができるなど考えてもいませんでした。

今後も勉強時間はしっかりと確保しつつ、しっかりとDB設計の知識を身に着けたいと思います。この分野をしっかりと学習するとポートフォリオはもちろん、上流工程にもしっかり対応できる能力がつくと考えています。


6月のQiita投稿履歴

Optparseの使い方


改善点

着実に自分の計画から進捗が遅れていることが気がかりです。本当は6月中にRESTAPIまで学習を完了させようと思っていましたが なかなか難しいですね。勉強量はとりあえず目標をクリアしているので、ひたすら淡々と勉強を続けていきたいなと思っています。

7月の目標

今月は有給休暇を大幅に取得する予定のため、前半は終日家にいることが多いです。 終日休みの日はかならず10Hの勉強をしていけば、200Hも達成できるのではないかと思っています。 ここで中だるみをせずに、さらに勉強をしていきたいと思います。

  • 勉強時間 150-200時間勉強

【技術書紹介】スッキリわかるSQL入門

book.impress.co.jp

以下の記事でも触れましたが、2024年の読みたい技術書の中の本を1冊読みました。 2024年 読みたいエンジニア本リスト一覧 - ITエンジニア Umedaの雑記ブログ


SQLはバックエンドエンジニアはもちろん、全エンジニアにとっての必須のスキルです。 なぜならばWebシステムはデータベース(DB)なしには成り立たないからです。 また、システムの障害の多くはDB関連のものが多く、過去に日本でも大きな会社や組織のシステムにおいてDBに関する障害が発生しています。

ANAのDB障害の裏に「危うい常態」、パッチは全て当てるべきなのか | 日経クロステック(xTECH)

大阪市システム障害の原因はデータベースに、管理領域が2系統とも破損 | 日経クロステック(xTECH)


エンジニアを目指す以上、自分の業務内容や専門分野関係なくDBに関する知識は必要になりますし、この分野は避けては通れないと思っています。 この本の内容を理解し、知識を習得すれば初級エンジニアとして十分すぎる知識が身につきます。 以下にて、この本の概要と挫折しないための取り組み方を紹介します。


良かったところ

  • 全くの初心者からSQLを勉強できる(すべての入門プログラマーにオススメできる)

  • 問題が256問付き

  • WEBサイト上でSQLを叩いて実行できるので環境構築の必要がない

この本は会話形式で、全くの初心者からSQLの文法を勉強できます。本当に初歩の初歩からSQLを勉強することができるため、全くの初心者でも安心して取り組むことができると思います。
SQLは、プログラミングと同じで、「手を動かす」ことが非常に重要です。手を動かして、SQLを入力することで自然と身体が文法を覚えていきます。初心者のころは「慣れる」という意味で、大量のSQLの問題に取り組んだほうがいいと思っています。
この本には、章末問題はもちろん、付録に「SQL特訓ドリル」があり大量の問題にふれることができます。解説は簡潔ですが、基本文法の分野については、自分の勉強をした章を振り返れば答えの導き方がわかるようなレベルの問題になっているので、ぜひ読むだけではなく、自分でSQLを書く練習を繰り返してください。この本の特典として、自分のPCに環境構築をせずにWebサイトにアクセスするだけでSQLが叩ける環境を整えてくれているので非常に取り組みやすいと思います。


学んだこと

基本文法についてはこの本でマスターできます。 この本で基礎をマスターすることができれば各DBMS別の方言(MySQL, OracleSQL, MariaDBなど)については都度学習して理解できる基礎が十分身につきます。

  • 4大命令(SELECT, UPDATE, DELETE, INSERT)

  • 絞り込み(WHERE)

  • 検索結果の加工(ORDER BY, DISTINCTなど)

  • 様々な演算子(+, -, *, ||, /)と場合分け(case)

  • グループ化(SUM, MAX, AVGなど)

  • サブクエリ(副問い合わせ)

  • テーブル結合(JOIN)

以上のように、基本文法だけでも非常にボリュームがあります。量が多いので、挫折してしまう可能性があるので、後ほどどのように取り組めば挫折率を下げることができるか自分なりにまとめてみたいと思います。


難しかったこと

  • テーブル設計(12章)

ポートフォリオ作成はもちろん、バックエンド・インフラ分野の中級以上のエンジニアになるためには、 必ずDB設計を経験する必要がありますが、この本の最終章では、その基礎を勉強することができます。

SQLは自由自在に操ることはできても、データベースを作成できない」という初級レベルを抜け出して中級にレベルアップしましょう。


データベース設計の大きな流れは以下になります。おそらく最大の難所は1~3ではないかと個人的に思っています。

<データベース設計の流れ>

  1. 要件の整理

  2. 概念設計

    • エンティティの作成
    • ER図の作成
  3. 論理設計
    • 多対多の分解
    • キー(Primary Key)の整理
    • 正規化
  4. 物理設計
    • 物理名・型・制約の決定
    • テーブル設計仕様書作成 & 実際にCREATE TABLEなどでDDLを実行

現実世界の事象をデータベースという形に落とし込む作業は初心者には非常にとっつきにくいです。 しかしながら、この手順を守ってしっかり思考法を身につけることができれば驚くことに 以下のようなもののテーブル設計も行うことができるようになります。

  • 書籍リスト
  • SNSのタイムライン
  • 職務経歴書
  • 不動産物件
  • 電車の路線図
  • バスや電車の時刻表

レーニングとしてDB設計の問題もありますが、 前述のように解説はシンプルなため、解答をみて自分の中でなぜそのように考えるのかというのを本を読み返しながら考える必要があります。


基本文法を学習している段階では復習するべき箇所を明確にすることができますが テーブル設計の章の問題の解説には「考え方のプロセス」の記述がほしいです。 最終的にどのような思考プロセスで解答に至るのか?ということが確認できないことが少し残念です。



また、この本はあくまで「入門」なため正規化の解説も最終形態の第5正規化までの解説はありません(第3正規化まで)。 DB設計者として現場で実務に取り組むためには、より深くDB設計について学習する必要があり、その他の本を参照する必要があります。


より深くDB設計を理解するため、そしてDB設計のアンチパターンについては 名著「達人に学ぶDB設計徹底指南書」にて学習したいと思います。


最後に個人的なこの本の取り組み方を紹介したいと思います。

book.impress.co.jp

  1. まず1-3章は必ずすべてやりましょう。SQLの基礎の基礎の分野になります。

  2. 4章(検索結果)についてはORDER BYまでをまずはおさえてください。

  3. 一旦、5章を飛ばして6章(集計とグループ化)に取り組みます。(さらっと読んで、練習問題に取り組んでください)

  4. 6章まで完了したら、一旦飛ばして12章(テーブルの設計)に取り組んでもいいと思っています。最終目標はDB設計なので、基礎文法を身に着けたこの段階で、ゴールをしっておくことは間違っていないと思います。12章には本格的には取り組まずに、まずは「眺める」というイメージで設計の流れを理解します。

  5. 7章(副問い合わせ)は問題演習に時間をかけます。副問い合わせのポイントはSQLの中にさらにSQLを書くということなので、そのポイントを理解したらひたすら問題に取り組みます。はじめはできないと思うので、答えを見ながら考え方を理解していきます。

  6. 8章(複数テーブルの結合)は、複雑に見えますが、Inner JoinとOuter Joinが理解できれば問題ありません。実務でも当たり前のように使用する分野になります。

  7. 本の全体の内容を理解したら、2周目に入ります。この時は、問題演習を中心にして勉強をします。付録の「特訓ドリル」や「章末問題」に取り組みながら足りない箇所は再度読んで復習をしていきます。問題をすべて解き終わったら、章を最初からざっと読んで「理解不足の用語」がないかどうかを確認します。

  8. 問題演習の解答が非常にシンプルなので、もしかしたら詰まる箇所があるかもしれません。その場合、一旦飛ばして、別の似たような問題に取り組んでください。問題は基礎といいつつも複雑なものが多いので、基礎文法が身体に馴染んできたあとに振り返ると理解できることが多いです。

5月の学習振り返り

仕事の残業と勉強の両立に悩んだ5月の振り返りになります。


5月の学習時間

結果:98.5時間

今月末、風邪をこじらせてしまって後半勉強時間が確保できなかったため100Hは達成できませんでした。 5月も4月同様、非常に残業が多く毎日深夜帰宅という流れが続いて平日の勉強時間が確保できなかったことが反省的になります。

長年の課題である平日の勉強時間をいかに確保するか、 5月からは平日1日だけ会社の近くのネットカフェやカプセルホテルに泊まることにしました。

収入が非常に少ないなかでの痛手にはなりますが、どうしてもこの「低賃金・サービス残業」の流れを断ち切るために なんとか勉強時間を確保しないといけないということで始めました。

ネットカフェに泊まる日は最低3H集中して勉強することができ、複雑なロジックの問題にも平日取り組む時間が確保できます。 それと同時に、通勤時間がほぼゼロのため、十分な睡眠をとって会社に出社できます。

プログラミングの勉強をこの1年半本気で取り組んでいて思うのが、 「とにかく圧倒的な勉強量の確保が必要だ」ということです。

下でも書きますが、知識のインプットだけでなく、アウトプットの勉強をするときには、大量の勉強時間が必要になります。


5月に取り組んだ学習

今月は以下の勉強をしました、

  • Ruby基礎文法

  • Ruby基礎文法でロジックを作成する問題(数問)


Ruby基礎文法

前のブログでも紹介した「プロを目指す人のためのRuby入門」を2週間かけて一通り勉強してRubyの文法を学びました。 ボリューミーな本で数回の通読でのマスターすることは難しいですが テストを書きながらテキストを読み進めるスタイルは、初心者のころからテストを意識しながら開発すると同時に なかなかテストについて解説した本が少ない中で、非常に勉強になりました。

https://engineer-umd.hatenablog.com/entry/2024/05/19/210240


Ruby基礎文法を使用したロジック問題

現在、こちらと格闘中です。なんとか、自分の中でロジックを考えてオリジナルロジックで取り組んでいるのですが 非常に難しいです。

しかしながらチンプンカンプンということではなく、時間をかければ確実に解ける問題だと思っています。 試行錯誤を繰り返しながらコードの修正やリファクタを行うため、大量の勉強時間を確保する必要があります。 ロジックを考えるときには、暗記の勉強と違うため、数時間まとまった時間を確保することが必要で週末以外でなかなか長時間の勉強時間を確保できないことが悔しいです。


5月のQiita投稿履歴

複数回の投稿目標でしたが5月は1件のみになります。


6月では後半に少しアウトプットできる時期がありそうなので、時間をとって複数回投稿できたらと思っています。

dockerでrailsの環境構築


改善点

6月の前半は 忙しい中25H/週を確保できないか、真剣に勉強時間の確保に向けて考えてみようと思います。 正直なところ6月前半-中旬でRuby, DB課題, RestAPIに取り組みたいです。

具体的な計画は以下になります。
週末:やはり週末が勉強時間の鍵になりますね。
※週末に20H程度の時間を確保することが自分の中で一番の優先事項になります。(こちらの方針は変更なし)

平日:毎日勉強することは、現状仕事の関係上難しいので、平日は集中して3日だけの勉強したいと思います。

6月の目標

  • 勉強時間 100時間勉強(25時間以上/週)

【技術書紹介】プロを目指す人のためのRuby入門

こちらの記事でも触れましたが、2024年の読みたい技術書の中の本を1冊読みました。 2024年 読みたいエンジニア本リスト一覧 - ITエンジニア Umedaの雑記ブログ


Rubyを勉強して間もないですが今回、この本を通読しましたので特徴をまとめたいと思います。

プロを目指す人のためのRuby入門

Rubyの文法本といえば「チェリー本」と言われるほどRuby学習者にはかかせない本となっているかと思います。 私の感想として特徴は4つあると思います。


(1)Rubyの基本文法についての十分すぎる解説

Ruby on Railsで有名な「Ruby」はオブジェクト指向言語です。 オブジェクト指向言語に備わっている以下のような基本文法はもちろんRubyも有しています。 この本にも十分すぎるほどの解説がされていて、入門本ではありますが他言語経験者にとっても「そんなの知ってるよ」で終わらないように Ruby的な書き方が非常に詳しく解説されています。

  • 変数、定数
  • 条件分岐
  • 比較演算子
  • ループ処理
  • 配列
  • 連想配列
  • 2次元配列
  • メソッド
  • クラス
  • 継承
  • 例外処理

また、通常のRuby基礎文法書では記述がない or 浅めの下記分野についても大きく紙面をさいて解説がなされています。

  • モジュール
  • yieldとProc
  • パターンマッチ

上記は、ある程度 Rubyに慣れた人や Rubyは初めてだがオブジェクト指向言語に慣れ大規模開発などの経験がある他言語経験者向けだなと個人的に感じました。


Javaのような静的な型付け言語を大学や仕事などで勉強した方にとってRubyは「自由」で「記述の仕方が短くて独特?」のように感じませんか? 私は少なくともそう感じました。

Rubyと他の言語を比較した基本文法の違いについては多くの記事で解説されています。 https://qiita.com/yamazaki_teppei/items/252d81e87d586d19fd68


チェリー本を読んで、Rubyの配列操作の高機能に驚きました。 6月にかけてJavaRubyの基礎文法比較のQiitaの記事を掲載できたらと現在構想中です。


(2)Rubyらしさを勉強できる

他の文法書にはないと思われるこの本の特徴が「Rubyらしさを勉強&体験できる」という点です。 Rubyの基礎文法を本格的に勉強してわかったことは、とにかくRubyは非常に高機能ということです。 使いこなすことができれば便利な機能が「標準機能」で備わっています。

しかし、それと同時にRubyは人によって様々な書き方ができてしまいます。 書き方に迷った時 どのような書き方が「標準」かについて日本語の書籍で常に振り返ることができる一冊だと感じました。


(3)例題あり&テスト駆動開発(TDD)の基礎が勉強できる

この本は章の最初に問題が提示され、その問題を解く過程で必要な知識が記述してあるという形式を取っています。 また、問題を解く際もテストコードを作成してから、実際にコードやクラスを作成して問題に取り組みます。

テスト駆動開発は初めて勉強しましたが、「プロを目指す」という題名の通りより現場感覚を意識してのことだと思われます。

Rubyの場合、実際の開発現場ではテストにRSpecが使用されることが多いと思いますが、今回は標準のMinitestを使用しています。 JavaJunitと比較すると初心者にも文章を読んだだけで簡単に実装をすることができるためぜひ実際にコードを書きかながら練習問題に取り組んでほしいと思いました。 いわゆる「本の記述通りに実装したが自分のMacでは動かない」という書籍特有の問題はないと思います。


プログラミング言語習得の正攻法は「自分でコードを書く」ことにあります。 例題を通して知識を身につけると同時に、テスト駆動開発(TDD)の基本的な概念を勉強しながら課題に取り組みましょう。


この本の練習問題を一通り終えて、Rubyの雰囲気や感触を掴むことができたらぜひ筆者のブログにある問題にも取り組んでほしいです。 自分はまだ挑戦していませんが、複数問に挑戦して自分の解答と見比べてみたいと思います。 https://blog.jnito.com/entry/2019/05/03/121235


(4)アプリケーション開発&フレームワークRuby on Rails)を扱うことを前提とした解説の章がしっかりと設けられている

実際にフレームワークの勉強や開発現場に入った場合 とても重要な分野でも基本書の中では解説が薄く、 「実際の実務の中で習得」といったような分野、実はプログラミングにおいては非常に多いです。 この本ではこの分野についても詳細な記述とサンプルの記載があるため、知識の整理はもちろん経験者にとても学ぶ箇所があると思います。

しかしながら、この分野は、実際に開発をしてみないと、イメージがつかみにくく ポートフォリオを含めて まだ自分でRailsアプリケーションを開発した経験がない入門者には非常に難しい分野ではないかと思います。 私も正直難しかったです。


この分野については、今後アプリケーションを実際に作成する勉強の中で複数回見直して復習をしてほしいと思います。 自分も今後何度も復習をしていこうと思います。


最後にこの本の取り組み方について個人的なまとめをしたいと思います。

本書は純粋な「入門本」ではありません。また、膨大な文法をただ解説しただけの「辞書本」とも違います。 そのため自分の学習段階や習熟度によって様々な使用方法ができると感じています。

  1. Rubyの基礎学習者が基礎文法を勉強したあとざっと通読してRubyの雰囲気を掴む

  2. 他言語の習得者がRubyの雰囲気を掴むために通読をして、他言語とRubyの違いを把握するための本

  3. すでにRuby on Railsの経験者が知識の整理と補強のために関連トピックスを集中的に読む

初心者にありがちな勉強の仕方ですが完璧に最初からこの本のすべてを理解する必要はありません。 プログラミング言語は「理解」と同時に「慣れ」の要素も大きく、 自分でアプリケーションを作る過程で悩んで調べながらコードを書き、レビューを受け、他の人のコードを読むという繰り返しで習得していくものです。 そのため、この本の内容を暗記するまで繰り返し通読するような勉強は絶対にNGです。

Ruby入門者でこの本を手に取る読者のほとんどはRuby on Railsを使用してWebアプリやAPIを作成することが目標だと思います。 Rubyの雰囲気がつかめたと思ったらぜひフレームワークの勉強に取り掛かってください。


注意) この本は初心者と中級レベル以上のプロエンジニアになるための「架け橋」となるような存在の本のため プログラミングの初心者には向きません。 「入門本」のように「変数って何?」「引数って何?」「配列とは?」などの基本概念は記述されておりません。(記述はされていますが、初心者向けの記述ではありません) そのため上記のようなプログラミングの基本用語にまだ不安がある方はプロゲートなどを利用して最低限の基礎文法を理解してからこの本に戻ってくることをおすすめします。


プログラミング言語は、言語によって難易度がありますが、Rubyについては大手プログラミングスクールが学習第一言語にするなど学習者も多く、インターネット上を検索すれば他の言語と比べて非常に様々なサンプルやトライ&エラーを見ることができます。また、日本のRubyコミュニティは非常に活発でインターネット上で様々な知見が共有されています。勉強方法を間違わず正しい努力をして、あきらめなければ必ずRuby on RailsでWebアプリを作ることができます。ぜひ入門エンジニアの方 あきらめずに頑張ってください。もちろん、私も人にアドバイスできるような立場ではないですが、自分のペースで学習を進めていき、その得た知見を今後もこのブログやQiitaでアウトプットしていきたいと思います。


一緒に頑張りましょう。

4月の学習振り返り

前月の振り返りになります。


4月の学習時間

結果:95時間

さっそくですが、「1ヶ月100時間以上という目標」を立てたにもかかわらず、4月は達成することができませんでした。 達成できなった理由は「平日の後半の疲労→勉強時間ゼロが続いた」ためです。

4月は日本全体?がそうなのか、本業の方の仕事が鬼のように忙しく、 常に終電帰宅→深夜から勉強スタートという流れが多かったです。

そのため、平日の木・金になってしまうと、自分の中で体力がなくなってしまい、 帰宅後ベットに直行して気がついたら朝ということが多く、後悔の日々が続きました。

しかしながら、3月と違う感覚もありました。

それは帰宅してMacに向かわずに朝を迎えることが「ショック・後悔」と感じるようになり 自分の中で完全に勉強が「歯磨き」と同じような習慣になったと感じられた月でもありました。


4月に取り組んだ学習

今月は以下の勉強をしました、詳細を述べると量が多くなってしまうので 特に自分の中で成長を感じることができた箇所をまとめたいと思います。

  • Git/Githubの基礎

  • HTML/CSSの基礎

  • 静的なウェブサイトの公開

  • Dockerを使ったバックエンドの環境構築


(1)GUIを使わないGit操作

今まで、自分はgit操作は基本的にSourcetreeを通して行ってきました。 批判されがちなGUIですが、初心者にもとっつきやすく操作がわかりやすいというメリットも多くあります。 実際に通常のコードのpullやpush, mergeなどだけであれば問題ないと思います。

しかし、Sourcetreeには欠点もあります。

その代替として「Github Desktop」(https://desktop.github.com)を使用している人も多いと思います。 しかし4月時間をとり、生のGit操作を勉強しました。 現在は、iTerm2を使用してほとんどを生のGitで操作しています。

やはり、コマンドでのGit操作になれてしまうと、その方が「圧倒的に操作が早い」です。 その結果、より多くの時間をコーディングに当てることができます。

また、同時にGit操作をターミナルで出来るようになると「カッコイイ」です。

単調で地味なプログラミングという学習の中で「カッコイイ」とか「オシャレ」は 自分のテンションを維持するためにかかせない感覚となっています。

YoutubeやUdemy、その他個人ブログなどGit操作については大量に情報がありますので ぜひ生のGit操作にチャレンジしてほしいと思います。

このサイトではSourceTreeでのGit操作とコンソールでのGit操作の2つが紹介されています。 GUIとコマンドを比較して勉強できることがとてもいいなと感じています。

backlog.com


(2)Dockerを使った開発環境の構築

モダンなバックエンド・インフラエンジニアの入口といっても過言ではない技術である「Docker」という技術。 コーディングだけで精一杯という言い訳をして今まで全く勉強をしてきませんでした。 実際に、Dockerの本を読んでもチンプンカンプンですし、YoutubeでもDockerを解説するYoutubeはたくさんありますが全く自分の中で理解をすることができませんでした。

抵抗感の強かったDockerですが、このサイトを通して勉強をして自分の中で「革命」といっていいほどDocker基礎の理解が深まりました。 datawokagaku.com

このUdemy講座を受講して、このサイトに書いてあることが理解することができればDockerの基礎はバッチリです。 自分はこのUdemy講座の基礎パートとRubyの環境構築については5回は視聴しました。

Dockerの概念の理解から Docker Images・Docker Container・Docker Compose そして、Docker Volumeまでしっかりと自分の言葉で説明をすることができて コマンドも一通り身体が覚えるまで繰り返すことができれば絶対に誰でもDockerの基礎を身につけることができます。

ポートフォリオを作成するときも、プロジェクトをDocker化しているかどうかで大手プログラミングスクールの生徒と差をつけることができますし、エンジニア転職をした後は確実に勉強しないといけない技術になるため、ある程度の勉強時間を確保することが必要だと考えています。

私はこの講座での勉強のお陰で、独力だけで調べながら以下の環境構築もすることができました。


4月のQiita投稿履歴

なかなか4月は投稿することができなかったですが、 以下になります。
5月は最低3つは記事の投稿をしたいです。

github pagesの使い方


改善点

4月までの最低目標は25H/週でしたが、5月は30H/週にできないかトライしてみようと思います。

具体的な計画は以下になります。
週末:やはり週末が勉強時間の鍵になりますね。
※週末に20H程度の時間を確保することが自分の中で一番の優先事項になります。

平日:今までは休憩日を1日もうけていましたが、 逆に毎日少しだけでもいいのでMacに向かうという方針で勉強を進めてみたいと思います。
十分な勉強時間を確保できなかったとしても2H程度毎日コンスタントに勉強時間を確保できれば30H/週は見えてきます。
特に平日の場合は、疲れがあるため「ただ」本を読んだり、 動画を視聴したりするような勉強だと寝落ちをしてしまう可能性があるため、「記事を書いたり」「アウトプット」するなどの勉強に取り組みたいと思います。

5月の目標

  • Qiita 最低3つ投稿

  • 勉強時間 120-30時間勉強(30時間以上/週)

3月の学習振り返り

HapinessChainに入会して1ヶ月が経ちました。 1ヶ月ごとに学習の振り返りをしたいと思います。

3月の学習時間

結果:123時間(週6日勉強)

もともと昨年も一昨年も1年で750-800時間を勉強していました。 平日と休日の勉強時間のバランスや体調などを考慮して1ヶ月100時間以上という目標を立てました。

週の中で1日(水or木)は休みを取るようにして、継続して勉強できるようにしています。 どうしても帰りが深夜になってしまうため平日は2-3時間しか勉強できないため 週末にまとまった時間をとって勉強しています。

所感

今回スクールに入って、自分の中での勉強の迷いがやっと消えたと考えています。 数年間 現役のエンジニアの友達や、インターネットなどの情報をもとに自分なりに勉強計画を立てて勉強をしてきましたが、どうしても「成長をしている」という実感を得ることができませんでした。

有名なYouTubeTwitterの投稿、Amazonで高評価のレビューの本、 有名なUdemy講座をやっても全く自分の実力が上がっていると感じることができませんでした。

モダンな技術スタックを使用したポートフォリオ作成など夢のまた夢と感じていました。

エンジニアの友達からは「向いていない」「脳みそが違う」などと言われ諦めかけていました。 でも、どうしてもプログラミングができるようになりたくて、どうしてもモダンな技術スタックのエンジニアになりたくて 先が見えない中、日々ひたすら自己流の勉強をしていました。

しかし、今回スクールに入りカリキュラムに具体的に取り組む中で、 今までの自分に何が足りなく、自分の勉強で何が悪かったか、ようやくわかりました。

  • 勉強する技術の順番が悪い

  • 勉強している教材が悪い

自分に足りなかったのは勉強時間ではない、 今まで自分が使っていた教材、そして勉強する技術の順番が悪かったということがわかりました。

やみくもに自分が身につけたい技術のYoutubeやUdemyを見てチュートリアルを繰り返すようなことや、 LinuxやWebに関する技術の基礎もないにもかかわらずいきなりクラウドのことや、新しい技術のチュートリアルに取り組んでも消化不良になってしまうということがわかりました。

つまり、今までの自分は、努力の仕方や方向性が間違っていたのです。

カリキュラムは、モダンスタックにあふれていて、自分が身につけたい技術を「適切な学習順序」で勉強することができます。 この「適切な順番で学ぶ」ということがとても大切で、「新しい技術はレガシー技術の上に成り立っている」ということを決して忘れてはいけないということです。これはYahooの黒帯のエンジニアの方もおっしゃっているとても大切な考え方になります。

言い換えると、多くの卒業生をモダンなWeb系企業に送り出してきたスクールだからこそ、再現性が高く、信頼性のある学習順序を私達に提供してくれていると信じています。

メルカリやCyber Agent、DMM、YahooJapan、TeamLab、MoneyForwardなどでは当たり前に使用されているモダンな技術を実践的かつ日本語で勉強できるスクールは大学のような研究機関を除いて世界に1-2箇所しかないのではないでしょうか。

私は、このスクールに巡り会えたことを本当に感謝しています。 道は見えました。あとはひたすら努力をするだけです。

3月のQiita

当初からQiitaへは1週間に1回の投稿をすることを目標にしています。

3月の投稿は以下になります。 コンピュータサイエンスの基礎についてが多くなります。 4月からは、より技術的な内容を週1ペースで投稿をしていきたいと思います。

基礎用語まとめ(1)

基礎用語まとめ(2)

Vim操作まとめ(入門)

Linux基礎(重要コマンド一覧)(1)

Linux基礎(重要コマンド一覧)(2)

改善点

もう少し勉強できると感じています。現在は平日1日を休みにしていますが、その日に3-4H勉強をするか、平日の勉強時間をあと1Hだけでも増やせないか4月はよりストイックに取り組んでいきたいと思っています。

4月の目標

  • Qiita 週1投稿

  • 勉強時間 120時間以上(30時間/週)