I have noticed that this is a frequent issue among younglings from technical areas such as ours.In the beginning of our careers we simply don't know how to sell ourselves to our employers, and random guy #57 (who is a programmer, but not as good as you - technically) ends up getting a raise or a promotion because he knows how to communicate and market himself better than you. Many have probably seen this happen in the past, and most certainly many more will in the future.What kind of skill/ability (either technical, or of other nature) do you think is relevant to point out when doing a job interview or asking for a raise, besides listing all the programming languages and libraries you know?
How to market yourself as a software developer?
communication
When distinguishing yourself for a job outside your current position:Network locally to meet people at other companiesNetwork at national events if you get the chanceDo presentationsWrite a blogContribute to an Open Source projectPublish a bookAnswer questions on a site like this oneShow accomplishments on your resume in business terms (what problemsdid you solve, how much money did you save the company, etc.)Internally the dynamics are a bit different. First you have to get a reputation as a person who knows his stuff, who can produce good quality work under deadline stress and who can solve problems. You also often need a reputation as a team player (which means something different to managers than low level employees, more on that below). But not only do you have to do these things, you have to make sure the people above you know you did them.  So make sure to mention the things you do in team meetings, forward any emails that praise your work to your boss. If someone praises you in a conversation, ask them to tell your boss. If you have a bulletin board at work where employees praise is posted, make sure that you get on it.  Make sure to introduce yourself to senior managers whenever you get the chance. Promotions are often decided at a higher level than your boss - make sure those people have heard your name in positive way. If you have a something like Yammer at work where employees can discuss business or personal related things and the whole company can join in, stick to business issues and make sure to write some interesting things that may get the attention of senior managers. They use these tools to look for talent to promote.  Be someone they can trust to deliver. Don't disappear in your cubicle dark hole and only come out when something is done. Give progress reports; bring it up as soon as possible when there is a possible delaying factor or show stopper. Admit mistakes and when you do go in with a plan to fix the problem. Find some work-related problems and go to your boss with a suggestion as to how to fix it. Be the go-to guy when everyone else is stuck.Be a team player. This isn't just helping others on your team and mentoring although that certainly doesn't hurt. But managers expect you to support them and to support company policies in public. NEVER let your boss get blindsided by a problem you knew about. If you disagree with something (and it's not a brainstorming meeting where you are expected to discuss the pros and cons), then talk to your boss in private. And the time to disagree on a technical issue is before the decision has been made. Bringing up an issue that has been decided repeatedly (especially in public) or worse, ignoring the decision to do what you wanted to do anyway will put you on the fast track to the bottom of the promotion list. If you have a chance to interface directly with users grab it. Those users that geeks write off as stupid often have the ear of the senior managers and impressing them can be good for your career. If you have the chance to do a special project that may involve something other than coding, grab that too. Successful special projects are a good way for senior managers to get to know your name.