   a software development people grow stage.
  a programmer from newbie to master could experience several steps.anyone can descript the steps that will guide newbie go right way to master avoid to waste unnecessary time.   
  There is no right way. There are too many factors which influence it, not the least of which is you, how you digest information, what sort of things trigger enlightenment for you, and what various learning resources are available to you.   ;  Experience is one of the most important things in becoming a master (in anything btw). There are no shortcuts there. However, some tips:To gain experience you need to program as much as possible is as many different programming languages as possible. Start with small programs, and combine them to create something cool.Don't spend too much time learning libraries. Learn to understand the API documentation instead.I would start with Java, then C, then go C++, skip Visual Basic, take a look at C# and do at least something using Assembly to understand hardcore programming. Along the way do some OpenGL, DirectX, Python, SQL, Networking and stuff like that.Don't create GUI using your IDE (MS Visual C,C#), do it by hand. (You will learn faster, and your code will be neater). Don't spend to much time on GUI anyway ;)Don't spend too long doing the same thing. Create your own challenges.Go to java.sun.com for java sdk, Bloodshed Dev-C++ for beginner C,C++ (Go MS VC Express later with DirectX and stuff). MS Visual studio for C#.Good luck...   ;  It's all experience. You can't become a pro hockey player by attending the right training camps in the right timeframe; you have to get out there and kick ass.Once you've taken enough lumps, patterns begin to form, and you can figure things out a lot better. It also gets rid of the ego level for (most) decent programmers. You also learn to use sports metaphors when talking to non-programmer types.But seriously: expand your sphere of experience. Learn Python, OpenGL, C#, Java, QBASIC, Matlab, Lisp. Get that stuff in your head and adopt what you can use. Take courses outside the realm of computer science, then apply what you learn there to computer science (for example, computational linguistics or artificial life).   ;  Don't reinvent the wheel, but know how too.I'd would concur with most of the comments and start with something easy, like Java, go through tutorials, and make some very small and simple applications.Once you get the 'idea' of programming then get serious.You need to understand that programming has NOTHING to do with computers, and everything to do with solving problems;  Being objective, analytical, and creative.  This is something you can not be taught and must develope.It also has to do with Mathematics and Discrete Systems.  You can getby without deep knowledge of either, but you will never be anything but a Novice without some understanding of both.  Acknowledge this and get started now.Don't get caught up on programming languages.  Learn many.  The natural language you already know (English, Japanese, etc..) is the greatest programming language you will ever learn and Mathematics will be your primary tool for implementation. Again programming has NOTHING to do with computers.Once you get used to a computer programming tool, like Java, then start to learn the basics.  To be a programmer of computer systems I'd say SOME of the basics are:Basic computer and programming knowledge.How is data stored, and accessed, in memory (ram or disk).How is a program executed.Basic understand of compilation, linking, and execution.Design Principles and methodologies: Top Down, Divide and Conquer, recursion...Having at least a basic idea of run time analysisClassifying problems (e.g. search, encoding, sorting etc..)Data Structures and various ways to implement them:Arrays.Linked List.queues.Stacks.Binary Trees.Search Trees.AVL trees.Graphs.etc...Algorithms:SortingSearchingEncoding/DecodingHashingetc..And probably the MOST important:Knowing how to ask specific questions and obtain information. All of the above you will NEED to know.  Those are the foundations. For each term I'd suggest doing some research.In the end, being a 'programmer' means to be a student forever and a problem solver.  You must seek out information and overcome problems.You don't need to know any of the above to be a 'programmer,' if you just want to make programs and create things that work.  But if you want to be a 'MASTER' then I can't see how without having a good understanging of the above.  And you'll progress much more rapidly the earlier you learn them.The internet is your friend, and an unbelievable amount of imformation on all of the above is available for free.  The primary cost is your time and patience.Hope that helps and good luck. ;  I would say that an "experienced programmer" is one who knows how to recognize, classify, and break down problems.  He can also know how and where to gain knowledege about his problem in order to solve it on his own.Also, I would say that a "master programmer" is one who has already learned how others accomplish things, but has graduated to a point where he strives to develop systems that work better than those.  He also has developed his own software development process to efficiently translate design to implementation and knows how to implement a design to be as fast and small (CPU and memory) as possible.Just my two cents.- Enosch   