If you want a full-fledged IDE with all the bells and whistles, I absolutely have to recommend the
JetBrains IDEs. I fell in love with
IntelliJ IDEA when I was programming a lot of Java stuff (I could never seem to get Eclipse to not crash on me for the smallest things, and NetBeans always felt kind of sluggish). They've got few more for other programming languages too! The other ones I've used personally are
PyCharm for Python and
RubyMine for Ruby, which are also great. (They've also got a
CLion one for C/C++, a
GoLand one for Go, a
Rider one for .NET dev, etc. They look just like IntelliJ IDEA so they're probably pretty solid too, but I haven't used those ones yet so I can't really say.)
IntelliJ IDEA (Java) and PyCharm (Python) have free and open-source community versions that are still amazingly featureful (RubyMine and the rest only have a 30-day trail version unfortunately). Definitely check them out if you're interested.
Re:
@Stahl's questions about learning programming:
I agree with
@Marvin's suggestion,
kind of. Remembering how myself and some of my friends over in the Computer Science department were when we graduated way back, I'd suspect that an unfamiliarity with all of the code libraries that are out there might be contributing to your feeling like you're not really a programmer just yet. That's expected: you've essentially spent the last few years in this ivory tower bubble of academia, where you've been coding a lot of your programming exercises from the ground up to demonstrate to professors that you know what you're doing. Which is great for learning, don't get me wrong! But if you're anything like we were, it also gives you a feeling of dread whenever you start to think of programming something, since your mind, by instilled habit, over-inflates the amount of work that you'll actually have to do.
That's a feeling that will mostly dissipate the second you're out of the ivory tower and programming in the real world. Unless you plan on programming in some really esoteric programming language, most of the stuff you'll want to use is already coded up. For example, knowing
exactly how quicksort works and what its time complexity is is fine and dandy, and being able to code it up in C++ is a good academic exercise I suppose. But in real-world programming you'll never need to code that sort of stuff yourself: instead you just use
std::sort() from the C++ standard library. A lot of these sorts of libraries were coded by a programmer (or team of programmers) who got paid
bank to spends months/years in front of a computer screen making sure that their implementations are as fast and efficient as hell. We probably won't write a better quicksort routine than they did, and the best part is we don't have to!
The second you're writing real-world programs that actually do interesting things by delegating to all of these (mostly) well-written library functions, is the same second that you'll realize "I can build
anything". And then you'll really feel like a programmer.
But if you wanted to get a head-start on it, why not just practice with a small project/s right away? Perhaps make that small
calculator app we were talking about upthread in C++. Put it up on github, treat it like a miniature software project. Code up the terminal calculator in C++, then use Qt to make a simple GUI for it, and you'll have something decent to show off to potential employers too. Or whatever you want!
Oh and speaking of github, definitely look into getting involved in any open-source projects that strike your fancy if you want. I was a little early for it, but what I'm hearing from a lot of the newer programmers I meet is that having a bunch of OSS projects you can point to and say "Yeah, I helped with that, and I can play well with others in a team" goes a
long way when you're a CS major and just getting started in professional software dev.
Also,
@Least Concern's suggestion is also a good idea, especially if you plan on game development as a career. But I'd advise caution about the part that I underlined. It sounds like a good plan, and hey, you might even be fine. But if you're anything like me, I was horrible at judging when that burn-out started while I was doing shitty programming work (not game programming, but similar project structure/rush-deadlines) with shitty hours and work-life balancing, "but at least I'm making a lot of money, right?". That moment you 'start to feel burnt out' is the moment when it's
too late. I ended up wasting a lot of time, and I actually ended up not wanting anything to do with programming for a couple of years after as a result, so I'm not sure I came out ahead financially in the end either. Word to the wise!
(I'll stop effortposting at some point guys I promise.)