views:

232

answers:

12

I'm going to spend the next few months getting acquainted with programming, but I'm not the type who learns best by "just doing it". I am only productive if I can understand things from a more structural, high level overview type context.

Every one of you will no doubt want to just reply "Seriously dude, just start coding!" and I appreciate the sentiment, but I gotta start this my way.

I've REALLY enjoyed some programming podcasts, where they tend to discuss structure and theory, strategies and abstractions. I'm not completely new to coding, so I know enough to get something out of it.

So, what books or podcasts would you recommend? Almost any topic is welcome, functional programming to databases to networking or whatever.

+8  A: 

Can't go wrong with Pragmatic Programmer and Code Complete.

jpoh
I've heard great things about Code Complete, I'll check it out!
rossc
+1  A: 

Seriously, start coding ;-) There isn't a programming book in the world about programming at a high level that doesn't include code.

I think the problem you'll find with books that discuss programming at a high level is that they expect you to have a background in writing code. Code Complete, for example, is a great book, but if you don't know how to write code, I fear you may be a little lost.

In programming you need to understand the basics before you can understand the high level concepts.

unforgiven3
+3  A: 

I'd suggest you read the free Structure and Interpretation of Computer Programs and watch the included MIT video lectures online.

Many university programs push imperative languages on their students (like Java, C++, etc) in an attempt to satisfy industry. These are useful to learn if you want to get a job or understand how computer hardware actually computes. MIT and some others, however, have a tradition of teaching declarative languages like Scheme or Prolog. Learning a declarative language would free you from thinking in terms of hardware and rather in terms of logic or functional computation.

rcampbell
A: 

Try to read good code. You can learn a lot by studying work of others.

danatel
how are you supposed to distinguish good code from bad, when you're learning programming?
jalf
Tadeusz A. Kadłubowski
Bad code doesn't have to be hard to comprehend though. Assuming that "if I can understand the code, it must be good" is a pretty awful idea.
jalf
A: 

Personally I very much enjoyed, and highly recommend, the Practice of Programming by Kernighan and Pike. If you're a really hardcore theorist try The Art of Computer Programming by Donald Knuth.

Stig Brautaset
+7  A: 

As much as I think "wanting to understand things" is good, there is no way to do that without writing code yourself.

You might as well ask how to learn to swim, without actually being in the water. Saying that you "gotta start this way" really just means that you don't have the guts to leave your comfort zone.

To learn programming, you need to both understand all the theory, abstractions and everything else, and try it out.

Trying it out yourself is the only way you'll 1: remember anything, and 2: spot all the subtleties that weren't mentioned on the podcast. That is why virtually all programming textbooks end each chapter with a number of exercises. You won't learn anything unless you do them (or at least write equivalent code yourself)

You can't choose one or the other. You have to do both. Get used to it.

jalf
Obviously your opinion is valid, and popular, but is unrelated to the question.
rossc
A: 

Though this answer is similar to danatel's, it is different. I do agree that understanding the strucuture of code (object relationships) is a good way to learn concepts from a structural level.

Consider some of the best maintained open source projects and review how they work and their overall structure.

I had wanted to learn about how Firefox worked (this is just one example). This is a vary popular project and (I think) it is structurally sound. I never got started but I do think the idea is sound. I think you will need a basic understanding of:

  • Program Flow
  • Variables and Memory Management
  • Object Orientated Programming Principles

You'll want to learn about UML so that you can do mini-models to illustrate and (perhaps) document what you are learning.

Good luck with your efforts. I think you are going about this in a very appropriate manor. Jumping in and coding without understanding structure can be a set back. (I guess it all depends)

Another thing that helped me learn about why programs were structured they way they were was my discovery and immersion in Design Patterns. (Good Book) When I learned this, it opened a whole new perspective on objects and the relationships between them.

Frank V
A: 

Object Oriented Software Construction by Bertrand Mayer. http://www.amazon.com/Object-Oriented-Software-Construction-Prentice-Hall-International/dp/0136291554

This book is about building large, correct, collaborative software systems in Eiffel. Most language primers are just going to tell you language syntax and let you loose in the language. This will allow you to form bad habits that are hard to get over.

A: 

A podcast I really enjoy is Software Engineering Radio.

Not every episode is based on coding primarily, but there's plenty of previous episodes that do. A good thing about it is that the host generally seems to be new to the concept the interviewee is talking about, so is well placed to ask the kind of questions listeners would want to ask.

Grundlefleck
+1  A: 

I can recommend looking at some of the answers I got for a similar question.

Like here, you'll need to filter out a few "No, I have no answer but you should just start coding because that works best for me" type of answers, but I got a few fairly good tips from the others.

Niklas
A: 

The Head First series by O'Reilly provide great introductions on beginning and advanced topics. Here's just a few examples:

  • Head First HTML with CSS & XHTML
  • Head First C#
  • Head First SQL: Your Brain on SQL -- A Learner's Guide

More advanced subjects like Head First Design Patterns are also covered and highly recommended.

Chris Melinn
A: 

list of software architecture books and I like number 7 on the list

mikej