独学において、障害になるポイント
- 次に何を学習したらいいか、分からない状況になり、途方にくれる。
- 学習対象が分かっても、教材(あるいはセミナー 等)を見つけるのが大変。
プログラミングを始めた経緯と問題点
私は社会人になってから、仕事で「プログラミング」が本当はやりたかった、という事に気付いた人間です。(エンジニアですが、専門はマテリアル(機能材料、構造材料)であり、全然違う領域に携わっています。マスター卒です。)。
中学生とか高校生の時に、プログラミングに夢中になってましたが、その後は途絶えていました。ある事がきっかけで、プログラミングがしたくてたまらなくなり、感情に抗えず始めました。もう10年以上になります。しかし、私の周りにプログラマーが皆無だった事と、独学で問題ないと思い込んでいたので、様々な壁にぶつかりました。
これから独学で始める方に、本記事が少しでも参考になって頂けると嬉しい限りです。
最初の学習段階
最初は例によらず、プログラミング入門の本を買ってきて、書き方から学習しました(全員、同じだと思われます)。写経して実行するだけなので、時間をかければ習得できる段階です。私は、Javaを勉強しました。Androidアプリを作りたかったからです。
これさえ勉強すれば、ソフトウェアが作れると思い込んでいた、幸せな日々でした。(笑)
1つ目の壁
専門用語の概念が理解できない。
オブジェクト? クラス? インスタンス? ・・・ ポリモーフィズム??? 専門用語が分からない。
コードの書き方は本に書いていましたが、概念を理解できないと、どう使っていいか分からない。
クラスは、「状態と動作」を詰め込んだ設計図みたいなもので、
オブジェクトは、それを実体化した物である・・・
全然、理解できないです・・・・
概念が理解できない事が、最初の躓きでした。
これを解決すべく、片っ端から情報を探し回ったのですが、なかなか見つかりませんでした。
1つ目の壁 解決方法
下記の本は、初心者レベルでもオブジェクトの概念を理解するのに、本当に役に立ちました。
2つ目の壁
設計からコードに落とすまでのやり方が分からない
Javaの使い方、Androidアプリの作り方が分かって来たので、アプリを作ってみました。
コード量が一定量を超えたあたりから、どこに何のコードを書いたか、分からない状態になりました・・・ しかも、当時の私は低レベルなので、1つの機能を実現するために、複数の場所に同じようなコードを記述しており、バグがあると探し回る状態でした。
まして、コードに新規で追記した時には、バグ、バグ、バグ!! なんとか、公開まで辿りつけましたが、このままじゃダメだと痛感しました。
機械加工でもそうですが、いきなり加工したりせず、まずは設計からスタートなので、設計手法を習得する必要があると痛感しました。だけどそのために、なにを勉強すればいいかが分からない・・・という日々でした。
2つ目の壁 解決方法
これは有料セミナーでお金を払って勉強するしかないと当時思いました。大手のITセミナーを受講しました。(受講料、数万円したので、個人での受講では躊躇したのを覚えています)。
内容は、ウォーターフォール型の要件定義→分析設計→詳細設計でした。ただこの授業、詳細設計の部分がほとんどカリキュラムになく、具体的にどうコードに落としたらいいか、よく分からない内容でした。(そこ、一番重要では?)
翔泳社の「独習 オブジェクト指向開発」をこの授業で紹介して頂き、解決致しました。
要件定義→分析設計→詳細設計まで具体的にコードもあり、分かり易い内容になっています。何度も読んでは、コードを写経しました。(私の能力では、1回読んだ位では、本当の意味で理解できないんですよねー。)
寄り道
ここから、思いっきり寄り道しました(笑)
HTML、CSS、Linux、JavaScript、Python、Go、C#、Unity、ラズパイ、DB (プログラムに関係ない物まで、はまりました。イラスト(sai, paintshop)、Photoshop、PremirePro、AfterEffects、Fusion360・・・ コミケで同人誌の投稿までしてしまいました(笑))
私、コードを書いているだけで幸せな人間なので、目的が無かっても、ひたすら毎日なんかを学習してました。今から考えると、完全なノウハウコレクターだったので、よくないと思っています。(やりたい事を探し回っていた気もします。)
ちなみに今は、Pythonが主軸になっています。
(データサイエンス、ディープラーニングをメインにしています。)
3つ目の壁
設計段階で検討しなかった機能の追加が大変
数年、寄り道して、本来の世界に帰ってきました。
新しい機能を追加しようとすると、先に紹介した方法では、かなり困難だという事が分かって来ました。
あのウォーターフォール、機能追加を前提にそもそも設計されていないので、新機能を追加しようとすると、無理やりねじ込む感じで作ってしまい、最後はどこに何を書いたか分からない状態になってしまいました。
何か解決策がないかと、セミナーを受けまくったりして、情報を探し回っていました。
その中で気づいたのが、どうも真のオブジェクト指向というのは、機能追加や変更を解決できる手法であり、私はそれを完全に理解できていないという事でした。
次の記事に続きます。