#はじめに
かれこれ、プログラミングというものを勉強し始めて
3年ほど経過します(2018/09/28の時点)
最初にJava(1か月で挫折)をやってみて、
Excel VBA(現在も活躍中)を習得し、
Ruby(基礎中の基礎だけ)をかじり、
C#(なんか流れで)をやって、すっかり忘れたり
去年はAndroidStudio(Java)でAndroidアプリを作成しました。
今ではPythonにハマっています。
スキルはありますが、知識は浅く薄ーいです。
私の場合、第一線で活躍されているエンジニアさんとは違い、
いろいろなご縁があり、現在、大手企業のとある研究チームで
研究員の方たちと同じブースでエンジニアっぽいことをやっています。
そんな私がどうにかここまでこれた勉強方法などを取りまとめてみたいと思いますので
プログラミングの勉強で悩んでいる方の参考や、気晴らしになればいいなと思います。
※私の身の上話なので、技術的なことは何も書いていません※
#そもそもの動機
子供の頃から何か作るのが大好きでしたし、遊ぶのも好きでした。
ミニ四駆、ガンプラ、工作、ファミコン、スーファミ。
高校生の頃には、その対象が音楽になっていました。
田舎に住んでいた私が通っていた
高校は…ろくな高校ではありませんでした。
卒業後社会に出てからは、肉体労働をしており、
会社勤めという意識はありませんでした。
PCを所有し始めたのは遅いほうで、20代前半だったと思います。
そのころに、デスクワークに転身し、電話オペレーターや
事務作業をやるようになって、パソコンに触る機会がぐっと増えました。(ブラインドタッチはまだ微妙)
そんな時、身近な人でプログラマーをやっているという人と知り合います。
PCだけでソフトウェアを作っていて、給料もいいと聞ききました。
やってみたいと思いました。
その人に【君は向いてない】と言われました。
私は黙りました。
それから、年齢を重ねるごとに、
この先【何かしっかりしたスキルを持っていないと】という、不安を抱え毎日を過ごします。
その時のスキルは、Excelの関数の使い方は誰にも負けないという謎の自信と
トークスキルとブラインドタッチくらいでした。
つまり、事務作業です。
いつかの**【プログラミングをやってみたい&プログラマーになりたい】**
という気持ちは完全に消え去ることなく
そして、後悔もしたくないのでプログラミングを勉強してみることにしました。
#超入門初心時期(つまりこれがどうなるの?)
なんか、プログラミングっていったら【C】か【Java】だろ?くらいのノリで
当時は、その2つの言語の違いなんて全く考えていませんでした。
とりあえず、未経験で研修、勉強から雇ってくれる企業を見つけ、採用にこぎつけます。
運が良かっただけです。
その会社は組み込み系、出向系で、言語はJavaらしく、Javaの勉強をすることに。
何かAmazonで評価が高かったので
最初に買ったJavaの本:スッキリわかるシリーズを買ってみました。
これ1冊仕上げればまぁまぁでしょ!くらいのノリ。
すでにいろいろ遠回りしています。
挫折する人にある傾向
・Amazonの評価に踊らされがち
・まず1冊を隅から隅までやればいいと思っている
ご紹介しているこのスッキリわかるシリーズ、
最初は大体変数の説明があって、演算子の説明があって
ifとかForとかwhileとか。つまりこれがどうなるの?ってなりました。
Forとか、パズドラでいうコンボ数(シュインシュインって言いながら攻撃力が上がる)部分の
コンボ数だけForの終了値に代入されるとか、もう少し直感的にわかる説明してほしい。
(パズドラって言ってる時点で偏ってますが)
comboCount = //ドロップを消したコンボ数
for (int i = 1;i>comboCount;i++){
//シュインシュインさせる
attackScore = comboCount * attack;
}
//攻撃ドーン
EnemyHp = EnemyHp - attackScore;
クラスの解説部分が終わり、オブジェクト指向に入ることには、
思考はカチカチに固まり、その後考えることをやめてしまいました。(フリーズってやつです)
考えようとしても、脳が動かず、ソースを目で追おうとしても追えませんでした。
イメージと結果が完全にかみ合わなくなってしまいました。
皆さんがオブジェクト指向でよく躓く箇所で、私も躓いてしまいました。
さらに、間違った発想として
Amazonで評価が高い本の内容が分からないなんて、自分には才能がないと思ってしまいました。
世の中になぜJavaの本だけでも何冊も存在するのか、そんなことに気が付いていなかったのです。
追い打ちをかけるように、研修中の世話役係に【進展速度が遅い】と言われ、
残業代も出ないのに毎日23時まで会社で勉強させれられました。
あらゆる心が折れて、せっかくの会社も退社し、元の事務員に戻りました。
でも、今ではこれでよかったと思います。
##ここで挫折しないために
######・Amazonの評価はある程度の目安にする。
分かりやすいか分かりにくいかなんて、人間個人で大差になる。
入門書とうたって、理解ができないのは筆者のスキル不足であり、読者のせいではない。
######・未経験者で初めて言語を勉強するなら、入門書籍だけでも3冊は購入した方がいい。
お金が無ければ、まずは町の図書館で借りてみる。
(ただし、ろくなものは置いていないと思った方がいい)
レビューもいいが、実際に本屋さんで現物に目を通してみるのが一番いい。
######・初めてのチャレンジでいきなり理解できるなんて思わない方がいい。
日本人が習ってもいない英語はしゃべれないのと同じ。【時間はかかる】と言い聞かせる。
違うアプローチから何度もやってようやく理解ができることの方が多い。
#事務作業員に戻り転機となった
派遣社員で事務作業員として、わりとすぐに仕事はみつかりました。
大量にあるまだ整備されていないデータを使えるようにする仕事で
書類をExcelに入力したり、画像を加工したり、
飽きることなく新しい仕事ができたことはとても新鮮でした。
しかし、データが大量すぎる。
社員さんのExcelのスキルは、関数を扱う2つ3つネストしている感じ。
もともとExcelを触るのは好きだったし、
Javaの勉強を始める前から、
出来もしないのにExcel VBAのマクロをこねくり回したりしてたのもあり、
せっかくと思い、Excel VBAを勉強してみようと思いました。
プログラムの中では比較的簡単だと言われてます。
(知れば知るほど、奥の深さに引きますが入り口としては最適です)
そして、これが大当たり!
if、For、配列、ネスト、インクリメント、functionプロシージャ、引数、プロパティ…
マイペースですが、どんどん吸収できました。
####JavaとExcel VBAでこうも大差がついた理由を考察してみました。
・セルという結果がすぐに反映されるオブジェクトが既にある
特にForは、Excelで実際にどのようにオブジェクトに処理を行ったのかすぐわかります。
Javaの入門は結果でも文字の羅列ばかり。つまりこれがどうなるの?になってしまうのです。
イメージ力がまだない初心者に専門的に【つまりこうなるのです!】と言葉で言うのではなく
実際のものを目の当たりにさせるのが一番の近道だと思います。
・ユーザーフォーム、ボタンなど直感的にそれっぽいのが作れる
結局試しながら、楽しみながら作って、組み立ててってやるのが一番理解が深まります。
何がどうなるかもわからないうちから、オブジェクト指向だ、継承だ、カプセル化だ、
なんて無意味です。
そして、翌年Excel VBA Basicの資格を取得しました。
特に役に立つような資格ではありませんが、自信につながりましたね。
その後、Rubyを少し触ってみました。
今思えばPythonとよく似た言語ですね。
当時は面白みを見いだせず、すぐに離れてしまいました。
もしかして、今改めて触ってみると、とても面白く感じるかもしれません。
##重要なことは、やめてみること
やめる理由は2つあると思います。
やってることが面白くなくなってきたら、いったんやめましょう。
あなたの中でプログラミングをしたいという気持ちさえあれば、いつでも再開できます。
上の続きになるのですが、Rubyをやめた後C#をやってみました。
これが、Excel VBAともJavaとも少しずつ似ていて
なおかつ、ユーザーインターフェース(フォーム)などを作る機能も直感的に操作出来て
楽しく学ぶことが出来ました(もう忘れちゃいましたけど)
もう一つのやめる理由としては目的の有無です。
C#を続けていないのはC#で作りたいものがなかったからでした。
その反面で、仕事ではExcel VBAのプログラムはいつもやっていました。
現場で何が求められているのか、的確に見極め、相談して、実行し、結果を出すことが最重要課題です。
##Androidアプリを作ることになった
ある日突然、仕事場でNFCのデータを読み書きできる
Android用アプリを作ってみようかという声が上がりました。
困りましたね。
今まで見て見ぬふりというか、封印していたJavaなのです。
まったく文法も覚えておらず、1からスタートというか、
嫌な思い出はあるので、マイナスからのスタートです。
Androidプログラミング用の本を見て、写経がてら進めてみました。
意外とできるもので、驚きました。
知らない間にスキルアップしていたのか…?
【スッキリわかるJava入門】の本見てみました。
やっぱり分かりません。
ここで私は気づきました。
この本が自分に合っていなかっただけなのです。
別の本を買いました。
理解できました。
また、YouTubeで公開されているプログラミング講座の動画で
教材に使っている書籍が近くの図書館にあり
YouTubeと教材を一緒にやるとさらに理解できるようになる経験もしました。
私の場合は人から教えを乞うのが一番向いていると感じました。
学習方法ととらえ方は人それぞれなので、これといった正解はありません。
それは書籍も同じです。
自分に合った書籍が見つかるまで探すということが出来れば一番良いと思います。
#今年になってから
私自信、ちょっと飽きっぽいのかな?と思います。
AndroidStudio Ver3以降ほどんど触っていません(大人の事情もあるのですが)
NFC読取りのアプリを完成させて以来、
いったん燃え尽き症候群になりかけていたのですが
仕事場ではにわかに【AI】【機械学習】【DeepLearning】というワードが飛び交うようになります。
お分かりですよね。
Pythonです
機械学習やDeepLearningの理論を理解できてないので
こないだ中学の数学からやり直す決意をして、教科書を買いました。
人工知能開発はいったん置いといて
PythonはRubyに近い印象で、私の中ではちょっと扱いにくい印象がありました。
コマンドプロンプトにコマンドを記述して実行する対話型、
メモ帳のようなもの(いわゆるエディター)に書いてるけど使いにくい、
日本語に対応した、きっちりとした統合開発環境はないのかー!と
※実際はPyCharmがありますし、私のお勧めはVisualStudioCODEです。
しかし、とある事情でAnacondaの使用を半分義務付けられていました。
この段階で、
Python/Anaconda/PyCharm
ATOM/Notepad/サクラエディター
JupterNotebook/WinPython/
Keras/Tensor Flow/Chainer
pip/Conda/import/-v install
windows/Mac/Linux(Ubuntu)
情報や分岐が多すぎてもうわけわかりませんでした。
Pythonは今までのどの言語より、こういった分岐や派生したものが多い印象です。
現実問題として、Pythonは導入でつまづく人がとても多いようです。
それでも何とか導入を済ませて、
とにかくコマンドプロンプトを操作しまくってディレクトリの移動や
Pythonのファイル実行も余裕で出来るようになるまで触ってみました。
Rubyではこの工程が本当に苦手でした。
ちなみにもう今は平気です。
対話型と記述したプログラムのメリットデメリットを理解し、
1つ1つじっくりと色々なコードをとにかく記述してみました。
その結果今では、Excel VBAで行っていた処理の一部をPythonのプログラムに代行させています。
とても時間がかかっていたExcel VBAのプログラムから
Pythonのexeファイルを実行させて並行処理させているので倍以上早くなるというメリットも生まれました。
#今から、これから、
いつのまにか、私はソフトウェアを作っています。
役に立ったよと言ってもらえるツールを作っています。
外注すると数百万もかかるようなものを作っています。
エンジニアと名乗っています。
プログラマーといっても人それぞれです。
こんな話をしてて、ソフトウェア開発で働かれているプログラマーさんからは
怒られるかもしれません。
でも、今でもやりたいこと(プログラミング)を続けられていることに
胸を張って進んでいきたいと思います。
次はどんなことが待っているのか、楽しみです。
長々と失礼しました。
もし気持ち的に悩んでいる方がいらっしゃいましたら
コメントください。