トピックに関わらず、素晴らしいソフトウェアを簡単に作成できる才能のある開発者を私は個人的に知っています。これらの才能のある人々が、私たちの業界に対して一般の人々に高い期待を寄せています。しかし、私が言いたい悲しい事実は、誰もが忍者/マスター/スターの開発者ではないということです。
私はこれらの輝く新しい星ではなく、私は平凡な開発者です。あなたが天才プレーヤーでないなら、この記事はこの業界で生き残る方法をあなたに導きます。
最も単純なもの-ちょうどグーグル
思い出せない。標準ライブラリの関数とメソッド、パラメーターの場所、パッケージ名、ボイラープレートコードなどは、すべて私の頭を超えています。
だから、私はグーグル検索を使わなければなりません。私は毎日これをします。古いプロジェクトのコードも再利用しています。StackOverflowやGithubから回答をコピーして貼り付けることもあります。はい、私の開発は実際にはStackOverflow駆動の開発と呼ばれます。
しかし、私は一人ではありません。他の多くの開発者も同じことをしています。Ruby on Railsの作成者が始めた幅広いTwitterディスカッションがあります。
そもそもなぜこのふるまいが悪いと思ったのですか?これにはいくつかの欠点があるためです。
- 悪い設計上の決定や他人に対して脆弱なコードをコピーすることになります
- 依存性のメンタリティを形成します。コンテンツをグーグルできない場合は、助けを求めることができます
- インターネットなしでは機能しません
しかし、これは大きな問題ではないと思います。それはあなたの秘密兵器になることさえできます。その悪影響を減らすためのいくつかの提案があります。
サバイバルガイド:
IDEを使用してオートコンプリートと提案を取得するので、プログラミング言語の基本をグーグルする必要はありません。
この方法でなく、この問題を解決した場所を覚えておいてください。このようにして、いつでもそこでソリューションを見つけることができます。
プロジェクトに貼り付けられたすべてのコードは、後で分析、リファクタリング、レビューする必要があります。このようにして、プロジェクトにダメージを与えることなく、迅速にソリューションを提供します。
すべてをシンプルかつ明確に保つ
機械は私たちが言うことを行います。間違っていても躊躇しません。したがって、ソフトウェア開発の主な問題はマシンではなく、開発者の精神的な能力です。このことを改善する余地は非常に限られています。したがって、私たち(平凡な開発者)は、複雑な抽象化、ファジーアルゴリズム、または判読不能な長いコードブロックの作成に、限られた頭脳力を無駄にすることはできません。すべてをシンプルかつ明確に保つ必要があります。
しかし、コードが単純か複雑かをどのように判断するのでしょうか。WTF / Minuteメソッドを使用して、コードの品質を測定します。
この原理は理解しやすいです。コードで理解できない何かを見つけたときはいつでも、それは複雑すぎます。どうやってするの
- デザインをよりクリーンにするために書き換える
- ドキュメントを提供する
- 最も注意が必要な部分にメモを追加します。ただし、コメントはコード自体を説明する必要があります。
それをシンプルかつ明確にゼロから保つ方法:
- 変数、関数、クラスに正しい名前を使用する
- プログラムの各部分が1つのことだけを行うようにしてください
- 純粋な関数は通常の関数よりも優れています
- 通常の機能はクラスより優れています
- 需要が高いときにのみクラスを使用する
自信がない
一部の開発者は、高品質のコードを提供できることを証明します。写真に写っている女性を見てください。アポロ月面着陸プログラムのチーフソフトウェアエンジニア、マーガレットハミルトンです。それでは、彼女と同じくらいの高さは何ですか?まあ、それは彼女が月のミッションのために書いたコードです:
しかし、コードを書くときはいつでも自信がありません。プロジェクトの最も単純な部分でさえ、私は物事を台無しにすることができます。失敗する理由は次のとおりです。
- 言語エラー
- 論理エラー
- 設計エラー
- スタイルエラー
- セキュリティエラー
- WTFエラー(私のお気に入りです!)
「バグのないコードの書き方を学ぶ」という魔法の本はありません。このフレームワークを除いて、すべてのソフトウェアにバグがあるからです。バグに遭遇したときは対処する必要があります。
重要な点は、誰もが明白なエラーなしでコードを書くことです。はい、少なくとも、この目標に向けて取り組む必要があります。しかし、どのようにしてプロジェクトを破壊から保護しますか?多くの方法があります。
サバイバルガイド:
- テストを書く。たくさんのテストを書いてください。統合テストから単体テストまで。各プルリクエストの前にCIでテストを実行します。これにより、一部の論理エラーを回避できます。
- 静的型付けまたはオプションの静的型付けを使用します。たとえば、Pythonではmypyを使用し、JavaScriptではフローを使用します。プラスの効果:よりクリーンなデザインと「コンパイル時」のチェック。
- 自動スタイルチェックを使用します。言語ごとに多くのスタイルチェッカーがあります。
- 品質チェックを使用します。一部のツールは、コードベースで複雑なヒューリスティックアルゴリズムを実行して、さまざまな問題を検出します。たとえば、このコード行にはロジックが多すぎ、このクラスは不要であり、この関数は複雑すぎます。
- コードを確認します。マスターにマージする前に確認してください。そして合併後しばらくして。
- コードをレビューするために誰かにお金を払ってください。この方法には、大きなプラスの効果があります。なじみのない開発者があなたのコードを見に来た場合、彼らは矛盾や不適切な設計決定を見つける可能性が高くなるからです。
私だけでなく
約10年前、私のチームが最初の大規模なソフトウェアプロジェクトを開発したとき、それをJavaソースファイルとしてリリースしました。ただし、ターゲットサーバーでコンパイルすることはできません。これは、顧客に提出する必要がある数時間前です。これは大きな失敗です。結局、私たちは立ち上がって実行できるようにするためにあらゆる手段を使い果たしましたが、これが本当に忘れられない経験であったことは否定できません。
これは、ビルドパイプラインに多数の構成と複雑さがあるために発生します。そして、このシステムの複雑さを適切に管理することはできません。その日から、この複雑さを軽減するために、プログラムを分離された環境にパッケージ化することを試みました。そして、実際の展開が行われる前に、この環境でそれらをテストします。
近年のdocker(および通常はコンテナー)の台頭により、物事はよりシンプルになっています。Dockerを使用すると、開発、テスト、本番環境を同じ隔離された環境で実行できます。したがって、重要なものを見逃すことはありません。
それで、あなたはどうしますか?私自身について言えば、サーバーの作成、初期構成、または接続の際には、常に何かを忘れています。覚えておきたいことがたくさんあるから!幸いなことに、これらはすべて自動化できます。展開プロセスを自動化するためのさまざまなツールがあり、これらのツールは、Terraform、Ansible、Packerなど、非常に強力です。ツール情報を読んで、タスクに実際に必要なものを見つけます。
また、できるだけ早くCI / CDを構築するようにしています。このようにして、テストまたはデプロイメント中にビルドが失敗した場合、レポートが送信されます。
サバイバルガイド:
- 展開に使用されるコンテンツを自動化します。
- アプリケーションの開発、テスト、およびデプロイメントにdockerを使用します。
- 展開ツールを使用します。
アプリケーションがデプロイされた後、私はまだ自信がありません
最後に、私のアプリケーションは生産段階に入りました。それは今働くことができます。私は休むことができ、何の問題もないはずです。いやいや!すべてがバラバラになりました。はい、私は間違っていません:すべて。
実際、既存の問題を簡単に見つけて解決できるツールがいくつかあります。
- 衛兵。ユーザーのいずれかがエラーを犯した場合、通知されます。ほとんどすべてのプログラミング言語が拘束されています。
- さまざまなサービスとツールを使用して、1つの場所で複数のプロセスとサーバーからログを収集します。
- サーバーの監視。ここで、CPU、ディスク、ネットワーク、メモリの表示を設定できます。ユーザーが実際にサービスを中断する前に追加する必要がある時間を発見することもできます
つまり、本番環境のアプリケーションを監視する必要があります。これらのツールをすべて使用することもあれば、最も必要な部品だけを使用することもあります。
生涯学習
学ぶことは無限大です。優れたソフトウェアを作成したい場合は、その方法を常に学ぶ必要があります。ショートカットも魔法もありません。毎日少しずつ進歩していけば、どんどん良くなっていきます。
つまり、2つの基本的なことを理解する必要があります。
- 誰もが問題を抱えています。重要なのは、これらの問題に備える必要があることです。
- 問題の原因を許容範囲内に抑えることができます。
これらはあなたの精神的能力や精神性とは何の関係もありません。
上記は私が収集したビデオリソースの一部であり、このプロセスで非常に役立ちました。独習中に情報を見つけることができないという感覚を味わいたくない場合、誰もあなたの質問に答えず、数日間あきらめることを主張しない場合は、さまざまなソフトウェアテストリソースと技術的なディスカッションを備えた控除グループ[313782132]に参加できます。
良い記事をお勧めします:
自動テスト実施者はどのように仕事を選ぶのですか?将来のキャリア開発とは何ですか?
自動テストの基本、知っていることも知らないこともすべてここにあります!
悲しいスパイシーなストリップのパックで、トップ10の最高の自動テストツールを共有
ソフトウェアテストについて!あなたが知りたいすべてがここにあります、Xiaobaiは必見です!
10年間のソフトウェアテストエンジニアの認識-まだ混乱している友人へ
PythonとJavaのどちらが自動テストに適していますか?
Python + Selenium自動テストを10分でプレイして、すぐに始めましょう!
ここで私は誰にでも建築学習交換グループを推薦します。コミュニケーション学習グループ番号:313782132シニアアーキテクトによって記録された一部のビデオ録画が共有されます:Spring、MyBatis、Nettyソースコード分析、高並行性の原則、高パフォーマンス、分散、マイクロサービスアーキテクチャ、JVMパフォーマンスの最適化、分散アーキテクチャなど。これらは建築家に必要な知識システムになります。