A few things that I believe comes with development experience:
Well I'm not yet an experienced developer but I would write here what I have seen in experienced developers at our company.
Our company background
We are a small team of 7 developers. One software architect, two senior developers and four junior developers. We primarily work on an ERP Qbil Trade in PHP Symfony framework, AngularJS, Prototype.js, etc.
The most inspiring characteristics which I have seen in our senior developers is that they try to write future proof code as much as possible and they try to make reusable components which are then used again and again without repeating the code though we use an MVC framework still they develop custom controllers, functions and actions on top of that framework most of them being generic.
Now whenever our clients ask for some modification or some feature request, mostly everyone of us knows where to start from and what to do because mostly the base for almost every new feature or modification is already set.
The ability to learn and the drive to progress.
Lot's of good answers here, I'll just add one short addition. I think aside from experience and the other points that have been brought up; what I've really gained over time is a love of unknown and difficult problems. As a beginner I was afraid of unknown problems, because I was unsure if I could solve them; and that brought on impostor syndrome and all sorts of self doubt. As I gained confidence in my ability to solve problems, not knowing the solution to a problem became an exciting and wonderful thing. Difficult problems, while you struggle with them, are an opportunity to learn and discover new aspects of programming. I even quit a job I had because I found that I wasn't challenged with enough new problems. I find that I even miss being a beginner, when so many things were new and exciting. I'll end with a quote from Suzuki Roshi that really sums that up:
In the beginner's mind there are many possibilities, but in the expert's there are few.
So embrace being a beginner, and try and find the excitement in difficulty early on. It's what keeps me doing what I do, and what makes me happy.
It is obvious that experience sets the experience apart from the beginners. But then again, experience comes in different flavors. A beginner with no experience, will need to learn. Is nothing one can do about that. The only question is how fast can one build experience and when can one claim to have experience. A programmer must have an open mind and native curiosity. Without that, even with experience, he will be just average. Maybe even good in some domain. But in our field, to keep up at the same level, you need to learn constantly. In my opinion, the question focuses on the wrong thing, because answering this question is meaningless. It is interesting how things are different among people that know what they are doing.
I would say that a junior programmer, will be overwhelmed with buzz words, and will feel crushed by the things out of his control. Like languages, frameworks, best practices, advice from people that are or just seem to know what they are talking about. Beginners are obsessed with tooling, low level thinking, premature optimization - lots of times, with solving problems that are not actually there.
Once one gets more experience, he becomes aware that thinking at a higher level is a lot more important than micromanagement. Understanding a problem, is more important than starting to code a solution and making something that almost works. Frameworks and tools are not longer as important. Thinking comes first. Tools come later.
Another important aspect, is how one deals with team work. An experienced programmer, will fit in and will have decent social skills. Those are really important, because a project can fail with great people in a team, if the communication lacks. Building skills on top of technical skills is an important part of the job.
An experienced programmer, when faced with a task, will not just try to solve that task, but understand why he must do that in the first place. He will think at the system and at the impact it would have. And maybe ever rephrase the requirements in a new way, that better describes the domain, solve the original task, but many other things as well. Or it may not even solve the thing asked in the first place, because it was not actually needed.
What I am trying to say, is that experience brings wisdom, and that is built on top of knowledge, intelligence, empathy and skill. Many people think that intelligence and skill is all you need. But in reality, we live in a complex world, and is important to have a broader view of reality.
As @sdecandelario said, experience and with experience comes the ability to problem solve.
To listen to a clients requirements and before you begin to type, you can already start to lay out the app or site in your head. Someone says - I need a shopping cart - you know a shopping cart needs a DB of sorts; a cart, a product list, be able to change qty, sort and search products, calculate tax, shipping, returns and refunds, etc...
If this was your first cart, you might not know everything that goes into a cart.
Experience brings the ability to problem solve quickly, to scope correctly, price correctly and manage time correctly.
In the end, that saves development time and ultimately money for your employer and or the client.
I would also say, experienced programmers are dreamers; they dream of ways to solve problems. Way 1 didn't work? They dream up another way. But to have those dreams, you have had to have experience doing it once before.
A downfall of experience can be loosing the magic of the show. Ever see a magic show or watch a new movie? First time is great! The 100th time you've watched it? You know whats gonna happen and can probably repeat lines from it with your eyes closed. As an experienced developer you need to be careful how you convey that to a client or a boss. This may be your 50th shopping cart you've built, but to the boss or client, it may be their first. They may be really excited about the idea of selling products; and you don't want to take that away from them.
So with experience needs to come understanding that while you may have the experience and this isn't your first rodeo, it's not necessarily the same for everyone else in the room.
So - experience FTW!
Well, in first place i can say experience, I have more than 5 years in the world of development and now i know things that when is started i don't know!
In another case the point of view is so important and when you are a beginner in this world some solutions you may think are ok, doesn't.
With the years and experience you can learn to focus on the problem and making a perspective to get the best solution, this and the new methodologies like BDD, TDD and DDD are making the development more useful.
And the interest of self-evolve and study every day, read articles, post in social networks and forums dedicated to programming and always find new ways to do the development, and maybe learn a little about system (apache, linux, bash)
Ben Buchanan (200ok)
I make some bits of the web.
Ben Buchanan (200ok)
I make some bits of the web.
Restraint. Knowing what not to do; eg. having the patience to wait for technology to be reasonably mature before making your production environment depend on it.
Thinking things through before starting to code, or at least after a spike.
Valuing simple over clever; being most proud of commits that remove more code than they add.
Knowing most problems have more to do with people than code.