タグ付けされた質問 「programming-practices」

プログラミングプラクティスは、ソフトウェアの開発で一般的に使用される、またはあまり使用されないプラクティスです。これには、アジャイル開発、かんばん、コーディングのショートカットなどが含まれます。

16
x + = yのようなショートカットが良い習慣と見なされるのはなぜですか?
これらが実際に何と呼ばれているのか分かりませんが、私は常にそれらを見ています。Pythonの実装は次のようなものです。 x += 5の略記法としてx = x + 5。 しかし、なぜこれが良い習慣と見なされるのでしょうか?Python、C、Rなどについて読んだほぼすべての書籍やプログラミングチュートリアルで、この問題に出くわしました。スペースを含む3つのキーストロークを節約できるので便利です。しかし、私がコードを読んでいるとき、彼らはいつも私をつまずかせるように見えます、そして少なくとも私の心には、それをそれ以上ではなく、読みにくくします。 これらが至る所で使用されている明確で明白な理由がありませんか?

16
Grokking Java culture-なぜそんなに重いのですか?何のために最適化されますか?[閉まっている]
私はよくPythonでコーディングしていました。今、仕事上の理由で、私はJavaでコーディングしています。私がやるプロジェクトはかなり小さく、おそらくPythonのほうがうまくいくかもしれませんが、Javaを使用する正当な非エンジニアリングの理由があります(詳細は説明できません)。 Java構文は問題ありません。それは単なる別の言語です。しかし、構文とは別に、Javaには文化、一連の開発メソッド、および「正しい」と見なされるプラクティスがあります。そして今のところ、私はその文化を「グロック」することに完全に失敗しています。だから私は本当に正しい方向に説明やポインタをいただければ幸いです。 最小限の完全な例は、私が始めたStack Overflowの質問にあります:https : //stackoverflow.com/questions/43619566/returning-a-result-with-several-values-the-java-way/43620339 タスクがあります-(単一の文字列から)解析し、3つの値のセットを処理します。Pythonでは1行(タプル)、PascalまたはCでは5行のレコード/構造体です。 答えによると、構造体に相当するものはJava構文で利用可能であり、トリプルは広く使用されているApacheライブラリで利用可能です。しかし、それを行う「正しい」方法は、ゲッターとセッター。完全な例を提供してくれた人はとても親切でした。それは47行のコードでした(これらの行の一部は空白でした)。 巨大な開発コミュニティは「間違った」ものではないことを理解しています。これは私の理解の問題です。 Pythonのプラクティスは、読みやすさ(その哲学では保守性につながります)とその後の開発速度を最適化します。Cプラクティスは、リソース使用量に対して最適化されます。Javaプラクティスは何のために最適化されますか?私の最善の推測はスケーラビリティです(すべてが数百万のLOCプロジェクトに対応できる状態でなければなりません)が、それは非常に弱い推測です。

14
Javaでのオブジェクト作成を避けるべきですか?
同僚から、Javaオブジェクトの作成は実行できる最も高価な操作であると言われました。したがって、できる限り少ないオブジェクトを作成することしかできません。 これは、オブジェクト指向プログラミングの目的をやや損なうようです。オブジェクトを作成していない場合、最適化のために1つの長いクラスCスタイルを記述しているだけですか?

16
プロジェクトはほぼ完了しましたが、手続き型のスパゲッティコードです。書き直しますか、それとも出荷しようとしますか?[閉まっている]
私は初心者のWeb開発者です(1年の経験)。 卒業してから数週間後、私は所有者があまり技術者ではない会社のためにWebアプリケーションを構築する仕事を提供されました。彼は、アイデアの盗難、サービス会社が請求する高い開発コストを避け、長期的にプロジェクトを維持するために若い人をオンボードで信頼できるようにするために私を雇いました)。 当時の私は生意気で、コンピューターサイエンスの学位を取得していたので、私は何でも構築できると考えて申し出を受け入れました。 私はショットを呼んでいました。いくつかの調査の後、私はPHPに落ち着き、オブジェクトなしの単純なPHPから始めました。2か月後、すべてが面倒になり、進歩するのは困難でした。Webアプリケーションは巨大です。そこで、私の生活を楽にするMVCフレームワークをチェックアウトすることにしました。そこで私は、PHPコミュニティのクールな子供、Laravelに出会いました。私はそれを愛し、学びやすく、すぐにコーディングを始めました。私のコードはよりきれいで、より組織的に見えました。とてもよかったです。 しかし、やはりWebアプリケーションは巨大でした。会社は最初のバージョンを提供するように私にプレッシャーをかけていました。 Laravelは一緒に仕事をするのが面白かったので、そもそもこの業界を選んだ理由を思い出しました。 だから私は夜に小さなプロジェクトに取り組み始め、方法論とベストプラクティスについて読みました。私はOOPに戻り、オブジェクト指向の設計と分析に移り、ボブおじさんの本Clean Codeを読みました。 これは私が本当に何も知らなかったことに気づきました。ソフトウェアを正しく構築する方法を知りませんでした。しかし、この時点では手遅れであり、今ではほぼ完了です。私のコードはまったくクリーンではなく、スパゲッティコード、バグを修正するための本当に苦痛、すべてのロジックはコントローラーにあり、オブジェクト指向のデザインはほとんどありません。 私は、プロジェクト全体を書き直さなければならないと固執している。しかし、私はそれを行うことはできません...彼らはそれがいつ完了するのかを尋ね続けます。 このコードがサーバーに展開されることは想像できません。さらに、コードの効率性とWebアプリケーションのパフォーマンスについてはまだ何も知りません。 一方では、会社は製品を待っていて、もう待つことができません。一方、実際のコードでこれ以上進むことはできません。仕上げて、まとめて展開することはできましたが、神は、人々がそれを使い始めたときに何が起こるかを知っています。 書き直しますか、それとも出荷しようとしますか、それとも見逃した別のオプションがありますか?

17
優れたプログラマーに関するトーバルズの引用[終了]
偶然、Linus Torvaldsによる次の引用につまずいた。 「悪いプログラマはコードを心配します。良いプログラマはデータ構造とその関係を心配します。」 私は過去数日間それについて考えてきましたが、私はまだ混乱しています(おそらく良い兆候ではありません)、したがって、私は次のことを議論したかったです: これの可能な解釈/意味がありますか? それから何を適用/学習できますか?

16
複雑なコードを説明するコメントの何が問題になっていますか?
多くの人が「コメントは「なぜ」ではなく「なぜ」を説明すべきだ」と主張しています。他の人は「コードは自己文書化されるべきである」と言い、コメントは少ないはずです。ロバートC.マーティンは、(コメントは言い換えると)しばしば「コメントは不適切に書かれたコードに対して謝罪する」と主張しています。 私の質問は次のとおりです。 複雑なアルゴリズムや、複雑で複雑なコードを説明的なコメントで説明することの何が問題になっていますか? この方法では、他の開発者(自分を含む)がアルゴリズム全体を1行ずつ読んでその動作を理解する代わりに、簡単な英語で書いたわかりやすい説明コメントを読むことができます。 英語は、人間が簡単に理解できるように「設計」されています。ただし、Java、Ruby、またはPerlは、人間の可読性とコンピューターの可読性のバランスを取るように設計されているため、テキストの人間の可読性が損なわれます。人間は、同じ意味のコードを理解するよりもはるかに速く英語を理解できます(操作が簡単でない限り)。 だから、部分的に人間が読めるプログラミング言語で書かれた複雑なコードを書いた後、フレンドリーで理解しやすい英語でコードの操作を説明する記述的で簡潔なコメントを追加してみませんか? 「コードを理解するのは難しくない」、「機能を小さくする」、「わかりやすい名前を使用する」、「スパゲッティコードを書かない」と言う人もいます。 しかし、それだけでは十分ではないことはわかっています。これらは単なるガイドラインであり、重要かつ有用なものですが、一部のアルゴリズムが複雑であるという事実は変わりません。したがって、それらを行ごとに読むと理解するのは困難です。 複雑なアルゴリズムを一般的な操作についてのコメントの数行で説明するのは本当に悪いですか?複雑なコードをコメントで説明することの何が問題になっていますか?

6
Gitリポジトリ内の単一または複数のプロジェクトを選択しますか?
gitほとんどのプロジェクトをモジュール化した環境では、リポジトリごとに1つのプロジェクト、またはリポジトリ設計の問題ごとに複数のプロジェクトに直面しています。モジュール化されたプロジェクトを考えてみましょう。 myProject/ +-- gui +-- core +-- api +-- implA +-- implB 現在、リポジトリごとに1つのプロジェクトがあります。それは自由を与えます release 個々のコンポーネント tag 個々のコンポーネント しかしbranch、多くの場合、分岐にapiはの同等の分岐が必要coreであり、おそらく他のコンポーネントも必要であるため、コンポーネントにとっても面倒です。 releaseコンポーネントを個別にしたい場合でも、リポジトリ設計ごとに複数のプロジェクトを利用することで、同様の柔軟性を得ることができます。 どのような経験があり、これらの問題にどのように/なぜ対処しましたか?

15
プログラムのサイズが大きいのはなぜですか?
古いプログラムNetscape Navigatorまたは初期バージョンのMicrosoft Wordを見ると、これらのプログラムのサイズは50 MB未満でした。google chromeをインストールすると、200 MB、Slackのデスクトップバージョンは300 MBになります。私は、プログラムがどれだけ多くのメモリを使用するかというルールについて読んでいますが、それはなぜですか? 現在のプログラムのサイズが10年または15年前に比べて非常に大きいのはなぜですか?プログラムはそれほど多くの機能を実行しておらず、見た目も大きく異なりません。現在、リソースを独占しているのは何ですか?

17
作業中にコードをコンパイルすることには利点がありますか?
最近、就職の面接を受けました。実際のコードを書くのに1時間かかりました。それほど多くはなく、おそらく100行未満でした。約45分後、コンパイルして実行し、動作するようになりました。コンパイルエラーと2、3の小さなバグを解決するのに5〜10分かかったかもしれませんが、全体的に非常にスムーズでした。(ちなみに、私は彼らから申し出を受けました。) しかし、私が戸惑ったのは、完成したコードを渡した後、インタビュアーが私が間違ったことは「進行中にコンパイルしない」ことだけだと言ったということでした。私は彼に違いは何であるかを尋ね、彼は「もしあなたがコードを完成させ、それが時間内にコンパイルしなかったらどうするだろう」と言った。 私の理解では、それは無効な引数です。なぜなら、特定の長さのコードに対して「コードをコンパイルする」には、通常、一定数のコンパイルエラーの修正が含まれ、かなり一定の時間がかかります。コードの記述を終了するか、コーディング時間をインターリーブする場合。どちらかといえば、欠落しているセミコロンを検索するためにコーディングを中断することは、おそらくあなたの効率に有害です。派生クラスの仮想関数などのエッジケースの周りの不明瞭さを実験している極端な状況を除いて、経験豊富な開発者によって書かれたコードは、時折の入力エラーを除いてコンパイルされることを期待するのが妥当と思われますそうでない場合、それは ' 別の同様の事件では、インタビューで不完全なコードベースが与えられ、それを完成させ、それを実行するために必要な変更を加えるように頼まれました。最初に既存のコードを読んでから、数分後(コードを見終える前であっても)、インタビュアーはそれで十分だと言った。私が彼に何をしたか(すなわち、「私は何を間違えたのか」)と尋ねたとき、彼はすぐにコードをコンパイルすることから始めたと言った。 なぜそれが関連するのでしょうか?私の意見と私の経験では、コードの一部がコンパイルされるかどうかは本質的にランダムであり、セミコロンが欠落しているかどうかなどが含まれており、基礎となるプログラムの正確性とはほとんど関係ありません。(私にとって、コンパイルに焦点を当てることは、文法をチェックするために校正せずに記事をスペルチェックに通すようなものです。) 不完全なコードを教えてくれた場合、最初にすべきことはそれを読むことです。コードが何をしているのかがわかり、アルゴリズムが正しいことがわかるまで、コンパイルしようとはしません。 とにかく、これらは最近のいくつかの事件に過ぎませんが、一般的に、多くの開発者がコードの進行について話をしているのを聞いたことがあります。あなたがコードをテストする利点を理解していますが、なぜコンパイルするのですか? だから私の質問はこれです:私が逃したものはありますか?実際にコンパイルする利点はありますか?または、これはソフトウェアコミュニティによって伝播された神話のようなもので、コードを頻繁にコンパイルする必要がありますか?

17
毎日の仕事で「正しく」と「できるだけ早く」のバランスをどのように取っていますか?[閉まっている]
私はこの質問を何度も何度も熟考しています。私は物事を正しい方法でやりたいと思っています:保守しやすい、クリーンで理解しやすい正しいコードを書くことです。しかし、私がやることは、パッチの上にパッチを書くことです。時間がない、クライアントが待っている、バグを一晩で修正する必要がある、会社がこの問題でお金を失っている、マネージャーが一生懸命押すなどの理由で。 長期的にはこれらのパッチにより多くの時間を浪費していることを私は完全によく知っていますが、今回は数か月にわたる作業なので、誰も気にしません。また、私のマネージャーの一人が言っていたように、「今すぐ修正しないと長期になるかどうかわかりません。」 これらの無限の現実/理想の選択サイクルに巻き込まれているのは私だけではないと確信しています。私の仲間のプログラマー、あなたはどのようにこれに対処しますか? 更新:この興味深い議論に感謝します。非常に多くの人々が、コードの量と品質の間で毎日選択しなければならないのは悲しいことです。それでも、驚くほど多くの人々が、この戦いに勝つことができると考えているので、この励ましに感謝します。

22
「あまりにも多くを知る」ために立ち往生[閉鎖]
http://news.ycombinator.com/item?id=4037794での詳細な議論に注意してください。 私は比較的単純な開発タスクを持っていますが、それを攻撃しようとするたびに、深い思考でスパイラルになります-どうやって未来を広げることができますか、第2世代のクライアントは何を必要としますか?側面(例:パフォーマンス、承認...)、変更を許可するにはどのように設計するのが最善でしょうか... 私は少し前に、より若く、そしておそらくより熱心に自分を覚えています。そのとき、私だった「私」は、すべてについて考えたことはありませんでした-彼は先に進んで何かを書き、それを書き直し、それから書き直しました(そして再び...)。今日の「私」はもっとためらい、より慎重です。 今日は、コードを書くのが好きではないからではなく、実際に先に進んで自分でやるよりも、座って計画を立てたり、他の人に物事を行う方法を指示したりする方がずっと簡単だと思います。-しかし、キーボードに座るたびに、私はその同じ迷惑な場所にいるからです。 これは間違っていますか?これは自然な進化でしょうか、それとも私はわだちに追い込まれましたか? 公正な開示-過去に私は開発者でしたが、今日の私の肩書きは「システムアーキテクト」です。それが何を意味するのかを考えてみてください-しかし、それがタイトルです。 ワオ。正直なところ、この質問がそれほど多くの回答を生み出すとは思っていませんでした。まとめてみます。 理由: 分析の麻痺/過剰なエンジニアリング/金メッキ/(他の「前もって考えすぎるとあなたを傷つける可能性がある」)。 特定のタスクの経験が多すぎます。 重要なことに集中しない。 十分な経験(およびそれを実現)。 ソリューション(理由と一致しない): 最初にテストします。 コーディングを開始(楽しみのために+) 1つは捨てます(+ 1つのAPIは捨てます)。 時間の制約を設定します。 綿毛をはがし、物を持ち続けます。 柔軟なコードを作成します(「1つは捨てる」の反対です)。 皆さんに感謝します。ここでの主な利点は、私がこの経験をしているのは私だけではないことを認識することだったと思います。実際、私はすでにコーディングを開始しており、大きすぎるもののいくつかは自然に落ちています。 この質問は終了しているため、本日現在、ほとんどの投票で回答を受け入れます。いつ/変更された場合-私はフォローしようとします。

2
Gitの分岐とタグ付けのベストプラクティス
現在、Pro Gitを読んでGitの使用方法を学んでいます。今、私は分岐とタグについて学んでいます。私の質問は、いつブランチを使用する必要があり、いつタグを使用する必要があるかです。 たとえば、プロジェクトのバージョン1.1のブランチを作成するとします。このバージョンを終了してリリースしたら、ブランチを残してリリースバージョンをマークする必要がありますか?または、タグを追加する必要がありますか?タグを追加する場合、バージョンブランチを削除する必要があります(マスターまたは他のブランチにマージされていると仮定します)。

17
メソッドの再利用可能性をどのように知ることができますか?[閉まっている]
私は家で自分のビジネスを気にしていると私の妻は私に来て、言う Honey ..コンソールで2018年の世界中の夏時間をすべて印刷できますか?何か確認する必要があります。 そして、Javaの経験で生涯待っていたものが次のように思いついたので、とても幸せです。 import java.time.*; import java.util.Set; class App { void dayLightSavings() { final Set<String> availableZoneIds = ZoneId.getAvailableZoneIds(); availableZoneIds.forEach( zoneId -> { LocalDateTime dateTime = LocalDateTime.of( LocalDate.of(2018, 1, 1), LocalTime.of(0, 0, 0) ); ZonedDateTime now = ZonedDateTime.of(dateTime, ZoneId.of(zoneId)); while (2018 == now.getYear()) { int hour = now.getHour(); now = …

11
システムの複雑さの増加は、プログラマーの次の世代にどのような影響を与えましたか?
「新しい」プログラマーとして(2009年に最初にコード行を書きました)、たとえば.NETフレームワークのようなものを使用して、今日非常に複雑な要素を示すプログラムを作成するのは比較的簡単であることに気付きました。ビジュアルインターフェイスの作成、またはリストの並べ替えは、ごくわずかなコマンドで実行できるようになりました。 プログラミングを学んでいたとき、コンピューティング理論も並行して学んでいました。並べ替えアルゴリズム、ハードウェアの動作原理、ブール代数、有限状態マシンなどのこと。しかし、理論で学んだ非常に基本的な原理をテストしたい場合、ライブラリ、フレームワーク、OSのようなものによって多くのテクノロジーが不明瞭になるため、始めるのが常にずっと困難であることに気付きました。 40/50年前には、メモリが十分でなく高価だったため、メモリ効率の高いプログラムを作成する必要がありました。そのため、ほとんどのプログラマは、データ型とプロセッサによる命令の処理方法に細心の注意を払いました。最近では、処理能力と使用可能なメモリの増加により、これらの懸念は優先事項ではないと主張する人もいます。 私の質問は、古いプログラマーがこれらのような革新を天の恵みまたは抽象化する追加の層と見るかどうかであり、なぜそう思うのでしょうか?そして、若いプログラマーは、拡張ライブラリの領域を探索する前に、低レベルのプログラミングを学ぶことにより多くの利益をもたらすでしょうか?もしそうなら、なぜですか?

15
単一文字の定数はリテラルよりも優れていますか?
私は最近、ほとんどすべての単一文字を定数として提供するクラスに遭遇しました。からCOMMAまでのすべてBRACKET_OPEN。これが必要かどうか疑問に思います。私は、単一文字のリテラルを定数に取り込むことが役立つと示唆する「記事」を読みました。だから、私は懐疑的です。 定数を使用する主な魅力は、変更が必要なときにメンテナンスを最小限に抑えることです。しかし、いつコンマを表すために「、」とは異なるシンボルを使用し始めますか? リテラルの代わりに定数を使用する唯一の理由は、コードを読みやすくすることです。しかし、city + CharacterClass.COMMA + state(たとえば)本当に読みやすいですcity + ',' + stateか? 私にとって、主にあなたが別のクラスと別のインポートを導入するという短所は長所を上回ります。そして、可能な限り少ないコードを信じています。だから、私は一般的なコンセンサスがここにあるのだろうかと思っています。

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