Hacker used to mean somebody who understood computers and networks on a systems level
and could program them to do anything they wanted.
Later on, it was mostly applied to people who could circumvent the security restrictions on a local computer and gain access to the "root" or "supervisor" level. This was almost always done for purposes of learning, or out of simple curiosity.
There's tons of stories about how the term "hacker" came to be. Most agree (although there are different versions of this story) that the term originated at MIT. Those in the early computer community that was beginning to form around people using early minicomputers and architectures they ran on, along with the LISP crowd (of Richard Stallman fame). This community operated on a form of meritocracy. If you were knowledgeable and smart enough to be able program the machines in this environment - in short, if you could "cut" or "hack" it - and keep up with the crowd, you were a "hacker." A hacker was somebody who could code - and knew what they were doing.
Later on the press dubbed people engaging in cyber-crime "hackers" because it had a nice aggressive ring to it - and because most of the people involved in it learned their skills by joining or reading tech docs written by traditional hackers.
Some hackers tried to differentiate themselves from the criminal and malicious element by trying to force the term "cracker" on the news media. But to no avail. Today hacker and cyber-criminal are synonymous terms.
So there's never been a better time to urge the status of the term "hacker" be changed to deprecated
, and come up with better terms.
So to respond to your four points:
* Who can be a Hacker:
Anybody who doesn't mind being thought of as a cyber-criminal or vandal.
Everybody else should choose better and more descriptive titles, depending on what they want to do. Better choices are: programmer, coder, software developer, system administrator, kernal developer, etc.
* What should one know to be a Hacker:
To truly master the art of systems and programming you need to have a deep and profound understanding of computer fundamentals. How these things work on their most basic level. Once you have that, what else you'll need to know depends on what you're interested in doing.
Problem is, it's pretty hard to grasp those fundamentals without first doing something with these machines. So you most likely won't sit down and say: "OK, first I'm going to study Turing, and then study machine architecture, then I'll learn all about operating systems, and then study language design, and then..." What you'll do instead is start learning a language (any language will do although some are better to start with than others) and writing programs. From there, you'll begin to learn and absorb as much as you're interested in about the underlying systems and protocols your language uses. And from there, you're only limited by time, patience, and the limits of your intelligence and learning style.
It's hard to predict exactly when you'll realize you know what you're doing. But you'll know it when it happens. Everything suddenly clicks and and starts to makes sense. New things get learned much more easily. And everything starts to integrate with everything else. It's a good feeling.
* What are the programs used by a Hacker:
All depends on what they want to accomplish. One mark of an accomplished computer user is their ability to identify and select the correct tools for the job at hand.
* What are the languages a Hacker should know:
Any and all. The biggies are C, C++, C#, Java, Perl, PHP, Python, Microsoft's Visual Basic and related programming framework, plus all the web-related scripting languages.
But there are also more specialized languages such as Erlang, Smalltalk, and Scheme that are also popular in certain programming circles.
So again...it all depends on what you want to do.