プログラムを勉強中だけど、全然理解ができずに心が折れそう。。。
みんなどんどんできるようになってるけど、自分は全然進まない、、向いてないんじゃないか。。。
プログラムができる人って元から頭がいいんじゃないの?
こういった悩みを持っている方も多いのではないでしょうか?
私も初めて1年はめちゃくちゃ苦労し、何度も向いてないからやめたい。職場を変えてくれ、、と思っていました。というか、上司に言ったりしていました(笑)
そんな私でも苦労しつつも何とかやってきた経験をもとに、悩んでいる方、不安な方に少しでも前向きな気持ちになっていただけたらと思いますので、良かったら読んでみてください!
プログラムをやることになった経緯と職場環境

まず最初に、私がプログラムをやることになった経緯からお話したいと思います。
私がプログラムをやることになった理由は、上司から「生産技術にデジタルツール勉強しに行ってきて」と軽く言われたことから始まりました。
それまで私は、工場勤務で機械加工などをやっており、データ入力でExcelに入力するぐらいでPC作業自体もほとんどやることがない状態で、エクスプローラーって何?ぐらいのレベルでした(笑)
その職場は新しく立ち上がったばかりで、部内で使用するシステム開発を行う職場でした。
メンバーは課長、係長はシステム未経験、インフラ管理者、情報系大卒、VBA・ACCESS・VB経験10年の人、私(工業高校卒のプログラム未経験)といったメンバーと私でした。
プログラム経験者2名と私の3人でDBシステムの開発(言語はC#)を行うということになりました。
プログラミングなんて全くもってやったことなく、不安しかありませんでした。
実際に開発をスタートしましたが、教育など一切なくスタートしました。
結果、プログラムの書き方、調べ方など何も分からず、最初の1年はただただ苦しい期間で嫌で仕方がありませんでした。
挫折しやすい環境
プログラム初心者が挫折し易い環境は、やはり分からないことが聞けない環境ということが非常に大きいと思います。
私の職場には経験者が2人いましたが、どちらも人に教えるのが非常に苦手なタイプで、質問をしても全く持って理解できない状態でした。2年経った今も、ほとんど質問していません(笑)
プログラマーあるあるで(私の関わってきた人)、自分が分かることは、相手も知っている前提で話してくるため、未経験者で前提の知識がないため、会話が成立しないといったことがあると思います(笑)
もちろん、未経験ということで、わかるように話をしてくれる人もいましたが、ほぼいませんでした。
コミュニケーション苦手な人がプログラマーになるのか?と思うぐらいでした。
挫折しないために私が心掛けたこと!
そんな環境で、分からないことだらけでも質問ができない状態の私でしたが、挫折しないようにするために、心掛けたことがあるので紹介したいと思います。

自分が作ってみたい!作れるようになりたい!と思うものを常に探す
正直なところ、業務で行うシステム開発は、DBシステムで動きがあるわけではないので、やっていて全く楽しくありませんでした。
データが入るだけで、何が面白いんだろうと感じており、プログラムも分からないし、モチベーションが上がりませんでした。
そんな中でも、せっかくプログラムを覚えるのだから、どんなことがやれるんだろうということを常に調べ、自分が作ってみたいと思えるものを常に探していました。
作りたいと思ったものとして、
・OCRで製品の番号を読む
・ウェブカメラと画像処理を使って監視カメラを作る
といったものです。それらを家で勉強しつつ自分のできるレベルの簡単なレベルのものを作り、プログラミングを覚えて行きました。
やはり、自分の作ってみたいと思えるものだと調べるのにも熱が入り、やる気が出ます。
私のおススメとしては、動作や処理の結果などが見えるものの方が楽しめるのでいいのではないかと思います!
コードの全てを理解しようとせず、割り切って次々進める
初期の頃は、自分がやりたい処理を検索し、コード1つ1つの意味を調べ、全てを理解しようとしていまいた。
しかし、それでは時間ばかりかかってしまいます。理解が進まず、時間だけが過ぎてしまい、余計に焦る状態でした。
今振り返れば、最初のうちは良くわからないけど、コピペしたらとりあえず動いた!ぐらいのレベルでどんどん書いていってしまえばよかったなと感じています。
理由は、だいたいの処理は何度も書くことになるので、何度も調べて書いていくうちに、こういう時はこのパターンで書けばいいと雰囲気をつかめてくるからです。
だんだん慣れてきて、余裕が出てきたら、細かいところを調べて少しずつ理解していくといった進め方でいいと思います。
実際に、SEをやっている友達などに聞いても、分からない部分は記事を検索して、ざっくり雰囲気をつかんで書いてるだけで、全部を理解しているわけではないとのことでした。
特殊な書き方で調べても理解できないけど、他のサイトも同じ書き方してるからこういうもの!ぐらいで次に進みましょう!
Twitterや無料コミュニティーなどで初心者の方たちと繋がる

やはり、1人でモチベーションを保つのは難しいです。
周りができているのに自分は苦戦していると、向いてないのではないか不安にもなってしまいます。
ただ、周りのできる人も最初からできていたわけではありません。
すでにできる人しか周りにいない状態では、心が折れやすく挫折しやすいと思います。
そんな時、Twitterでプログラムを始めたばかりの人の投稿を見て、みんな最初は苦労するし、自分だけじゃない。焦らず進めようと前向きに考えられるようになりました。
他の人も頑張ってるから自分ももう少し頑張ろう!と前向きな気持ちになることができます。
また、躓いた部分をこうやったらできた!と投稿してくれる人もいます。
同じぐらいのレベルの人がどう解決したのかは、とても参考になります。感覚が近いので、理解しやすい部分も大きいと思います。
お互いにモチベーションを保てるような相手と繋がることが大切だと感じました。
以上が私が挫折しないためにやってきた内容です。
挫折しそうな方、苦戦している方、プログラムが嫌になってる方に少しでも参考になり、モチベーションアップに繋がればうれしいです!!
2年経った現状
半年が過ぎた頃に、ウェブカメラと画像処理(OpenCvSharp)を使い、パレット上に並んだワークの有無検出をして、手順を監視するシステムを作るということになりました。
そこからまた1年、画像処理ってなに?というところから始まり、画像処理の記事を片っ端から読み、コピーして動かす⇒なんとなく動きを理解するを繰り返し、
苦労しまくりながらも、なんとか形にはできたといった状態です。
深いところまでは理解できなくても、自分のレベルで理解できる記事を探しながら、愚直に書き、動作チェックを繰り返せば形にはすることができるなと思えるようにはなってきました。
まだまだ、低レベルのプログラマーですが、今はプログラムを書くのは楽しいです!
今回はDBに合わせてC#で画像処理(OpenCvSharp)を書いたのですが、画像処理はPythonやC++がメインのため、なかなか記事がなく、苦労しました。
ですので、今後はC#での画像処理で私が苦労したことなどの記事も書いていこうと思います。
具体的には
・2値価や色検出などの基本処理
・Webカメラの接続方法(複数)
・OpenCvSharpを使ったウェブカメラの撮像設定の変更方法(記事が見つからなかった)
などを書いていこうと思うので、興味がある方はぜひ、今後も読んでいただけたらと思います!
最後までご覧いただき、ありがとうございました!