For the past 3-4 years I can say that I m very active in programming (programming on daily bases and trying to compesate my education wich is not 100% related to programming). After this 3-4 years of daily programming I can say that I feel like I can make anything but would never call my self a excelent neithger a good programmer because I know that out there are guys which are insane programmers...
Neverless, I wanted to ask when can someone call himself a programmer or someone say that he knows some programming language, I now guys that had lectures in c# and have done NOTHING in therms of projects and say that they know c# or some other languages which makes no sense what does actually mean when someone says I know a programming language? How can you measure programming knowledge or can you?

Sounds like you are a young student. As you get older and get life experience, you'll find that titles mean very little and when people brag about titles they know even less.

If you know the concepts and can do it... I'll say your a programmer. Who knows if you are a noob or awesome. I can't tell from a title alone. As you develop, your reputation will follow. That weighs more than a title.

Just my two cents worth.

I guess you have to let time tell. By that I mean that you will naturally come to that realization. But in more practical terms, here's a good checklist:

  • People start recognizing your expertise: you are allowed to agree with them, it would be false modesty to do otherwise.
  • You more often encounter code that is "below you" than code that amazes you: you're closer to the "top" than the "bottom" in terms of expertise and code quality or techniques.
  • You can have conversations with people that you hold with high regards, and find yourself comfortable in those discussions: you don't feel out-matched by the "experts".

I consider myself an expert (C++) programmer, because I can tick each of these items. I've accumulated a lot of praise for my skills, knowledge and accomplishments in programming. I no longer really encounter code that baffles me or overwhelms me, i.e., I recognize most of the patterns used (most of which I have used at one point or another) and I rarely see code that I couldn't have produced myself, and I encounter code that I see as very novice or very bad on a regular basis. And there are few people that I look up to still, and have had equal-leveled conversations with some of them. That creates a sum total that makes it clear where I stand.

In other words, the only way to tell is to see what's out there and put yourself out there, and see where you fall.

When you code on your own projects, there is a natural blindness to what's out there. Every challenge you surpass makes you feel like you've reached the top, which is part of the exhilarating experience of learning a craft. As long as you don't remain willfully ignorant of what's out there, you should be able to get a sense of where you stand, what you've learned and what you still have to learn. And when you are looking for a new challenge, make sure that it really does bring you to a new level, and into unchartered territory.

That's another thing. You'll never run out of unchartered territory, but at some point, you'll have covered enough grounds that you can feel comfortable that any remaining holes can be easily filled on a need-to-know basis.

And finally, another thing to remember is that being an expert programmer (in one language or in general) is about a lot more than just the coding itself. It's not just about how fast you can solve problems, or how clever your tricks are. There are a plethora of software engineering issues, like weighing trade-offs on performance, safety, maintainability, user requirements, complexity of design, etc.. And then, there are all the project management issues and skills, like communication, documentation, version control, unit-testing, etc... These skills tend to take a lot longer to develop than pure coding skills, and they are much more important in the long run, and for any kind of job.

I know guys that had lectures in c# and have done NOTHING in therms of projects and say that they know c# or some other languages

Well, that's the definition of "ignorance is bliss". People complete such courses and are told they now know the language or programming in general. But the reality is, that is partly a symptom of the academic collective delusion that someone can be an expert in something after a semester of lectures on it. And it's partly a symptom of the students' ignorance of the real world. They write a couple of sorting algorithms, and create some trivial employee registry application, and they believe they're experts, mostly because they have no idea of exactly how laughably trivial those tasks are to an expert.

This has been for me a consistent issue with computer science students. They are the people who most consistently over-estimate and over-represent their skills as programmers, and who most consistently fail at the most menial tasks. I literally have examples of tasks that I managed to do within an hour, that computer science graduate students struggled with for two weeks.

How can you measure programming knowledge or can you?

You cannot really measure that. For one, knowledge is open-ended, i.e., you can never know everything. And second, knowledge is not linear. Every person follows their own path of discovery and ends up with a different sum of knowledge. It's hard to measure the volume of something that has the shape of Swiss cheese. That's why this whole notion of "expert" is so fuzzy and comparative.

And at the end of the day, you call yourself an expert if you feel you can defend that claim. And if you do claim to be an expert, and then fail to live up to it or defend that claim, then that'll just serve as a lesson and an opportunity to reassess, which is not the end of the world.

But... if you're in a job interview... then of course you say you're an expert at everything ;)

Thank you Mike for putting so much effort to answer my question!

I am not a programmer, but I have used programming as a tool for many years to solve science problems, cost analysis, processing of large medical data sets, image processing, plotting and graphing and so on. My advice is to get involved in a meaningful project and apply your programming skills. You will find out that there is a lot to learn from seasoned programmers and clients.

On the lighter side games like Sim City, Railroad Tycoon, Age of Empires and the like are fun to check into and develop programming expertice. Stick with simple graphics and look at the inner workings first.