Martin Fowlerは、ソフトウェア開発における負債の概念を、技術的負債に加えて認知的負債と意図的負債に拡張することを提案しています。これらの概念は、コードの複雑さやチームの理解、意図的な技術的選択がもたらす長期的な影響を理解するのに役立ちます。
#software-engineering
30 件
ソフトウェアの「スロップ」(無駄や非効率性)を測定できるかどうかを探る実験についての記事です。著者はソフトウェア開発における無駄の定量化に挑戦し、その測定可能性と改善への示唆を考察しています。
バグのフィールドガイド
2.0この記事では、プログラミングにおけるさまざまな種類のバグについて、その特徴や発生原因、対処方法を体系的に解説しています。バグを分類し、それぞれのパターンを理解することで、より効果的なデバッグと予防策を学ぶことができます。
ブルックスの外科チームモデルは、ソフトウェア開発における生産性向上のための概念であり、AI時代においてもその原則がどのように適用され、進化するかを探求しています。
クラウドベースのAIコーディングエージェントは、永続的な環境、非同期実行、長時間実行タスク、チーム間でのコンテキスト共有、コンピュートリソースへの容易なアクセス、オフライン時や他の作業中の稼働など、ローカルエージェントに比べて機能的な利点を複数持っています。しかし、現在の議論は依然としてエディタUXやオートコンプリートに集中しており、クラウドエージェントが実際のワークフローでどの程度活用されているか疑問が投げかけられています。
現代のチーム向けソフトウェアエンジニアリングハンドブック。ソフトウェア開発のベストプラクティス、ツール、方法論を網羅し、効率的なチームワークと高品質なソフトウェア構築を支援します。
このリポジトリは、2002年に公開された「How to be a Programmer」というプログラマー向けガイドの内容をまとめたものです。初心者から中級者までのプログラマーが、技術スキルだけでなく、チームワークやキャリア構築に必要なソフトスキルを学ぶことができる実践的なアドバイスを提供しています。
エージェントハーネスエンジニアリングは、AIエージェントの能力を最大化するための体系的アプローチです。適切なツール、コンテキスト、ガードレールを提供することで、エージェントのパフォーマンスを向上させ、予測可能で信頼性の高い結果を実現します。
ソリューション志向の考え方には根本的な問題がある。問題を「解決すべきもの」と見なすことで、複雑な状況を単純化しすぎ、真の理解や持続可能なアプローチを阻害してしまう。むしろ、問題を継続的に対話し、適応していくプロセスとして捉えるべきだ。
本記事では、オンコール対応においてエンジニアが抱きがちな10の不安を取り上げ、それぞれについて「心配する必要はない」と説く。初めてのオンコールや障害対応への恐怖、完璧な対応へのプレッシャーなど、よくある懸念を軽減し、現実的な視点を提供する。オンコール文化に対する過度な心配を手放すための実践的なアドバイスが紹介されている。
ソフトウェアメトリクスの経時的分析のための研究用テストスイートを開発しました。このツールは、コードベースの進化に伴うメトリクスの変化を追跡し、ソフトウェア開発の歴史的パターンを理解するのに役立ちます。
この記事では、雇用主がソフトウェアエンジニアに対してAI技術をどのように活用することを期待しているかについて探ります。具体的には、AIツールの実装、機械学習モデルの開発、既存システムへのAI統合、そしてAI倫理と責任ある開発の重要性について論じています。
この記事は、現代のソフトウェア開発における品質の低下とその根本的な原因について考察しています。開発速度の優先、テストの軽視、複雑性の増大などが、ソフトウェアの信頼性と安全性を損なっている現状を分析します。
LLM時代において、ソフトウェアエンジニアはAIツールの効果的な活用方法、プロンプトエンジニアリング、AIと人間の協働による開発プロセスの最適化を学ぶ必要があります。従来のコーディングスキルに加え、AIを補完ツールとして活用する能力が重要になります。
長期間実行されるエージェント型アプリケーションでは、コンテキスト管理が重要な課題となります。本記事では、Slackのエンジニアリングチームが、エージェントが時間の経過とともに状態を維持し、効率的に動作するためのコンテキスト管理戦略について解説します。
ソフトウェア工学の法則
2.0ソフトウェア開発における普遍的な原理や経験則をまとめたもので、開発プロセス、設計、チームワークなどに関する洞察を提供します。実践的な知恵に基づいたガイドラインとして、より効率的で高品質なソフトウェア構築を支援します。
Postmortem-Driven Developmentは、インシデント後の事後分析を単なるレポート作成ではなく、実際の開発プロセスに統合するアプローチです。これにより、チームは失敗から学び、システムの回復力を高め、継続的な改善サイクルを構築できます。
コード経験ゼロで22,000行のアプリを構築した経験談。複雑な夕食スケジューリングエンジンをAIエージェントに作らせながら、AIの管理方法を学ぶ過程を紹介。AIは無限の知識を持つが、文脈を適切に管理しないと「家を壊して植木鉢を動かす」ような不合理な行動をとることも。
仕様の曖昧さや抜け穴を、小さな証明指向テストを用いて早期に発見する手法を紹介します。このアプローチは、形式的検証の複雑さを軽減しつつ、システムの信頼性を高めるのに役立ちます。
ソフトウェアエンジニアリングは、コード、システム、組織という3つのレイヤーで構成されています。各レイヤーには異なる課題と責任があり、これらを理解することでより効果的なエンジニアリングが可能になります。
この求人では、AIプリンシパルソフトウェアエンジニアを募集しています。米国SaaSスタートアップでのポジションで、ラテンアメリカからのリモート勤務、またはサンフランシスコでのオフィス勤務が可能です。
ソフトウェアエンジニアリングのベストプラクティスは、LLMのトークン使用量を削減する際にも有効です。コードの構造化、コメントの最適化、不要な情報の削除など、従来の開発手法がAIの効率化にも応用できます。
セキュリティツールの基盤を突然取り除くと、ツールの機能が完全に停止し、セキュリティ体制に重大なギャップが生じます。これは、基盤コンポーネントがツール全体の動作に不可欠であることを示しており、セキュリティインフラの依存関係とリスク管理の重要性を浮き彫りにします。
数学重視のコンピュータサイエンス修士号を持つデータサイエンティストが、プログラミング能力には自信があるものの、設計文書作成、意思決定の追跡、インフラ構築など、より「真面目な」ソフトウェアエンジニアリングの側面に苦手意識を感じている。AIを活用する中で、これらの管理的タスクを上達させ、楽しむにはどうすれば良いか、経験者からのアドバイスを求めている。
ソフトウェアエンジニアリングは、実装、設計、アーキテクチャの3つのレイヤーで構成されています。各レイヤーは異なるスキルと視点を必要とし、効果的なソフトウェア開発にはこれら3つのバランスが重要です。
シニアエンジニアとして学んだことについての率直な考察。経験を積む中で得た技術的・人間的な知見を、ユーモアを交えながら共有する記事です。
著者がプログラム解析の実践的な視点を共有し、理論と実装のバランス、現実世界での適用可能性、および開発者が実際に直面する課題への実用的なアプローチについて考察しています。
この記事では、確率的エンジニアリングの概念と、現代の従業員が24時間365日体制で働くことの影響について考察しています。技術的アプローチと労働環境の変化を結びつけ、持続可能な働き方について議論を展開します。
ループ不変式コード移動
1.0コンパイラはループ内のコードをループの外に移動することで、実行速度を向上させることができます。この最適化技術は、ループの各反復で変化しない計算を事前に処理することで、無駄な繰り返し計算を排除します。
コンパイラが驚かせるとき
2.0時にはコンパイラが、私のような経験豊富なエンジニアでさえ驚かせ、喜ばせることがあります。予想外の最適化や巧妙なコード生成によって、プログラミングの新たな発見をもたらす瞬間です。