<i>The computer will always do exactly what you tell it to.</i><p>With the obligatory footnote: "Unless you get into multithreading - then all bets are off." ;-)
This is fortuitous, because just this week I started realizing there are Two Things about AI:<p>1. Graph search<p>2. Representing problems as graph search
Closely related to the first Thing of problem reductionism: "All problems in computer science can be solved by another level of indirection... Except for the problem of too many layers of indirection." — David Wheeler
The two things about software engineering:<p>1. You have to figure out what you need to build.<p>2. Engineer the solution in such a way that changes in the requirements result in relatively minor changes to the code.
<i>Every problem can be solved by breaking it up into a series of smaller problems.</i><p>A good ballpark, but not entirely true. At some point you'll end up with a smaller problem that cannot be broken up further. For the most part these may be solved problems, like `increment foo`, but at some point you might hit an unsolved atomic level problem that you either need to spend a lot of time working on, or forces you to find an alternative path.
1. You're assuming things that you've not verified.<p>2. You've overlooked or ignored things that need to be considered.<p>Pretty much sums up the source of all pain in day-to-day programming.
The two things economists know are hilarious -- square "no free lunch" with "gains from trade." Do the gains from trade have a price? Who pays that?<p>As for "incentives matter," what, because incentives incentivize?
This reminds me of: "All Our Programming Languages Boil Down to Sequence, Selection and Iteration"<p><a href="http://bit.ly/9lwT8e" rel="nofollow">http://bit.ly/9lwT8e</a>