Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Reading books, watching videos, and reviewing tutorials is all very easy. Taking notes and actually learning the material may be slightly harder, but even then, anyone with a decent brain and a fair amount of interest, it's easy enough (not to mention, fun).

The thing is, it doesn't really prepare you to write a full program or website. Let's say you're those teens (only in highschool, no true (college level) computer science or programming courses, and no real world experience), and you come out with Groupon. Or even Mark Zuckerburg, sure he was a genius, and he was a very capable programmer... but how?

How do you recommend that people who are not necessarily new to programming, but new to programming real applications and real programmers go about developing it? What is the "development process" - especially for single programmers (or maybe 2-3 teens)?

Also, as far as web development goes, what is the process? Was something like Facebook or Groupon written with a framework (like CodeIgniter or Zend for PHP)? Or do they develop their own frameworks? I'm not asking how to come up with a great idea, but how to implement great ideas in an effective way? Does anyone have advice?

I've read a couple of books on both C and C++ (primarily the C Programming Language and the C++ Programming Language) and taken AP Computer Science (as well as read a few additional books on Java and OOP). I also have read a few tutorials on PHP (and CodeIgniter) and Python. But I'm still in highschool, and I'm technically not even old enough to work at an internship for a few more months.

share|improve this question
3  
Reading books, watching videos, and reviewing tutorials is all very easy. Yes, reading them is easy, understanding them is the hard part. –  Yannis Rizos Nov 25 '11 at 9:46
    
@Yannis Rizos Actually, I do understand them, and I talk about that in the sentence afterwards. –  Bob Nov 25 '11 at 9:48
    
@Bob learning the material and really understanding it is actually quite different, the second is much harder. My personal definition of "understanding" is when I can explain the topic at hand in a way a ten year-old would undestand. Quick, explain "interfaces" :) –  Thanos Papathanasiou Nov 25 '11 at 10:05
1  
@ThanosPapathanasiou Software, hardware or the OO concept? :) –  Yannis Rizos Nov 25 '11 at 10:12
2  
@YannisRizos that's the beauty with explaining things like you would to a ten year old, you would be forced to use a simplified example that would encapsulate all three :) –  Thanos Papathanasiou Nov 25 '11 at 10:19

7 Answers 7

up vote 7 down vote accepted

There is a difference between simply knowing how to program, and knowing how to structure a program (software architecture).

A simple book about a specific programming language will only teach you the tools you can use in order to go about setting up the architecture of a program.

There are also books which help you with software architecture. Topics you should look for are design patterns, software abstraction, software architecture/design, and many more ... (Head First Design Patterns was a real eye-opener for me.)

For a wider set of resources, this question might interest you.

Still the best way to learn how to properly structure an entire program is hands on experience doing so, being very open to suggestions and new techniques while doing so.

share|improve this answer
    
Alright, thank you, I'll look into it! –  Bob Nov 25 '11 at 10:05

It's the same very common problem with (indie) game development : how to finish.

Other than making sure that you can do it, either because you have all the required knowledge or you are willing to learn - and you checked that other people did check that it wasn't impossible...

... the main thing that makes "finishing" possible is to set objectives.

Objectives are the target to reach, they must not describe how to get there, only what is the basic requirements/features you need to consider a first version of your app as "finished". Also, don't set objectives too far in time.

Write your objectives somewhere. Write it.

Once you've set objectives, you'll have to just find ways to reach it. That is the famous "path" that is more interesting that the arrival. Don't worry about reaching walls and discovering how wrong you'll be. Most of the time, if the subject is new, you'll get it wrong and you'll learn why and be able to get it right and have done one another setup to get closer to the objectives.

Even in game design, we know that you have to provide objectives to make sure the player knows, even in an abstract way, what he need to achieve, whatever the way he does.

share|improve this answer

Reading a lot about swimming does not make one a swimmer. Of-course it prepares one with the required knowledge, to become a swimmer you got to jump into the water.

I see that many people who just did it than thought/read about doing it are the ones who succeed.

If you want to be be a swimmer just jump into the water and learn swimming, if you want to be a programmer just start programming with an idea and learn programming.

I believe peter norvig's essay relevant here: Teach yourself programming in 10 years

share|improve this answer
2  
Good answer! I have two friends who kept reading (starting to read) books on programming hoping that one day they would feel ready to start programming. You will never feel that. Just jump into the cold water and start working on a real project. If you feel it is too complex, choose a smaller one. Work on it until it is finished. During the project, look for books and readings according to the open issues that pop up as you go. –  Giorgio Nov 25 '11 at 17:30

Sounds like your focusing too much on the implementation aspects of software, which is only a fraction of the entire software development process(see SDLC). You might need to look at some software methodologies and learn how to use one that you like. Other than that, read case studies, find out the pluses and minuses of each tool that you would consider using in your software as well, evaluate, and go from there. After a quick read through of your question, you might need to focus on the Analysis and Design areas of software, and learn about UML, decomposition and maybe some design patterns.. maybe..

Hope this helps..

share|improve this answer

Short answer, set your goals and start.

There is no book or way to teach this to you but hands on experience.

You will make lots of mistakes and gradually gain experience. So if you run into a problem, think about it, try to come up with a solution and if you fail go to stackoverflow and get some help. Also have code reviews as early and much as possible.

After finishing your first project and have good grasp on the technical problems start looking into more abstract and higher lever topics of software engineering.

With your newly gained awareness of common problems you will get the books abstracts concepts of having clean and decoupled code, because your first project will be an unmaintainable mess.

Books (usual suspects):

share|improve this answer

At this point you need to stop reading about programming and start programming. If you want to build a website, then go through a tutorial for the framework of your choice. Just pick one that appeals to you. Work through the tutorial to learn how to use the framework, then start building your own web application.

After you have written some code, then books about programming techniques will have a lot more meaning.

share|improve this answer

When you are going out and try to write some programs you want to sell, I recommend you read this essay of Joel Spolsky about "The Development abstration layer".

http://www.joelonsoftware.com/articles/DevelopmentAbstraction.html

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.