Friday, December 19, 2008

Software Engineering Books

I went to Barnes and Noble today and looked around. I always tend to make my way to the computer books, my favorite section. For some reason, I enjoy browsing through yards of computers books. Computer books tend to be some of the largest volumes in the whole store.

I was vaguely looking for a book that would help me with my MTG Forge project. It’s probably a small project by most estimations, but it does some useful that the common person can and would use. Most computer books cover the foundations or architecture, nothing is really written about implementing a whole program. All the code is short, because it makes it easier to read and understand. Larger programs are talked about in vague terms like, “Make sure you have a standardized error reporting process,” but what does that mean in real life?

It is hard to read source code from a book and to learn from it. Any program listing longer than a few lines I usually gloss over, because reading code takes work. It seems like software engineering is talked about in the classroom but is learned in the real world. Even books that are titled “Software Engineering” don’t talk about the exact steps that are needed for a non-trivial program. But maybe that puts programming back into the realm of art, and who can teach an artist to be great?

5 comments:

Anonymous said...

I'm reading Sam's Teach Yourself Java 6 in 21 Days, it's not bad really. I think that once I have learned a little more, I'll try writing an imitation of forge just to see if I can :-). I'll be back when I begin, maybe some time this break who knows :D

You're right about not learning practical programming - right now the most practical program I have written is one I use to calculate compound interest on investments (very basic, plug and chug the input into a formula). I commend you on writing MTG Forge, it's quite amazing.

Unknown said...

Back in college, I was ahead of most students in the programming classes. I was behind in the classes where the subject had to be taught - like math or language.

It's funny - I was forced to take spanish for 6 years in junior high and high school. I passed the state exam with a 65.
But I have become fluent in various programming languages in 6 weeks or less.

But anyway... other students would often ask me to show them how to do the programming assignments. I could show them what I did, but I was often asked "Why did you do it that way? The teacher was showing us this other way." I responded that the teacher was right, but there's always other ways.

In one class, the professor would give us tests that were straight out of our labs. It was assembler, with an emphasis on electrical engineering.... When I did the labs, I would design a program from the ground-up to solve the problem. While all the other students would copy these programs to their memory, or other devices, in order to spit it back on the test, I would go about and solve the program all over again. And the exact steps were different, usually. And the professor learned a thing or two from me.

Programming is an art, it's a creative outlet. I can't draw worth $&!# but I can write pretty nice code.... I can't teach it, I feel that programming can't be learned, other than the technical details. It's an inherent knack for problem solving, the ability to break down a problem into it's constituent parts, solve each one step by step or line by line.

Anonymous said...

Get a book on design patterns.

Dan Boris said...

"..don’t talk about the exact steps that are needed for a non-trivial program"

I think the simple reason for this is that there is no single set of steps for creating a program, there are just to many variables to consider. I read an article once about why so many programming projects go past deadlines or over budget and one of the reasons that author gave is that any given programming project has never been done before. Yes, similar projects have been done but never one exactly the same as yours.

+1 to Anonymous who mentioned design patterns. They obviously aren't a recipe for writing an application but they do help bridge the gap between lines of code and the high level architecture.

Forge said...

I had some class in assembler and although I thought I knew it pretty well, I usually made C's on my programs but I got a B in the class. (I did better on the tests.)

I do feel that programming is creative much like playing an instrument. The best code is short, easy to read and does one thing well.