見出し画像

プログラミング知識0の「情弱人間」がエンジニアへ転職したエピソード【後編:成長編】

以下は前編の内容となっております。
もし前編をまだ読まれていない、という方は前編を読んでから後編を読んでいただいた方が、話の脈略がわかります。

事務所から再スタート

事務所へ戻って初日、ここからまた0からスタートとなる。
初めてここに来た時からいたWebデザイナーさんがいて、

「PCはこちら使ってください」

とのことで案内された。
そのWebデザイナーさんも、HPのリニューアルがひと段落ついたらしく、その後は「プログラマ」として、私と同じ現場に配属予定とのことで、VB6の学習をしていたという。
かなり寡黙な方で、事務所には私とその方の二人だけだったのだが、話すことはほとんどなかった。
話しかけるのも基本的に私からだった。

さっそくPCを開いて、メールの設定をし、Webデザイナーさんから、
これからの学習内容についてメールを転送してもらった。
そこには、初日にここで出会ったプログラマさんからのメールで、

今日からVB6の学習をしていきます。
まずはじめに、電卓アプリを実装していただきます。
どんなやり方でも構いません。
自分で調べて出てきたソースをコピペしても問題ないので、
まずは動くものを完成させてください。

実装が完了した段階で報告をお願いします。
その後、実装したソースを1行1行日本語の説明を記載していってもらいます。

こんな内容だったと思う。
基本的な部分のみWebデザイナーさんに聞いて、そこからは自分でググって出てきた内容をコピペして実装を続けていった。
その時VBについても全く無知だったが、とにかく必死にもがいた。

VBを参考にしたサイト:

私が学習したVBの基礎はこのサイトから始まった。
というよりVBAなら数多く存在するがVB6や.NET関連の情報ならほぼここに網羅されていると言っても過言ではないと思っている。
もちろん他にもサイトは参考にして実装したが、辞書代わりにして、わからなければここを見るという感じで進めていった。

実装自体は2日で完成した。

進捗報告をして、その内容について返信してくださる方は、

まさか、こんなに早く実装できるとは思わなかったです‼︎
驚きました。
そしたら、明日からは書いたソースの説明をどんな形でも構わないので、記載して見てください。

転職して初めて褒められた気がした。
今までコードを見ること自体嫌になっていたが、
全ての意味がわからないにしても、こうして動くものを作れたのも初めてで感動した。

そして、ここからコードの日本語説明に入った。
当時の私のやり方は、
・ソースコードをExcelにコピペ
・コードの上に1行ずつ行挿入して

そこに説明を書いた。

ここからここまでが一つのIf文、For文という形でセルの色分けをし、Callされた関数はすぐ隣のセルにコードを貼り付けし、ここに飛ぶということをすぐ視覚で捉えられるようにした。

おおよそ、説明自体は合っているとのことだったので、次の課題「カレンダーアプリ」の作成に着手した。

メールをくれる方が簡単な設計を記載してくれるので、それに沿って実装を始めた。

カレンダーはググっても基本的に丸々使えるようなソースコードはなく、パーツを組み合わせて完成まで持っていく、今思えば初心者にはかなり実践的な内容だったと思う。

これにはかなりつまずいた。
完成には1週間以上かかったと思う。(最初のJavaに比べたらマシなのかもしれないが…)
わからない点は質問して、

「こういう流れで実装すべきなんだとは思いますが、(流れ書きを簡単に書いて)ここをこう記述して、こうして見たのですが、
なかなか上手くいきません。ヒント頂けないでしょうか?」


など、質問には私なりに最新の注意を払って質問するようにした。

仮説を立て
➡︎実践したこと
 現状はこういう挙動をする
➡︎上手くいかなかったこと
 想定した動きにならない点を伝える
➡︎その内容を踏まえて質問する
こうして慎重に質問するように、最大限の気を使ってコミュニケーションを取ることで、具体例を示して順序立てて解説をいただけた。

質問の仕方が悪く、マウンティングされたおかげで、この点はかなり気を使うようになった。
(はじめに担当してもらった上司に言われたことは、正直感謝はしてないが、言いたいことはわかった気がした。質問力を上げることで、質問する側もされる側も時間短縮になり、円滑なコミュニケーションとなり、お互いにプラスでしかない。)

質問の仕方についは、相手を間違えると相当痛い目を見ることになるので、
ぜひこの記事を参考に細心の注意を払っていただければと思う。
もちろん初めからうまく質問しようと思わなくてよいと思う。

実践して現状どうなのか➡エラーが出ていいればどんなエラーメッセージなのか➡エラーメッセージを調べて、この点を確認していたが解決しなかった。

こういったことさえ守れれば、問題ないと思う。
それでもマウンティングしてくる奴や、まともに回答してくれないのなら、そいつに聞くのは諦めて別の人に聞くか、stack overflowオンラインサロンなどを活用して聞いてみよう。

Qiitaに質問の仕方だったり、ググり方なんかも、今は投稿されています。
当時の私はこういった記事を見つけることすら出来なかったのですが
以下参考までに。

またエンジニア界隈でほぼ知らない人はいないだろうと思いますが、
雑食系エンジニアの勝又さんのこちらの動画でも同じようなことをおっしゃっています。

このカレンダーアプリ作成で学んだ基礎的なことは、
・デバッグの有効性
➡実際にコードを1行ずつ動かすことで、
 想定した動きになっているか?
 変数の中身は想定した値が入っているか?
・ウォッチ式の有効性
➡変数の中身をウォッチ式で記憶しておき、この変数の今の値は「○○」というのをtextなどにコピペして視覚で確認できるようにしたり
・アルゴリズムの考え方
➡実際にtextに一つ一つの流れを書き起こして、その書き起こした手順を元にググりながらコードに書き起こす(当時はそこまでスムーズに出来なかったが、一つ一つの流れをtextに書き起こすことは今でも実践している)
など。

本当に基礎的なことではあると思うが、私の基礎力はここで磨かれたと思っている。

・コードをググりながら自分で何かを作ってみること
・作ったものがちゃんと動く、ということを確認できること
これらを実践できたことで、全くわからなかったところから、一歩前進できたと思った。

業務でくそ忙しい中、わざわざ私の面倒をみてくれたプログラマさんには、
感謝しかありません。

こうしてなんとか電卓アプリとカレンダーアプリを完成させ、日本語の説明までが終わった後はSQLの実践に移った。

こちらについても、メールをくれるプログラマさんが、課題を作成してくれ、その課題に沿ってSQLplusで抽出結果が正しいかどうか?を報告していくということをした。

ここにきて、SQLを実際に「書く」という行為をすることで、基礎的なことではあるにしろ、理解力が以前の何倍になった気がする。
一度現場に出て多少なりとも、あのくそ長いSQLコードを見ていたせいか、
INNER JOIN, OUTER JOIN, GROUP BY, COUNT, 副問い合わせ などの
基本的な課題はみるみるわかるようになっていった。

ちなみに私が参考にしたSQL本は以下です。
非常に初心者でもわかりやすく書かれていて、実践的な内容でもあるので、
SQLわからない、という方はこちらはお勧めします。

再び現場へ

事務所に戻って1ヶ月とちょっとしたその後、再び現場へ配属することが決まった。
今度は開発の現場で実務に入ることになる。
正直、最初の数ヶ月はあのトラウマがあるせいで、毎日職場に向かうのが怖かった。

・またあの地獄を味わうのか
・わからなかったらどうしよう

そいういった思いが拭いきれなかった。
しかし、しばらくはトラウマが抜けきらなかったのだが、ここに勤務している自社の方たちは、皆いい人ばかりで非常に救われた。

初めは基礎的な仕様を理解するために、テストから始まった。
改修を行った箇所のテストの実施だ。

正直最初は仕様の理解は全く出来なかったが、ひたすらテストを行った。
ひとつの改修でこんなにもテストを実施するのはものなんだな、と後々わかった。

2週間が過ぎようとしたとき、その現場の上司に呼び出され以下のように告げられた。

実は今、保守運用を担当しているAさんが来月いっぱいで退職することになるんです。
カイリーーさんにはAさんが退職した後に、そこに入ってもらう為、その間引継ぎをしていただくことになります。

そもそも一度死んだ身だ。
保守運用でも今出来ることを全力で取り組もうと、ここから引継ぎがはじまった。

保守運用はAさんとBさんの二人体制で行っている。
Bさんは保守運用になる前は開発も経験していた理論派でめちゃくちゃ頭がいいと感じた。一見かなりぶっきら棒で最初は、「この人とやっていくのか…」と不安に思ったが、基本的にAさんの説明内容がわかりづらいところは都度都度説明してくれるめちゃくちゃ頭の良い切れ者だった。

悪口を言うわけではないのだが、Aさんは感覚でやってきた人間のようで、基本的に作業に対する理由づけがなく、なぜこれをやるのか?の説明もない為、非常にわかりづらい。が、
それを隣で聞いているBさんが都度補足してくれるわけだ。
これには非常に助かった。

そんなこんなで、あっという間に引継ぎ期間も過ぎ、いよいよ保守運用担当としての業務が始まった。

保守運用は開発されたアプリケーションの本番環境のデータを扱うので非常に慎重さが求められる。
主にDBの管理を行うことになるので、マスタデータのINSERT、UPDATE、DELETEは得に神経をすり減らして実施しなければいけない。

保守運用側では頻繁に問い合わせ対応や調査依頼が入るため、スピード感とコミュニケーション能力が求められる。
データ調査にはSQLの知識が必須だし、エラー調査にはSQLの他
①仕様書の確認
②ソースを追う(デバッグする)
③調査結果を調査依頼元に報告に行き、
結果➡理由づけ➡どうするべきか、を伝えに行く必要がある。

はっきり言って初めの半年くらいまでは使いものにならなかった。
仕様がわからない為、質問されている意味もわからない。
ソースをデバッグ実行してみるものの、プログラムコードが大規模すぎて、もはや途中から何を追っているのかわからなくなる始末。
ソースコードが読めないうちは本当に苦労した。

本格的な学習取り組みを開始

初めの1~2か月を経験して、このままではマズイと思い、どうやったら全体像を把握出来るようになるか?を考え効率的な学習方法はないかを模索した。(もちろんこのときも独学の学習は続けていたのだが、どうしても非効率だった。)

この時、Classの概念をよく理解しておらず、VB6や.NETに関する内容をいろいろ調べてみたのだが、どれもしっくりくるものがなくて絶望していたのだが、ここでCRUDという言葉を知ることになる。
CRUDとは、
・Create:生成する
・Read:参照する
・Update:更新する
・Delete:削除する
この4つの頭文字を取ってCRUDというのだ。
こんなことも知らなかったのか?と言われそうだが、すいません。
当時の私はこんなことも知りませんでした…

一番手っ取り早く学ぶ為には、依然もSchooという動画学習をしていたが、説明解説を受けるという点では勉強になるのだが、実際に手を動かして実践する、というとそうでもない気がしたので、他の動画学習ができるところを探していたところ、

Udemyというオンライン学習プラットフォームを見つけ、さっそく手当たり次第探した。

そこで、たにぐちまことさんが講師をしている
PHP+MySQL Webサーバーサイドプログラミング入門に出会うことになる。

(なぜVB.NETなど、VB系の動画じゃないの?と思うかもしれないが、単純にVB系の動画で良いと思えるものがなかったからだ。レビューを見てみてもあまり高評価のものが存在せず、この時はやむなく別の言語を選んだ。
VBAについては良動画があるので、こちらは後ほどご紹介したいと思う。)


ちなみに、たにぐちまことさんはTwitterでも様々つぶやいていますが、

YouTubeでもWeb系の学習動画を数多くだされているので、参考にしてみると良いかと思います。

UdemyのPHP+MySQLを選んだ理由はまず、
・CRUDが学べる
・Twitter風掲示板アプリを作成する、ということ自体が楽しそうだった

などの理由からだ。

動画の内容はぜひとも自身で購入いただいて見ていただければ納得かとは思いますが、
ローカルの開発環境の構築から始まり、PHPの基礎的な構文、その後実践的なアプリ実装という構成で学習していくが、
DB操作する参照、挿入、更新、削除の他、簡単なバリデーションチェック機能、なども実装するので、より実践的な内容であり、システム構築とはこういった構想で出来上がっているんだな、というのを肌で感じることが出来た。

私はこのCRUDに加え、Classの概念を理解したかったため、この掲示板アプリを一通り動画の通り作成し終えた後、DB接続部分をClass化にするカスタマイズを施した。以下は実際に作成したログイン画面~書き込み投稿画面
にキャプチャである。

画像1

画像2

内容確認

登録完了

画像5

画像8

外見はいたってシンプルなものに留め、プログラムの記述に時間をかけていきたかったため、このようなものを作成した。
(ちなみに最後のDEATH NOTEというのは遊び心で作ったので、あまり気にしないでいただきい…要はDEATH NOTEのweb版のような感じにしただけで、名前を書いたらその人間は心臓麻痺で…というだけである。もちろんフィクション)
これを実装するのに非常に時間がかかったが主にQiitaの記事を参考に基本的に自走して作成するべきだと思い、時間はかかったが、自分なりにカスタマイズすることができた。
当時参考にさせていただいたPHPClass化に関する記事は以下です。

おそらく、最初は全く概念が理解できなかった為、この記事を何十回、何百回と読み返しは実装して、その繰り返し繰り返しでやっと、Class化を実現できたと思う。この@7968さんは、そのほかにはQiitaの良質な記事を投稿しているし、
noteでもPHPの記事を投稿しているので、PHPを学習しているという方はぜひ参考にした方が良いかと思う。

その他には、

上記の記事はオブジェクト指向について非常にわかりやすく説明されている記事だし、また、以下は完全に自分の宣伝にはなるのですが、

オブジェクト指向をポケモンを使って考えたという、私のQiitaもありますので、ご興味のある方はぜひ見ていただければと思う。

こうして、私は邪道なやり方ではあるが、
・Classってこう使うのか
・$Getや$Postってこういうことか
・$sessionと$cookieってこういうことか
・SQLをうまく活用して、表示上限を決めているんだな
・掲示板に書き込みされた内容はDBに登録され、そこからDBに登録されている内容SQLで引っ張ってきて、一つ一つループさせてweb上に表示
させているんだ。

ということをなんとなく理解(この時の理解度は100%のうちの30%程度だったと思うが)した。
要するにこれをVBに当てはめて、頭の中を整理し、これを表示させているのは、このClassメソッドに問いあわせて、そこからDB接続してデータ抽出した結果を表示させている、やDBへの書き込み処理を行ってるのか、という解釈をするようにした。

こういった学習を毎日毎日繰り返し、(大体仕事が終わって、家事をし、落ち着いて出来るのが21:30ぐらいからで、そこから23:30ぐらいまで妻の顔色を伺いながらも毎日学習した)現場では嫌でもユーザーからの質問があるので、仕様書の確認、ソースを確認、デバッグ操作を繰り返し実践していった。

また、保守運用には事務的なめんどくさい作業もあるので、そういった作業を何とか自動化できないかと考え、VBAを使って、自動化させることに着手もした。
これの目的は、
・VBの学習につながる
・自動化による無駄な作業を減らして、余った時間の有効活用できる
(仕様書を読み込んだり、気になったソースを読んだりすることができる)

ここでもudemyの学習が役に立つ。
この学習を実施したことでVBAマクロの偉大さにも気づかされることになる
VBAに興味がある方はぜひともこちらのシリーズは現在


以下のVBAのユーザーフォームを活用した学習を取り入れることで、ユーザーフォームの使い方を学び、より現場に即した実践的な内容を学習することも出来た。

Excel兄さんreview

Excel兄さんreview2

すべてのレビューを見たわけではないので、何とも言えないですが、基本的に購入された方たちは上記のような感想で、わかりやすいという方が多い印象です。

こういったことを繰り返し継続して実施していくうちに、現場配属から10か月、夜の学習を本格的に取り組み始めてから、約7か月、が経過するころになると、急にプログラムが今までと比べ、各段に読めるようになっていった。
ちなみにこの本格的な学習をし始めてから取れた時間はざっくり以下です。

【学習時間】
・単純計算で夜取れる学習平均時間は1.5時間
・家族持ちのため、
休日は基本昼間の学習はせず、やはり夜1.5~2時間程度
1.5時間×30日 = 45時間
45時間×7か月 = 315時間

「休日は1日8~10時間勉強しています。」という方たちに比べたら圧倒的に少ないです。が、限られた時間を使ってやるにはせいぜいこの程度だと思います。(と言ってますが、最近は休日は朝活を取り入れて朝に活動を移すことで更に時間の確保をしているので、この時から朝活していれば…とちょっと公開しています笑)

以前は質問を受けてソースを確認していても、まともに答えにたどり着けなかったのに、ソースコードを確認している時に、処理の流れが見えるので、どこで何をしているかを詳しく読んで、なおかつデバッグすれば裏を取れ、
質問者に対して、まっとうな回答をできるようになっていった。
エンジニアの「壁を超えると急にわかるようになる」というのはこういうことだったのか、とこの時非常にうれしかった。
点が線になる瞬間はこういったことだったんだ、と。

こうなるとレビュー時の質問の質も変わっていった。
以前は把握していない為、質問自体も出来なかったが、今ではある程度の内容の質問をぶつけることが出来るようになっていった。
・これはフォーカスが移ったときにcheck機能が働いてますか?
・それともコマンドボタンの時にすべてのcheckを働かせているんですか?
・なぜコマンドボタン押下時のcheckなんですか?
・○○の条件の時、ラベルの表示はどうなってますか?
・DB書き込み時、Delete⇒Insert?Update?

etc…

わかるようになってくると、すごく楽しいものだと思えるようになっていった。
ここまで非常に時間がかかってしまったが、全く何もわからないあの状態から、少しずつ少しずつ、一歩一歩前へ進むことで、着実に進化していっている、継続すれば理解することが出来るんだと、地獄から自信へ変わっていく瞬間だった。

鉄板の参考サイト、および情報収集ツール


簡単にではあるが、私が実際に学習した言語やツール、情報収集する上で使用したサイト等は以下の通りまとめてみた。
ロードマップと言えるほど、大したものでもないし今では当たり前のサイトもあるため、強強エンジニアの方々にとっては全く参考にならない、というのは念頭に置いたうえで一応添付する。
もちろん良質なサイトはもっとたくさんあるのだが、全部を紹介しきれないので、主に活用した一部のサイトのご紹介をさせていただく。

ロードマップ

Qiita、note、はてなブログは言わずもがな、なので、そのほかについてはリンクを貼っておきます。
VisualBasic中学校
Office TANAKA
エクセルの神髄
moug モーグ
いつも隣にITのお仕事
Tips found
インストラクターのネタ帳

最後にまとめ

そして現在2020.2月
以前からTwitterのアカウントは持っていたが、基本的に見る専門だったのだが、(有益な情報を発信しているエンジニアの方々をいろいろとフォローっさせていただき、情報を拾っていたが)本格的に自分でも発信をし、主にプログラミング初心者へ向けた情報を発信し、少しでもお役に立てたらという思いで、実施しております。
私のTwitterアカウントは👇こちら👇

きっかけをいただいたのは、主にWebデザイン系の情報発信をしている@kurinosuke32 さんではあるのですが、Webデザイナーを目指しているという方は、フォローしておくと超有益情報が満載かと思います。

画像9

以上、前編から読んでいただいた方はここまで非常に長文なnoteになってしまいましたが、読んでいただいた方ありがとうございました。
少しでもこれから学習する方の手助けになれれば幸いです。
前編:7,823文字
後編:9,030文字
計:16,853文字でした。
でした。
これからも私は情報発信をし、様々なことについて興味、チャレンジしていければな、と思っております。

この記事が気に入ったらサポートをしてみませんか?