レガシーエンジニアのためのモダンエンジニアことはじめ

# お約束
* 本記事は ARISE analytics Advent Calendar 2022 の4日目の記事です
* 昨日は @mkkon  さんの [【論文紹介】SignGAN【CVPR 2022】](https://qiita.com/mkkon/items/6c626252a722d522f4bf)
* 明日は、@e_on さんの [元法学部生と読むLegal NLP](https://qiita.com/e_on/items/a06687e9f0cee9783e50#_reference-45696e6198e8802a3395)

# はじめに
初めましてこんにちは！元COBOLerだったものです。
今はモバイルエンジニアをやっております。

今回、業務では汎用機やCOBOL,レガシーな技術をメインに使っているけど、モダンな開発を学習してデータサイエンス系やWeb系にキャリアチェンジしたい！と思っている人に向けて環境の準備方法や、オススメの言語、学習方法、心構えについて紹介します。

はたしてQiitaみたいなナウでモダンな記事が多く、Web系の人が多そうなコミュニティでこの記事が意味あるのかちょっと心配ですが、化石言語のCOBOLなどをメインに扱っていてナウでモダンな開発言語の学習に手を付けるのに不安を覚えているレガシーエンジニアのために書きます。

# 僕たちレガシーエンジニアはモダンな言語が怖い
多くのレガシーエンジニアはモダンな技術に興味があってすでに何回か挑戦していると思う。けど、どこかで辛かったり、難しかったりといろんな理由があって多くの人は挫折を経験していると思う。何回か挫折すると恐怖が勝ってもうモダンエンジニアにはなれないと感じてしまい再度チャレンジできなくなっているのではないだろうか？

少し挫折を振り返って整理してみよう。
大きく挫折する理由は、環境の準備、学習言語の選定、学習方法、心構えじゃなかっただろうか？
* 環境の準備であれば、オープン系のコンソール操作だけでも大冒険だ。コマンドが多いし、ディレクトリとかいう概念でファイルが散らばっていて、汎用機より難しく感じる。
* 学習言語の選定であれば、何から学べばいいか分からないし、モダンな言語は変数が固定長じゃないし、いつでも宣言できる。代入もmove文なんて書かずに＝で終わるから難しく感じる。
* 学習方法であれば、僕たちの教材は下手したら９０年代のものもあってわかりにくいし、たまに間違っているものもあってそのイメージで学習をしようとするからやる気が削がれる。
* 心構えに至っては最悪だ。何十年も滅びると言われているCOBOLを使っているから自分も一緒に滅びるんじゃ無いかと心配している人さえいる。

多くのレガシーエンジニアは上記の内容に共感して貰えると思う。ではもう僕たちレガシーエンジニアはモダンエンジニアに成れないのだろうか？大丈夫！そんなことはないから安心して欲しい。今から僕と一緒に挫折を回避して、楽しくモダンな言語を学ぶ方法を考えよう！

# 一旦環境構築は置いて、コーディングだけに集中しよう。
さっきも話たけど、僕たちレガシーエンジニアには環境の構築や、オープン系のコンソール操作だけでも大冒険だ。苦労して環境を構築できた時の喜びもあるけど、苦労で挫折したら元も子もない。そんなことならいっそ、環境構築もコンソール操作もやらなければいい。

じゃあ、環境構築もコンソール操作も行わないでコーディングするにはどうするか？
ブラウザを使ってワンクリックでコーディングができるサービスを利用すればいい！
オススメのサイトを２つ紹介しようと思う。
paiza.io : https://paiza.io/ja
Colaboratory : https://colab.research.google.com/?hl=ja
2つともブラウザがあれば開発環境が準備できて、日本語に対応していて十分本格的なコーディングにも耐えられる。

これで環境構築の大冒険や大海原に出るなんて無謀なことをしないでもワンクリックで環境が手に入った！
次は、一番興味があるだろう学習言語の選定について話し合おう。

# Pythonから始めよう
僕たちレガシーエンジニアは何故かC言語に最初手を伸ばしことが多いけど、悪いことは言わない。やめておいた方がいい。C言語が悪いという話ではなくC言語はほぼ何でもできる最上級難易度の最強開発言語だと認識してもらいたい。そんな言語をレガシーな僕たちが扱うとすぐに僕たちの心が折れてしまう。そうなると変わらない僕たちのままだ。

じゃあ、どの言語がいいのか？僕はPythonをオススメする。異論がある人は多いと思う。RubyだったりGo、JavaScript,Rust,Javaと色々ある。けど、こだわりがなければPythonから始めよう！Pythonにできないことはほとんどないし最初の学習言語としても間違いはないと思う。

もしまだ迷っているなら聞いて欲しい。僕たちはレガシーエンジニアだ。僕たちではモダンな言語の良し悪しを判断するのは難しい。きっとwebサイトで言語の将来性を調べたり、年収を調べて決めて悩んでいるんだと思う。けど、考えてみて！将来性を調べても流行り廃りはどうなるかわからない。また、本当にその言語でお金を稼ぐ段階までいけるのだろうか？そこに囚われて学習に入れないのは本末転倒だと思う。なら深く考えずにPythonから始めよう！

安心して欲しいPythonを自由に扱えるようになっていれば自信がみなぎったエンジニアになってる。

すまんが、move文は＝になるし、変数は固定長でむしろ扱えなくなるが、許してほしい。これは回避できなかった。

# Pythonを動画で学ぼう
開発言語を学ぶ時に何を参考に学習を始めているだろうか？多くのレガシーエンジニアは本から入るイメージだと思うけどこれを辞めよう。僕も経験があるが分厚いオライリー本を買って学習を始めたはいいものの本棚に２年以上放置していたりする。なので本で学習するのは余程の勉強好きか忍耐がある人以外はやめておいた方がいいと思う。僕たちはすでにレガシーな90年代、下手したら80年代の教材で勉強をしていて心に傷を負っている。その傷を思い出しながら本で勉強するのは辛いだけだ。

さて、僕的に一番いい学習方法は動画だと思う。通勤中やゲームをやっている合間に聞き流すこともできるし、分からなければコメントなどで質問もできる。僕たちのことだ次は最適な動画選びで悩み始めると思うから、これも回避して、オススメのコンテンツを有料、無料に分けて紹介しよう。できれば有料の方を学習してもらいたいが、無料のものでも十分Pythonを理解できるのでお財布事情にあわせて選んで欲しい。

有料：現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
https://www.udemy.com/course/python-beginner/

無料：【完全版】この動画1本でPythonの基礎を習得！忙しい人のための速習コース（Python入門）
https://www.youtube.com/watch?v=yeZ3STy3k44

これで開発環境、開発言語、教材も揃った。いざモダンエンジニアへの道を駆け上りたくなるかもしれないが少し待って最後に心構えについて、認識合わせをしよう！

# レガシーエンジニアとモダンエンジニア
僕たちレガシーエンジニアはよくこう教わる。モダンな技術は流行り廃りがあってモダンエンジニアは常に学び続けなければいけない。申し訳ないが学び続けることは否定できない。けど、毎回０から学ぶわけではないことを認識してほしい。一度、モダンな技術を学べば次の技術が出てきてもベースが似ていることが多いので7,8割は似通っている部分があって残り2,3割を新しく学び続けることになる。

2,3割の繰り返し学習が苦しいと考える人もいるかもしれない。そんな人はまずこの記事で書いた方法でPythonの学習をしてみて欲しい。そこで少しでも楽しい、面白い、興味が湧くと感じたのならば心配いらない。その感覚が2,3割の繰り返し学習で何度も味わえるとようになるからだ。一度、この快感を知ってしまうと苦しいなんて考える暇はない。常に新しい技術を学びたいと考えるようになる。そして、何よりもこれで滅びると言われ続けられて自分も滅びるんじゃ無いかと悩む日々から抜けられる。やったね！！

やっと僕たちレガシーエンジニアがモダンエンジニアへ転身する際の挫折ポイントが全て回避できた。早速モダンエンジニアにチャレンジしてみよう！

# 終わりに
レガシーエンジニア時代によく同僚から相談された時に話していた内容を記事にしました。
新卒でレガシーな環境が配属先になって、同僚がレガシーなコーディングしか知らなくコーディングの楽しさや新しい技術を学ぶ興奮を知らないままでエンジニアを辞めていくのが悔しかった記憶があります。今、レガシーエンジニアをしている皆さんもすぐにエンジニアを辞めるのではなく、モダンなエンジニアを目指す道があると知ってもらえると嬉しいです。