The Write Great Code Series

A Solid Foundation in Software Engineering for Programmers

The production of high-performance personal computers over the past two decades has enabled the creation of some amazing software products. However, a common complaint users have with modern software is "despite the fact that machines have gotten faster, software seems to be getting slower." A large part of this problem is that programmers are no longer challenged to produce quality applications. High-performance computer systems allow programmers to get away with writing sloppy code and still achieve an acceptable performance level. There are two problems with this approach:
  • Programmers, rather than users (and purchasers of computer systems), are the beneficiaries of improvements in computer architecture. Faster CPUs allow programmers to write sloppier code while still maintaining the performances levels acceptable on previous generation CPUs.
  • Programmers who don't have to work at writing great code, never learn how to write great code (or if they originally knew, their skills atrophy from disuse).

A huge problem today is that many programmers have grown up with high-performance machines and have never learned how to write decent code in the first place. Unfortunately, advances in computer architecture are no longer doubling CPU performance every couple of years as they have in the past. Therefore, today's programmers can no longer get away with writing slow code and expecting advances in computer architecture to rescue them a few years hence.

The Write Great Code series is intended to help rectify this problem by teaching the forgotten art of crafting well-designed, efficient, software.

Available Today!

Write Great Code Volume I:

Understanding the Machine

Today's programmers are often narrowly trained because the industry moves too fast. That's where this new series from Randall Hyde (author of The Art of Assembly Language) comes in. This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.
Click here to
download Chapter 3

Volume I: Table of Contents

Chapter 1: What You Need to Know to Write Great Code
Chapter 2: Numeric Representation
Chapter 3: Binary Arithmetic and Bit Operations
Chapter 4: Floating Point Representation
Chapter 5: Character Representation
Chapter 6: Memory Organization and Access
Chapter 7: Composite Data Types and Memory Objects
Chapter 8: Boolean Logic and Digital Design
Chapter 9: CPU Architecture
Chapter 10: Instruction Set Architecture
Chapter 11: Memory Architecture and Organization
Chapter 12: Input and Output (I/O)
Chapter 13: Thinking Low-Level, Writing High-Level
Appendix A: ASCII Character Set

Available Today!

Write Great Code Volume II:

Thinking Low-Level, Writing High-Level

If you want to write the fastest, most efficient, code, then you have to write your applications in assembly language. Claims that modern compilers produce code that is just as good as hand-written assembly language rarely stand up. In practice, the way most programmers write their high-level language code often results in low-quality machine code output from a compiler.

Unfortunately, coding applications in assembly language is rarely an option for a variety of practical reasons (including the fact that few programmers know assembly language). So a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.

Chapter Eight is available as a sample on-line chapter, and you'll also find the links to On-line Appendix A and On-Line Appendix B, below.

Click here to
download Chapter 8
Write Great Code, Volume II, Table of Contents (Tentative):

Chapter 1: Thinking Low-Level, Writing High-Level
Chapter 2: Shouldn't You Learn Assembly Language?
Chapter 3: 80x86 Assembly for the HLL Programmer
Chapter 4: PowerPC Assembly for the HLL Programmer
Chapter 5: Compiler Operation and Code Generation
Chapter 6: Tools for Analyzing Compiler Output
Chapter 7: Constants and High-Level Languages
Chapter 8: Variables in a High-Level Language
Chapter 9: Array Data Types
Chapter 10: String Data Types
Chapter 11: Pointer Data Types
Chapter 12: Record, Union, and Class Data Types
Chapter 13: Arithmetic and Logical Expressions
Chapter 14: Control Structures and Programatic Decisions
Chapter 15: Iterative Control Structures
Chapter 16: Functions and Procedures
Chapter 17: Engineering Software
Appendix: A Brief Comparison of the 80x86 and PowerPC CPU Families

On-Line Appendix A: The Minimal 80x86 Instruction Set

On-Line Appendix B: The Minimal PowerPC Instruction Set

Currently Being Written!

Write Great Code, Volume III:

Engineering Software

Great code has several attributes. Volumes I & II of the Write Great Code series address an important attribute, efficiency, that is often ignored in modern software development. However, although inefficient programs are never great, efficiency, by itself, does not guarantee greatness. Great code must have a great design and must adhere to good coding standards. The third volume in the Write Great Code series addresses the issues of creating readable and maintainable code that will generate awe from fellow programmers.

Currently in the design phase

Write Great Code, Volume IV:

Testing, Debugging, and Quality Assurance

Great code works. This fourth volume in the Write Great Code series will discuss how programmers can ensure their applications have the high quality they require to be truly great applications.