Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Possible Duplicate:
What should every programmer know about web development?

I am currently a Junior PHP developer and I really LOVE it, I love internet from first time I got into it, I always loved smartly-created websites, always was wondering how it all works, always admired websites with good design and rich functionality, and finally I am creating web-sites on my own and it feels really great.
My goals are to become expert web-developer (aiming for creating websites for small and medium business, not enterprise-sized systems), to have a great full-time job, to do freelance and to create my own startup in future.

General question: What do I do to be an expert, professional and demanded web-programmer?

More concrete questions:
1). How do I choose languages and technologies needed? I know that every web-developer must know HTML+CSS+JS+AJAX+JQuery, I am doing some design as well because I like it and I need it for the freelance as well. But what about backend languages? Currently I picked PHP because it's the most demanded language in my area and most of the web using it, but what would happen in the future? Say, in 3 years, I am good at PHP and PHP frameworks by then, but what if some other languages get more popular? Do I need to switch to them? I know that good programmer is not about languages and frameworks but about ability to learn and to aim the goals, but still I think that learning frameworks for some languages can take quite some time. Am I wrong?

2). In general, what are basic guidelines to be expert web-developer? What are most important things I should focus on?

Thank you!

share|improve this question

marked as duplicate by Telastyn, haylem, Yannis Nov 18 '12 at 23:56

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

practice, practice, practice – Ryan Nov 18 '12 at 19:38
Surround yourself with those you consider expert developers (your opinion might change over time) and soak up all their knowledge. – dreza Nov 18 '12 at 20:54
How is this a duplicate? This question is about becoming an expert programmer. The other question is details about launching a web site. – B Seven Jan 16 '15 at 16:22
This answer might be relevant. – Basile Starynkevitch Apr 23 '15 at 13:25

There is no substitute for experience

The only way to become great at something is to practice it. Not just do it, but consciously try to get better each and every day. One rule of thumb is that it takes 10,000 hours of practice to master anything. Be aware that there is a huge difference between doing 10,000 hours of something, and doing one hour of something 10,000 times.

So, start creating websites. They don't have to be public -- create them for your own use, and simply for the experience of creating them. If you are able to get a job where you create web sites, even if it's an entry level job, you'll learn a lot.

Surround yourself with those who are smarter than you.

Constantly strive to find people who are smarter than you, and learn from this. Perhaps this means to take a job rather than do freelance. You can also join local user groups related to technologies.

Read and Practice

Find some magazines and blogs and read them regularly. From that you will learn what technologies are hot, and which technologies are used to solve which problems. If you are reading a book, work through all of the examples. Don't just read them and think "yeah, that makes sense". Work through every single exercise in the book.

The best education I ever had was to implement every single algorithm in Software Tools by Kernighan and Plauger. While not web related (even in the slightest), that book is well worth reading.


For me, the best way to learn is to teach something to somebody else. In order to teach it will require you to deeply understand what it is you are teaching. So, set out to create a tutorial about a subject. It doesn't matter if anybody reads it, it is the act of creating it that is important (though you'll need validation that what you do is useful).

You can also teach simply by answering questions on the various stack exchange sites. Find questions that you understand, and try to write the very best answer possible. Research it, give example code, and explain your code. It doesn't have to just be a question without answers or questions that haven't been accepted. It can be any question that you think you can answer. Don't do it for the rep points, do it as an exercise.

Pick a technology that fascinates you

The best way to learn (and thus the best way to improve your skills) is to learn about something that fascinates you. Don't worry about picking the "right" technology right now. Instead, find something that fascinates you. Look at Dojo, or HTML5, or CSS, or the pieces that make up AJAX. Find the one that most fascinates you and dive deeply into understanding it.

share|improve this answer

It is very easy nowadays to code for a very long time without ever attaining a deep grasp of the tools, languages and frameworks you are using. Books and videos that get you started but skimp on depth are easy to find, technical documentation is more pleasant and nurturing than it used to be (at least as far as MSDN goes), and the languages themselves offer higher and higher level constructs that give you the results without requiring you to know why you need those constructs in the first place. On top of this, when problems bubble up from below the ambient layer of abstraction, places like blogs and stack offer you quick answers to problems without forcing you to get into the details yourself. And even if you do occasionally dive below the abstraction layer and get some yummy technical detail, it is often forgotten because, by relying on external resources to solve problems, this detail is never really needed - and using your knowledge is critical to remembering it.

So I'd like to offer you a few randomly chosen key principles to follow as you build your career:

  1. Ask the hard questions (read: Why) about the code you write (and read) and the tools you use, and test yourself against them often. If necessary, keep a journal of the most interesting things you find and come back to it occasionally to see if you still remember what you wrote about. Many people will tell you that it is not necessary to memorize technical details. This is true until you interview for the best, most interesting jobs - then it is merely a requirement to compete.
  2. Occasionally attempt to write code purely on paper. This can be eye opening.

  3. Owning a book does not equate to having read and understood it

  4. Build lots of software - with intent. Whether it be building on examples (good), writing your own projects (better) or contributing to open source (best), always be writing code with the intent to learn about something - see item 1 above.

  5. Start a blog - if you can't explain technical details to others, you don't understand them. No one has to read it - you just have to write it

  6. Be nice to the people you work with - from them will be pulled the seeds of your startup and you never know which of them has the zeal and fortitude to jump in and have your back during the charming early days of being an entrepreneur. Or which of them you will be selling to.

There is, of course, much much more to being an expert developer than understanding code - being able to bring passion and energy to a project, having a vision of what a project could be, marshaling support for your ideas, persuading stakeholders, effective management and so on. Don't lose your deep technical acumen in pursuit of those things if you want to start your own shop as opposed to climbing a corporate ladder.

share|improve this answer

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