dポイントプレゼントキャンペーン実施中!

私はプログラムを作るときはほとんどと言っていいほど
前回作成したプログラムや他人が作成したプログラムを
コピペして作成しています。

コピペするとロジックを良く考えなかったり
メソッド等の詳細がわからないままコードを作成しています。

やはり、プログラムを作成するときはコードを一から打ち込んで
作成した方が勉強になるのでしょうか

どうすれば、効率のいい経験の積み方を教えてください。

A 回答 (2件)

こんばんは。


当方フリーのシステムエンジニアです。

> コピペではスキルアップしませんか

するかしないかといえば、スキルアップは「難しい」です。

たいていは生産性を向上させるためにベースとなるコードを書いて、これを参考にしてみんなにプログラムしてもらうのだけど、

こういった「生産性向上」の取り組みとしてのコピー&ペーストは、コピー&ペーストという表現よりも、サンプルを利用しているという表現のほうがふさわしい。だから、1プログラマーとしてなら、この方法は間違いではないし、サンプルを使って、早く品質のよいものを作ることは、どちらかというと
正しいやり方。

> コピペするとロジックを良く考えなかったり
> メソッド等の詳細がわからないままコードを作成しています。

ということだけど、ソフトウェアの開発工程を理解されているという前提で、いくつかの懸念。

1.単体テストはできるか
ロジックを理解しないまま単体テストができるのだろうか。仕様を理解して、サンプルの取得元を割り出しているわけだから、ブラックボックステストはできるだろうけど、ホワイトボックステストできる?命令網羅、分岐網羅、条件網羅をできるかな。してないなら、その品質は保たれている?

2.障害が見つかったとき理由が言えるか
ずいぶん先の工程であなたの作ったプログラムに不備があったときに、原因をすぐに究明できるだろうか。なぜこの実装なのかとたずねられ「いや、○○さんの作ったやつからこうなっていました。」は理由になるか。(共通関数である場合は別だけど。)

だから、少なくともロジックは理解していなければならない。


> やはり、プログラムを作成するときはコードを一から打ち込んで
> 作成した方が勉強になるのでしょうか

このあと、どんなふうになりたいか。
1プログラマーとして全うしたいならば、いまのやり方で問題はないと思います。
とはいえ、近い将来起こりうる、誰かに教える必要があるようなとき、ロジックの説明を、なぜそうしなければならないかとかを説明できるだろうか、「これはこういうもんだから」と言って納得してもらえるのだろうか。実際にコードを書いてみせないといけない場合もあるでしょう。

プログラマーからステップアップしたいのであれば、サンプルプログラムの現象を理解することはもちろん、なぜそのような実装になっているかを、ロジック面と言語仕様面やツールの特性の側面から、理解する必要があるでしょう。こうすれば、言語やツールに依存しないコーディングスキルが身につくから、プログラマとしての幅も広がるだろうし、ビジネスロジックだけでなくって、もっと内部のレイヤーのコーディングもできるようになってくるでしょう。その先には、冒頭の「たいていは生産性を向上させるためにベースとなるコードを書いて、これを参考にしてみんなにプログラムしてもらう」というポジションがあります。

> どうすれば、効率のいい経験の積み方を教えてください。

ということで、現場において、コピペはサンプルの利用という意味で間違いではないけど、現象を理解していないと、品質がよいものは作れない。ゆえに、ロジックの意味を、コードを追うことだけで理解できて、そうすることで、サンプルが自分のものになっていくのであれば、それが非常に効率のよい勉強法。ただ、非常に複雑なロジックになったときに、自分でコードを書いてみないとわからない、という感情が、いずれ発生してくると思うので、そういったときに、サンプルコードを自分のものにするために、必要に応じて、1からコードを書くとよい。これが一番効率がいいかな。

がんばってください。
 
 
 
    • good
    • 0

プログラムを一から始めるのには多くの時間を必要とします。


大概はライブラリーを使用する事に成りますが、
そのライブラリーのロジックを理解せずに使用する事は自分で作成した、
プログラムの動作を保証していない事には成りませんか?
まず使用しているライブラリの挙動を理解する事からですね。

友人のシニアプログラマーはマシン語の時代なのですが。
1、要求書からフローチャートを作成する
2、個別に分割し、マシン語で作成。
3、コンパイル ー>ターゲットで確認
4、修正し2に戻る
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!