「継続は力なり!日々のインプットを頑張るエンジニアは必ず成果を出せる!」
今の私は自信を持ってこの言葉を言えます。
しかし、インプットもアウトプットも継続するためにはモチベーションって大事ですよね。
私は迷走し続けながらも窮地に立たされていたので挫折せずになんとか継続できていましたが、
基本は成果を感じ辛いことを継続するのは難しいです。
そこで、
今回は知識ゼロから学習を始め、
迷走を続け今でもたまに迷走しがちな私が
システムエンジニアとして大規模プロジェクトに参画しながらフリーランスとしても活動している私が、
過去を振り返り同じような境遇の方が今の行動に自信を持てるように、
過去試した学習方法はどうだったのか
努力が今現在にどのように響いているか
どんな学習が役に立っているかをお届けします。
- 今のインプットは正しいのだろうか。
- 遠回りしているのではないだろうか。
- 個人やっていくのに必要な知識ってなんだろう。
- 企業に属してやっていくのに必要な知識ってなんだろう。
こんな悩みをもつ方には参考になるかと思います。
どんな勉強方法を試したの
基本的な独学系の手法は色々試しました。
一時的ですが、メンターもつけたこともあります。
ペアプログラミングでレビューし合うような方法も業界入ってから経験しました。
それぞれざっくり紹介していきます。
- 動画教材
- 書籍
- YOUTUBE
- ライブラリ研究
- レビュー
- プログラミング学習サイト
動画教材
代表的なサービスは
ドットインストール
1つの動画が短く、スキマ時間を活用した学習におすすめ。
メリット | デメリット |
---|---|
無料で見ることができる 1つの動画が短く、短時間で学べる 様々な技術を学べる | 有料会員限定動画が多い 月額制 再生速度調整が有料会員のみ 動画への質問と回答が有料会員のみ |
Udemy
学びたい講座を購入すれば時間制限なく学習できるのがおすすめ。環境構築なども講師が丁寧に教えてくれるので、自前で環境構築できるようになれる。
メリット | デメリット |
---|---|
体系的に学べる 動画に対する質問内容を確認できる 講座買い切り型 動画再生速度調整可能 | クーポン不使用だと高額 無料の教材はない |
Paiza
キャラクターが講座講師をしてくれるので、2次元好きにはおすすめ。スキルチェックで自分の現状を把握したり課題解決能力向上をしたりできるのがGOOD。
メリット | デメリット |
---|---|
スキルチェック機能が強大 プログラム動作環境が準備されているので手軽 キャラが講師をしてくれる | 有料会員限定動画が多い 月額制 再生速度調整が有料会員のみ |
書籍
エンジニア向けの書籍は極厚の参考書が多いです。
何冊も購入して持ち歩くのは非現実的ですし、家に書籍を置いておくのも邪魔になるので、
本当に気に入ったもの以外は電子書籍リーダーを活用して電子書籍を購入するのがおすすめです。
おすすめ電子書籍リーダーはこの3つ。
KINDLE
- 操作性Good
- 書籍が豊富
- 楽天経済圏SPU条件
- クーポン多数
- ポイント還元率高い
ブック(iOS標準搭載アプリ)
- 純正ならではの操作性
YOUTUBE
この方法はしっかり体系的に学びたいと思ったら学習方法候補から外れます。
YOUTUBEで教えている講師の方もいますが、結局Udemyや個人的な教材販売につながっているので、
YOUTUBEで学ぶというよりは講師のイメージを掴む場所程度に考えてたほうがいいでしょう。
ライブラリ研究
中級〜上級者向け学習方法です。
中級者は変数名やコメントの付け方、
上級者は綺麗なコードの書き方やメソッドのまとめ方など、
フェーズにあった学習法ができます。
もし、エンジニアとしてチームで仕事をする予定があるのであれば、
人が書いたコードを読み解く機会が増えるので回数を重ねておくことをおすすめします。
レビュー
レビューを学習方法の一つとするのも少しおかしな話ですが、
ライブラリ研究と同じように、
他人が書いたプログラムをよみ、自分が書くならどうするなど考える、
- 「プロジェクト内で類似箇所があるから記載レベルを揃えよう」
- 「AND文とNOT文をあわせると読みづらいからIF文で分けよう」
など
柔軟な発想や他人思いのプログラミングができるようになります。
プログラミング学習サイト・アプリ
Progate
勉強用にアプリを探しているならこれでいいかな。
継続しやすい仕組みや優しい感じのデザイン。(よくある黒背景緑文字みたいなプログラムのイメージとは真逆)
スライドをみて学習してすぐに学習内容を活用したクイズが出されるので知識として定着しやすいです。
何を勉強したの?
学習した内容を学習した順に並べました。
さっと見返しても迷走感がすごい・・・。
- Python
- HTML
- CSS
- Rust
- 綺麗なコードの書き方
- Go
- Javascript
- JAVA
- VBA
- フレームワーク
- Linux
- Docker
- 設計書作成方法
- テスト手法
- 業務整理方法
上に挙げた言語でそれぞれオススメの書籍・講座を紹介しておきます。
Python
HTML/CSS
Rust
Go
シリコンバレーで活躍されている酒井潤さんがFintech×Goを丁寧に教えてくれます。Pythonの講座でもお世話になりましたが、Goの講座もわかりやすく内容も豊富で文句の付け所が無いです。
Javascript
動画教材でフロントエンドを学ぶならこの人の講座を受けておけばいいのでは?と思います。
標準で使用できるメソッドなども裏でどのようなコードによって動いているのかなど、基本を徹底しておしえてくれて、その上で応用を紹介してくれています。
落ち着いた声でレクチャーを受けたい方にはこの講師の講座を激推しします。
JAVA
VBA
振り返って見て「失敗したな」と感じるところは
- いろんな言語に手を出していた
- 自分ですべてを作ろうとする
- 相談相手を見つけなかった
- 言語理解>業務理解だと持っていた
今振り返ってみて失敗したなと感じるところが結構あります。
その理由についても参考までに説明します。
いろいろな言語に手を出していた
私はプログラミング学習を始めた頃、色々な言語が使えることが市場価値と勘違いしていました。
市場価値を上げようと色々な言語に手を出し、文法や基本文法を覚えたのはいいのですが、
実際になにか作ると深い知識がなく、全体的に中途半端になっていました。
案件受注するには自身が無いからまた言語を学ぶという完全な迷走っぷり。
複数の言語が使用できるより、1つの言語をプログラミング極めていくほうが、
市場価値や活躍できる幅は増えます。
自分ですべてを作ろうとする
例えば日付に関する変換処理や計算処理を自分で作成使用とすると、
一見簡単そうに思えるのですが
- うるう年を考慮する必要がある
- サマータイムを考慮する必要がある
- タイムゾーンを考慮する必要がある
- 各月の日数は30、31か考慮する必要がある
など作っていく最中で色々問題が発生してきます。
こういったものを他の開発者の方が作ってくれて誰でも使えるようにしてくれている物があるのです。
こういう部分はうまく使って開発効率を上げないといつまでも機能の一部だけを開発することになり、
実際に開発したものをリリースし、人に触れてもらう機会がどんどん減ってしまいます。
開発は個人でも企業に所属しても「開発」↔「フィードバック」を繰り返します。
「作って納品してお終い」の仕事が無いわけではないですが、
個人でやるのであればお客様とは長く良い関係を維持したいものです。
なので「開発」↔「フィードバック」経験を増やすことはエンジニアとして成長するために大事です。
なので、とりあえず世に出し他の人に触れてもらう回数を増やすためにも、
すべて自分でまかなおうとしないことが大事です。
相談相手を見つけなかった
当時メンターなどもつけていましたが、画面共有して相談出来るような場は週1回のみの形式でした。
気軽に相談出来るようなメンターではなく、基本一人でGoogleや英語文献と格闘してました。
なので不具合沼にハマったら、半日無駄にするなんてことは日常茶飯事。
長時間プログラミング作業をしていると、知らず知らずにゲシュタルト崩壊的なものを起こしていることがあるので、
フレッシュな状態でエラー状況を見てくれる相手がいたらどれだけ無駄な時間を過ごさなくて済んだだろうと思います。
言語理解が業務理解より大事だと勘違いしていた
実際の業務に入って見ると、意外と独学で学んでいた内容でプログラムが書けてしまうことに気が付きます。
チーム開発が基本なので可読性を重要視しているため、複雑な処理や難しい記述などは基本的に避ける対象となります。
なので体系的に1つのプログラミング書籍を読破し、8割理解した頃には、
十分に現場レベルの言語スキルは身についているはずです。
仮に残り2割の理解していない部分に遭遇したとしても、調べながら理解すればいいだけなので、
言語を完璧にするのではなく、業務知識をいち早くキャッチアップ出来るような知識をつけておきましょう。
今やり直すなら何が最適解?
まずは自分がなぜプログラミングを学ぼうか、エンジニアを目指そうとしたのか
目標・目的の再確認することを推奨します!
私の場合お金を生み出すために学び始めたプログラミングなので、「お金を稼ぐ」が目的です。
であれば、
- 案件が多い(受注チャンスが多い)
- 幅広いジャンルに対応出来る(対応可能範囲が広い)
- 習得が比較的容易(学習時間が短くてすみ、開発に時間を使える)
が大事になってきます。
上記背景から私が現時点の知識を持ってやり直すなら
まず、Python、Javascriptの2言語に絞って学習します。
Pythonは学習コストが低く、ライブラリが豊富なため、活用できれば短時間で色々なものを開発できます。
Javascriptは最近ではフロントだけではなく、バックエンドまで担うことができ、万能言語になりつつあります。
Google App Script(スプレッドシート、ドキュメント、Gmailなどで使えるプログラミング言語)もJavascriptがベースです。フロントエンドで有名なフレームワークのNextJS、Reactなどのも使うのはJavascript(Typescript)です。
学習方法は書籍と動画教材(Udemy)で学習しながらメンターとしてChatGPTを活用します。
ある程度学んだら、
Pythonのバックエンド(Web業界推奨)、TypeScript(Web業界)の現場に入りシゴカれながら、
同じ言語を活用した副業をしてスキルアップをして収益最大化。
WEB専門にすることによって個人でも現場でも同じ知識を使い回せるようにして、仕事をするだけで現場でも個人開発でもスキルアップ出来る状況を作り出します。
ある程度出来るようになってからは、
Git>テスト手法>Docker>Linux>SQL>VBA>AWSの順で周辺知識を固め対応範囲の拡大を目指していくと思います。
最後に
チャットGPTをメンターにおすすめしていますが、
人間味を持ったメンターに教わりたいという人向けにメンターサービスやってます。
それ以外にも個人開発請け負っておりますので、興味ある方はぜひサービスからご確認ください。
コメント