最も過小評価されているプログラミングツール[終了]


35

優れたプログラマーのテキストエディター、IDE、デバッガー、バージョン管理システムなど、プログラミングに役立つ多くの優れたツールがあります。一部のツールは、仕事を成し遂げるための多かれ少なかれ必要なツール(コンパイラーなど)です。 。

多くの場合に役立つツールは常に存在しますが、さまざまな理由であまり注目されていません。たとえば、リリースされたとき、時代を先取りしており、今では多かれ少なかれ忘れられています。

プログラミングツールのどのようなタイプであるあなただと思います最も過小評価さ1?答えに動機を与えます。


3
私たちの脳?- -
Trufa

さて、誰がLispエントリを追加したいのでしょうか?* grin *
マークC

回答:


70

ゴム製のアヒル。はい、そうです。

http://en.wikipedia.org/wiki/Rubber_duck_debugging

ラバーダックデバッグラバーダッキング、およびラバーダッキーテストは、ソフトウェアエンジニアリングでコードのデバッグ方法を示すために使用される非公式の用語です。名前は、名前のないエキスパートプログラマーが常に机にゴム製のカモを置いておき、コードを1行ごとにカモに説明するように強制することでコードをデバッグするという、おそらく隠された話への参照です。

このプロセスを使用するために、プログラマーはラバーダックなどの無生物にコードを説明します。誤ったコードに到達して説明しようとすると、プログラマーはエラーに気付くことを期待しています。コードが行うべきことを説明し、実際に何をするかを観察すると、これら2つの間の不一致が明らかになります...


6
私はこれをいつも夫とやっています。わずかなプログラミング能力を持つ技術サポート担当者として、彼は私が言うことの約60%を理解していますが、私も理解していない40%を説明するように強制します。それが機能する機会の数は本当に印象的です。
エセルエヴァンス

1
あなたは笑う。私は同僚の机にゴム製のアヒルを実際に置いていました。
ベリンロリチュ

57
私はそれを試しましたが、私のゴム製のアヒルは問題に焦点を合わせることができませんでした。プログラミングに真の関心を持つ、適切に認定されたゴム製のアヒルはどこで見つけることができますか?
Steve314

3
これには日記を使用します。私は時々それについて自分とかなり長い議論をします。時々私が意味することを自分自身に理解してもらいたいと思います。ジャーナルにこれを書くことは、私が取り組んでいるコードを書いた馬鹿が何を考えていたのだろうと思うときに、後で非常に役立ちます。
ラースヴィルゼニウス

1
@Steve:日本の研究者が取り組んでいますが、近くにいるとは思いません:youtube.com/watch
宮坂

42

ペンとノート。

  1. 電気なしで動作します。
  2. ポータブル。
  3. 会議で退屈したときのオン/インでの落書き
  4. 有用な情報を保存します。
  5. それが書き留められている場合、人々はそれをより重視します。
  6. 他の人はそれを読んで学ぶことができます。

大企業の昔、エンジニアや技術者には空白のエンジニアリングノートが与えられ、ハードドライブのさまざまなファイルに入れがちなものをすべて書き留めていました。ノートブックがいっぱいになると、それらは安全で耐火性のリポジトリに送られます。誰かがそれらのメモにアクセスする必要がある場合、ノートブックをチェックアウトできます。
oosterwal

3
ロシア人は鉛筆を使いました。
ジョブ

@Job Hah、私はまだインクのボトルを使用しています!(...まあ、書道のみ、それでも。:))
Mateen Ulhaq

タブレットPCはどうですか?
Mateen Ulhaq

1
@ジョブ:…そしてウォッカ!
スポイケ

38

ログ出力またはフラットテキストファイルのデータを比較する場合、差分ツールはあまり使用されていないようです。それとも単にニッチですか?プログラム実行の膨大なログを比較し、変更された1つまたは2つの詳細を特定することは、デバッグに非常に有用で役立つと思われます。

パフォーマンスのプロファイリングツールも、特に重要なボットネックにぶつかった場合に非常に優れていますが、それらに精通している人はほとんどいないようです(そして、このカテゴリである程度認めています)。

優れたXMLツールは非常に重要です-XMLファイルを数十行以上または複数のスキーマで作業している場合。他のエディターが提供する基本的な構文の強調表示以上のものが必要な場合があります。また、XMLを使用する場合、XSLの学習は非常に役立ちます。多くの場合、アプリケーションのコードの多くの行で行われる単純なXSL変換で何ができるかを確認します。明確にするために:XML自体が「過小評価されたプログラミングツール」であることを示唆していません。私が見たものから、優れたXMLエディターの価値は過小評価されていることを示唆しています。


1
++絶対diffに過小評価されています。プロファイリングに関しては、あなたはそれらが有用でなければならないと考えるのはあなただけではありませんが、あなた自身はその方法を知りません。これをチェックして。
マイクダンラベイ

ええ、私は実際にプロファイリングツールを学習することを考えましたが、それに
到達

23
プロファイリング用に+ 1、diffツール用に+ 1、XMLツール用に-1。一部の人々は、問題が提示されたときに、「XMLを使用することを知っています。」<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
メイソンウィーラー

2
@Mason:かわいいXML。
マイクダンラベイ

10
@Masonウィーラー:私は、XMLを示唆しなかったような問題を解決するためのツール、私が提案グッドXMLツールを -あなたは時に持っている、XMLで動作するようにあなたはそれで非常に良いですが、エディタ/ツールがあることを確認してください。Xpathクエリ、スキーマの検証、変換、値と構造の比較(特別な種類のdiffツール)を実行できるものなど。さらに悪いことに(ところで私はあなたのXMLコードが好きです;))。
FrustratedWithFormsDesigner

37

正規表現

彼らはとても便利です。ログファイルを検索したり、テキストを解析したりするときに役立ちます。非常に便利です。

それらに関連する学習曲線が少しあるので、私はそれらを決して使用しないことを知っている何人の人々を奇妙に思います。多くの場合、単純な正規表現がすぐにそれを取り消すことができたときに、人々が難しい方法で物事を行うのを見ます(注:正規表現の前に私は物事を困難にしました)。


8
正規表現は、正しく適用された場合に優れていても、スイスアーミーナイフではないことに注意してください。
アント

10
非常に便利ですが、しばしば乱用され、不可解なメンテナンス不能なコードにつながります。古い「今、あなたは2つの問題を抱えている」と言っているが、実際には何らかの根拠がある。
Steve314

4
RegExesはスイスのアーミーナイフです。多くの迅速な仕事に適したツールですが、おそらく家全体を建てるのに適したツールではありません。
ジェイソントゥルー

4
うーん、何らかの理由で、正規表現が過小評価されているとは思えないような印象を受けました。多くの場合、単純な分割/ for-ループで十分な正規表現、または単に正規表現が答えではない場合(xml / htmlの構文解析など)に手を伸ばす人がいます。
MAK

私は両方の現象を見ました:正規表現?そのようなものはここでは読めません/遅い/軽pe的なものを挿入し、「1つの正規表現で解析する(完全に非正規の文法を挿入する)最良の方法は何ですか?」
JasonTrue

24

あなたのチームメイト。ホットショットのアイデアに取り組み、チームを組み込むことを忘れた場合、チームがうまくいかない理由やさらに良くなる理由についての懸念やアイデアを聞くことはありません。

私はこれを言います。なぜなら、プログラミングは、人々が素晴らしいアイデアで隅々でやる反社会的なことだと考えるのは簡単だからです。これがチームやチームメイトの価値を過小評価していると考える人々は、アイデア/プロジェクトを沈める/泳ぐのを助けます。


良いチームメイトは決して過大評価されることはありません。ほとんどのソフトウェアとハ​​ードウェアができます。
匿名タイプ

19

Google。まだ解決および文書化されていない問題はほとんどありません。適切に調整されたGoogleクエリは、すべての人の時間を大幅に節約できます。


13
良いツールですが、少なくとも今では過小評価されているとは確信できません(おそらく9年または10年前に同意したでしょう)。
FrustratedWithFormsDesigner

12
申し訳ありませんが、Googleは過小評価していますか?少なくともGoogleは過大評価されています:)
eestein

2
分かってる!しかし、それが過小評価されていると言った私の理論的根拠は、あなたが同意するだろうと思うものです。明らかに、多くの人がそれを使用していない場合、ある程度過小評価されています。理論的根拠に欠陥がある場合、回答を削除します。
アダムクロスランド

3
@アダムクロスランド:75%が親切です。それよりも高いと思います。
S.Lott

1
@adam @ s.lottなので、ポイントはGoogleが適切に使用されていないことだと思います。それに同意します。人々が適切にGoogleを使用する方法を知っていれば、非常に多くの質問に答えることができます(尋ねる必要はありません)。よろしく。
eestein

16

「ボトルネック」を見つけるための最も過小評価されているツールは、デバッガーのCtrl+ Cまたは「一時停止」ボタンです。

この投稿の最後の段落、およびこの投稿、およびこの投稿を確認してください。

「プログラムが遅すぎる!どうすればいい?プロファイラを試してみたが(もしそうなら)プロファイラを試してみたが、それが何を言っているのか理解できない。 」まあ、推測はそれだけです。私がいつもやっていること、そして他の人たちも持っていることは、それを実行し、中断し、呼び出しスタックを調べることです。問題が本当にひどい場合、ビンゴ、それはあなたの目の前にあります。問題が軽度の場合、それを数回行います。回避できる複数のサンプルに現れるものは、修正できるボトルネックです。

ええ、これは下票ベイトですが、動作します。


鈍器を過小評価しないでください。明らかに、これは常に正しい答えではありませんが、そうかもしれません。必要に応じて実際のプロファイラーで調整するために、1次近似と呼びます。
クリストフプロボスト

@Kristof:そう考えるのは魅力的で、処理できない問題があり、サンプルを取得するのが簡単ではない場合もありますが、プロファイラーはズームなどの特定の種類を除いて、それらの場合も処理できません、それでも、実際にあなたを問題に導くという意味では、彼らは実際には良くありません。
マイクダンラベイ

@Kristof:ランダム一時停止が苦手な種類の問題は次のとおりです。スナップショットを時間内に取得して調査した場合、その理由を特定できません。例:メッセージ駆動型処理。メッセージの送信元、理由、頻度を判断できません。別の例:非同期プロトコル。メッセージが交換されており、常に他の人を待っているようです。同期処理の場合、プロファイラーはより適切に測定できますが、ランダム一時停止の方がを見つけやすくなります。
マイクダンラベイ

14

どのタイプのプログラミングツールが最も過小評価されていると思いますか?答えに動機を与えます。

コンパイラ。

ほとんどの人は、選択したコンパイラが何をするかを理解するのに時間をかけません。彼らはそれがコードを実行可能なプログラムに変えると感じているだけで、それは彼らが行っている限りです。最近のほとんどのものには、必要な処理を実行できるように、いくつかの構成があります。以下に例を示します。あなたのオフィスの開発者の半分は、警告をエラーレベルとして設定する方法がわからないのではないかと思います(実際に警告レベルがあると仮定して)。デバッグシンボルを出力するにはどのようなオプションが必要ですか?どの最適化(またはどのレベル)を行うか。リストは続きます。


3
@Kevin:そして、コンパイラーに実際にチェックを実行させるコードを記述する方法を追加します(静的に型付けされた言語の場合)。ほとんどの開発者は、関係のないデータに対して単純だが互換性のないタイプを定義できるあらゆる種類の情報を表すために既製のタイプ(文字列など)を使用し、引数を渡すときに混乱しないコンパイラを使用します。
マチューM.

@Matthieu Mそれも良い点です。多くの人が、あなたを助ける簡単な方法を忘れています。
kemiller2002

3
コンパイラの警告はすべて貴重な贈り物です。それらを無視しないでください!もっとお願いします!-Werrorは必須です。
クリストフプロボスト

@クリストフ:-pedantic -Wall -Wextra -Werror...しかし、それは何かを構築するのは難しくなる可能性がありますが:p
マチュー・M.

多分それは私だけかもしれませんが、「
開発者の半分

10

あなたの脳。他のツールは、それなしではあまり意味がありません。


4
私は時々私のほとんどを役に立たなくしました。
デビッドソーンリー

3
「多かれ少なかれ忘れられた」:-S

5
過小評価されていると思います。考える必要がないように、あまりにも多くの人が常にショートカットを探しています。常識とロジックに代わるものはなく、ツールはそれを置き換えることはできません。
jnevelson

2
私はジョナサンに同意します、脳はしばしば過小評価されています。実際、あまりにも多くのプログラマーは、ボックスの外に出て、時折目の前の問題を調査するために別注(安価で汚い、使い捨てクラス)テストケースとテストツールを書く代わりに、知っているいくつかのトリックに依存しています。私は多くの場合、開発者に彼らの思考の状態を超えて、ほんの少しの質問で彼らの問題を解決する手段を与えました。
asoundmove

1
いくつかのコメントが私の意見を変えさせてくれました、+ 1 :)
アント

10

古き良き:

print

デバッガーやプロファイラー、またはUMLフロー図が役立つ場合があります。そして時々彼らはあなたを狂わせます。私はいつも、自分のコードがそれをやっていると思うときに私が思っていることをしていることを確認するために、printステートメント(またはtraceまたはNSLogまたはwhat-have-you)を使用することに後戻りしています。


これは言語とデバッガーに依存すると思います。最近では、一般的な言語向けにほとんどの適切なIDEで提供されている種類のデバッガーを使用すると、文を印刷するよりもはるかに簡単に処理できます。
ビリーONeal

8

単純な古いスクリプト ...次世代の言語をいくつ開発しても、スクリプトに大きく依存しています。また、ほとんどの日々のタスクは、数行のスクリプトを書くことで達成できます。


1
参照してください。私はこれに反対します。はい、スクリプトはいくつかのタスクを自動化できます。しかし、多くの場合、彼らは感覚のポイントをはるかに超えて、スパゲッティの大きなパイクになります。
ビリーONeal

1
確かに、大きなスクリプトは見苦しいため、perlまたはpythonを使用する可能性があります。彼らはまだ小さな仕事を成し遂げるのに優れていますが。
ガウラフセーガル

@Billy pythonを使用します。スパゲッティの問題は解決しました:)
エヴァンプライス

7

ペンとホワイトボード。

何かを説明しようとすると、ローテクに勝るものはありません。



重複した答えかもしれませんが、それはホワイトボードに対する私の別の賛成票を獲得します。
カーソンマイヤーズ

うーん、私がそれを作成したとき、それが重複していないことはかなり確かで、非常に奇妙です。ペンとホワイトボードに変更します。
アンディローリー


5

Perlおよびその他のスクリプト言語。Agent RansackのようなGUIツールには少し複雑すぎるタスクに最適です。


1
私は...必ずそれらが過小評価されていないよ
ANTO

3
間違いなく過小評価されています...特にPerl。それはラングです。物事をシンプルにするというモットーで非常にうまく設計されています...そのため、ただやらなければならない迅速なタスクには価値がありません。
ルーク

@Rook:100を超える演算子を持つ言語がどのように「単純」と見なされるかはわかりません。おそらく便利です。しかし、「単純」ではありません。
ビリーONeal

@Billy-シンプルは強力なものを除外しません。電卓はシンプルだと思います。私の300個の関数の半分が何をするのかわかりませんが、それがその単純さを低下させることはありません。
ルーク

4

迅速で頻繁かつ安全なリファクタリングを可能にするキーボードショートカット。いくつかのキーを押すだけで変数、メソッド、定数、またはクラスを抽出(またはインラインなど)する方法を学ぶと、コーディング方法が根本的に変わりました。コストが最小限の場合にのみ、リファクタリングを頻繁に(つまり十分に)行うため、これらのショートカットを2番目の性質にすることは、私が思う限り、良いコードを記述して維持するために不可欠です。

したがって、一般的には、優れたツール(IDE /エディター)を使用し、それらが提供する機能を最大限に活用する方法を学びます。

コードをテスト可能な状態に保ち、リファクタリングの恐れを防ぐために、ユニットテストとTDDが次に来ます。

これらを使用すれば、DRYの原則に準拠し、自己文書化された適切な保守可能なコードを簡単に書くことができます。


4

単体テストには次の利点があります。

  • 開発者はコードの最初のクライアントになります。バグを迅速に発見すればするほど、修正費用は安くなります。ビルド、インストール、またはデプロイの前にバグを発見できます。
  • テストにより、コードに対する見方が変わります。設計は明確ですか?コーナーケースを処理しますか?
  • ホーソーン効果は、チームが品質/テストのメトリクスを公開していることを単に発表することにより、品質を改善します。
  • テストがソース管理にチェックインされていない場合でも、新しい地形を探索して学習するための優れた方法になる可能性があります。
  • バグが少なくなる可能性が高い!

4

コードジェネレーター

コードジェネレーターは、簡単な定義から大量の効率的でバグのないコードを作成できます。ORMタイプの使用は、データアクセスクラスを作成するために最も明白ですが、さらに多くの潜在的な使用があります。

コード生成のサポートは、プログラマーとフレームワークの両方の観点からまだ初期段階にあるように見えますが、今後ますます見られるものになると思います。では.NETあなたが手を染め始めることができたCodeDOMのもの。


私はコード生成プログラムを書くのが好きです。それは正しいことをするのが最も簡単なことではなく、とても便利です。
ザカリーK

3

AgentRansackを頻繁に使用します。これは、数千のファイルを非常に迅速に検索するのに非常に役立ちます。時間を大幅に節約できましたが、それを知っているか、使用している多くのプログラマーは知りません。


3

正式な方法。

http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X

http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1

彼らの重要性を誇張するのは難しい。すべてのループとすべてのifステートメントは、何らかの「証明」を必要とするアイデアとして始まります。ほとんどのプログラマは、ほとんどの場合、頭の中でこの証明を行います。ifステートメントが何をし、彼らが明確に、そして論理的に-選択肢が何であるか、なぜ選択肢が完全で、一貫性があり、排他的であるかを明確にします。

しかし、ランダムに推測するように見える人もいます。彼らはより多くの助けを必要とし、正式な方法は彼らが必要とする一種の助けになるでしょう。

コードの代数(および微積分)にすぎません。複雑すぎたり洗練されたりすることはありません。


単純なものを正しく取得するために頻繁に役立つことがわかっているので、より複雑なものをデバッグするときに頼ることができます。私の経験では、正式な方法は微妙なバグをかなり除去し、テストで簡単に捕らえられる明白な明白なバグのみを残しています。
デビッドソーンリー

3

日光と新鮮な空気を素早くジョギングするために椅子を離れるような物理的なデザインパターンは、最高の状態で脳を動かし続けます。


3

それはHalf Life 2です(ここにお気に入りのゲームを挿入してください)。問題が発生した場合、解決できず、終了してお気に入りのゲームでプレイを開始すると、突然解決策が思い浮かびます。正直言って、それはゲームではなく、そのようなものではなく、他のことをするものです。問題を解決せずに何時間も問題に座っている人をよく見かけます。彼らがすべきことは、短時間脳をオフラインにすることだけです。


3

スタックオーバーフロー -立ち往生しているときの迅速な専門家のヘルプ

プロのプログラマー向けの質疑応答サイト。これは、Q&AサイトのStack Exchangeネットワークの一部として構築され、実行されます。皆様のご協力により、プログラミングに関するあらゆる質問に対する詳細な回答のライブラリを構築するために協力しています...


+1はなく、本当にもう過小評価
MAK

4
多分、過大評価されているか、少なくとも使い古されている
アント

3

Notepad / TextPad /シンプルなテキスト編集プログラムだと思います。IDEを開く必要がなく、簡単な編集だけが必要な迅速な修正が必要な場合があります。そして、すべてのコンピューターには、ある種の単純なテキスト編集プログラムがあります。


2

アサートと優れたalwaysAssert()機能。私見は、単体テストよりも重要です。単体テストでは、テストしようと考えた特定のケースでのみバグを見つけることができるからです。同じプログラマーがコードとテストを書いた場合、彼/彼女はおそらく両方で同じエッジケースを見逃すでしょう。さらに、コンポーネントの機能や動作するデータの環境が複雑すぎて、想定されるテストケースを思い付かないため、ユニットテストが実用的でない場合があります。

主張の美しさは、仮定を文書化し、想定外の入力でそれらをテストする能力にあります。これらの仮定のいずれかが間違っている場合、コードは「動作」する代わりに大声で失敗しますが、微妙に誤った結果を生成します。また、アサートなしの場合よりも、問題の根本に近いところで失敗します。実際には、コードについて十分な仮定を明示的に述べ、これらの仮定がすべて正しい場合、通常、コードは正しいです。

アサートに関する一般的な不満の1つは、それらをオフにできることです。IMHOのすべての言語または標準ライブラリにalwaysAssert()は、同じ機能を果たすassertがオフにできない機能または大まかな同等物が必要です。これは、アサーションをオフにする利点が無視できる、コードのパフォーマンスが重要ではない領域での仮定をチェックするために使用できます。


同意した。しかし、残念なことに、このようなツールは単純でありながら効率的で、あまり評価されていません。
ピーターモーテンセン14年

2

F1キー。-知らないプログラムや作業中のプログラムに役立ちます。(大規模なアプリケーションであると仮定します。)

ユーザーがソフトウェアの動作方法の解釈に基づいてバグを報告することで、問題を除外することができました。もちろん、デザイン自体に欠陥がある可能性があります。しかし、それは別の話です。


2
どちらも過小評価されており、実装も不十分です。
匿名タイプ

現在使用しているアプリケーションの開発者は非常に過小評価しています。そのため、ヘルプには有用な情報がほとんどまたはまったく含まれていません。
突く

2

さまざまなUNIXコアユーティリティ。ただし、主にまたはfind時々。特にコードベースを突然継承して修正しなければならない場合、ファイルの深いネスト内で物を見つける能力は非常に貴重です。前述のコードが十分に文書化されていても、おそらく狩りをしなければならず、それを殺すことを強く理解している必要があります。grepedfind


2

好奇心

それを「プログラミングのなぞなぞ」と呼びます。それを振るう人と比較したツールは何ですか?何かが機能するかしない理由を知りたいという欲求は、特定のツールよりも知識を広げ、それはプログラミングを超えて真実です。


2
Ctrl + C    
Ctrl + V

世界中で数え切れないほどの時間を節約しました!


1

Tailは、プログラムログ出力ファイルをリアルタイムで監視するために使用できます。ログを読み取る他の手段を提供しないシステムのために開発するとき、それは大きな助けになりました。

サンプルプログラムは次のとおりです。


Mac OS XはUNIXシステムです。別に言及する必要はありません。
右折

0

Perlコールグラフジェネレーターを一度まとめました。これは非常に便利でしたが、非手続き型のコードやファイル外のルーチンではひどく落ちていました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.