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.

I already do a lot of programming in my spare time. I'm confident with PHP, Javascript, jQuery which I use in combination with HTML to create mock-up websites. The specific part of programming I want to get in to is web development/web applications. What I'm asking is since I'm pretty sure this is what I want to do, how can I get a head start?

Edit: "If you could tell your 15 year-old self to do something that would benefit your programming career, what would it be?" - I just thought of this and thought it would be a better, more specific question :)

share|improve this question

closed as not constructive by Anna Lear Dec 22 '11 at 23:16

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.If this question can be reworded to fit the rules in the help center, please edit the question.

You are aware that Computer Science is much much more than web application? Lots of theory (i.e. boring) –  user1249 Feb 6 '11 at 21:10
@Thorbjørn: Boring? I'd say “Lots of theory (i.e. interesting)”! –  Donal Fellows Feb 6 '11 at 22:25
How about we say, "Lots of theory (i.e. not always applicable to your day to day work, however, provides a good framework for extending your knowledge and remaining relevant to technological change.)" –  Slomojo Feb 6 '11 at 22:35
@Donal, if you are 15 and just want to WRITE COOOOOODE, then theory is most likely quite boring. Especially that part that says you cannot do this and that, boo! –  user1249 Feb 6 '11 at 23:12
"If you could tell your 15 year-old self to do something that would benefit your programming career, what would it be?" - Don't waste your time on internet and gaming! –  Mchl Feb 10 '11 at 11:24
show 8 more comments

18 Answers 18

There are three related disciplines:

  • Computer Science – How do these machines work?
  • Software Engineering – How can we make programs effectively?
  • Informatics – How can we use computers effectively?

All are important. CS goes deep, and has close ties with both mathematics and physical sciences (on the hardware side). SE is much more about how to manage complexity, and is definitely an engineering discipline even if most of its practitioners aren't formally associated with professional engineering schools. Informatics is the newest, and is often seen in combination with another discipline (e.g., bioinformatics is about managing information in biology, such as genome analyses); if you're thinking of going that way, you probably need to have a very strong other string to your bow.

For all, having some math is vital, especially logic – computers are logic machines; they always behave in a logical fashion (provided you understand what state they're in and what inputs they're getting, of course) – but there's no part of math that is truly irrelevant, not even abstruse stuff like topology or number theory. It also helps if you put lots of practice into English writing; you'll be doing lots of that in any computer-related discipline so make sure you can write well and quickly. Aside from that, getting as good a general education as possible is best. Remember to have fun too.

share|improve this answer
@Jake, one of the most important skills for a programmer is communication skill. This is because you tell the computer HOW but you tell your future self and others WHY, and you do that in English if you work internationally. –  user1249 Feb 6 '11 at 23:16
What @Thorbjorn refering to is, your programming skills will become lot better if you know how to write and speak your thoughts clearly. –  yasouser Feb 7 '11 at 1:37
show 4 more comments

I almost feel silly to keep recommending this to people, but you can start your CS education right now with MIT's OpenCourseWare curriculum in CS.

share|improve this answer
show 3 more comments
how can I get a head start?

:-) If You want to get a head start, read and understand the first three volumes of Donald E. Knuth's "The Art of Computer Programming". They more or less cover what one is being taught in the first three semesters of a bachelor degree course in computer science.

I was the same like you. I actually bragged about my skills in object oriented design in my uni application xD, just to find out that computer science at uni level is way different from programming as a hobby. But seriously have a brief look in the books to get an idea yourself and decide whether it's the right thing. OR, even better(!): Take of one day off from school and join a beginner's lecture on computer science at your local public uni/college. They'll happily let you do that!

Wish You all the best for Your future programming career.


If you could tell your 15 year-old self to do something that
would benefit your programming career, what would it be?

I can't imagine anything that would've accomplished that. The reason is that I didn't start programming for the career possibilities, but because it's my passion. If you do something you're passionate about, you can't be wrong/underperforming.

Wait, there is something. Me to my 15 year-old self: "Although considering yourself a very good programmer, you'll constantly look back on code you wrote 6 months ago and ask yourself: 'What shitty code did I write there?'"

share|improve this answer
The shock for me was how much easier it was to program after really understanding the theory. The theory may seem a bit dry at points, but challenge yourself by using it in your own projects: play with the concepts, and really get to know them. The result will be a base you can build nearly anything from. –  Bruce Alderson Feb 6 '11 at 23:34
Also, to get a head start: build stuff. A lot of stuff. Put into practice things you learn, try, rip it apart, and try again. Be critical of your designs, and look for better designs. Tear apart the Quake3 source, for example, and learn how a simple game engine works (great learning in that codebase). –  Bruce Alderson Feb 6 '11 at 23:41
show 2 more comments

I would say that if you are really interested in Computer Science, which as others have said is quite different from just programming, then I would suggest checking out (maybe from the library) one of Knuth's The Art of Computer Programming books, especially Volume I, Fundamental Algorithms. That covers structures like stacks, queues, linked lists, trees. All of these are used as basic structures for more complex systems.

Then just start working on projects that you think are interesting. They will not help you get into college, but they will definitely help you as you take the classes.

share|improve this answer
You're much better of getting an introduction to algorithms book. Knuths books aren't meant for learning. –  Carra Feb 10 '11 at 15:02
add comment

If you really love the web and mobile, think about Computer Technology. It's different than Computer Science.

I would say that if you want to use tools that have already been developed to create things (this includes writing for mobile devices), lean towards Computer Technology (sometimes they call it Informatics).

If you want to develop new languages, tools, compilers, operating systems... lean towards Computer Science.

Keep asking questions, and when you finally get there don't be afraid to switch majors if you don't fall in love with the one you start in. Just try to do it within your first year ;)

share|improve this answer
show 1 more comment

Want to get ahead?, get a job as soon as you feel you are familiar with the skills required by the position; in a job, you will need to know stuff, but you will also want to know how to do it faster and better, so you will study such advanced stuff by inertia.

Bam, you are ahead.

share|improve this answer
Don't. You're ahead for a few years, but as soon as you find interesting (read: hard) problems, you'll need the theory. And teaching yourself category theory or variational calculus (or whatever you need) is a lot harder than learning it at school. –  nikie Feb 7 '11 at 9:24
@nikie And what stops you from studying theory by yourself?. I learned first by myself about design patterns, databases, ORMs, and computer graphics, and what I learned was at a superior level that what I saw at school... half or more of the stuff I use I've learned by myself. Don't drop out, but, give yourself the time to keep a job... even if it takes time from school, just lower the academic charge. In the end what really matters is your experience outside of school, but strengthen it with school. Also, in school you can discover other topics of interest. –  dukeofgaming Feb 7 '11 at 10:15
show 1 more comment

No offense but writing HTML, CSS, JavaScript is scripting and web development not programming.

I recommend learning Scheme, the decline in the quality of our software engineers is due in large part to the fact that Java and C++ are now used to teach new students rather then Scheme and Lisp.

Java programmers are exactly what the business owners and managers want, because Java programmers are easily replaceable entities. Easily replaceable programmers are easier for the bosses to use and abuse.

share|improve this answer
show 2 more comments

I'm 15 years old too, and love developing iOS and web apps. I am also interested in computer science, and have done quite a bit of research on it. Here is what I've found:

  • Very rewarding major
  • Very theoretical
  • Strong programming/problem solving skills
  • Heavy in math; have to learn calculus, discreet mathematics, etc.
  • Challenging major; definitely a good choice if you like challenges!
  • Lots of thinking outside the box

So from what I've found, you could get a head start by developing strong mathematical and programming skills. Think outside the box! :D

So since I'm your age, I can't give much advice except for the above; I am looking forward to seeing answers for this question from experienced professionals.

share|improve this answer
@Jake,@Earlz: It's the logic, which is indeed an every-day use for anything to do with computers (well, assuming that you want to be the master, instead of letting someone else be in charge). Math is the only thing taught in school with nearly enough rigor in logic. Analysis is also useful, especially if working with the physical world, but some parts of computing definitely need more math than others. –  Donal Fellows Feb 6 '11 at 22:48
show 15 more comments

To start I'm 17 and have been screwing around with computers for several years now. Here is basically what I've done in that time:

Web Development

  • HTML/CSS -- Pretty useful as this is the language of the internet
  • Javascript -- You can often times hack out a test pretty quickly with Javascript and convert it to other C style languages
  • PHP -- Typical server side language. Spurred me to learn more about servers and how they work.
  • LAMP -- Learn how to setup and maintain one

Windows Programming

  • Learn your OSs scripting language be it bash or DOS
  • Learn about the Registry or your OSs equivalent
  • Learn about GUI design for your OS and the components and generally how it works
  • Learn C/C++ as it will give you a better low-level understanding of programming but is still OO. In the case of Windows, try using the WINAPI (if it doesn't make your head explode)

General Computing

  • Learn your number systems (binary & hexadecimal)
  • Learn how all the computer components work together. Try building your own PC.
  • Learn a dialect of assembly. Does't have to be x86, but it will give you a really nice understanding of how things work.
  • Learn about networking. Security is always a good thing to know and the more you know, the better.

note: Windows can be supplanted for Mac or Linux, just learn your favorite environment!

This is a short list of all the things I have learned over the last ~3 years. I'm not saying I know C++ to its full extent or that I can hack a network but I have at least a fundamental understanding of it all. Remember to keep learning.

share|improve this answer
show 6 more comments

I'd say keep coding. Learn a multitude of languages. Try to find interesting projects. Some have suggested books that might be over your head which is normal. Try them anyway but also, find books at your level. Put all your cash on books (That's what I did, I probably spent 1K on books before going to college, all money I'd gotten from working different jobs).

A nice book you might like it "Land of Lisp" by Conrad Barski. The reason I recommend it is because I find that he does a good job of using advanced comp sci stuff in simple games. You will learn some interesting tibits from it. He'll even show you how to write your own Web Server in less than 100 lines. This should be readable and it's not a dumbded down book, it's just well explained making it accessible.

Don't look at your Computer Science education as a way to learn how to program. It's not a vocational program. Do Computer Science if have a genuine interest in learning how computer work. It's also a great degree to build a solid and wide ranging view of the stuff relating to all things computer. And I resent the idea that it's not applicable to day to day programming. I use many things I've learned in comp sci. (Ex: Octree)

What this also means is that you will have to spend some time learning stuff on your own. 4 years of college isn't enough to learn everything you will need to be a good programmer after graduating. So spend time outside school (or right now since you have probably more time) learning about different technologies (web and non web: databases, sockets, source control(git)...)

On the school side, I don't know where you are from but if you are in the US try to get into an AP Calculus and Physics. This will let you move to more interesting classes in your first year. Also, you aren't there yet but SAT Math is crucial. I don't know how it's graded now days but try to aim high on their. The english part, just don't do horribly wrong on it ;p.

share|improve this answer
add comment

Do it... it's an awesome career path. I've met so many awesome people building software. I love it.

share|improve this answer
add comment

I wish I understood at the age of 15 the importance of abstraction. And I wish I had practiced it more at that time. So my advice is to always stay on a high level of abstraction. Always keep in mind what a program and a programming language really is. Read some philosophy, I suggest Bertrand Russel, Ludwig Wittgenstein, Alan Turing, Kurt Gödel and whatever else you find interesting.

It may seem a far way of the topic but it will help you to get to grips with what really matters and what is incidental. Programming or CS isn't only problem solving and techniques. Practice is good but if you don't understand the background it's only gonna take you so far.

share|improve this answer
add comment

You may be interested in P2PU's School of Webcraft. It's a free, community run school for web development, supported by Mozilla and the Peer 2 Peer University:


Also take a look at this: http://scrunchup.com/ which is a web magazine for young web developers and designers. There are a lot of interviews there with young developers, talking about how they got into the field. I think the woman who set up the site is 20 and has been working as a web dev for some time already.

Bear in mind that as other people have said, Computer Science won't teach you to be a web developer. Unfortunately, careers advisors often push people towards a CS degree because it's "something to do with computers". Which doesn't mean you shouldn't do it, if you look into it and are still interested in a theory/maths heavy degree - it does mean you should expect to spend time learning what you need to know about web development specifically afterwards. Seems like P2PU is aiming to help with that.

share|improve this answer
Hopefully they don't use w3schools as their teaching material. –  Slomojo Feb 6 '11 at 22:38
@Jake - have a look here, they explain the W3Schools problem well... w3fools.com –  Slomojo Feb 6 '11 at 23:12
show 9 more comments

Work on several "real" projects. Nothing will challenge you learn more than dealing with the tradeoffs in writing system that are actually used by those other than yourself. You will also see your coursework in a different light, when it is made relevant by actual practice. Additionally working with a group will help hone the very important soft skills required for any projects success, from identifying and negotiating requirements to peer collaboration and general communication skill such as writing. I suggest you contribute to an open source project that interests you.

Work with multiple technologies/languages/tool-sets. There is a balance between generalization and specialization - but college is the time to generalize. I've also found that the most effective individuals seem to not only excel in their specialty, but also understand the context of their work and thus are more effective in employing their specialized knowledge. So, I suggest learning (but not necessarily mastering) a smattering of languages with differing approaches (functional, imperative, OO, static/dynamic etc ...). Try to grasp a the hidden abstractions of full stack from your source code to the hardware.

Network. One the greatest advantages of a attending a university is the diversity of people you encounter. I'm not suggesting you be a card-pushing jerk, but take advantage of opportunities to meet your peers. In class - try to form a study group. Attend colloquium and join a few groups/clubs. Don't overdo it, but I sure wish I did more in this area.

share|improve this answer
add comment

Find some place to work using the skills you have. Web page development teams of FOSS projects might find your skills most useful. Use all your wits and skills to solve the problems thrown at you. When the problems overwhelm, look for books that contain topical advices. Sometimes you might need to learn new languages, sometimes you might need data structures, algorithms, design patterns and the like. Sometimes you might need to learn about computer engineering that has to deal with computers at hardware level. Going this way, you should be best equipped to make a decision about what to study at university.

Don't limit yourself to web development. Keep yourself open to solve the most interesting of the problems out there using the best tool there is.

share|improve this answer
add comment

If you really want to learn, why do you even need advice. Go ahead. You will succeed. Note: Make sure you really learn.

share|improve this answer
add comment

I'm 21 now, and working as a web developer. And I was once 15, and exactly in your situation, and I used to ask the exact same sorts of questions, and I remember it all very well.

I'd be very curious to talk if you emailed me (the address is in my profile). Seeing as to the sort of question you posted, a proper response would probably better fit into a conversation, as opposed to just a one-off reply here on the site.

Give me a ring sometime if you're curious.

share|improve this answer
show 1 more comment

I can say from experience that nothing will help you as much as doing real projects end-to-end and releasing something. You cannot learn to be a productive programmer by doing exercises and non-useful stuff. You have to complete projects whose results you care about.

If you think about studying Computer Science or something similar, please know that this will not help you to learn anything. It will just be a certificate that you can use to get a job (so it might be necessary to so).

I recommend you find a small business idea that can be solved with a web-application, design it, get feedback, build it and release it. Example: Build an accounting web-site for your family and get them to use it. Example 2: Sell your doctor a shiny web site for 400$ (cheap).

Edit: When I was at the university a few days ago, the professor asked the (small) study group "How could you improve this design that you can see on this screenshot?". I said: "Remove the complicated AJAX stuff in order to save dev time". All other students started laughing! They had never done a real project and could not understand that I had a valid point. Ridiculous. Again: You cannot advance your skills without doing real stuff. My fellow students had never had the opportunity to learn this lesson.

share|improve this answer
add comment

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