I'm curious what are considered required skills for an entry-level developer job. Should I be able to pull certain things out of my head without needing a reference/cheat sheet? If so, what?
Also, what would be 'intermediate' level? I'd like to know where my next stepping stones should be after 'beginner'.
Obviously, I'm aware that I should pick my favorite language and work towards mastery of that and that learning all of this stuff takes time. I'm simply looking for some help in setting some milestones to keep me motivated and gauge my progress.
Any input from the community would be appreciated. Thanks!
Imagine anyone could throw any job at you, it might be anything from a simple mailing script or recreating Amazon or eBay.
Beginners might be able to do 0%-33% of them without assistance
Intermediates might be able to do 34%-67% of them without assistance
Advanced might be able to do 68%-99% of them without assistnace
Any job?!? Oh my!
I understand your break down, but could you elaborate a little on what might be required or expected at each stage? With the beginner stuff more than the advance, of course.
If a beginner could complete 0-33% of the coding, what would that mean? Would that mean understanding what was needed in order to accomplish the job, maybe being able to break down what needs to be done, but not necessarily do it themselves? Or would they be able to maybe do the DOM scripting part, but not handle the database stuff?
Thanks for your input!
If you can squish together something rough using the language (IMO) it's beginner, if you are proficient in the language to the extent that you could really produce something high quality and agile, then your an intermediate but if you understand the underlying processes alongside the solid foundations, your advanced.
Take for example CSS...
Knowing how to build a stylesheet and edit stuff like font's would be beginner
Optimizing stylesheets, fixing browser bugs, complex layouts would be intermediate
Understanding usability, accessibility and design theory would be advanced
It's the difference between...
How the thing works > stretching boundries > understanding implications.
Oh, that totally makes sense now! Using CSS as the example was great. I understand that and can measure my own skills against that kind of gauge. Thank you for putting it so nicely into perspective for me.
Fluent in HTML and CSS
Basic awareness of accessibility and usability issues
Can knock out static sites all day long
All the skills of a beginner, plus...
Well versed in accessibility and usability issues
Able to write basic scripts (eg PHP/ASP) or tweak existing 3rd party scripts
Able to install, configure and customise 3rd party scripts such as shopping carts, CMS's, Blogs etc etc
All the skills of an intermediate plus...
Might be a CSS guru
Advanced programming abilities "is able to build another Amazon (given enough time!!!)"
Hard questions to answer. Maybe you will find this book (online, for free) interesting: [url=http://softwarecraftsmanship.oreilly.com/wiki]
Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman
I agree The original question is difficult to answer with specifics.
For codding, I would go with:
Beginners might be able to do 50%-75% of them without assistance, should never be the one to design a system (not if you want to deal with it in the future). (1 to 3 years experience)
Intermediates might be able to do 75%-100% of them without assistance. They should not be designing systems, just small plug-ins, while they gain experience. (2 to 7 years experience)
Advanced should be able to do 99%-100% of them without assistance, 10 times faster than 'Intermediates' and with 10 times less code AND (really important), the code must be maintainable and extensible (so an entire team can work on it). (4+ years experience)
If you ever worked with an "advanced" programmer, and the guy was not an *** to everyone, you would really go "wow" from time to time from all the stuff they come up with.
For the skills you would need, it all depends on the job your looking to get.
An integrator (HTML, CSS, etc) does not make as much $ as a programmer (PHP/MySQL/code stuff), but the job can be learned WAY faster.
An integrator does not HAVE to know any codding, just the concept.
A programmer does not need to know HTML (they know XML, so can code HTML... but worst than frontpage).
All depends on your context/what you want to do. (but always easier to start on the front end, and then get some codding classes, if you copy paste code off the net, you will never become anything more than a "script kiddie".
Thanks to you all for these responses. They're very helpful for me in setting my milemarkers as I move forward.
I think this is very opinion based, but as for me, looking back on my progression while working with PHP, I'd say my interpretation of such levels are:
Beginner: can implement basic PHP applications. Procedural programing, some security flaws, inefficient practices here and there.
Intermediate: a better grasp of efficient and practical application design is achieved. Security / data validation comes to light, effective use of recursion and other practices that beginners tend to stay away from is utilized, and emphasis is placed upon developing reusable code. Starts to look into Object Oriented Programming
Advanced: OOP is used in all appropriate situations. A lot of attention is given to application design and theory before coding even begins. Stuff like Design Patterns, especially Model-View-Controller, are considered and implemented. Code is bloat-free, concise, secure, and reusable when appropriate.
In my view:
When you're a beginner, you think you're a good programmer.
You're intermediate when you suddenly realise how little you know.
Advanced, well, I don't think I've got there yet, but I'm sure it'll feel good when I do.
I've worked with junior developers that have been more skillful than £600+/day contractors. Unfortunately, job title and skill level do not always match.
The terms are so ambiguous I would rather judge people by their working experience. At least then you can better grasp how long they have been truly at it. Therefore, I would consider someone with little experience or a few fly by freelance jobs a beginner. Intermediate would be someone who has maintained a consistent living in web development for a year or more. I would only consider someone "advanced" if they have had a study job for 5+ years day to day in the particular field. So even if you have been learning the language for 5+ years yet have never had a actual study job doing so I would consider you a beginner. The other way is just to abstract and subjective to truly be a effective way to gauge skill. So the other way you could look at it is learning (beginner),entry, junior (intermediate) and senior (advanced). The best thing to do is just the job done that needs to be done and in turn you will gradually increase the people that matter impression of your expertise.
If that is true then how do you rank hobbyists, because clearly there are people who do not make money from web design who are exceptional coders. Trying to judge peoples "level" of compitency purely from a career perspective is a rather redundant way of looking at the subject, I know plenty of hobbyists who could run circles round a lot of people who build websites for a living. Then again, perhaps I could use the same logic you have and successfully state that as no-one here is likely to be a professional chef their cooking skills are simply at the beginner level and shouldn't try to cook for other people. :rolleyes:
If they were so good wouldn't they be able to make a living? Just because someone is able to solve some problems on a forum doesn't make them good at anything. Besides, hobbyist are solving their own problems which is many times very different from the problems you would be forced to solve on the job regardless of whether you like it or not and/or agree with decisions being made by higher ups. It seems awkward to say someone is so good at something yet can't make a living doing it. they can't be all that great…
Besides, someone who just knows code yet has never worked in a team or with clients doesn't have the full picture. Its one thing to control every aspect of your own project and its quit another to controlled by a clients or bosses demands. The goal is to make money and the balance between productivity and quality is what makes someone a professional in comparison to your hobbiest where quality is for most concern. That isn't the way it is in the day to day world because time is money. getting to those intermediate and advanced levels includes some type of level where you are consistently solving others problems and balancing quality and productivity.
What makes you think these individuals can't make a living from their passion, just because they choose not to auction off their skills to make money does not mean they are lacking in the ability to do the job. I know plenty of people who are fantastic web designers and could easily make it a full time job but equally enjoy the job they are already in therefore prefer to keep their passion as something they can do to unwind or play around with to their hearts content. For those people who don't do it as a full time job... they don't have bosses breathing down their necks on projects, they can do and learn what they like when they like... and without the stress to carry out the task on other peoples time they probably have a greater opportunity to improve their skills as they aren't as restricted as the rest of us.
Reading your post I get the idea that perhaps you don't actually enjoy your job, you talk about it in a very negative way, mentioning about being held back by clients and bosses and the goal (in your case) being "making money", personally I kinda feel sorry for you that you seem to have come to the point in your career that you feel that the justification for being a professional is somehow making the change from the "enjoy learning, happy to help" type to the "must compromise myself to keep everyone happy and the cash flowing in". Being a professional in our industry isn't about making loads of money (at least I hope it isn't), it's about being skilled and able to accomplish the job in the best way you can WHILE enjoying what you do.
Granted being able to work with others is a must but I have worked with plenty of people on group projects in which no money was made and I got a lot out of it... For the record, I used to work as a software developer full time and only decided to turn to web development in Feburary this year... now granted I am making my living in this industry now and I do love the job, I certainly was not any less skilled when I was not taking paid work until the point I started... I could still design a website with the same level of quality as those who do make a living from it, the fact I chose to change careers is irellevent, so is the paycheck... what makes a professional is not how much money they make, it is how well they do their job and the passion that makes them want to achieve and drive for excellence.
I will also have to say that years isn't always an accurate gauge. I know people who have worked for years in their profession, but only "get by" so they stick with their job and make a living. Because of that, they are not very great at what they do. There are plenty of jobs where "intermediate," at best, is sufficient.
People who are really good generally are passionate, and thus do spend hobby time, along with work time, playing and learning. You have to spend the time to learn and get good anyway -- doing a bunch of mundane projects is not going to make you a guru with both depth and breadth.
sk89q, I agree entirely, I didn't want to carry on the justification but I know plenty of people who have been doing the job for so long they just can't be bothered to keep their skills up-to-date anymore, possibly due to being wound down by clients and bosses who just dont "get it" as to what's involved, a lot of them tend to burn out eventually but it's unfortunately something that occurs all to often where those who should know better just don't maintain their skills anymore.
If anything, I think you should gauge yourself (and others) using work experience and skills separately. They are mutually exclusive things. Work experience indicates that you can work well in a team, but does not necessarily indicate that you are a guru in your profession. However, just because you can code very well, does not mean that you will be able to work with other people.
With skills, there's also two categories you have to consider: the science of programming and the engineering aspect. Pure hobbyists don't generally learn the engineering aspect too well, since many are lone programmers and so they don't need to.
next page →