私はC ++でコーディングしなければならないプログラミングコンテストの準備をしていますが、それは短時間で動作するコードを作成することです。たとえば、マクロを使用して最小2つのintを取得するか、memsetsを使用して配列を初期化することができます(ただし、ここでは使用しないでください)。
これは、実際の仕事で使用するためにどのようなコーディング技術が存在するのかという質問につながりますか?
私はC ++でコーディングしなければならないプログラミングコンテストの準備をしていますが、それは短時間で動作するコードを作成することです。たとえば、マクロを使用して最小2つのintを取得するか、memsetsを使用して配列を初期化することができます(ただし、ここでは使用しないでください)。
これは、実際の仕事で使用するためにどのようなコーディング技術が存在するのかという質問につながりますか?
回答:
動作するコードを高速で生成する方法は...スローダウンすることです。非常に小さな一歩を踏み出します。各ステップの目的を必ず確認してください。各ステップの後に、コードがコンパイルおよび実行されることを確認してください。
何よりも、テスト駆動開発を使用してください。失敗したテストを記述します。テストに合格するのに十分なコードを記述します。リファクタリングしてコードをクリーンにし、すべてのテストに合格するようにします。繰り返す。
これを行わないと、大きな山のコードを書くのが非常に簡単になりますが、機能しません。次に、なぜ機能しないのかを理解するのに非常に長い時間がかかります。
私は定期的にACMコンペティションに参加していますが、次のヒントが役立つことを願っています。
他の人が言ったように、C ++、特にSTLでは、言語に精通してください。使用する一般的な関数(binary_search、min、max)と時間を節約するための堅牢なデータ構造(まっすぐな再帰を避けるためのスタック)の両方があります、BFSのキュー、Dijkstraのpriority_queueも、そのようにしたい場合)。
数学、動的計画法、グラフ理論などの場合、問題のカテゴリを特定します。自問してください:そのタイプの問題にどの程度精通していますか?これを行った後、あなたはそれらを解決する順序に関して決定を下す必要があります。これは次のポイントと密接に関係しています...
タイピングする前に問題を完全に理解し、正しい問題を解決したいと思います。私の最初の競技では、タイピングしていなければ時間を無駄にしていたと思いました。後でこれが間違いだとわかりました。
少なくとも「賢い」コードでは、コメントが時間の無駄だとは思わないでください。行ごとにデバッグして、何が悪かったのかを確認したくない(それは時間の無駄です)明快さ。
持って楽しいです。
:)
まあ、Cだけを知っていて、C ++をまったく知らないように聞こえます。これらの質問は、言語の基本的な実用知識を持つ人が簡単に答えます。
例としては、マクロを使用して少なくとも2つのintを取得することです
関数を使用するだけですか?std::min
もう存在している。
または、memsetsを使用して配列を初期化する
std::array<T, N>
そのコンテンツはすでに初期化されています。
実際の仕事で使用するためにどのようなコーディング技術が存在しますか?
最初のステップは、使用している言語を知ることです。
言語を理解することに加えて、ツール、特にエディターを知ってください。私はプロとして15年以上コーディングしてきましたが、優れたプログラマーは、使用するエディターコマンドがカーソルキーとcrtl-x / c / vだけであるため、速度が低下するのを見てきました。
エディターは、行を削除する単一のキーストロークをサポートしていますか?行を再度インデントするには?関数/メソッド間を移動しますか?ブロックの選択/貼り付け?ブックマーク?言葉で移動しますか?エディターはクラス/メソッド/関数を自動生成できますか?事前に作成できるテンプレートをサポートしていますか?迅速なリファクタリング?マクロ記録?
エディターを知ることで、開発時間を大幅に短縮できます。
行動の前に熟考せよ。クラス実装を作成する前に、3つの失敗した実装よりも考えて計画する方が適切です。また、行動しながら考える-小さなステップで物事を行うと、開発プロセスが大幅に簡素化されます。
現時点で必要なコードのみを記述してください。つまり、「これらの関数は後で必要になりますので、私はそれを試してみながらプロトタイプを書くこともできます」というような考え方でコードを書くことから始めないでください。物事は変わり、計画は変わります。最終的には、使い物にならないコードになってしまいます。時間の無駄です。
あなたがしていることを知っています。言語やライブラリの基本的な機能や機能がどのように機能するかを覚えようとすることほど悪いことはありません。使用するツールに精通してください。
すでに多くの答えがありましたが、それでも私の意見を追加したいと思います。
コーディングを高速化するには、タッチタイピストになってください入力タイピング中にロジックとコードの両方に集中できるような速度でになります。タイピングを習得するためのソフトウェアが多数あります(タイピングマスター、ラピッドタイピング、KTouch、gTypistなど)、それらを使用します
私はまだ2本指のタイピストである多くの経験豊富なプログラマを見てきました。これは、ドキュメンテーションのない厄介なコードにつながり、マクロと短縮された型名を伴う本当に不可解なコードにつながります。
ソフトウェア開発は、これらの古典的な80-20アクティビティの1つです。つまり、作業の最初の80%が20%の時間を要し、作業の最後の20%が80%の時間を要します。
したがって、一般的に作業を高速化するための鍵は、その最後の20%の努力でパフォーマンスの改善に取り組むことです。これは通常、デバッグ段階と、すべてを結び付けて使用可能にする作業です。
初期段階でより注意を払うことでこれを改善できます。筋金入りのプログラミングに飛び込もうとすると、プロジェクトの最初の段階での計画と設計作業は時間の無駄に思えるかもしれませんが、後で大幅に時間を節約できます。
人々はTDDやBDDなどの特定の方法論について話します。これらは素晴らしいことですが、今やっていない場合、慣れるまで少し時間がかかるので、おそらくプログラミングコンテストのために始めたいものではないでしょう。しかし、飛び込む前にやっていることを計画するのをやめることは、何があろうと報酬を得るでしょう。とにかく、TDDとBDDに向けた最初のステップです。ここから開始します。
それが実際のプログラミング競争のためである場合、C ++を使用しないでください。高速でインタラクティブなRADスクリプト言語を使用します。これはVB6が絶対に支配するものです。事前に作成したライブラリを事前準備してください。文字列の分割、配列の反転、検索、並べ替え、粗末なグラフィックス、コンソールコントロール。
仕事用の場合は、まったく逆の操作を行います。そこに何があるかを学び、堅実な言語を使用し(C ++で問題ありません)、すべてにコメントするなど。2つのタイプの環境は、これ以上離れることはできませんでした。