コーディング時間を短縮する一般的なプログラミング手法


20

私はC ++でコーディングしなければならないプログラミングコンテストの準備をしていますが、それは短時間で動作するコードを作成することです。たとえば、マクロを使用して最小2つのintを取得するか、memsetsを使用して配列を初期化することができます(ただし、ここでは使用しないでください)。

これは、実際の仕事で使用するためにどのようなコーディング技術が存在するのかという質問につながりますか?


26
コーディングのコンテストで使用するテクニックは、実際の仕事で使用するテクニックとは何の関係もないと思います。
ダグT.

1
私は実際の仕事でテクニックを求めていたのではなく、コーディングのコンテストでテクニックを求めていました。
マルクタニ

1
@DougT。私はコーディング競争のためのトリックが話題にない、同意するが、私はまた、あなたが作業環境での生産性についての話に展開することができ、そしてどのようにあなたが最良の猿コードに費やす時間を減らすんだと思う
ジェームズ

1
memsetを使用して動的配列を初期化しないのはなぜですか?
ジェームズ

3
C ++を使用しないでください。可能な限り最高レベルの言語を使用してください。
ケビン

回答:


52

動作するコードを高速で生成する方法は...スローダウンすることです。非常に小さな一歩を踏み出します。各ステップの目的を必ず確認してください。各ステップの後に、コードがコンパイルおよび実行されることを確認してください。

何よりも、テスト駆動開発を使用してください。失敗したテストを記述します。テストに合格するのに十分なコードを記述します。リファクタリングしてコードをクリーンにし、すべてのテストに合格するようにします。繰り返す。

これを行わないと、大きな山のコードを書くのが非常に簡単になりますが、機能しません。次に、なぜ機能しないのかを理解するのに非常に長い時間がかかります。


21
真剣ですか?プログラミングコンテストのTDD
コーディズム

1
@Codism:通常のソフトウェア開発に適用可能な技術を含むように質問が拡張されました。
ディマ

2
TDDは間違いなくコードの改善に役立ちますが、コードをより速く書くのに役立ったことはありません。対話型プログラミング環境(Groovyコンソール、Lisp REPLなど)は、私の経験で最も時間を節約できました。
アーターン

3
TDDの場合は-1。プロジェクトが短期のハッカソンではなく、長期の場合、それは理にかなっています。
TheLQ

1
@TheLQデバッガを使用してすべての時間を費やしたいからといって、TDDが悪い提案であることを意味するわけではありません。
byxor

29

標準ライブラリ、特にSTLアルゴリズムを徹底的に確認してください。これにより、多くのコード行と時間を節約できます。プログラミングコンテストで優勝するための鍵は、できるだけ高いレベルでプログラミングすることです。C ++では、外部ライブラリなしで、これはforループの代わりにSTL呼び出しを意味します。


+1-これに完全に同意します。この種の競争では、STLでコードを迅速に記述する方法を知ることは非常に重要です。
ジョーダンパーマー

23

私は定期的にACMコンペティションに参加していますが、次のヒントが役立つことを願っています。

  • 他の人が言ったように、C ++、特にSTLでは、言語に精通してください。使用する一般的な関数(binary_search、min、max)と時間を節約するための堅牢なデータ構造(まっすぐな再帰を避けるためのスタック)の両方があります、BFSのキュー、Dijkstraのpriority_queueも、そのようにしたい場合)。

  • 数学、動的計画法、グラフ理論などの場合、問題のカテゴリを特定します。自問してください:そのタイプの問題にどの程度精通していますか?これを行った後、あなたはそれらを解決する順序に関して決定を下す必要があります。これは次のポイントと密接に関係しています...

  • タイピングする前に問題を完全に理解し、正しい問題を解決したいと思います。私の最初の競技では、タイピングしていなければ時間を無駄にしていたと思いました。後でこれが間違いだとわかりました。

  • 少なくとも「賢い」コードでは、コメントが時間の無駄だとは思わないでください。行ごとにデバッグして、何が悪かったのかを確認したくない(それは時間の無駄です)明快さ

  • 持って楽しいです


6
入力する前に問題を完全に理解するために+1。それ以外の場合は、チームの時間を無駄にしています(ACMの競争は3人1台のコンピューターです)
Codism

いい答えだ。:)
ジャレッドファリッシュ

13

まあ、Cだけを知っていて、C ++をまったく知らないように聞こえます。これらの質問は、言語の基本的な実用知識を持つ人が簡単に答えます。

例としては、マクロを使用して少なくとも2つのintを取得することです

関数を使用するだけですか?std::minもう存在している。

または、memsetsを使用して配列を初期化する

std::array<T, N> そのコンテンツはすでに初期化されています。

実際の仕事で使用するためにどのようなコーディング技術が存在しますか?

最初のステップは、使用している言語を知ることです。


使用している言語を知りたいので、この質問をしました!これに関する入力をありがとう。
マルクタニ

7
ああ。その時、あなたの質問を誤解したに違いありません。をお勧めます。Cのゴミを教える本ではなく、読む価値のある本だけを提供します。
DeadMG

10

言語を理解することに加えて、ツール、特にエディターを知ってください。私はプロとして15年以上コーディングしてきましたが、優れたプログラマーは、使用するエディターコマンドがカーソルキーとcrtl-x / c / vだけであるため、速度が低下するのを見てきました。

エディターは、行を削除する単一のキーストロークをサポートしていますか?行を再度インデントするには?関数/メソッド間を移動しますか?ブロックの選択/貼り付け?ブックマーク?言葉で移動しますか?エディターはクラス/メソッド/関数を自動生成できますか?事前に作成できるテンプレートをサポートしていますか?迅速なリファクタリング?マクロ記録?

エディターを知ることで、開発時間を大幅に短縮できます。


1
アーメン。私はただ非常に高速で、vimを使用する新しい人と仕事をしています。彼はそれを使用する方法を学ぶのに時間がかかったので、彼のために働いています。
gbjbaanb

また...ここでリストされている機能のほとんどすべてがエディターでサポートされていない場合は、より良いエディターを見つけてください。
Abhi Beckertの

Googleドキュメントでのインタビュー...この理由で最悪の経験。
UmNyobe

6

行動の前に熟考せよ。クラス実装を作成する前に、3つの失敗した実装よりも考えて計画する方が適切です。また、行動しながら考える-小さなステップで物事を行うと、開発プロセスが大幅に簡素化されます。

現時点で必要なコードのみを記述してください。つまり、「これらの関数は後で必要になりますので、私はそれを試してみながらプロトタイプを書くこともできます」というような考え方でコードを書くことから始めないでください。物事は変わり、計画は変わります。最終的には、使い物にならないコードになってしまいます。時間の無駄です。

あなたがしていることを知っています。言語やライブラリの基本的な機能や機能がどのように機能するかを覚えようとすることほど悪いことはありません。使用するツールに精通してください。



4

すでに多くの答えがありましたが、それでも私の意見を追加したいと思います。

コーディングを高速化するには、タッチタイピストになってください入力タイピング中にロジックとコードの両方に集中できるような速度でになります。タイピングを習得するためのソフトウェアが多数あります(タイピングマスター、ラピッドタイピング、KTouch、gTypistなど)、それらを使用します

私はまだ2本指のタイピストである多くの経験豊富なプログラマを見てきました。これは、ドキュメンテーションのない厄介なコードにつながり、マクロと短縮された型名を伴う本当に不可解なコードにつながります。


人差し指でダウン投票:)
mlvljr

素晴らしい答え。画面の代わりにキーボードを見る人は、気づく前にゴミを入力することが多く、後戻りする必要があることを付け加えます。または、間違ったウィンドウに入力します。そして悲しいことに、彼らはこれがどれほど彼らを遅くするかを理解していません。
デイブマークル

2

ソフトウェア開発は、これらの古典的な80-20アクティビティの1つです。つまり、作業の最初の80%が20%の時間を要し、作業の最後の20%が80%の時間を要します。

したがって、一般的に作業を高速化するための鍵は、その最後の20%の努力でパフォーマンスの改善に取り組むことです。これは通常、デバッグ段階と、すべてを結び付けて使用可能にする作業です。

初期段階でより注意を払うことでこれを改善できます。筋金入りのプログラミングに飛び込もうとすると、プロジェクトの最初の段階での計画と設計作業は時間の無駄に思えるかもしれませんが、後で大幅に時間を節約できます。

人々はTDDやBDDなどの特定の方法論について話します。これらは素晴らしいことですが、今やっていない場合、慣れるまで少し時間がかかるので、おそらくプログラミングコンテストのために始めたいものではないでしょう。しかし、飛び込む前にやっていることを計画するのをやめることは、何があろうと報酬を得るでしょう。とにかく、TDDとBDDに向けた最初のステップです。ここから開始します。


-2

それが実際のプログラミング競争のためである場合、C ++を使用しないでください。高速でインタラクティブなRADスクリプト言語を使用します。これはVB6が絶対に支配するものです。事前に作成したライブラリを事前準備してください。文字列の分割、配列の反転、検索、並べ替え、粗末なグラフィックス、コンソールコントロール。

仕事用の場合は、まったく逆の操作を行います。そこに何があるかを学び、堅実な言語を使用し(C ++で問題ありません)、すべてにコメントするなど。2つのタイプの環境は、これ以上離れることはできませんでした。


3
私はダウンボーターの1人ではありませんでしたが、おそらくC ++でのプログラミングの高速化に関する質問だったので、彼らはおそらく-1をしたと思います。
ゴードンガスタフソン

9
VB6?マジ?あなたは過去からですか?
コナミマン

2
@コナミマン:へえ、そうです。「C ++でプログラミングコンテストの準備をしている」と「C ++プログラミングコンテストの準備をしている」のどちらを意味しているかはわかりませんでした。まあ、チップはどこにでもあります。それでも、文字通り1秒おきにカウントされるプログラミングコンテストの非常に速いRAD環境に勝るものはありません。
ブライアンベッチャー

質問を明確にするために編集しました。
マルクタニ

RADの場合:おそらく、Delphi 6が最善の策です。
mlvljr
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.