*

理論と実践のバランス

ネタ不足&開発のほうが忙しく、一か月以上書いておりませんでした。

今回は漠然とスキルアップするためには・・というテーマで書いてみようと思います。

最近思っているのはプログラミングには理論と実践、両方のバランスが大事ということですね。

プログラミングの学習というのは大きく分けるとプログラミングそのものの実践と理論的な学習とに分かれると思います。

実践というのはそのまんまプログラミングのことですね。これはわかりやすいかと思います。要は実際にコードを書いて、実際にサーバーを立て、DBを構築し、アプリを作る一連の作業です。

理論の学習というのは一般的には下記のようなことを考えています。

  • コードを書くのではなくて、例えば「正しいコードの書き方」について勉強する
  • オブジェクト指向の成り立ちについて知る
  • デザインパターンについて勉強する

例えばオライリー社や技術評論社などから出ている本をじっくり読んだりすることかと思います。 理論的な勉強も実践的な勉強も完全に分離していることはまれだと思いますので、大まかな区分けと考えていただければと思います。

結果としてはどっちも大切だ!というなんの面白みもない結論なんですけどね。比率としては全体的に8:2ぐらいで実践にウェートを置いたほうがいいと思います。

実践の大切さ

これが大事なことに意義を唱える人はいないかと思います。要は実際のプログラミングをすることですね。

プログラミングはスポーツや語学に近いところがあり、体を動かすことはしませんが、「体で覚える」要素が多分にあります。

挫折必至!初心者がやってはいけないプログラミングの学習法 ワースト4でも書きましたが、コードを全く書かずにプログラミングを学習するのは(特に初心者のうちは)やめたほうが良いでしょう。というか続かないと思いますが・・・

とくに最初は理論的なことを覚えようにも覚えられません(汗)

もちろん学習状況にもよりますが、プログラミングをやりたての頃って「何がわからないかわからない」「頭に常にはてなマークがならんでいる」という状態のことが多いです。

その場合、

  • 最初はコピペでもいいのでとりあえず動かしてみる
  • 完全に理解していなくても「ここを動かしたらこう動いた」

という経験がとても大事です。

理論的なことをしっかりと理解し、実践も・・というのが理想ですけど、難しいです。実際のコードを書かないうちから理論的なことを学習しようとしても頭にはいっていかないことが多いんですね。

実務でいいますと単純に書くだけで作業スピードも上がりますので、極力自分の手でコードを書いてみることが非常に重要になってきます。

プログラマのスキルを測るのに一番的確なのは「書いた&読んだコードの量」だと思います。

大まかにいえばスキルは練習量に比例するので、とにかくたくさん書く&読むという経験が必要ですね。

練習量が大切なことはプログラミングに限らずどんな職業でも一緒かと思います。

何気に読むことは書くより難しく、時間が少なくなりがちなので積極的に行ったほうがよいと思います。

経験のみの学習のデメリット

とにかくたくさんのコードを書く、読むという実戦経験はよいプログラマになるために必須ではありますが、それだけではだめだと思います。

このような学習をしていると下記のようなデメリットがあります。

悪い癖が知らず知らずに身についてしまう

例えばコードの書き方がそうですが、スペースの開け方や変数名などが統一されていない、なんてことになりがちです。

とりあえず動きはするんだけど一般的にはかなりおかしいコードを書いている、ということは珍しくないでしょう。

書いたプログラムが動かなければ、だれでも気づきますが、いいコード かどうかというのは個人差がかなりあるため、気づかない人は全く気づきません。

他人のコードを読むとある程度比較することで気づけるんですけど、視点そのものがない場合、気が付きにくいと思うんですね。

深く理解していなくても何とかなってしまう

現状のシステムの改修や社内で使われているフレームワークの修正、みたいな仕事の場合、すでに動いている処理と似たコードを書けば何とかなることが多いです。

「理解はとりあえず後回しにして、コピペ(あるいはそれに近い作業)で動かす」というのは時と場合によっては正しいことも多々あります。

言語やフレームワークの性質、システムの全容を完全に理解してから改修するとなると当然時間もかかりますし、下手をすると自己満足になります。限られた時間で要件を満たさなくてはいけない場合、そういうスキルは必要です。

ただ繰り返しますが時と場合によります。そういったことをずっと続けてしまうと、とりあえず動きはしますが、根本的なことを理解しているわけではないので、応用が利きません。

いざ根本的な部分の改修をするとなったときに厳しくなります。たくさん書いているけど実はよくわかってないということになってしまうんですね。というか私はよくありました・・(汗)

この最も典型的な例がわけもわからずフレームワークを使うことでしょう。フレームワークは下記の記事でも書きましたが、いい面も悪い面も持っています。

フレームワークのメリット・デメリット

間違って覚えてしまう

自分なりに試行していろいろと考えてみることは大事ですが、自分だけの解釈を強く持ちすぎることも危険です。人間は実戦経験を通して技術を学んでいきますが、経験則だけで覚えたことが必ずしも正しいわけではありません。

恥ずかしい話なんですが私はCSSの詳細度に関する適用ルールや正しい書き方というのをかなり最近まで知りませんでした。

コードの量からするとかなりの量を書いてきましたが、とりあえず動けばいい、既存の動いている部分からコピペしてくる、ということを結構やっていました。

それでなんとかとりあえず動いていたので・・・。

ある技術書を読んでCSSの詳細度や適用ルール、正しい書き方などが書かれていたために自分の技術の間違いに気づくことができました。

このように経験は絶対に必要ですが経験だけを通して身に着ける技術というのはリスクもあります。

理論的学習の大切さ

そこで大事になってくるのが理論的な学習です。

例えばコードを書くのではなくて、正しいコードとは何ぞや?といったことについて勉強することですね。そういった学習をすることで下記のようなメリットがあります。

技術の意図がわかる

理論的な学習とは例えばフレームワークにしてもMVCモデルというのはどういった意図に基づいて作られているのか、どんな設計思想をもとにかかれているのかを勉強することです。

これを理解してフレームワークを使っているエンジニアとそうでないエンジニアでは同じメソッドを書いていても見えている光景が全く違ってきます。

新しい技術を身につけるときに役立つ

例えばRailsを学習する場合でも理論的な背景まで含めて学習していれば別のフレームワークを触っても応用が利くでしょう。

そのような学習をしていれば全く別の技術を扱ってもそれほど問題ありません。例えRailsしか触ったことがなくとも、「Railsではあの部分はこうやって管理しているのだから今度の技術ではこのように管理しているだろう」「この技術では既存の技術のこういったデメリットが解消される」という感覚がはたらきます。

逆にコピペだけで書いていた場合、他のものを学習するときにはまたゼロから覚えることになるので非常に困ることになります。

既存の問題点に気づくことができる

先ほども書きましたが、私は経験だけの学習や仕事というのはリスクがあると思っています。客観的な視点を持っている先輩がいればいいですが、そういう方に出会えなかったり、そもそもじっくり教える機会もなかったりします。

そんな時に理論的な学習をしておくことで既存の仕事の問題点に気づくことができるんですね。

アンチパターンなんてのがまさにそれでして、既存の「陥りがちな罠」をあらかじめ知っておくことで自分の仕事の問題点に気づくことができます。

まとめ

プログラマが上達するのに実践的な経験は絶対に必要ですが、自分自身の経験を絶対化するのは危険です。これはプログラミングだけでなくどの分野でもそうだと思います。

キャリアのある方は自分の意見を通す場合、「自分はいままでこのやり方でやってきたから」と、水戸黄門の印籠のように切り札として使います。経験は大事ではありますが、それを客観視したり、応用を利かせる意味で理論的な学習をすることが大切だと思います。

追伸

開発の関係で長らく対面での教育事業をしておりませんでしたが、そろそろ再開しようと思っております。基本的にはプログラミング未経験者を対象に、小規模アプリの開発を行おうと思っております。興味ある方はぜひご参加ください。

関連記事

基本ルールのまとめ

こんばんは、松本です。 このブログのコンテンツもこのエントリーで25本目となってきました。

記事を読む

無料プログラミングスクールのメリット・デメリット

一般的にプログラミングのスクールというのは高額です。 30万以上するような講座が普通なので、ぽ

記事を読む

お問い合わせフォームを作ろう! その2(PHP)

おはようございます。松本です。 繰り返しますが、このブログは技術ブログなので(笑)PHPのネタ

記事を読む

オブジェクト指向 その2 「設計図」と「部品」

それではオブジェクト指向を具体的に解説していこうと思います。といっても、天才でない限り、初学者でいき

記事を読む

PHPのメリット・デメリット

うちのブログで一番読まれている記事が「フレームワークのメリット・デメリット」ですね。 タイトル

記事を読む

PHPで掲示板を作ろう! 掲示板の作成方法 まとめ

さて4回にわけて、掲示板のプログラムを学習してきました。 見た目は超シンプルで実際に動かしてみ

記事を読む

お問い合わせフォームを作ろう! その4(PHP)

お疲れ様です。松本です。 今年は振り返ってみればもう半年が過ぎちゃいましたね。今年はいろいろあ

記事を読む

フレームワークのメリット・デメリット

こんばんは。松本です。 昨日25日にはオフィスで第一回目の授業を開講させていただきました。広島

記事を読む

オブジェクト指向

オブジェクト指向 その1 コードを1行も書かずに理解してみる

今回はオブジェクト指向について書きます。 プログラミングを少しでもやった(orやろうと思った)

記事を読む

よく使う処理をまとめよう その2 (関数)

こんにちは。松本です。 最近の私の使命はダイエットです(爆)。 ダイエットはいろいろな方

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

無料PHPスクール
自社開発>客先常駐である本当の理由

このブログでも何回か取り上げていますが、ITエンジニアの働き方としては

エンジニアにとって必要なコミュニケーション能力とは

気がついたらもう3月下旬になっていますね・・ 年末年始忙しかった

エンジニアを採用する上で大事なこと

本日はエンジニアの採用について書きたいと思います。最近少し採用に絡んだ

エンジニアが給料を上げる方法を真面目に考えて見ました。

本日はエンジニアと給料の話題について触れて行こうと思います。 エ

エンジニアの「スキル」とはなんぞや

給与が低いことに悩んでるエンジニアへのアドバイスをツイートで見たところ

→もっと見る

  • follow us in feedly
PAGE TOP ↑