Code Leader: Using People, Tools, and Processes to Build Successful Software
暫譯: 程式碼領導者:運用人員、工具與流程打造成功軟體
Patrick Cauldwell
- 出版商: Wrox Press
- 出版日期: 2008-05-05
- 定價: $1,400
- 售價: 2.1 折 $299
- 語言: 英文
- 頁數: 233
- 裝訂: Paperback
- ISBN: 0470259248
- ISBN-13: 9780470259245
-
相關分類:
管理與領導 Management-leadership、軟體工程
立即出貨 (庫存 < 3)
買這商品的人也買了...
-
$2,050$1,948 -
$1,188Beginning Visual C++ 6 (Paperback)
-
$399After Effects in Production: A Companion for Creating Motion Graphics, 2/e
-
$880$695 -
$1,590$1,511 -
$880$695 -
$990LPI Linux Certification in a Nutshell, 2/e (Paperback)
-
$350$298 -
$1,280RFID+: CompTIA RFID+ Study Guide and Practice Exam (RF0-001)
-
$1,872Continuous Integration: Improving Software Quality and Reducing Risk (Paperback)
-
$720$569 -
$740$585 -
$750$593 -
$980$774 -
$550$468 -
$400$316 -
$1,200$948 -
$880$695 -
$980$774 -
$680$537 -
$580$458 -
$890$757 -
$490$387 -
$260$234 -
$260$234
商品描述
This book is for the career developer who wants to take his or her skill set and/or project to the next level. If you are a professional software developer with 3–4 years of experience looking to bring a higher level of discipline to your project, or to learn the skills that will help you transition from software engineer to technical lead, then this book is for you. The topics covered in this book will help you focus on delivering software at a higher quality and lower cost. The book is about practical techniques and practices that will help you and your team realize those goals.
This book is for the developer understands that the business of software is, first and foremost, business. Writing code is fun, but writing high-quality code on time and at the lowest possible cost is what makes a software project successful. A team lead or architect who wants to succeed must keep that in mind.
Given that target audience, this book assumes a certain level of skill at reading code in one or more languages, and basic familiarity with building and testing software projects. It also assumes that you have at least a basic understanding of the software development lifecycle, and how requirements from customers become testable software projects.
Who This Book Is Not For: This is not a book for the entry-level developer fresh out of college, or for those just getting started as professional coders. It isn’t a book about writing code; it’s a book about how we write code together while keeping quality up and costs down. It is not for those who want to learn to write more efficient or literate code. There are plenty of other books available on those subjects, as mentioned previously.
This is also not a book about project management or development methodology. All of the strategies and techniques presented here are just as applicable to waterfall projects as they are to those employing Agile methodologies. While certain strategies such as Test-Driven Development and Continuous Integration have risen to popularity hand in hand with Agile development methodologies, there is no coupling between them. There are plenty of projects run using SCRUM that do not use TDD, and there are just as many waterfall projects that do.
Philosophy versus Practicality: There are a lot of religious arguments in software development. Exceptions versus result codes, strongly typed versus dynamic languages, and where to put your curly braces are just a few examples. This book tried to steer clear of those arguments here. Most of the chapters in this book deal with practical steps that you as a developer can take to improve your skills and improve the state of your project. The author makes no claims that these practices represent the way to write software. They represent strategies that have worked well for the author and other developers that he have worked closely with.
Philosophy certainly has its place in software development. Much of the current thinking in project management has been influenced by the Agile philosophy, for example. The next wave may be influenced by the Lean methodologies developed by Toyota for building automobiles. Because it represents a philosophy, the Lean process model can be applied to building software just as easily as to building cars. On the other hand, because they exist at the philosophical level, such methodologies can be difficult to conceptualize. The book tries to favor the practical over the philosophical, the concrete over the theoretical. This should be the kind of book that you can pick up, read one chapter of, and go away with some practical changes you can make to your software project that will make it better.
That said, the first part of this book is entitled “Philosophy” because the strategies described in it represent ways of approaching a problem rather than a specific solution. There are just as many practical ways to do Test-Driven Development as there are ways to manage a software project. You will have to pick the way that fits your chosen programming language, environment, and team structure. The book has tried to describe some tangible ways of realizing TDD, but it remains an abstract ideal rather than a one-size-fits-all technical solution. The same applies to Continuous Integration. There are numerous ways of thinking about and achieving a Continuous Integration solution, and this book presents only a few. Continuous Integration represents a way of thinking about your development process rather than a concrete or specific technique.
The second and third parts represent more concrete process and construction techniques that can improve your code and your project. They focus on the pragmatic rather than the philosophical.
Every Little Bit Helps: You do not have to sit down and read this book from cover to cover. While there are interrelationships between the chapters, each chapter can also stand on its own. If you know that you have a particular problem such as error handling with your current project, read that chapter and try to implement some of the suggestions in it. Don’t feel that you have to overhaul your entire software project at once. The various techniques described in this book can all incrementally improve a project one at a time.
If you are starting a brand new project and have an opportunity to define its structure, then by all means read the whole book and see how it influences the way you design your project. If you have to work within an existing project structure, you might have more success applying a few improvements at a time.
In terms of personal career growth, the same applies. Every new technique you learn makes you a better developer, so take them one at a time as your schedule and projects allow.
Examples: Most of the examples in this book are written in C#. However, the techniques described in this book apply just as well to any other modern programming language with a little translation. Even if you are unfamiliar with the inner workings or details of C# as a language, the examples are very small and simple to understand. Again, this is not a book about how to write code, and the examples in it are all intended to illustrate a specific point, not to become a part of your software project in any literal sense.
This book is organized into three sections, Philosophy, Process and Code Construction. The following is a short summary of what you will find in each section and chapter.
Part I (Philosophy) contains chapters that focus on abstract ideas about how to approach a software project. Each chapter contains practical examples of how to realize those ideas.
Chapter 1 (Buy, not Build) describes how to go about deciding which parts of your software project you need to write yourself and which parts you may be able to purchase or otherwise leverage from someplace else. In order to keep costs down and focus on your real competitive advantage, it is necessary to write only those parts of your application that you really need to.
Chapter 2 (Test-Driven Development) examines the Test-Driven Development (or Test-Driven Design) philosophy and some practical ways of applying it to your development lifecycle to produce higher-quality code in less time.
Chapter 3 (Continuous Integration) explores the Continuous Integration philosophy and how you can apply it to your project. CI involves automating your build and unit testing processes to give developers a shorter feedback cycle about changes that they make to the project. A shorter feedback cycle makes it easier for developers to work together as a team and at a higher level of productivity.
The chapters in Part II (Process) explore processes and tools that you can use as a team to improve the quality of your source code and make it easier to understand and to maintain.
Chapter 4 (Done Is Done) contains suggestions for defining what it means for a developer to “finish” a development task. Creating a “done is done” policy for your team can make it easier for developers to work together, and easier for developers and testers to work together. If everyone on your team follows the same set of steps to complete each task, then development will be more predictable and of a higher quality.
Chapter 5 (Testing) presents some concrete suggestions for how to create tests, how to run them, and how to organize them to make them easier to run, easier to measure, and more useful to developers and to testers. Included are sections on what code coverage means and how to measure it effectively, how to organize your tests by type, and how to automate your testing processes to get the most benefit from them.
Chapter 6 (Source Control) explains techniques for using your source control system more effectively so that it is easier for developers to work together on the same project, and easier to correlate changes in source control with physical software binaries and with defect or issue reports in your tracking system.
Chapter 7 (Static Analysis) examines what static analysis is, what information it can provide, and how it can improve the quality and maintainability of your projects.
Part III (Code Construction) includes chapters on specific coding techniques that can improve the quality and maintainability of your software projects.
Chapter 8 (Contract, Contract, Contract!) tackles programming by contract and how that can make your code easier for developers to understand and to use. Programming by contract can also make your application easier (and therefore less expensive) to maintain and support.
Chapter 9 (Limiting Dependencies) focuses on techniques for limiting how dependent each part of your application is upon the others. Limiting dependencies can lead to software that is easier to make changes to and cheaper to maintain as well as easier to deploy and test.
Chapter 10 (The Model-View-Presenter Model) offers a brief descr...
商品描述(中文翻譯)
這本書是為那些希望提升自己技能或專案的職業開發者而寫的。如果你是一位擁有3到4年經驗的專業軟體開發者,想要為你的專案帶來更高的紀律性,或是學習能幫助你從軟體工程師轉型為技術負責人的技能,那麼這本書就是為你準備的。本書涵蓋的主題將幫助你專注於以更高的品質和更低的成本交付軟體。本書關於實用技術和實踐,將幫助你和你的團隊實現這些目標。
這本書是為那些理解軟體業務本質上是商業的開發者而寫的。寫程式是有趣的,但按時撰寫高品質的程式碼並以最低的成本完成,才是使軟體專案成功的關鍵。想要成功的團隊負責人或架構師必須時刻記住這一點。
考慮到目標讀者,本書假設讀者具備一定的程式碼閱讀能力,並對構建和測試軟體專案有基本的熟悉度。它還假設你至少對軟體開發生命週期有基本的理解,以及客戶的需求如何轉化為可測試的軟體專案。
這本書不適合的人:這不是一本針對剛從大學畢業的入門級開發者,或是剛開始成為專業程式設計師的人的書。這不是一本關於寫程式的書;而是一本關於我們如何共同撰寫程式碼,同時保持品質和降低成本的書。這本書不適合那些想學習如何撰寫更有效率或更具可讀性的程式碼的人。正如前面提到的,這方面有很多其他書籍可供選擇。
這本書也不是一本關於專案管理或開發方法論的書。這裡提出的所有策略和技術同樣適用於瀑布式專案,也適用於採用敏捷方法論的專案。雖然像測試驅動開發(Test-Driven Development)和持續整合(Continuous Integration)這樣的策略與敏捷開發方法論一起流行,但它們之間並沒有必然的聯繫。有很多使用SCRUM的專案並不使用TDD,同樣也有許多瀑布式專案使用TDD。
哲學與實用性:在軟體開發中有很多宗教式的爭論。例外與結果代碼、強類型與動態語言、以及大括號的放置位置僅是幾個例子。本書試圖避免這些爭論。本書的大多數章節都涉及開發者可以採取的實用步驟,以提升自己的技能並改善專案狀態。作者並不聲稱這些實踐代表了唯一的軟體撰寫方式。它們代表了作者和他密切合作的其他開發者所使用的有效策略。
哲學在軟體開發中確實有其地位。例如,當前專案管理的許多思維受到敏捷哲學的影響。下一波可能會受到豐田為汽車製造開發的精益(Lean)方法論的影響。因為它代表了一種哲學,精益流程模型可以同樣適用於軟體建設,就像汽車製造一樣。另一方面,因為它們存在於哲學層面,這些方法論可能難以概念化。本書試圖偏向實用而非哲學,具體而非理論。這應該是一本你可以隨手拿起,讀一章後就能帶走一些實用改變的書,這些改變能使你的軟體專案變得更好。
話雖如此,本書的第一部分名為「哲學」,因為其中描述的策略代表了解決問題的方法,而不是具體的解決方案。進行測試驅動開發的實用方法與管理軟體專案的方式一樣多。你必須選擇適合你所選擇的程式語言、環境和團隊結構的方法。本書試圖描述一些實現TDD的具體方法,但它仍然是一個抽象的理想,而不是一個適用於所有的技術解決方案。持續整合也是如此。對於持續整合解決方案的思考和實現有很多種方式,而本書僅介紹其中幾種。持續整合代表了一種思考開發過程的方式,而不是具體或特定的技術。
第二部分和第三部分則代表了更具體的流程和建設技術,這些技術可以改善你的程式碼和專案。它們專注於實用而非哲學。
每一點幫助都重要:你不必從頭到尾坐下來閱讀這本書。雖然各章之間有相互關聯,但每一章也可以獨立存在。如果你知道自己在當前專案中有特定的問題,例如錯誤處理,請閱讀該章並嘗試實施其中的一些建議。不要覺得你必須一次性徹底改造整個軟體專案。本書中描述的各種技術都可以逐步改善專案。
如果你正在啟動一個全新的專案並有機會定義其結構,那麼不妨通讀整本書,看看它如何影響你設計專案的方式。如果你必須在現有的專案結構中工作,你可能會更成功地一次應用幾個改進。
在個人職業成長方面,情況也是如此。你學習的每一項新技術都會讓你成為更好的開發者,因此根據你的時間表和專案逐一學習它們。
範例:本書中的大多數範例都是用C#撰寫的。然而,本書中描述的技術同樣適用於任何其他現代程式語言,只需稍作翻譯。即使你對C#這種語言的內部運作或細節不熟悉,這些範例也非常小且易於理解。再次強調,這不是一本關於如何撰寫程式碼的書,書中的範例都是為了說明特定的觀點,而不是以任何字面意義成為你軟體專案的一部分。
本書分為三個部分:哲學、流程和程式碼建設。以下是每個部分和章節的簡短摘要。
第一部分(哲學)包含專注於如何接近軟體專案的抽象理念的章節。每一章都包含如何實現這些理念的實用範例。
第一章(購買,而非建造)描述了如何決定你的軟體專案中哪些部分需要自己撰寫,哪些部分可以購買或從其他地方利用。為了降低成本並專注於你的真正競爭優勢,必須僅撰寫你真正需要的應用程式部分。
第二章(測試驅動開發)探討了測試驅動開發(或測試驅動設計)的理念,以及一些將其應用於開發生命週期以產生更高品質程式碼的實用方法。
第三章(持續整合)探討了持續整合的理念以及如何將其應用於你的專案。持續整合涉及自動化你的構建和單元測試過程,以便為開發者提供有關他們對專案所做更改的更短反饋週期。更短的反饋週期使開發者更容易作為團隊協作,並提高生產力。
第二部分(流程)中的章節探討了你可以作為團隊使用的流程和工具,以改善源代碼的質量,並使其更易於理解和維護。
第四章(完成就是完成)包含了定義開發者「完成」開發任務的建議。為你的團隊創建一個「完成就是完成」的政策,可以使開發者更容易協作,並使開發者和測試人員之間的合作變得更簡單。如果你團隊中的每個人都遵循相同的步驟來完成每個任務,那麼開發將變得更可預測且質量更高。
第五章(測試)提供了一些具體建議,說明如何創建測試、如何運行測試,以及如何組織測試以使其更易於運行、更易於測量,並對開發者和測試人員更有用。包括有關代碼覆蓋率的意義及其有效測量方法、如何按類型組織測試,以及如何自動化測試過程以獲得最大效益的部分。
第六章(源代碼控制)解釋了如何更有效地使用源代碼控制系統的技術,以便開發者更容易在同一專案上協作,並更容易將源代碼中的變更與實際的軟體二進位檔和缺陷或問題報告進行關聯。
第七章(靜態分析)探討了靜態分析是什麼、它可以提供什麼信息,以及它如何改善專案的質量和可維護性。
第三部分(程式碼建設)包括有關特定編碼技術的章節,這些技術可以改善你的軟體專案的質量和可維護性。
第八章(契約、契約、契約!)探討了契約編程及其如何使開發者更容易理解和使用你的程式碼。契約編程還可以使你的應用程式更易於維護和支持,因此成本更低。
第九章(限制依賴性)專注於限制應用程式各部分之間依賴性的技術。限制依賴性可以導致更易於修改的軟體,並且更便宜的維護,以及更容易部署和測試。
第十章(模型-視圖-呈現者模型)提供了對...的簡要描述。