Gain a deeper understanding of software and learn to be a better programmer with this unique book of challenging code exercises.
Read code, understand code, and IMPROVE code
Teaches readers to emulate the processor in their minds -- a supremely useful skill no matter what the programming language
Continuing the tradition of "programmer self-help" books from Addison-Wesley
Finding bugs and understanding what is really happening within code is a lost art. Only truly good programmers are able to emulate the processor in their own mind (e.g. read the code and understand how it might work without going to the trouble of running it). Adam Barr wonders how programmers are supposed to build better programs if they do not know what is going on in code. The true pursuit of most software programmers is not creating applications from scratch; the reality of their day-to-day work is that they usually have to deal with inherited code. This code, likely written by someone else, must be optimized, tweaked, and improved. Therefore, programmers who are adept at reading, understanding, and improving code are in hot demand. These skills are drawn to the forefront with the help of this new book. This book is language-independent. The author borrows from his extensive experience at Microsoft Corporation and as an independent consultant to show how programming skills can be honed by going through the exercise of finding the bugs in existing code. By teaching programmers how to troubleshoot, it is the author's belief that programmers will learn how to think like a programmer, and ultimately produce better software in a more timely fashion. Product Description
Finding bugs and understanding what is really happening within code is a lostart. Only truly good programmers are able to emulate the processor in theirown mind (e.g. read the code and understand how it might work without goingto the trouble of running it). Adam Barr wonders how programmers aresupposed to build better programs if they do not know what is going on incode. The true pursuit of most software programmers is not creatingapplications from scratch; the reality of their day-to-day work is that theyusually have to deal with inherited code. This code, likely written by someoneelse, must be optimized, tweaked, and improved. Therefore, programmers whoare adept at reading, understanding, and improving code are in hot demand.These skills are drawn to the forefront with the help of this new book.This book is language-independent. The author borrows from his extensiveexperience at Microsoft Corporation and as an independent consultant to showhow programming skills can be honed by going through the exercise of findingthe bugs in existing code. By teaching programmers how to troubleshoot, it isthe author's belief that programmers will learn how to think like a programmer,and ultimately produce better software in a more timely fashion.
Features + Benefits
Gain a deeper understanding of software and learn to be a better programmer with this unique book of challenging code exercises.
° Read code, understand code, and IMPROVE code
° Teaches readers to emulate the processor in their minds -- a supremely useful skill no matter what the programming language
° Continuing the tradition of programmer self-help books from Addison-Wesley
Backcover
50 exercises to help you find bugs faster -- with less aggravation!
Bug hunting isan art, and you need to be a master. Get Find the Bug, and you'll become one. Long-time Microsoft programmer Adam Barr presents 50 programs, each with exactly one bug. Your assignment: find it. As you do, Barr will teach you how to think like your processor... anticipating exactly how code will behave, even without running it. You'll learn better ways to read code, understand it -- and above all, improve it. Whether you're building new systems or maintaining someone else's, you'll find bugs earlier, faster, with less frustration... and write cleaner code to begin with.
Presents bugged programs in C, Java, Python, Perl, and x86 assembly language, with carefully explained solutions
Includes language overviews to help you debug all 50 examples, even if you don't know the language
Shows how to look past the surface of code to uncover its hidden internal logic
Offers practical guidance on analyzing programs, including specific inputs to test
Presents a wide range of realistic bugs, with no phony gotchas
Draws on the types of coding and debugging challenges Microsoft uses to interview new programmers
An indispensable resource for working programmers, maintainers, testers, quality specialists, and everyone involved in code reviews
© Copyright Pearson Education. All rights reserved.
Preface.
1. Bug Classification.
2. Tips on Walking Through Code.
Split the Code into Sections with Goals.
Identify the Sections in the Code.
Identify Goals for Each Section.
Comments.
Identify the Meaning of Each Variable.
Variable Names.
Look at the Usage of Each Variable.
Restricted Variables.
Invariant Conditions.
Track Changes to Restricted Variables.
Look for Known Gotchas.
Loop Counters.
Same Expression on Left- and Right-Hand Side of Assignment.
Check Paired Operations.
Function Calls.
Return Values.
Code That Is Similar to an Existing Error.
Choose Inputs for Walkthroughs.
Code Coverage.
Empty Input.
Trivial Input.
Already Solved Input.
Error Input.
Loops.
Random Numbers.
Walk Through Each Section.
Track Variables.
Code Layout.
Loops.
Summary.
3. C.
Brief Summary of C.
Data Types and Variables.
Strings.
Pointers.
Structures.
Conditionals.
Loops.
Functions.
Selection Sort.
Linked List Insertion.
Linked List Removal.
Memory Copy.
Parse a String into Substrings.
Memory Allocator.
Memory Free.
Recursive Word Reversal.
Calculate All Possible Routes.
Kanji Backspace.
4. Python.
Brief Summary of Python.
Data Types and Variables.
Strings.
Lists and Tuples.
Dictionaries.
Conditionals.
Loops.
Functions.
Classes.
Exceptions.
Importing Other Code.
Output.
Is a Number Prime?
Find a Substring.
Alphabetize Words.
Encode Strings Using a Character Map.
Print the Month and Day.
Go Fish, Part I: Draw a Card from a Deck.
Go Fish, Part II: Ask if Another Hand Has a Card.
Go Fish, Part III: Play a Full Game.
Parse Numbers Written in English.
Assign Gift Givers.
5. Java.
Brief Summary of Java.
Data Types and Variables.
Strings (and Objects).
Arrays.
Conditionals.
Loops.
Classes.
Exceptions.
Importing Other Code.
Command-Line Applications and Applets.
Is a Year a Leap Year?
Convert a Number to Text.
Draw a Triangle on the Screen, Part I.
Draw a Triangle on the Screen, Part II.
Reverse a Linked List.
Check if a List Has a Loop .
Quicksort.
Play the Game Pong, Part I.
Play the Game Pong, Part II.
Compute Bowling Scores.
6. Perl.
Brief Summary of Perl.
Data Types and Variables.
Strings.
Lists.
Hashes.
Conditionals.
Loops.
Subroutines.
Scalar Versus List Context.
File Handles.
Regular Expressions.
Output.
Command-Line Parameters.
Sort a File by Line Length.
Print the Prime Factors of a Number.
Tab Expansion.
Simple Database.
Find Repeating Part of a Fraction.
Expand Indented File List to Full Paths.
Sort All the Files in a Directory Tree.
Calculate Student Test Averages.
Merge Sort of Multiple Files.
Play the Game Mastermind.
7. x86 Assembly Language.
Brief Summary of x86 Assembly Language.
Data Types and Variables.
Arithmetic Operations.
Flags, Conditionals, and Jumps.
Loops.
Procedures.
Output.
Make Change for a Dollar.
Multiply Two Numbers Using Shifts.
Join Strings with a Delimiter.
Calculate Fibonacci Numbers.
Check if Two Words Are Anagrams.
Convert a 64-Bit Number to a Decimal String.
Sum a Signed Array.
Play the Simulation Game Life.
Check if Parentheses Match in Source Code.
Radix Exchange Sort.
Appendix A. Classification of Bugs.
Syntax Versus Semantics.
Classification Used in This Book.
A-Algorithm.
A.off-by-one.
A.logic.
A.validation.
A.performance.
D-Data.
D.index.
D.limit.
D.number.
D.memory.
&nb
Finding bugs and understanding what is really happening within code is a lost
art. Only truly good programmers are able to emulate the processor in their
own mind (e.g. read the code and understand how it might work without going
to the trouble of running it). Adam Barr wonders how programmers are
supposed to build better programs if they do not know what is going on in
code. The true pursuit of most software programmers is not creating
applications from scratch; the reality of their day-to-day work is that they
usually have to deal with inherited code. This code, likely written by someone
else, must be optimized, tweaked, and improved. Therefore, programmers who
are adept at reading, understanding, and improving code are in hot demand.
These skills are drawn to the forefront with the help of this new book.
This book is language-independent. The author borrows from his extensive
experience at Microsoft Corporation and as an independent consultant to show
how programming skills can be honed by going through the exercise of finding
the bugs in existing code. By teaching programmers how to troubleshoot, it is
the author's belief that programmers will learn how to think like a programmer,
and ultimately produce better software in a more timely fashion.
Read code, understand code, and IMPROVE code
Teaches readers to emulate the processor in their minds -- a supremely useful skill no matter what the programming language
Continuing the tradition of "programmer self-help" books from Addison-Wesley
Finding bugs and understanding what is really happening within code is a lost art. Only truly good programmers are able to emulate the processor in their own mind (e.g. read the code and understand how it might work without going to the trouble of running it). Adam Barr wonders how programmers are supposed to build better programs if they do not know what is going on in code. The true pursuit of most software programmers is not creating applications from scratch; the reality of their day-to-day work is that they usually have to deal with inherited code. This code, likely written by someone else, must be optimized, tweaked, and improved. Therefore, programmers who are adept at reading, understanding, and improving code are in hot demand. These skills are drawn to the forefront with the help of this new book. This book is language-independent. The author borrows from his extensive experience at Microsoft Corporation and as an independent consultant to show how programming skills can be honed by going through the exercise of finding the bugs in existing code. By teaching programmers how to troubleshoot, it is the author's belief that programmers will learn how to think like a programmer, and ultimately produce better software in a more timely fashion. Product Description
Finding bugs and understanding what is really happening within code is a lostart. Only truly good programmers are able to emulate the processor in theirown mind (e.g. read the code and understand how it might work without goingto the trouble of running it). Adam Barr wonders how programmers aresupposed to build better programs if they do not know what is going on incode. The true pursuit of most software programmers is not creatingapplications from scratch; the reality of their day-to-day work is that theyusually have to deal with inherited code. This code, likely written by someoneelse, must be optimized, tweaked, and improved. Therefore, programmers whoare adept at reading, understanding, and improving code are in hot demand.These skills are drawn to the forefront with the help of this new book.This book is language-independent. The author borrows from his extensiveexperience at Microsoft Corporation and as an independent consultant to showhow programming skills can be honed by going through the exercise of findingthe bugs in existing code. By teaching programmers how to troubleshoot, it isthe author's belief that programmers will learn how to think like a programmer,and ultimately produce better software in a more timely fashion.
Features + Benefits
Gain a deeper understanding of software and learn to be a better programmer with this unique book of challenging code exercises.
° Read code, understand code, and IMPROVE code
° Teaches readers to emulate the processor in their minds -- a supremely useful skill no matter what the programming language
° Continuing the tradition of programmer self-help books from Addison-Wesley
Backcover
50 exercises to help you find bugs faster -- with less aggravation!
Bug hunting isan art, and you need to be a master. Get Find the Bug, and you'll become one. Long-time Microsoft programmer Adam Barr presents 50 programs, each with exactly one bug. Your assignment: find it. As you do, Barr will teach you how to think like your processor... anticipating exactly how code will behave, even without running it. You'll learn better ways to read code, understand it -- and above all, improve it. Whether you're building new systems or maintaining someone else's, you'll find bugs earlier, faster, with less frustration... and write cleaner code to begin with.
Presents bugged programs in C, Java, Python, Perl, and x86 assembly language, with carefully explained solutions
Includes language overviews to help you debug all 50 examples, even if you don't know the language
Shows how to look past the surface of code to uncover its hidden internal logic
Offers practical guidance on analyzing programs, including specific inputs to test
Presents a wide range of realistic bugs, with no phony gotchas
Draws on the types of coding and debugging challenges Microsoft uses to interview new programmers
An indispensable resource for working programmers, maintainers, testers, quality specialists, and everyone involved in code reviews
© Copyright Pearson Education. All rights reserved.
Preface.
1. Bug Classification.
2. Tips on Walking Through Code.
Split the Code into Sections with Goals.
Identify the Sections in the Code.
Identify Goals for Each Section.
Comments.
Identify the Meaning of Each Variable.
Variable Names.
Look at the Usage of Each Variable.
Restricted Variables.
Invariant Conditions.
Track Changes to Restricted Variables.
Look for Known Gotchas.
Loop Counters.
Same Expression on Left- and Right-Hand Side of Assignment.
Check Paired Operations.
Function Calls.
Return Values.
Code That Is Similar to an Existing Error.
Choose Inputs for Walkthroughs.
Code Coverage.
Empty Input.
Trivial Input.
Already Solved Input.
Error Input.
Loops.
Random Numbers.
Walk Through Each Section.
Track Variables.
Code Layout.
Loops.
Summary.
3. C.
Brief Summary of C.
Data Types and Variables.
Strings.
Pointers.
Structures.
Conditionals.
Loops.
Functions.
Selection Sort.
Linked List Insertion.
Linked List Removal.
Memory Copy.
Parse a String into Substrings.
Memory Allocator.
Memory Free.
Recursive Word Reversal.
Calculate All Possible Routes.
Kanji Backspace.
4. Python.
Brief Summary of Python.
Data Types and Variables.
Strings.
Lists and Tuples.
Dictionaries.
Conditionals.
Loops.
Functions.
Classes.
Exceptions.
Importing Other Code.
Output.
Is a Number Prime?
Find a Substring.
Alphabetize Words.
Encode Strings Using a Character Map.
Print the Month and Day.
Go Fish, Part I: Draw a Card from a Deck.
Go Fish, Part II: Ask if Another Hand Has a Card.
Go Fish, Part III: Play a Full Game.
Parse Numbers Written in English.
Assign Gift Givers.
5. Java.
Brief Summary of Java.
Data Types and Variables.
Strings (and Objects).
Arrays.
Conditionals.
Loops.
Classes.
Exceptions.
Importing Other Code.
Command-Line Applications and Applets.
Is a Year a Leap Year?
Convert a Number to Text.
Draw a Triangle on the Screen, Part I.
Draw a Triangle on the Screen, Part II.
Reverse a Linked List.
Check if a List Has a Loop .
Quicksort.
Play the Game Pong, Part I.
Play the Game Pong, Part II.
Compute Bowling Scores.
6. Perl.
Brief Summary of Perl.
Data Types and Variables.
Strings.
Lists.
Hashes.
Conditionals.
Loops.
Subroutines.
Scalar Versus List Context.
File Handles.
Regular Expressions.
Output.
Command-Line Parameters.
Sort a File by Line Length.
Print the Prime Factors of a Number.
Tab Expansion.
Simple Database.
Find Repeating Part of a Fraction.
Expand Indented File List to Full Paths.
Sort All the Files in a Directory Tree.
Calculate Student Test Averages.
Merge Sort of Multiple Files.
Play the Game Mastermind.
7. x86 Assembly Language.
Brief Summary of x86 Assembly Language.
Data Types and Variables.
Arithmetic Operations.
Flags, Conditionals, and Jumps.
Loops.
Procedures.
Output.
Make Change for a Dollar.
Multiply Two Numbers Using Shifts.
Join Strings with a Delimiter.
Calculate Fibonacci Numbers.
Check if Two Words Are Anagrams.
Convert a 64-Bit Number to a Decimal String.
Sum a Signed Array.
Play the Simulation Game Life.
Check if Parentheses Match in Source Code.
Radix Exchange Sort.
Appendix A. Classification of Bugs.
Syntax Versus Semantics.
Classification Used in This Book.
A-Algorithm.
A.off-by-one.
A.logic.
A.validation.
A.performance.
D-Data.
D.index.
D.limit.
D.number.
D.memory.
&nb
Finding bugs and understanding what is really happening within code is a lost
art. Only truly good programmers are able to emulate the processor in their
own mind (e.g. read the code and understand how it might work without going
to the trouble of running it). Adam Barr wonders how programmers are
supposed to build better programs if they do not know what is going on in
code. The true pursuit of most software programmers is not creating
applications from scratch; the reality of their day-to-day work is that they
usually have to deal with inherited code. This code, likely written by someone
else, must be optimized, tweaked, and improved. Therefore, programmers who
are adept at reading, understanding, and improving code are in hot demand.
These skills are drawn to the forefront with the help of this new book.
This book is language-independent. The author borrows from his extensive
experience at Microsoft Corporation and as an independent consultant to show
how programming skills can be honed by going through the exercise of finding
the bugs in existing code. By teaching programmers how to troubleshoot, it is
the author's belief that programmers will learn how to think like a programmer,
and ultimately produce better software in a more timely fashion.