web-dev-qa-db-ja.com

初心者プログラマを教えるための最良の方法?

私はプログラミングの初心者を教えることを目的としたプロジェクトに取り組んでいます。私は彼らにプログラミングの特定のガイドラインに従ってもらい、それらに慣れてほしいと思っています(これらのガイドラインは一般に「ベストプラクティス」として受け入れられているため)。

そのため、プログラミング(たとえば、オブジェクトの作成)中にユーザーが行うさまざまなアクションに対応できるプログラムを使用したいと考えました。

このプログラムは、むしろ「悪い」行動を警告するべきか、それとも「良い」行動を褒めるべきでしょうか?これらの方法の1つ(または両方の混合)が特定の状況でより効率的または適切であると考えられることを示す(科学的)証拠はありますか?

2
Stefan Surkamp

貧弱なコードは通常(またはを実行するために効率が悪いので、プログラマが何か「間違った」ことをしていることを知りたいと思います)、維持が困難、またはその両方。

低品質のコードを指摘する場合、理想的な方法は、より良いコードの記述方法を示すことです。 Haskell Pastebin があります。これは、不必要な括弧など、あらゆる種類のことを指摘したり、使用したものとは異なる関数を推奨したりするものです。

例えば、これは私がHaskellで特定のコードを書いていた方法です:

withTransaction (
    (sequence_ $ map (PG.execute [sqlFile|sql/deletePhoto.sql|]) photos)
    )

これは、まったく同じことを行う、より簡潔な記述方法です。

withTransaction $
    mapM_ (PG.execute [sqlFile|sql/deletePhoto.sql|]) photos

それが私に指摘されていなかったならば、私はよりクリーンな方法について決して知りませんでした、そして私はいつもこのような種類のショートカットを学ぶことができて幸せです。

それが根本的に悪いデザインである(JavaScriptのネイティブオブジェクトでprototypeを使用するなど)ため、コードのきちんとした小さなブロックを表示しても、問題の原因を実証できない場合があります。これらのタイプのミスを無視しても(それをキャッチできる場合)、ユーザーは役に立ちません。問題を解決するより良い方法とともに、コードが悪い理由を明確かつ客観的な方法でユーザーに示す限り、ユーザーは利益を得ます。

学習するための最良の方法は、間違いを犯すことですが、新しいプログラマーにとって間違いは識別しにくい場合があります。

1
cimmanon