プログラミングとは、キーボードを叩き、できるだけ速くタイプすることではありません。 キーボード ショートカットをひたすら記憶し、最終的にマウスを時代遅れにすることでもありません。 そもそもそれが可能であるとしても、そこにあるすべてのプログラミング言語を学ぶことではありません。 優れたプログラマーは、コンピュータのブランド、価格、性能、オペレーティングシステム、コードエディターやIDE(VS Code、Atom、IntelliJ IDEA、Vim、Notepad++、その他)の好みによって定義されるものではありません。 多くのハリウッド映画のおかげで一般的に信じられていることとは逆に、プログラミングは間違いなくハッキングと同等ではありません
さらに、プログラミング言語の構文や内蔵機能の暗記にとどまらず、プログラミングを行うことができます。 論理、条件、ステートメント、アルゴリズム(特にソート)などは、プログラミングとは何かということの全体像を描き出してはいないのです。 数学、再帰、コンピュータサイエンス、デザインパターンなども、プログラミングを正しく理解しているとは言えません。
設計と計画
1 行のコードを書く前に、プロジェクトの設計とアーキテクチャを徹底的に計画し、スムーズな開発サイクルを確実に、あるいは少なくともその可能性を高める。 ここで、ソフトウェア設計が登場します。 ツール チェーン、パイプライン、公開および内部 API の抽象化レイヤー、モジュール化、オブジェクトの関係、およびデータベースの構造化はすべて、この開発段階で計画されます。 これが、私たちが家庭の「IT担当者」あるいは「カスタマーサポート」である理由でしょう。 壊れているものを直すのは、実質的に私たちの仕事なのです。 プログラミング」は「問題解決」の美化された言い方であるかのようです。
言い換えれば、私たちはコンピュータ上でもオフラインでも生きているデバッガーであり、このため、文書の読み方、書き方を知っていることが重要なのです。 適切なドキュメント (詳細なドキュメントの実際のページの形、またはコードベースに価値あるコメントを散りばめるという単純な形) は、プログラマーの最も重要なライフラインの 1 つとして機能します。 これがないと、デバッガとしての役割を果たせず、暗中模索の状態になってしまいます。 フレームワークやレガシーコードベースがどのように動くのか、実験や調査にほとんどの時間が費やされてしまうため、ほとんど進歩がないのです。 全体として、それはひどくひどい開発者体験になります。
すべての可能なシナリオを検討する
デバッグは、現状ですでに十分に困難です。 さらに悪いことに、コードの実行は通常、直線的ではありません。 大規模なプロジェクトでは、if
ステートメントを持つプログラム ロジックにより、可能な実行パスの複数の「分岐」を伴います。 特にユーザーの入力が含まれる場合は、考えられるシナリオやエラーを一つ一つ考慮しなければならないのです。
ユーザー エクスペリエンス
開発の世界から一歩外に出ると、私たちは平均的なユーザーの靴を履くことになります。 機能性の提供、新機能の追加、バグの修正、コードベースの文書化に加え、平均的なユーザーがどのようにアプリやソフトウェアと相互作用するかに焦点を当てます。 アクセシビリティ、ユーザビリティ、使いやすさ、発見しやすさ、UI デザイン、カラー テーマ、機能的なアニメーション、パフォーマンスなど、優れたユーザー エクスペリエンスにつながる複数の要素を検討します。 私たち、特にコンピュータ サイエンスのバックグラウンドを持つ者は、最も時間的、空間的に効率の良いアルゴリズムを使用し、書くように努めています。 私たちは、利用可能なメモリ、CPU、および GPU を最大限に活用するために、マイクロ秒という計り知れない時間スケールにこだわっています。 私たちは、サーバーからの応答のペイロードを最小化するために、HTML、CSS、および JavaScript を最小化および圧縮するために輪を広げます。 画像やその他の雑多なリソースも圧縮して遅延ロードし、ページが意味を持ち使用できるようになるまでにユーザーがダウンロードしなければならないデータ量を最小限に抑えます。 実際の進歩や生産性のために行う必要があることに焦点を当てるのではなく、コード ベースの特定の部分を最適化することに不必要に夢中になると、早すぎる最適化が問題になります。 その場合、コード ベースのどの部分が本当に最適化を必要としているかを判断する知恵が必要です。
セキュリティ
ソフトウェアの UI やロジックを超えて、プログラマとして、私たちはユーザーのセキュリティに対して責任があります。 データが非常に欲しがられ、大きく収益化される今日において、ユーザーの個人情報が安全であることを確認することは、これまで以上に重要です。 私たちが個人情報保護のために特別な措置を講じるのは、ユーザーの皆様が私たちのソフトウェアを信頼してくださっているからです。 その責任を果たさないのであれば、私たちは本物のプログラマーとは言えません。
セキュリティにアプローチする際、安全すぎるということはあり得ません。 一般的な経験則として、私たちは「ユーザの入力を決して信用しない」ようにしています。 データとユーザー入力を徹底的にサニタイズすることは、「ベスト プラクティス」とさえ考えられます。 注意深く扱わないと、ソフトウェアやインフラストラクチャが大きな危険にさらされるだけでなく、プログラマーとして保護すると約束した、機密性の高いユーザー データが危険にさらされる可能性があるからです。 ウイルス、ワーム、トロイの木馬、アドウェア、キーロガー、ランサムウェア、およびその他の形態のコンピューター マルウェアが広がり続け、世界中の何百万台ものコンピューターやデバイスを苦しめています。 ハードウェアとソフトウェアの技術的な改良が何十年も続いた後でも、無敵のシステムというものは存在しないのです。 セキュリティは常に磨かれている技術ですが、システムを「ハック」するあらゆる可能な方法を調査して探す、詮索好きな少数の人が常に存在するため、完璧になることはないでしょう。 これは、データ損失、ファイル破損、システムクラッシュなどの不都合を引き起こす可能性のある前述の脅威からユーザーを保護するためです。
チームワークが夢を実現する
たとえそれが必ずしもプログラミングに関連していなくても、チームワークはソフトウェア開発において極めて不可欠な役割を果たします。 どんな大規模なプロジェクトでも、その複雑さと可動部分により、1 人だけでは、定期的な反復の速いペースで、またはクライアントや監督機関の厳しい期限や時間の制約のもとで、高品質のソフトウェアを開発することは不可能なのです。 1 人の人間が、すべての面を効果的かつ凝集的に接着するのに必要なすべてのスキルと知識を持つことはありません。 あるチームはUIデザインやアクセシビリティを担当し、別のチームはソフトウェア自体の機能を担当するかもしれません。 さまざまな専門チームの能力をすべて組み合わせれば、結果として、財務的および実用的な制約の中で、最高の機能性、ユーザー体験、パフォーマンス、およびセキュリティを備えたソフトウェアができあがります」
時間管理と納期厳守のためには、ワークフローの整理と自動化が最も重要です。 私たちが時間をかけてビルド ツールやパイプラインを適切に構成するのは、そうすることで将来的に多くの時間を節約することができるからです。 一般に、時間が経つにつれて、投資に対するリターンは増加します。
Working well with others
チームワークと協力のアイデアを説明すると、最終的に、プロジェクトの成功は、それを支えるチームの成功に大きく依存するので、同僚と健全な関係を確立しています。
私たちはチームでソフトウェアを開発しているため、私たちのコードを読む他の人たちのことを気にかけなければなりません。 開発サイクルを長期的に持続させるためには、プロジェクトのロジックや機能と同様に、読みやすさと保守性が重要であると考えられています。 私たちは一貫して、良い、読みやすいコードを書き、有益なコミットメッセージとドキュメントを提供します。 また、コードベースとその基礎となる設計やアーキテクチャに慣れるためのもうひとつの方法でもあります。 建設的な批評は、受け取る側にとっては不愉快で扱いにくいものですが、プログラマーとして向上するためには、それを適切なアドバイスとして受け取ることが重要なのです。 他の側面を省いて、1つの側面だけに厳密に焦点を当てるだけでは十分ではありません。 注目すべき規模や重要性を持つプロジェクトでは、数行のコードを入力するような単純なものではありません。 成功するためには、綿密な計画、設計、考察、そしてチームの協力が必要なのです。 実際、プログラミングでは、特に長時間のデバッグでは、タイピングよりも考えることに多くの時間が費やされます。 順応性と絶え間ない学習が、この業界を生き抜く鍵です。 学び続けるということをしない限り、関連性を保つことは期待できません。
最後に、世界中のすべての開発者の努力に敬意を表して、この記事を結びたいと思います。 この記事を書くために、私は開発者チームの日々のワークフローを振り返る必要がありました。 普段は気づかないプログラミングやソフトウェア開発のさまざまな側面に目を向ける必要がありました。 それ以来、私は自分のコンピューターにインストールされているすべてのソフトウェアに感謝するようになりました。 その意味でも、経験の有無にかかわらず、今日はプログラマーに感謝することをお勧めします。 彼らがいなかったら、私たちはどうなっていたことでしょう。
彼らのハードワークを決して当たり前だと思わないでください。