【 Z世代 新人プログラマ🐣】何を考え、どのようにして技術を学んでいるのか

## 記事を書いた経緯

入社して6か月、本配属されて3ヵ月が経過しました！
**Z世代は一体何を考え、どのような行動をしているのか**ということを
配属後に出された課題が一区切りついたため、振り返りもかねて記事にしています。

「**私はこう考える！**」や「**私はこうした！**」といった<INS>**同世代の方の意見**</INS>

「**こうした方が良いよ**」といった<INS>**先達の方からのアドバイス**</INS>

そういったものがありましたら、<INS>ぜひコメントをお願いします！</INS>

また、この記事では課題達成のために学習した内容とその中で感じたことを書いています。
同じ**新人の方**や**新人育成を担当される方**の参考になれたらうれしいです！:relaxed:

## はじめに

### Z世代の特徴

そもそもZ世代の特徴としてはどんなものがあるのでしょうか？:thinking:
ざっと検索してみてまとめると...

一般に1990年代後半～2012年ごろに生まれた世代を指し、特徴は以下が挙げられます。

* 真のデジタルネイティブ(スマホやSNS)
    * 検索行動などを積極的に行う
* ワークライフバランスを大切にする
* 複数のキャリア育成(副業など)に積極的
* 多様性を認める
* 効率性を重視する
* ブランドよりも共感できるかを重視する
* 社会問題や環境問題への関心が高い
* 現実主義

「<INS>**スマホが当然のように存在している環境の中で育った**</INS>」ということですかね？
世界の経済状況や社会情勢も影響しているようにも感じます。

なんだか占いみたいでもありますね～:relaxed:

「**全てに完全同意！**」ではないですが、「**確かにな～**」と思う部分が多くありました！
Z世代の皆様はいかがでしょうか？

『学習の軌跡』の章からは**私:bust_in_silhouette:の行動と比較しつつ**記事を書き進めていきます！:thumbsup:

※:bust_in_silhouette:「名探偵コナン 犯人の犯沢さん」っぽいなと思って使ってみました！

### 背景
4月に入社後の新卒研修ではJavaやSQLなどの基本的(?)な内容を学習しました。
研修内容を復習し、いざ本配属！

そんな私に出された課題は「オープンデータを可視化する」というものでした...
次々に出てくる謎の単語達に若干のめまいすら覚えながら、必死にメモを取っていました:sweat_smile:
与えられた期間は１か月間...

**「やるしかない」**

そう考えた私は謎の単語達を学習するために様々なサイトやコンテンツを調べ始めたのでした...

### 私のスペック

学生時代は情報学科ではありました！
**しかし**、ネットワーク系の研究室所属のため、プログラミングは大学の授業を受けた程度:sweat:
新卒研修を受けて基礎的なところは思い出せたと思います(笑)

そのレベルですので、今後出てくる単語は**ほぼ全て初見**でした！

## 課題について

内容：オープンデータを可視化する
期間：１か月間
条件：FIWAREを利用する

初めてFIWAREを聞いた時はファイヤー🔥に聞こえました。
今はファイウェアと読んでいます。(合ってるはず...)

ところで、このFIWAREとは何なのでしょうか？

### FIWAREとは

* EUと民間企業が連携して開発を行った**オープンソースプラットフォーム**
* 現在、スマートシティやスーパーシティの**都市OS**として利用されている
* 多種多様なオープンデータの形式を統一し、**優れた事例を素早く横展開**することが可能

ということらしいです。
最近、耳にするスマートシティやスーパーシティと関連性が高いようです。

次の章からは私が学習をどう進めたのか、またその過程でどう感じたのかをお話していきます。

## 学習の軌跡

いざ学習を始めようにも何を学習すべきか分からなければ、進められません。
幸いなことに学習するべき項目は教えて頂いていました。以下の６項目です。
* GitとGitHub
* Docker
* dim
* Deno
* Typescript
* FIWARE

名前だけは聞いたことのあったGitとGitHubから学習を進めることにしました。

:bust_in_silhouette:：振り返ってみると書籍で学ぶという選択肢はなかったですね:thinking:

### GitとGitHub

#### 学習コンテンツとの出会い

まずは安直に「Github 学習」と検索していきました。:yum:

調べていくうちに[GitHubのテキスト](https://github.com/perl-entrance-org/Perl-Entrance-Textbook/blob/master/git.md)を発見しました！
そして、そこには[練習問題](https://learngitbranching.js.org/?locale=ja)のURLも載っていました！

**「これだ！」**

そう思い、このコンテンツを使って学習を進めました。

:bust_in_silhouette:：練習問題内の文章は無理やり日本語に翻訳したようなものです
　　 そうした言葉を面白く感じて選んだところもあるかもしれません:grin:

#### 学習の進め方

そもそもGitやGitHubとは？:thinking:状態の私はテキストにざっと目を通して、練習問題を開始！
その後、理解が難しいところをテキストで再度確認しつつ学習しました。

本来Gitはコマンド上で処理をするため、**何をしているかが見えづらい**ところがあります。
しかし、この練習問題では何が起こっているのかを**目で見える形**で示してくれるため、
**非常に理解がしやすかった**です！

この方法は自分に合っていたようで、想像よりもスムーズに理解をすることが出来ました！

このようにして、
* Gitは開発したものを**バージョン管理**しつつ、保存するために利用すること
* GitHubはGit同士を連携して**チームでの開発に利用**されていること
を学びました！

https://github.com/perl-entrance-org/Perl-Entrance-Textbook/blob/master/git.md

https://learngitbranching.js.org/?locale=ja

次にDockerの学習を進めていくことにしました！

### Docker

#### 学習コンテンツとの出会い

こちらも安直に「Docker 学習」と検索をしました。
そうして出てきた検索結果は有料学習コンテンツや書籍を勧めるものでした。
公式サイトを理解するにも**そもそもの知識が足りない...**

検索ワードを「Docker 入門」と変えて出てきたものが[さくらのナレッジ Docker入門(全6回)](https://knowledge.sakura.ad.jp/13265/)でした。

こちらはDockerとは何かから実際の使い方までを**体系立ててまとめてくれています**。

「いいサイトを見つけた！」

と学習を進めていきました。

:bust_in_silhouette:：息をするように書籍の選択肢を除外してましたね:sweat_smile:

#### 学習を進める上で発生した問題点

学習を進めていく中で、**指摘を受けた点**がありました。

それは『**いつ書かれた記事であるか**』という点です。
この記事は2018年に執筆されたものでした。

技術の進化(バージョンアップ)は非常に早く、４年は時間が経ちすぎているものでした。
この指摘を受けた時にはある程度は進めてしまっていたため、
[公式ドキュメント(日本語化プロジェクト)](https://docs.docker.jp/)を合わせて読み進めることでカバーしました。

ここからは毎回、**記事がいつ出たものかを常に確認する**ようになりました。

:bust_in_silhouette:：<INS>同じZ世代の方は日常で意識されてますか？</INS>
　　 SNSなどで**情報は常に最新のものであることに慣れている**からかも:thinking:

このようにして、
* Dockerはコンテナ技術を使い、**環境に依存せず**に開発を行えること
* **チームでの開発**や**本番と同じ環境でテスト**をしたい時に利用できること
を学びました！

https://knowledge.sakura.ad.jp/13265/

https://docs.docker.jp/

次にdimについて学習を進めていきました。

### dim

#### dimとは何か？:thinking:

同じく安直に「dim 学習」と検索するとVBAに関連したサイトが出てきます。
何も知らなかった私はVBAのdimを学習しました。

しかし、**ここで言っている「dim」はVBAとは全く関係がありません！**

ここでの「dim」はなんと、**私が所属しているチームで開発しているもの**でした！
知っておくべきことであったと感じています:sweat_smile:

そのため、[Qiita記事](https://qiita.com/ryo-ma/items/0505f7790ad2b12bcdc2)と[公式のGitHubリポジトリ](https://github.com/c-3lab/dim)のREADMEを読むことで学習をしました。

勘違いを乗り越え、
* dimは自身が取得した**データの取得元を管理**をしてくれること
* チーム内でdim.jsonファイルを共有することで**同じデータを一括ダウンロード**出来ること
* **オープンデータの検索機能**があること
を学びました！

後の[開発編]()(後日アップ予定)でもお伝えしますが、**個人で使っていてもとても便利**です！

:bust_in_silhouette:：こういうアピール系は苦手なのですが、<INS>Z世代の方はどうなんでしょう？</INS>
　　 SNS等で発信する機会も多いですし、案外大丈夫な人が多そう？:thinking:
　　 アピールと言いつつ本当に便利なのは確かです！(笑)

https://qiita.com/ryo-ma/items/0505f7790ad2b12bcdc2

https://github.com/c-3lab/dim

次はDenoについての学習を進めました！

### Deno

#### 学習コンテンツとの出会い

今回は最初から「Deno 入門」と検索しました！(Docker検索時の味をしめています:sunglasses:)
[エンジニアHub Deno入門](https://eh-career.com/engineerhub/entry/2022/06/17/093000)を発見し、学習を進めていくことになります。
このサイトは2022年6月にアップされたものということも確認済みです！

#### 学習の進め方

サイトを上から読み進めていき、学習しました！

##### Deno開発エピソード

Denoの開発者はRyan Dahl氏というNode.jsの開発者でもあります。
彼は2009年から2012年にNode.jsの開発に携わった後に開発から離れます。
そうして、2018年に再び姿を現し、「Node.jsに関する10の反省点」とともにDenoを発表しました。

個人的にはこのエピソードが好きです！:blush:

このように歴史的な背景を知っておくことで、

* **なぜ**開発されたのか
* **どういった需要**があるのか

を一緒に**楽しく**知ることが出来るため、良い方法だなと感じています。

:bust_in_silhouette:：ストーリーを大事にするのはZ世代の特徴らしいですね～

こうして
* DenoはJavascriptやTypescriptの**ランタイム環境**であること
* 歴史的な背景からNode.jsと比較されること(違いはまだよくわかっていません:sweat_smile:)
ということを学びました！

ついこの間にはnpmパッケージへの対応を発表し、早々に実装していました！
ボトルネックを次々に解消していく『Deno』に注目です！:wink:

ちなみに...
先ほどご紹介した『dim』はこの**Denoを使って開発を進めています**！

https://eh-career.com/engineerhub/entry/2022/06/17/093000

### Typescript

#### 学習コンテンツとの出会い

今回も同じく、「Typescript 入門」で検索をしました。
その結果、[Typescript入門 『サバイバルTypescript』](https://typescriptbook.jp)を見つけました。

有志のプログラマが集まって執筆されているサイトです！
そのため、実践的な内容となってはいますが、**初学者でもわかりやすく**書いてくれています！

また、コードレビューを受けてから教えて頂いたサイトとして[Typescript Deep Dive](https://typescript-jp.gitbook.io/deep-dive/)があります。

こちらはTypescriptを書く上での**ベストプラクティス**をまとめたサイトです！
すべて書き終わってから存在を知ったため、ほぼ全てのコードを書き直すということをしました:sob:

:bust_in_silhouette:：効率性を重視するZ世代の皆様は
　　 ある程度を**先に見てから**コーディングを始めてみてください！(笑)

こうして
* Typescriptの書き方(なんとなく)
* Typescriptには型があり、プログラムを動かす際に発生するエラーを先に対応しておくことが出来る
を学びました！

実際に書いてみてから再び見直すことも多かったです。

**「プログラムを学ぶには何かしらのプログラムを組んでみるといいよ」**

とてもよく聞くアドバイスですが、この課題を通して、身に染みて実感しました！

https://typescriptbook.jp/

https://typescript-jp.gitbook.io/deep-dive/

### FIWARE

#### 学習の進め方

[c-3lab FIWARE学習コンテンツ](https://github.com/c-3lab/fiware-learning-handson)を利用して学習をしました。

このコンテンツは**FIWAREの基本**を**実際に手を動かして**(ハンズオン形式で)学べます！
現在、全10回で構成されています。
1回ごとが短くまとまっていますので、サクサク進めることが出来ました！

こうして、
- データの形式としては**NGSIv2**が使われている
- FIWARE Orionの役割と使い方
を学ぶことが出来ました！

https://github.com/c-3lab/fiware-learning-handson

## まとめ

こうして学習を進めた私は悪戦苦闘しながら開発を進めていくのですが、
それはまた[別のお話](https://qiita.com/To-Ki-O/items/5fce5f3c6e4256e0e8df)
より**技術の詳細**を書こうと思いますので、ぜひ読んでいただけたらなと思います。

今回の学習を通じて

- 新しい技術をどうやって学べばよいのか
    - 記事やコンテンツの**更新日**に気を付ける
    - 実際に手を動かすことで**実践的な知識**とすることができる
    - 歴史的な背景を知ることで、その技術が**何を目的として開発されたか**を知ることができる
    - わからないときは**質問**する！

という今後の学習にも生かせる知識をも身に着けることが出来ました！

いかがだったでしょうか？

Z世代といっても他世代の皆様とそう変わらない思考だと思っています。
「**ここが違う！**」みたいなところがあれば、<u>ぜひコメントください！</u>:wink:
また、アドバイス等もお待ちしております。

最後まで読んでいただき、ありがとうございました。
皆様のお役に立てれれば幸いです。