views:

45

answers:

4

Hi all,

I'm a freshman in Computer Science at a large state university and I am wanting to get some good software engineering experience. In my high school the curriculum was based on problem based learning, which is something I felt benefited me greatly. I was wondering if there were any famous books that teach languages strictly through projects.

I feel like this would be a great way to learn. Essentially concepts would be explained and large projects would be offered as review exercises afterward.

Anyone know of any books like this?

Does anyone know the best method of learning to create large projects/a place to get good ideas for projects to start on?

Thanks, -Arjun

A: 

Not really what you're after but The Mythical Man Month by Fred Brooks comes to mind, it's a bit out of date in parts but a classic and remarkably spot-on 50+ years later.

I don't think you'll find many books that go into any detail on specific projects that doesn't generally make for interesting reading.

Actually now that I think about it Kent Beck's TDD By Example walks you through the design of a bunch of features for imaginary projects step-by-step using TDD. It's good but yeah, that is quite a boring book and I say that as a proponent of TDD. I'd still recommend it though, at the time I learnt a lot about how much I didn't know about OO design when I read that. Considering what you actually want to learn this book might help you quite a bit. I'd also recommend Refactoring: Improving the Design of Existing Code by Martin Fowler et al. just because I always recommend that book, it's fantastic.

Ollie Saunders
A: 

This question cannot really be answered, but before it gets closed --

Postsecondary education and computers have a really lousy history. Look at all the vastly successful people who dropped out of college; there simply has to be a spark in the person to get excited about what we do.

When I joined Linode, the founder shared his vision with me. He will only hire people who are excited about technology, love to solve problems, and enjoy coming to work every day. This is not something usually found in the traditional college graduate. A very small number of those who complete Computer Science curricula do something more exciting than in-the-trenches programming, or finishing a TPS report...you get the idea.

The other side of that type of person is that learning comes extremely easily. I found when I got to college that it was going to take me a couple years to "catch up" to where the curriculum was ready to share with me something I did not know (this was CE, not CS). I feel that this situation repeats itself with a lot of genuinely gifted people quite often. It's a great testament to the power of the Internet that most really successful and intelligent programmers got where they are without even an undergraduate degree.

Summary of the last two paragraphs: if you didn't like computers before you signed up for the CS curriculum, you are not going to like them after you graduate, and don't waste your time.

That's not to slight those with degrees; there's some genuinely smart postgrads on the planet who intimidate me beyond belief. However, to be happy with what I do, I found that I had to diverge from the path a bit and find a company that believed in me as I believe in it. I've more than proven myself with my product at this company, which I feel any potential candidate should be given the chance to do. There's a lot to be said for tinkering with computers from a very young age, and I think as this generation advances we'll find more and more that the value of postsecondary education will diminish.

I think I got steered down this essay because you reminded me of someone in Introduction to Visual Basic (sigh) who wanted to be a programmer, but had never used a computer in his life. If you're asking a question like this on SO, I can tell that you have no idea where to go to learn programming -- you need project ideas, which is always a bad sign. Programmers excited about their craft always have a project to do. You just don't sound too enthusiastic about our science, but I'm probably completely off-base as usual.

Good luck, either way.

Jed Smith
I disagree with your statement: "you need project ideas, which is always a bad sign." Software development is my passion. I've been doing it since I was 9 years old, and I'm now almost done with college and interning at Apple. I never used to be able to come up with practice project ideas on my own, and always turned to books that taught by example to help me get started. Then I'd take the projects my own direction. He is just looking for a little inspiration, that's all.
Marc W
@Marc: And I disagree with yours. Programming requires using a computer. Anyone that uses a computer can come up with project ideas. Do you have hobbies outside of the computer? Write a program for one of your hobbies. Do you enjoy FPS gaming? Write a mod. Do you enjoy flying airplanes? Write a route calculator. The inability to come up with a complex project demonstrates either (a) a lack of passion with computing, or (b) a lack of passion in life.
Jed Smith
+1  A: 

You might be interested in this

http://projecteuler.net/

It has a good number of math based problems that get gradually more difficult, and you can use it regardless of which language you're learning.

Tim
A: 

I'd recommend reading Collective Intelligence. It's a nicely sized book that walks you through a bunch of real world examples of machine learning using python. The concepts are explained and if I recall correctly, there are exercises at the end of every chapter. Combine that with a book on Django, or some other agile web framework and you've got yourself plenty of interesting and relevant web projects to work on.

Something I'd like someone to do is a build a web application that filters out all the spam on Twitter. I think that would be a great project for a CS student.

Alternatively, there are a myriad of open source projects that are willing to mentor students. That's how I learned my way around large projects. Check out Google Summer of Code.

pcardune

related questions