Economix: How Our Economy Works

I live in the United States of America. It is an election year. The election is next month. The atmosphere is charged with political conversation and rhetoric. Some of it is based on knowledge. Some of it is based on fancy. Some of it is so obviously false that it is stunning that the speaker/writer believes that anyone will buy in to what is being said/written. On many occasions it is obvious that too many people have no understanding of economics, how an economy works, or even basic history. This book weaves all three together beautifully.

Economix: How Our Economy Works provides an up to date, well researched, well presented, and detailed look at the economy. The book presents multiple economic theories clearly and with a flair that is hard to describe but which will thrill all but the most dry-textbook-loving reader. It is a comic that is also a better textbook than most I have read, especially for people who do not already know the history of Western economic thought. Ever wonder what differentiates a free market from a controlled market? What has historically caused economies to grow or shrink? Why government spending, inflation, and interest rates matter and how each can affect an economy? This is the book to get you started.

As a bonus, you will also learn what differentiates capitalism from socialism from communism and other systems, what has influenced each, and what is driving and influencing the current worldwide and U.S. political and economic climates. Want to understand the basic ideas of the big and influential people in economic theory like Adam Smith, Karl Marx, or John Maynard Keynes or maybe the basic ideas that drive past and present Chairmen of the Federal Reserve Bank like Alan Greenspan or Ben Bernanke? This book will give you enough detail to help you understand the theoretical underpinnings of their policies and recommendations and it does so in a way that my (admittedly really smart) 10 year old can understand most of it.

If you ever mention the economy, but don’t really know with certainty what you are talking about, read this book. If you hear people being called “socialist” or “fascist” and wonder what that means, read this book. If you have heard of oligarchies and monopolies and don’t really know what they are or why they would matter, read this book. If you only read one book on the economy, read this one. Yeah, I’m recommending it that strongly. I got my copy for free, and I’m thinking of giving it away so that I can go pay for one and help support the author so that the book stays in print and finds a wider audience.

Oh, and the comic art is quite good, too, but suddenly that seems anticlimactic. Too bad, because that really isn’t fair to the artist, who is quite talented in his own right.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Are All Book Reviews Positive?

No, not all my reviews are positive, but it has been a while since I have posted even a lukewarm review. That is intentional. I got tired of making half-hearted recommendations for things I wasn’t thrilled about. Especially over the last two years, I have become more and more picky about what I am willing to recommend. So, as a result, all my reviews are pretty positive. If I don’t mention a book that I have been asked to review, I either haven’t read it, or I’m not willing to recommend it strongly.

EDIT, 23 Nov. 2013: Over the last year since this post was written, I have chosen not to publicly review several books. However, I have contacted the publishers directly in those instances where the book was sent to me as a review copy and have submitted my lukewarm or worse comments directly to them, in the hopes of both sparing them public shame and of improving a second edition, should one be created. I thought that was worth sharing.

Super Scratch Programming Adventure!

My parents bought my first computer for me in 1981. I was 11. When my TRS-80 Color Computer was turned on, it booted up into a BASIC editor. What it did afterward was up to me. That computer came with a whopping 4K (not a typo, K) of RAM and no storage. We bought a cable to connect the computer to a cassette tape deck so that I could store programs on cassettes. It took several minutes to load an entire program into memory.

I’m feeling nostalgic, but this article is not about that computer. It is about learning to program as a kid. I learned BASIC because I didn’t know anything else existed. I had this cool machine and I wanted to bend it to my will, to make it do my bidding. It started with simple things like accepting text input and repeating it on the screen. Later I learned how to save a Christmas card list and print it using an early dot matrix printers, the DMP-100, which had a really amazing 5×7 matrix (which meant no true descending characters, those ys and gs and stuff all got moved up and looked weird…sorry, feeling nostalgic again).

Super Scratch Programming Adventure! provides a much easier and extremely fun entry into programming. It doesn’t make the learner focus on the really gritty details, like people in my generation had to do. That’s okay. What it does do is give kids a way to do the parts that I loved about owning a computer in the early 1980s, it gives them a chance to bend it to their will, to make the computer do what they want it to do.

I have three kids, ages 6, 9, and 10. Each of them has read this book. Each of them enjoyed the clever comic narrative that introduces each chapter. Each of them, even the youngest, found the book enjoyable and interesting as well as easy to understand and follow. The software used for programming, Scratch, is freely available from MIT, where it was created, and runs on several platforms including our family’s beloved Ubuntu. I installed it on their computer and off they went. They haven’t finished the book or the exercises yet, but they are doing what I did as a kid, having fun with a powerful toy that they can control.

The meat of the book is impressive. It covers some deep topics but always remains readable and clear for those within its target audience, which according to a note on the back cover is “for ages 8 and up.” I admit it, my 6 year old is advanced <grin>. The book leads the reader through the process of creating games in Scratch. Along the way, you learn about graphics, data flow, sound effects, subroutines, and more. This is done using an interface that is menu driven and easy. The concepts are what are focused upon, not the semantics. This is good, because I’ve known too many programmers who are good at semantics and yet struggle to know when or why certain things are done. I prefer to see the “why” understood first, then the “how” is easily transferred to other languages and contexts.

I’ve given away other programming books to kids, like the time a few years ago when I gave my nephew a book on game programming in Python. Starting now, this will be the book I recommend or give away to kids (to be followed later with Python or other stuff…). If you know a kid or even a young teen who wants to make their computer do stuff, this is a good start.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Think Like a Programmer

I used to write software. I confess, it has been a long time. There are parts about doing so that I loved (problem solving, being creative) and parts I didn’t enjoy (solving problems that I didn’t find interesting, over and over and over again). This book concentrates on the parts I enjoyed most.

Think Like a Programmer came out earlier in 2012. It was published by No Starch Press, which consistently puts out books that impress me. It is one of the more consistent computer-related publishers and when I’m researching a specific topic, I generally look at any they offer, along with O’Reilly, before looking at other publishers’ offerings. I should probably disclose that back in 2009 I talked with No Starch about writing a book about Ubuntu. That didn’t work out and shortly afterward I ended up taking over the Ubuntu Unleashed title for SAMS when the previous author team didn’t want to continue with it, but my email conversations with the head honcho (or as their website says, the “Big Fish”), Bill Pollock, left me with a favorable impression of the company.

This is not a “how to program” book that concentrates on learning the syntax, vocabulary, and grammar of a specific programming language. You will need to learn that elsewhere. In fact, you probably want to learn basic C++ before you read this book. While the concepts in this book will apply across programming languages, examples are given using C++. Those who already know Java or C# and who are flexible will probably be okay, but will need to be experienced enough to translate.

This is a “how to program” book that focuses on figuring out how and when to use the various concepts and tools within a language to creatively solve problems. I have never read another book that covers this topic. The idea is that learning the basics of a language helps you understand what the tools do, but it is usually experience that helps you understand and create strategies for using them. You may know what a pointer is and the mechanics of using one, but seeing when using pointers is most effective only happens after seeing them at work in context. Context is what this book tries to give. The author, V. Anton Spraul, calls the missing skill problem solving, “the ability to take a given problem description and write an original program to solve it.” The cool thing is that the book teaches the sort of problem solving skills that usually require years of experience in a systematic, logical way.

The book starts with a discussion about strategies. Problems almost always have constraints, things that limit the paths you have available for solving them. Good problem solving finds a way to do what must be done while not violating any of these boundaries. This involves creative thinking. This 20-some page discussion is the foundation for the rest of the book.

As the book continues, you will meet up with all your conceptual friends you learned about in your programming class or book. Only this time, the discussion is not about mechanics, but strategy. Why is tracking state important? When should I use scalar variables vs arrays vs multidimensional arrays? What problems are better solved using pointers and dynamic memory? How do I create meaningful classes and objects (and not just “arbitrary bags of leftovers”)? Since C++ is flexible, it affords a nice discussion of when a procedural and when an object-oriented approach may be most suitable. Sequential or recursive? If using recursion, head or tail? What about reusing code?

The book ends with a useful chapter on thinking like a programmer. Yes, that is the topic of the entire book, but whereas each chapter focuses on discrete parts, this chapter brings all the parts together to help the reader learn to synthesize a master plan when solving specific problems.

Bottom line: you probably need a year or two of experience for this book to be really useful. This is because once you have struggled with some of the issues the book discusses you are going to be much better equipped to see how useful the book is. The bare minimum is to either have studied C++ or to have spent enough time programming in another language or two so that you understand what the C++ discussions and samples are illustrating. If you fit here, the book is highly recommended.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Who is Valuable?

Occasionally, events that I experience, witness, or just hear about remind me to question myself, my values, and how I live them. I think that is how it should be. What follows is the result of today’s pondering.

How do we determine whether a person is valuable or not? (Valuable in the sense of importance.)

It seems like an easy question, and in one sense, perhaps it is. We all come with different values (value in the sense of amount or number or specific status) for specific attributes: some are smarter, others are athletic, still others are artistic. We can categorize humans by a myriad of means. Is this one a kind person or a mean one? Does this other person belong to my group (religion, class, ethnicity, sexual orientation, national origin, skin color, and the list goes on) or not? These may help you place a person in a category, but I submit that it has nothing to do with a person’s value (importance).

What about job qualifications? I’ll argue that speaks to suitability for a specific task, and maybe even whether a person is considered valuable within an organization, but it does not address their overall value as a human.

What does?

Don’t answer that with your words. I already know what you think by how you treat those around you who are different than you.

Reactive or Intentional?

I was thinking today about technical writing and how it fits within different companies.

Some companies think of technical writing almost like a nation’s military forces. Both consist of trained professionals and are used as the last layer of protection–something that should perhaps only be focused on when a specific threat exists. “Oh, Customer X can’t figure out how to configure Product Y. Get a tech writer in here, quickly! Let’s get something written up.”

Other companies think of technical writing as infrastructure. It is an important part of the overall whole, and if created using careful planning and quality materials, enables greater things to be built upon it.

In between the two is where most companies exist. The harsh reality of difficult time schedules and limited budgets force some compromises, and individual incidents do not necessarily imply intentional standards. These compromises are where you discover the values of a company’s leadership, or maybe the limitations of its internal team(s). If it must err, on which side will it err? Is the decision to lean one way or another reactive or intentional? Is there evidence of planning and forethought, or rather tons of piled-upon quick fixes?

I’ve worked for both types of companies and spent ample time cleaning up messes caused by reactive-style work that never had time allotted to it to be cleaned up. I’m thrilled that my current job involves working in a team that is intentional.

The Manga Guide to Linear Algebra

It has again been a while since I have reviewed a manga book. This is one of several atypical educational books that use graphic art to help teach difficult concepts or illustrate the action and another wonderful entry in the “Manga Guide to…” series that I have been reviewing.  I keep requesting review copies of each title in the series as they come out, and I have yet to be disappointed. This is an impressive series that consistently makes very difficult academic topics more interesting and a little easier for students. I would not consider these a replacement for a textbook, and neither would the publishers of the series, but every book that I have reviewed from the series would make an excellent supplement, especially for the struggling student.

The Manga Guide to Linear Algebra follows the actions of a Reiji, who wants a black belt in Karate and to gain the interest of the girl of his dreams, Misa. She happens to be the younger sister of the captain of the university Karate club, and although her brother is intimidating, he offers to give Reiji lessons in exchange for Reiji tutoring Misa. You will have to read the book to see how that turns out.

The book starts with an introduction to the characters, then an introduction to linear algebra. I admit, it has been many years since I studied the topic and I was interested to see how quickly I would pick it back up. The book made it easier than I anticipated, partially because it gives context for each concept presented. Knowing why something is important and how it fits into a greater scheme makes it much easier to understand and remember.

Topics covered in the book include fundamentals like number systems, implication and equivalence, set theory, functions, combinations and permutations. We then transition into matrices with a “what is a matrix?” section, calculations, special matrices and lots more. Once matrices are covered in depth, vectors are introduced along with calculations, geometric interpretations, linear independence, bases, dimensions, and coordinates. Once we move into linear transformations and spend some time trying to get a handle on this difficult topic, the presentation turns to an interesting discussion of the relationship between linear transformations and matrices–again, this helps provide some useful context to a difficult idea to grasp. Finally, the book discussed Eigenvalues and Eigenvectors, including how to calculate them, multiplicity, and diagonalization. Then, the storyline surrounding the mathmatical topic is brought to a close.

Studying linear algebra? This won’t replace your textbook and doing your homework, but it may help you figure out the context for and gain a deeper understanding of what you are doing. That alone makes the book valuable and earns it my recommendation as a quality introduction to the topic.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Seven Databases in Seven Weeks

I’ve spent some of my free time over the last couple of months researching different databases for a chapter in one of my books. I have some limited experience using some NoSQL options, but must confess that I am not as familiar with many of the newer databases as I would like. As a part of my research, I read this book.

Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement by Eric Redmond and Jim R. Wilson came out earlier in 2012. It is published by The Pragmatic Programmers, as a part of their Pragmatic Bookshelf, which is an impressive and deservedly well-respected series.

My goal in reading this book was to get a better sense of the landscape, to learn the basics of several of the new databases out that have been receiving the lion’s share of the buzz in the computer press. The book did not disappoint, in fact it exceeded my expectations.

All a reader absolutely must know before reading this book is what a database is, but after saying that, I will follow with a quick disclaimer that this is not intended for newbies. The book is written for experienced developers, people who understand software, who know their concepts and how to apply them, but who are interested in the latest developments. The book does not cover things like installation or systems/database administration. Instead, it gives information that surveys the strengths and weaknesses of the new databases to help the experienced developer better understand when, why, and how he or she might find a specific one useful. We have discussions of features, contexts, and pragmatic looks at usefulness. I appreciated the author’s willingness to state not only how specific products could benefit, but also mention when specific products may be unsuitable for a specific project.

Databases covered are these, listed in the order in which you will find them in the book:

  • PostgreSQL
  • Riak
  • HBase
  • MongoDB
  • CouchDB
  • Neo4J
  • Redis

You will notice that there is a nice variety in the types of databases listed. Represented are a standard relational database (PostgreSQL), key-value stores (Riak, Redis), a columnar database (HBase), some document-oriented databases (MongoDB, CouchDB), and even a graph database (Neo4J). The survey is clear, deep, and packed with useful data that makes comparing these vastly different, but often lumped together as “NoSQL” databases, easier.

If you have any reason to use or consider using anything other than a more traditional relational database, and aren’t sure which one to try out of the exploding number of new options, this book will help you make sense of the field and better evaluate your options against your current needs. I recommend it.

Disclosure: I was given my copy of this book by the publisher as a review copy.