Pythonスキルの習得

独学でのプログラミング学習で、障害となる壁6選と解決方法 前編

独学でのプログラミング学習で、障害となる壁6選と解決方法_前編
フリー素材ぱくたそ(www.pakutaso.com)

独学において、障害になるポイント

  • 次に何を学習したらいいか、分からない状況になり、途方にくれる。
  • 学習対象が分かっても、教材(あるいはセミナー 等)を見つけるのが大変。

プログラミングを始めた経緯と問題点

私は社会人になってから、仕事で「プログラミング」が本当はやりたかった、という事に気付いた人間です。(エンジニアですが、専門はマテリアル(機能材料、構造材料)であり、全然違う領域に携わっています。マスター卒です。)。

中学生とか高校生の時に、プログラミングに夢中になってましたが、その後は途絶えていました。ある事がきっかけで、プログラミングがしたくてたまらなくなり、感情に抗えず始めました。もう10年以上になります。しかし、私の周りにプログラマーが皆無だった事と、独学で問題ないと思い込んでいたので、様々な壁にぶつかりました。

これから独学で始める方に、本記事が少しでも参考になって頂けると嬉しい限りです。

最初の学習段階

最初は例によらず、プログラミング入門の本を買ってきて、書き方から学習しました(全員、同じだと思われます)。写経して実行するだけなので、時間をかければ習得できる段階です。私は、Javaを勉強しました。Androidアプリを作りたかったからです。

これさえ勉強すれば、ソフトウェアが作れると思い込んでいた、幸せな日々でした。(笑)

1つ目の壁

専門用語の概念が理解できない。

オブジェクト? クラス? インスタンス? ・・・ ポリモーフィズム??? 専門用語が分からない。
コードの書き方は本に書いていましたが、概念を理解できないと、どう使っていいか分からない。
クラスは、「状態と動作」を詰め込んだ設計図みたいなもので、
オブジェクトは、それを実体化した物である・・・

  全然、理解できないです・・・・

概念が理解できない事が、最初の躓きでした

これを解決すべく、片っ端から情報を探し回ったのですが、なかなか見つかりませんでした。

1つ目の壁 解決方法

下記の本は、初心者レベルでもオブジェクトの概念を理解するのに、本当に役に立ちました。

【送料無料】 Javaのオブジェクト指向がゼッタイにわかる本 第2版 / 立山秀利 【本】

2つ目の壁

設計からコードに落とすまでのやり方が分からない

Javaの使い方、Androidアプリの作り方が分かって来たので、アプリを作ってみました。

コード量が一定量を超えたあたりから、どこに何のコードを書いたか、分からない状態になりました・・・ しかも、当時の私は低レベルなので、1つの機能を実現するために、複数の場所に同じようなコードを記述しており、バグがあると探し回る状態でした。

まして、コードに新規で追記した時には、バグ、バグ、バグ!!  なんとか、公開まで辿りつけましたが、このままじゃダメだと痛感しました。

機械加工でもそうですが、いきなり加工したりせず、まずは設計からスタートなので、設計手法を習得する必要があると痛感しました。だけどそのために、なにを勉強すればいいかが分からない・・・という日々でした。

2つ目の壁 解決方法

これは有料セミナーでお金を払って勉強するしかないと当時思いました。大手のITセミナーを受講しました。(受講料、数万円したので、個人での受講では躊躇したのを覚えています)。

内容は、ウォーターフォール型の要件定義→分析設計→詳細設計でした。ただこの授業、詳細設計の部分がほとんどカリキュラムになく、具体的にどうコードに落としたらいいか、よく分からない内容でした。(そこ、一番重要では?)

翔泳社の「独習 オブジェクト指向開発」をこの授業で紹介して頂き、解決致しました。
要件定義→分析設計→詳細設計まで具体的にコードもあり、分かり易い内容になっています。何度も読んでは、コードを写経しました。(私の能力では、1回読んだ位では、本当の意味で理解できないんですよねー。)

寄り道

ここから、思いっきり寄り道しました(笑)
HTML、CSS、Linux、JavaScript、Python、Go、C#、Unity、ラズパイ、DB  (プログラムに関係ない物まで、はまりました。イラスト(sai, paintshop)、Photoshop、PremirePro、AfterEffects、Fusion360・・・ コミケで同人誌の投稿までしてしまいました(笑)) 

私、コードを書いているだけで幸せな人間なので、目的が無かっても、ひたすら毎日なんかを学習してました。今から考えると、完全なノウハウコレクターだったので、よくないと思っています。(やりたい事を探し回っていた気もします。)

ちなみに今は、Pythonが主軸になっています。
(データサイエンス、ディープラーニングをメインにしています。)

3つ目の壁

設計段階で検討しなかった機能の追加が大変

数年、寄り道して、本来の世界に帰ってきました。

新しい機能を追加しようとすると、先に紹介した方法では、かなり困難だという事が分かって来ました。

あのウォーターフォール、機能追加を前提にそもそも設計されていないので、新機能を追加しようとすると、無理やりねじ込む感じで作ってしまい、最後はどこに何を書いたか分からない状態になってしまいました。

何か解決策がないかと、セミナーを受けまくったりして、情報を探し回っていました。

その中で気づいたのが、どうも真のオブジェクト指向というのは、機能追加や変更を解決できる手法であり、私はそれを完全に理解できていないという事でした。

次の記事に続きます。