please i intend to learn and study CS by my-self my goal is to be able to do reverse-engeneering,bug analysis and pentesting but i think that coding only doesnt gonna lead me anywhere so i wanna know whats the knowledges should i learn beside programming languages ?? thnx in advance
by pritaeas: Removed cracking from your request, Against our rules.
Computer Science isn't about programming. Sure, naturally Computer Science takes a problem and breaks it down into something so simple that a computer can do it; thus computer scientists also learn how to program usually. A computer scientist can take a computational problem and find an effective way to solve it (and probably implements a solution).
In any case, let's look at an analagy. Say you learned English. Does that mean you can write a good novel? No, it doesn't! It doesn't matter how fluent you are in the language; it means you can read and write English. It has nothing to do with how well you can write a story. It's the same with programming. Just learning languages doesn't help you write good programs. Thus, programmers need to learn a little computer science to get the job done.
If you want to learn reverse-engineering, bug alanysis and pen testing, that's more to do with software engineering and applied computer security then computer science (this doesn't have much to do with computation). A software engineer specialises in the development of software and is more applied.
That being said, there is no reason why a computer scientist wouldn't be capable of reverse-engineering, etc. It's not the focus of the feild, but a lot of computer scientists are also great software engineers (in the same way that a software engineer could be a great computer scientist).
EDIT: I should also point out that a lot of people and even schools incorrectly call "programming" Computer Science (probably because of the preceived prestige as opposed to the actual content of the feild). Also take a look at my sig.
It would seem that way to me. Software engineering encompasses a lot of computer science principles, but not necessarily the other way around. It's like the difference between a mathemetician and an electrical engineer. The engineer needs a good grounding in math, but the mathemetician may know nothing about electrical engineering.
To me, Software engineering requires vast knowledge but no need to be in depth; whereas, Computer scientist needs depth knowledge in the field they are in but may not need to know in different other fields. In other words, they both could be interchangable up to a certain level but can't completely switch.
PS: However, a software engineer usually earns more money than a computer scientist...
I think it might be that software engineers learn more about software implementations, and computer scientists learn more about the theory of computation. Though, there is crossover.
For example, as a software engineer you might expect to be asked to implement WebGL in a web browser. As a computer scientist, you might be asked to make a schedular for the "job shop problem" in a maufacturer. Though, the crossover is very high dispite the fields themselves being different, and more often then not you're competing for the same jobs (though sometimes csers go into the direction of research and algorithm development).