I'm a high school student highly interested in computer science in general. I've already taken two Computer Science AP classes, both in Java. I took the Computer Science AP exam last year and got a 5 on it, so I'm OK when it comes to Java. Not too long ago I started looking for a college major. Computer Science was definitely my choice, however because I got a tuition waiver from the school I'm going to, I decided to try Computer Security as well (Haven't added that yet. Was thinking about making a post to ask you guys what do you think I should add as a second major, so feel free to suggest. Thank you.) I looked deeply into both subjects and it seems like C, C++ and especially C#(in the future most likely) are widely spread and used. That's where the problem occurred. It's a good thing that I already have experience with pretty much everything when it comes to OOP. I'm well aware of pretty much everything that is essential to OOP: inheritance, polymorphism, abstract classes, structures, interfaces, enumerations and exceptions. I know I'm going to have some courses that will introduce me to those as well as .NET but I wanted to get good at it by the time that happens. Enough history, let's get to the point. What do you think I should start with? I'm definitely going to need a book to read from(and hopefully exercise). I know the ultimate tool would be Microsoft Visual Studio, but I'm not sure if I'm ready to spend that much money on something that I'm simply unable to take advantage of all its brilliant and complex features. So what do you think ? What book? What software? Where should I start? Any suggestion is tremendously appreciated. Thank you all.