私が知っていることの道をたどって、正しいコーディングプラクティスを実装しようとするのか、それとも良いコーディングプラクティスから始めて、自分の道をたどろうとするのか?


9

まず、私は趣味として手続き型プログラミングに慣れていると言いたいのですが、OOPをいくつかの言語で学び、理論を理解しようとしています。練習ではありません。

特にデータベースバックエンドを備えたPHPで構築したいペットプロジェクトがあります(何でもかまいませんでした)。私の主な理由は、アプリが任意のデバイスで使用されることでした。そのため、WebAppは論理的な選択のように思われました。

メンテナンス可能なPHP WebAppを構築するには、OOP、クラス、フレームワーク、ライブラリなどを使用する必要があることを理解しています。これは論理的に聞こえるので、人気のあるものをいくつか試すことにしました。しかし、それらを試してチュートリアルを終わらせようとする週末全体を過ごした後、チュートリアルを私の小さなプロジェクトに適合させようとすることに戸惑い、挫折しました。

私は、主に概念実証のために、別のプログラム(Microsoft Access)でアプリを構築することを決定し、Webパーツを除いて、主な目標をわずか数時間で達成しました。

私の質問は、私は、私が知っているの道をたどる必要がありますされ、その後、正しいコーディングプラクティスを実装しようか、私がすべき始める良いコーディング慣行で、そしてを通じて自分の道をごまかすしようか?このプロジェクトでは、GitHubでオープンソース化したいので、自分のコードを使用および変更している他の人に開放的にしますが、コードの記述が不十分だと、プログラマーを集めて支援するのが難しいことも知っています。


2
何をしようともコーダーを集めるのは難しいです。すべての段階でコードを読み取り可能にするか、誰もコードに触れないようにします。OOPは手続き型ではなく、正しいか人気があるために使用してください。要件が変化し、どのように変化するかを予測するのが難しいため、これを使用してください。できる限り少ない仮定を使用します。
candied_orange 2018

5
「まるまる週末の後」、あなたはあなたの目の前ですべての部分が所定の位置に落ちないことにイライラしています。別の趣味を検討することをお勧めします。または、この経路が1歩ずつ進むことを受け入れ、乗り心地を楽しんでください。
マーティンマート2018

4
OOPが良い習慣であることは、解決されるにほど遠い。実際、現在のところ、機能的なアプローチに負けています。それでもコードをOOPアプローチに結び付けたい場合は、これが便利な場合があります。私は個人的に、手続き型または機能型のWebアプリケーションのほうが非常にシンプルで直感的で、自然なエントリポイントがあり、スタックを永続ストレージ(データベース)に呼び出し、スタックを元に戻します。
jpmc26 2018

成功するオープンソースコミュニティ実際に確立することに関して、私は、経験に基づいたいくつかの非常に洞察に富んだヒントと記事をリンクしました。(私の記事ではなく、私はそれが好きです。)
ワイルドカード2018

1
OOPは基本的に、単純または抽象インターフェースの背後にある状態変化をカプセル化することです...これは、要求を処理するステートレスサーバーを作成するのにはあまり適していません。実行したい種類の作業に適切にOO言語を使用することは、OOプログラミングよりも関数型プログラミングに非常に似ているため、これらのチュートリアルを適用するのは難しいと思われるかもしれません。
Matt Timmermans、2018

回答:


12

ベストプラクティスは主に、プロジェクトを*簡単に実行できるようにするために経験から収集された提案と提案です。

このIMHOの重要な側面は、経験の部分です。これらのベストプラクティスは、初心者とそれを共有する経験が豊富な人にとっては良い方法ですが、これがベストプラクティスとなるものを真に理解するには、最低限の経験が必要だと思います。それ以外の場合は、法の支配として盲目的にそれらに従うことになります。最終的に私は、他の人にゆっくりと考えさせて、学習を遅くすると思います。

いずれにせよ、私にとってソフトウェアプロジェクトで行う最も重要なことは、...まあ...完成させて、出荷する...要するに、機能させることです!

その時点より前のものは、あなたの想像力の産物であるベーパーウェアです。動作するものがあれば、それが遅いか、保守が難しいか、テストが難しいかなどを真に評価することができます。動作させるプロセスは、おそらくそれを再考するのに役立つベストプラクティスが存在するものを公開します。その目標を達成しやすくする方法で。

だから、はい、まずあなたが知っていることから始めて、あなたがやっていることを難しいことに注意してください。壁にぶつかったら、一歩下がってその壁を見て、何でできているかを学びます。多くの場合、あなたはあなたが問題の根源であることに気付くでしょう。解決しようとしている問題の一部についての理解の欠如、所有しているツールをより効果的に活用する方法に関する知識の欠如、またはずっと真っ直ぐであるが、まだ準備ができていなかった他のツールに対する無知彼らの習得を開始します。

同時に、物事を行うための新しい方法について読み続けてください。これらのベストプラクティスを読んで、プロジェクトで難しいと感じていることに当てはまるかどうかを確認してください。そうでない場合は、それらの存在を覚えて、時々再訪してください。好奇心を持ち続ける。やがて、ここで得た知識をもとに、上記の観察が自然にクリックされることがわかります。

最後に、学んだことを試し、それが物事をより簡単にするかどうかを確認します。これを続けると、最終的には彼らが何であるかについてのベストプラクティスを読むでしょう。苦しんでそれを簡単にする方法を学んだ人々からのただの単純なアドバイス。一体、あなたはそれらのいくつかに同意せず、あなたのやり方が実際にあなたのためにより良く機能するのを見るかもしれません。しかし、知識がなければ、あなたは盲目を歩いているだけです。

幸運を


4
「ソフトウェアプロジェクトで最も重要なことは、...まあ...完成させて、出荷する...つまり、機能させることです!」-十分に賛成できない。多くの人々は、これが常に彼らの焦点であるべきであるという点を逃しています。
ivan_pozdeev

@ivan_pozdeev私がキャリアでこれに気づくまでの長い間、私がやる前に私が残したのは、一連の未完の失敗だけでした。それから私は私が最も成功したプロジェクトの一つとなったその品質の失敗を考えたものを出荷しました。あなたが他人の意見にどのような価値を置いているかに関係なく、結局のところ、それは彼らがあなたがすることをすることです。
ニュートピア2018

3
「*可能」とはどういう意味ですか?
ロバートハーヴェイ

1
@RobertHarvey Testable、Maintainable、Portable、Reusable etc基本的に、特定の品質を目指しているものなら何でも。彼らが後置詞「可能」で終わる言葉である傾向があるということだけがすべてです。ある側面に最適化するときに非常に頻繁に怠惰なプラスを得たと思います。それは他の側面で妥協することを意味するので、具体的なことを避けて、主要な点からのつまらない接線を引き付けないようにしました。
ニュートピア2018

8

TL; DR

あなたはそれをすべて知ることは決してないでしょう。あなたが知ることができるすべての個々の「もの」の周りには、常に常により深さと幅があります。あなたが行くように学びます。現在関連があると思われる「ベストプラクティス」を適用します間違いを犯す。本当にコストのかかる間違いをしないようにしてください。プロジェクトがコストのかかるミスにつながる可能性がある場合は、メンターを見つけます。


そして今、長い答え...

1.「稼働中のソフトウェアは、進行状況の主要な指標です。」(アジャイルマニフェスト

あなたの知識の端が見えるなら、それは素晴らしいことです!エッジを追求!学び続けます!しかし、心に留めておいてください、あなたは永遠に学び、分析することができます

何かを構築します。


2.学び、間違いを犯します。「悪い」ものは作らないでください。*

知識/スキルの境界を押し広げてください。あなた間違いをするでしょう。それらから学ぶことができます。しかし、無謀である必要はありません。

より経験豊富な開発者やメンターを見つけて作業するために費やす時間は、プロジェクトのビジネス価値リスクプロファイルに比例して増加するはずです。

自分で小さなCLI 作成している場合:好きなように動作させる。

銀行のWebポータルを作成している場合:非常に経験豊富な開発者で自分を囲んでください。


3.「ベストプラクティス」は引用符で囲み、ウィンクで話します。

「プラクティス」は、少なくともいくつかのケースでXの達成に成功していることが確認された場合、「ベストプラクティス」に昇格されます。誰かが、ベネフィットXを達成するためのプラクティスAの利点を認識し、インターネット上で「ベストプラクティス」であることを宣言します。他の人は同意します—多くの場合、それには正当な理由があります。しかし、その時点から、一般的に、一部のプラクティスが「ベストプラクティス」であり、他のプラクティスが「アンチパターン」またはスティッキー」である理由を見失っています

問題は、「ベストプラクティス」が利己的でないことです。「Antipatterns」は実際にはそれ自体が悪魔的ではありません。そして、「悪臭」でさえ、腐敗に由来する場合があります。時々、その悪臭はただの空想的でおいしいチーズです...

ディペンデンシーインジェクション」はビジネスにとって本質的に価値があるため、「ディペンデンシーインジェクション」(DI)のようなことは実践しません。実用的な製品を構築することは、遠く離れた場所でも必須ではありません。それはあなたの最終製品であなたが望むかもしれない何かを達成します。しかし、それまた、あなたの仕事をより長くするだけで何の利益もないかもしれません ...

うーん...

では、「ベストプラクティス」に従う必要がありますか?理解できなくても?...エラー...はい。いいえ。でも、はい。しかし、あなたとあなたのソフトウェアとその目的に本当に当てはまるものだけです。

POAPを呼び出します(うん、私のブログ。)

原則、パターン、および実践は最終的な目的ではありません。

したがって、それぞれの優れた適切なアプリケーションは、より優れた、より最終的な目的によって刺激され、制約されます。自分が何をしているのかを理解する必要があります。

(POAPはPOAPから免除されません。)

たとえば、DIのすべてのニュアンスを完全に理解しているとは限りません。しかし、意図を理解すれば、DIを「使用する必要がある」かどうかがわかり、DIを暗黙的によりよく理解できるようになります。

そして、製品をリリースしたら、DI(または何でも)が本当に有益であったかどうかを振り返ることができます。もしそうなら、書面で理由を明確に述べなさい。そうでない場合は、理由を書面で明確にしてください...


ボーナスリーディング/やや適切:

分析麻痺はものです。分析して学ぶ必要があります。しかし、あなたも物事を成し遂げる必要があります。残高。

あなたはいつもカウボーイコーダーのように感じるかもしれません


* 注目に値することする、実際に悪い間違いをしてしまいます。しかし、あなたは人間だと思います。だから、私たちはあなたを前もって許します...または、少なくとも私はします。多分。...まあ...私たちは見ていきます。


7

私の質問は、私が知っていることの道筋をたどって、正しいコーディングプラクティスを実装しようとするのか、それとも良いコーディングプラクティスから始めて、自分の道をたどろうとするのか、です。

最善を尽くしても、何かを出荷することはできますか?ユーザーが製品の品質と魅力を評価する方法と、その背後にいる開発者がコードの品質を評価する方法の間には、2つの異なる力があります。これら2つの力をできるだけ調和させるようにしてください。どちらか一方に重点を置くと、他方を犠牲にして、通常、最も非生産的なルートになってしまいます。


6

さて、まず第一に、私は良いコーディングプラクティスを採用することは曖昧ではないことをお勧めします...トリックは、各プラクティスの目的とそれを適切に実装する方法を理解することです。

非常に短い時間で多くのことを成し遂げることができるため、迅速なアプリケーション開発環境は魅力的です。Accessで会計システム全体を一度構築しました。しかし、あなたはそれを自分で言った:書き直さなければ、そのようなアプリケーションをWebに取り込むことはできず、そこで必要なツールはまったく異なる。

AccessやVisual Basicなどのビジュアルデザインツールを使用しない理由はいくつかあります。彼らは実際に何かを達成するコードからあなたを隔離する傾向があります。Accessはすばらしいツールですが、Webアプリケーションがインストールを回避するように特別に設計されていることが非常に重要です 外観のカスタマイズは難しい場合があります。Webで必要ない場合でも、Accessアプリケーションは常に他のAccessアプリケーションと非常によく似ています。最初のAccessアプリケーションを書くほとんどの人は、良いアプリケーションを書くのに十分な知識を持っていません。Accessを使えば、悪いアプリケーションを簡単に書くことができます。

これで、アプリケーションをWebで利用するための新しいテクノロジーを習得することを辞退しました。最初から正しい方法で構築する必要がありますか?もちろん。しかし、新しい開発環境と哲学を学ぶことは、他のことを学ぶことに似ています。あなたは物事を正しくするためにしばらくそれを傾斜させる必要があります。

だから、私はあなたが誤った二分法を提起したと思います。「ベストプラクティス」のすべてを最初に学ぶ人はいません。彼らは彼らが行くにつれてそれらを学びます。しかし、あらゆるOOP言語で生産性を発揮するには、いくつかのOOP、または少なくともクラスが基本的にどのように機能するかを知っている必要があると思います。

それだけの価値があるので、PHPがあなたの最良の選択だとは思いません。PHPは魅力的です。「浅い」ということです。つまり、実際に動作するプログラムを書くために多くのことを知る必要はありません。ベストプラクティスの大部分は開発者に任されています。つまり、PHPは「優れた」プログラムの作成を支援するものではありません。これは必ずしも悪いことではありませんが、Accessのように、最終的にはより堅牢なプラットフォームのためにPHPを廃止する可能性があることを意味します。


私の暇な時間に「楽しみのため」にのみコーディングを行うプログラマーとして、Debianサーバーで実行する場合、より堅牢だと思いますか?
カナダのルーク

1
それがおもしろいのであれば、PHPで十分でしょう。それはあなたが他の何かに移動することを決定した場合、それを学ぶのに膨大な時間を費やさないという長所があります。小さなアプリケーションに特に役立ちます。
ロバートハーヴェイ

言語の選択はここでは関係ないようです。その最後の段落は、そうでなければ良い答えに多くを追加するようには見えません。
2018

1
@Cypher:これは、Accessの説明で概説したのと同じ理由で関係があります。「ベストプラクティスは主に開発者に任されている」と書かれている部分をもう一度読んでください。
ロバートハーヴェイ

悪口を言う必要はありません。PHPに関するコメントは偏見があり、意見が分かれており、それ以外の点で良い点(2番目から最後の段落)をそらしています。しかし、ちょっと...それはあなたの答えです。
2018

1

OOPは、適切なタイミングで適用できるもう1つのパターンと考えてください。OOPは、すべてのタスクを体系的に解決できるフレームワークではありません。そのようなことはソフトウェア工学には存在しません。

また、人々が優れた実践であると主張していることは、時として疑わしいことに注意してください。私は、経験の浅い開発者が、与えられた問題には不要な非常に複雑なプログラミングパターンを採用することをよく見ました。コードの複雑さは、問題の複雑さに対して適切でなければなりません。シンプルさは重要な価値です。

Web上の記事、業界の専門家からの声明、および上級の同僚からのアドバイスは、間違いである可能性があります。私はこれをたくさん見ました。

したがって、問題を解決する最も簡単なソリューションを適用することをお勧めします。おそらく、これはあなたのスペースで人気のあるフレームワークの1つの使用を包含します。この制約内で、好きな種類のコードを自由に選択できます。彼らのやり方があなたのケースに適していると単純に考えないでください

また、特定の手法が推奨される理由も理解してください。たとえば、OOPはカプセル化に関するものです。他の方法でカプセル化できます(手順もカプセル化に関するものです)。

否定的な例:時々人々はデータベースを抽象化するためにデータアクセス層を書きます。ここで、このパターンの本質は、具体的なデータストアから独立し、より単純なインターフェイスをコードの上位層に公開することです。ただし、これらのメリットが必要ない場合は、データアクセスレイヤーは必要なく、作業を節約できます。しかし、多くの専門家は常にDALを行うことを推奨していますが、これは誤った推奨事項です。

多くの場合、優れたコードは操作するのが楽しいものです。インフラストラクチャの懸念を払うのではなく、実際の要件に取り組むことができるので楽しいです。あなたがやっていることがあまりにも面倒な作業であることがわかった場合は、おそらく間違ったパターンのセットを選択したでしょう。

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