The people who taught you to architect programs before coding were also aware of this trade-off.
It's a lot easier to write the small programs assigned in college that way, than the large programs you will write in the real world.
This is not the top-down vs. bottom-up debate; both top-down and bottom-up design architect first.
It is related to the concept of waterfall/iterative/incremental design; incremental designers can paint themselves into a corner.
I've written a lot of big programs, and I've never regretted the time spent architecting them. I have sometimes wished I had spent more time designing them before starting.
Fatal design errors that crop up down the road are more likely to be language-related: Your program gets so complicated that you have to rewrite it in a compiled language to run it in real-time or to avoid running out of RAM; or you discover that C++ templates don't work as advertised, or that Java can't allocate 2G of RAM, after you've already writtten 3000 lines.
Followup to: Don't Fear Failure
In the same theme as the last article, I think that failure is actually pretty important in learning. Rationality needs data, and trying is a good source of it.
When you're trying to do something new, you probably won't be able to do it right the first time. Even if you obsess over it. Jeff Atwood is a programmer who says Quantity Always Trumps Quality
The people who tried more did better, even though they failed more too. Of course you shouldn't try to fail, but you shouldn't let the fear of it stop you from tyring.
I wouldn't go as far as to say that quantity always trumps quality, but where the cost of failure is low lots of failures that you pay attention to is a pretty good way of learning. You should hold off on proposing solutions, but you also need to get around to actually trying the proposed solution.
I'm normed such that I'll spend more time talking about if something will work than trying it out to see if it works. The problem is that if you don't know about something already, your thoughts about what will work aren't going to be particularly accurate. Trying something will very conclusively demonstrate if something works or not.
Note:
I originally had this as part of Don't Fear Failure, but that post got too long.