Programming thread

Sorry if this sounds dumb, but what should I learn about programming after college? I'm going to be getting a degree in CS soon, and yet I don't feel at all like a real programmer. The only things I can do with what I've learned is make games in Unity and Unreal Engine 4, but that feels less like programming and more like perverting the work of others with my autism (even though I use C++ instead of blueprints for UE4). What skills should I try to develop?
If your goal is to get a job, I'd stay double down on C++ and Unity or Unreal Engine. Maybe even SDL if you don't mind going that far down. There are lots of jobs working with these tools, though game development jobs tend towards being high stress and involving painful crunch times and such. But you're young… just make money and cut bait once you start to burn out.

Even if you don't end up getting a game dev gig, C++ itself is still widely enough used in other fields that mastery of it would be a tremendous asset.
 
Sorry if this sounds dumb, but what should I learn about programming after college? I'm going to be getting a degree in CS soon, and yet I don't feel at all like a real programmer. The only things I can do with what I've learned is make games in Unity and Unreal Engine 4, but that feels less like programming and more like perverting the work of others with my autism (even though I use C++ instead of blueprints for UE4). What skills should I try to develop?
A real programmer is just someone who programs things. Just pick a project and start working on it. You'll hit roadbumps where you'll need to educate yourself to move forward.

Arbitrarily "studying" or "practicing" programming seems retarded and unrealistic to me.
 
Are there any other good IDEs besides Microsoft Visual Studio?
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:
A real programmer is just someone who programs things. Just pick a project and start working on it. You'll hit roadbumps where you'll need to educate yourself to move forward.

Arbitrarily "studying" or "practicing" programming seems exceptional and unrealistic to me.
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,
If your goal is to get a job, I'd stay double down on C++ and Unity or Unreal Engine. Maybe even SDL if you don't mind going that far down. There are lots of jobs working with these tools, though game development jobs tend towards being high stress and involving painful crunch times and such. But you're young… just make money and cut bait once you start to burn out.

Even if you don't end up getting a game dev gig, C++ itself is still widely enough used in other fields that mastery of it would be a tremendous asset.
@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.)
 
A real programmer is just someone who programs things. Just pick a project and start working on it. You'll hit roadbumps where you'll need to educate yourself to move forward.

Arbitrarily "studying" or "practicing" programming seems exceptional and unrealistic to me.
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.
I've been thinking about this stuff a lot in the past year. What makes a good programmer, code, project, software engineer, etc. These things will surely overlap, but they can also be distinctly measured. Some of it has been spurred by talks by Kevlin Henny (see), and some by just getting more interactions and experience.
I think one thing which can be said of the academic environment is that it does not make one into an engineer, which seems to me a neglected concern in the world of software. You got enough knowledge out of the academy to be a programmer. Set up a development environment, read the docs, start programming, and voila, you're a de facto programmer. A good programmer will probably write readable code, few bugs, which actually works (an important and oft neglected point). Those aren't always the skills required for writing maintainable software, which can be collaborated on with others, which has to live "in the world" and face weird and unforeseen circumstances. That gets you into the engineering part.
The only way to improve in any of those areas is by doing, then some "studying" and "practicing" will yield different results.
 
I've been thinking about this stuff a lot in the past year. What makes a good programmer, code, project, software engineer, etc. These things will surely overlap, but they can also be distinctly measured. Some of it has been spurred by talks by Kevlin Henny (see), and some by just getting more interactions and experience.
I think one thing which can be said of the academic environment is that it does not make one into an engineer, which seems to me a neglected concern in the world of software. You got enough knowledge out of the academy to be a programmer. Set up a development environment, read the docs, start programming, and voila, you're a de facto programmer. A good programmer will probably write readable code, few bugs, which actually works (an important and oft neglected point). Those aren't always the skills required for writing maintainable software, which can be collaborated on with others, which has to live "in the world" and face weird and unforeseen circumstances. That gets you into the engineering part.
The only way to improve in any of those areas is by doing, then some "studying" and "practicing" will yield different results.

To be a good programmer, you need perserverance.
Programming is the most fun and rewarding after you've become good at programming. It's tedious, and rough at first (but never boring for me)
And you'll only have enough willpower to write complete, polished, large programs when it's fun to do so.
That's just my opinion as purely a hobbyist.
 
To be a good programmer, you need perserverance.
Programming is fun after you're good at programming. It's tedious, and rough at first (but never boring for me)
And you'll only have enough willpower to write complete, polished, large programs when it's fun to do so.
That's just my opinion, at least.
I dunno. I used to be pretty shit at it and hate it. Then I ran in the exact opposite direction of programming. I only found joy in it when I started hacking, in the old school sense, on the programs and systems we were using in my first work place, and man did I have fun and fell in love with it. But I was still shit for a long while. Would only say I started getting decent at it in the past 1-2 years. Once you find something that hooks you, it doesn't matter how bad you're at it, you'll persevere until you git gud.
 
I dunno. I used to be pretty shit at it and hate it. Then I ran in the exact opposite direction of programming. I only found joy in it when I started hacking, in the old school sense, on the programs and systems we were using in my first work place, and man did I have fun and fell in love with it. But I was still shit for a long while. Would only say I started getting decent at it in the past 1-2 years. Once you find something that hooks you, it doesn't matter how bad you're at it, you'll persevere until you git gud.

I agree with you. I started out with Python, then went to C++, then to C. I liked C the most, but it wasn't really satisfying. I didn't know why at the time, but now I know.
I was just learning about the syntax of the language (how to arrange text on a screen), and not learning about how computers actually worked.
Ironically the thing that high level languages try to hide, is what I really wanted to know. And it's what I enjoy the most about programming.
I like making hardware do things (drawing pixels, making sounds), not solving abstract equations or other high level stuff.
 
Last edited:
I like making hardware do things, not solving abstract equations or other high level nonsense.
I can certainly appreciate that. Some of the most fun I've had programming was literally reverse-engineering the op-codes for some decades-old lab probe. The university had had it hooked up via rs232 to a computer in the back of the lab since forever. That computer was running Windows 98, believe it or not. It couldn't connect to the internet or a network and it didn't even have a CD drive; they had to transfer their monitor data on floppy disks. (This was in 2012.)

So when it finally died (and I'm impressed it lasted as long as it did) all of a sudden they couldn't use this expensive probe anymore. Rather than (sensibly?) spend tens of thousands of dollars to finally upgrade to something from this millennium, they decided that me and one of the physics postgrads should take the weekend to see if we could write some working drivers for it.

It was fun! (But also, fuck academia.)
 
I agree with you. I started out with Python, then went to C++, then to C. I liked C the most, but it wasn't really satisfying. I didn't know why at the time, but now I know.
I was just learning about the syntax of the language (how to arrange text on a screen), and not learning about how computers actually worked.
Ironically the thing that high level languages try to hide, is what I really wanted to know. And it's what I enjoy the most about programming.
I like making hardware do things (drawing pixels, making sounds), not solving abstract equations or other high level stuff.
It sounds like you might like systems programming. You might also enjoy reverse engineering and binary exploitation on the security side rather than the development side.
 
I think one thing which can be said of the academic environment is that it does not make one into an engineer,
I believe that's a relatively recent problem. In the early days, it wasn't uncommon for university CS departments to be engaged in ambitious and very long term projects with large teams. That's why you had many universities pushing their own in-house operating systems. The legacy of that is things like BSD, named for Berkeley, but also things like the main open source Common Lisp, named for CMU. Haskell's defacto standard compiler is named for Glasgow. Ocaml mostly comes out of a big public French research institute.

Back then, and still in a few places, you had an academic career doing nothing but building big, risky pieces of software that pushed the state of the art, getting a publication record that was just contributions to technical reports.

Nowadays, most CS academic output is measured in big conference papers, and software is secondary.

It's a crappy state of affairs which makes academic CS a pale shadow of what it used to be. Few departments have that amount of ambition and willingness to throw money at big risky ventures. But the few that do, often dedicated research institutions, still capture folk who are extremely talented in the academics and have top engineering chops.
 
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.)
Hey, thanks for your advice. It's nice to hear things get better. Whenever I tried to do work outside of class, all I could think to do was work on a Unity or Unreal project. I like doing work in game development, but I felt frustrated at the thought that gameplay programming was all I could do outside of class. I actually never considered working on an open-source project before. Doing something like that sounds like a good way to broaden my horizons (the calculator sounds like good practice too). I'll definitely work on finding a good open source project when I get a chance.
 
1574687801164.png

cause that's how everyone fucking does it, why you gotta be so difficult ncurses?
 
cause that's how everyone fucking does it, why you gotta be so difficult ncurses?
But it's usually row then column. And it's the same order in the escape codes that ncurses will output.
It's text position, not coordinates for raster graphics.
 
  • Agree
Reactions: Coolio55
I only got joy in tech and programming back the moment I quit tech as work field. Having to constantly navigate around expectations of people who never touched a computer (yeah, this was a while ago) and the reality of economical interests by the same people and quality of work consistently suffering because of it killed all my motivation. My guesstimate is it's the same these days with a different, more dishonest about their actual motivations crowd of people and probably more extreme than it used to be. Although I have (had probably more appropiate in 2019) a rare skillset I'm happy where I am (which doesn't really involve computers) and have no desire to go back. Also there's so little competition in my current work that I can literally move to another city and not even think about if I'd get a job or not, nor worry about being too old. Don't feel it's like this these days in tech. With some industries in tech it seems like if you're past 40 and don't want to do something different, you might as well kill yourself. I assume many people here are in their 20s and in your 20s you don't think you'll ever be 40+ or even 50+. Believe me, those dates come, they come (and pass) faster than you think and people will start treating you differently automatically no matter how you actually are and even if you still feel a good early-to-mid-30s on the inside.

I also like that I can use a simple text editor for my C and don't have to learn meme language/workflow of current year and can go off on tangents for literally months. Yeah, maybe I'd turn out more efficient, but I don't have to be efficient. But ok I'm rambling now, just this constant discussion about programming and tech jobs got me there and I kind of wanna underline my viewpoint. If you enjoy these things or find them interesting, don't automatically assume you'll enjoy working in the field, quite the contrary actually maybe. Also think about what'll happen when you get older maybe. There's no shame in paying the bills with something you don't consider your "passion". Work to live, don't live to work and all that. From the stuff I read online I feel there's a lot of workforce exploitation going on where people that consider all this their "calling" get worked to the bone for the questionable benefit of being called a "hacker" and "totally genius" by some stuffed suit who then takes home the actual profits.
 
I only got joy in tech and programming back the moment I quit tech as work field. Having to constantly navigate around expectations of people who never touched a computer (yeah, this was a while ago) and the reality of economical interests by the same people and quality of work consistently suffering because of it killed all my motivation. My guesstimate is it's the same these days with a different, more dishonest about their actual motivations crowd of people and probably more extreme than it used to be. Although I have (had probably more appropiate in 2019) a rare skillset I'm happy where I am (which doesn't really involve computers) and have no desire to go back. Also there's so little competition in my current work that I can literally move to another city and not even think about if I'd get a job or not, nor worry about being too old. Don't feel it's like this these days in tech. With some industries in tech it seems like if you're past 40 and don't want to do something different, you might as well kill yourself. I assume many people here are in their 20s and in your 20s you don't think you'll ever be 40+ or even 50+. Believe me, those dates come, they come (and pass) faster than you think and people will start treating you differently automatically no matter how you actually are and even if you still feel a good early-to-mid-30s on the inside.

I also like that I can use a simple text editor for my C and don't have to learn meme language/workflow of current year and can go off on tangents for literally months. Yeah, maybe I'd turn out more efficient, but I don't have to be efficient. But ok I'm rambling now, just this constant discussion about programming and tech jobs got me there and I kind of wanna underline my viewpoint. If you enjoy these things or find them interesting, don't automatically assume you'll enjoy working in the field, quite the contrary actually maybe. Also think about what'll happen when you get older maybe. There's no shame in paying the bills with something you don't consider your "passion". Work to live, don't live to work and all that. From the stuff I read online I feel there's a lot of workforce exploitation going on where people that consider all this their "calling" get worked to the bone for the questionable benefit of being called a "hacker" and "totally genius" by some stuffed suit who then takes home the actual profits.
I consider myself very lucky that I was able to do a shift from my previous line of work, which was adjacent, to programming, that I get to program in a language I want, to solve problems I want, and that I don't completely hate it. Don't know what I'd have done if it didn't happen, but I feel like I got over 90% of what I wanted out of it. I really like my job, ffs. Let's just hope I can make it past 40.
 
I only got joy in tech and programming back the moment I quit tech as work field. Having to constantly navigate around expectations of people who never touched a computer (yeah, this was a while ago) and the reality of economical interests by the same people and quality of work consistently suffering because of it killed all my motivation. My guesstimate is it's the same these days with a different, more dishonest about their actual motivations crowd of people and probably more extreme than it used to be. Although I have (had probably more appropiate in 2019) a rare skillset I'm happy where I am (which doesn't really involve computers) and have no desire to go back. Also there's so little competition in my current work that I can literally move to another city and not even think about if I'd get a job or not, nor worry about being too old. Don't feel it's like this these days in tech. With some industries in tech it seems like if you're past 40 and don't want to do something different, you might as well kill yourself. I assume many people here are in their 20s and in your 20s you don't think you'll ever be 40+ or even 50+. Believe me, those dates come, they come (and pass) faster than you think and people will start treating you differently automatically no matter how you actually are and even if you still feel a good early-to-mid-30s on the inside.

I also like that I can use a simple text editor for my C and don't have to learn meme language/workflow of current year and can go off on tangents for literally months. Yeah, maybe I'd turn out more efficient, but I don't have to be efficient. But ok I'm rambling now, just this constant discussion about programming and tech jobs got me there and I kind of wanna underline my viewpoint. If you enjoy these things or find them interesting, don't automatically assume you'll enjoy working in the field, quite the contrary actually maybe. Also think about what'll happen when you get older maybe. There's no shame in paying the bills with something you don't consider your "passion". Work to live, don't live to work and all that. From the stuff I read online I feel there's a lot of workforce exploitation going on where people that consider all this their "calling" get worked to the bone for the questionable benefit of being called a "hacker" and "totally genius" by some stuffed suit who then takes home the actual profits.
Honestly the moment I realized all the shitty meme programming on reddit was how modern tech companies actually operated I realized I could never work in this field unless I was self employed.
 
Back