Sounds like your kid might be kind of like me. I wasn't the best in school. (In fact I didn't go to school at all until "senior year" of highschool and 4 years of college.) I didn't drop out but I didn't get the best grades either.
I will be honest, I bet some STEM programs are no fun to go through. If he was succeeding writing software, though, chances are he will be fine. If you do force him to get an immediate job, like at a coffee shop, it would probably be best if it was part time so that he can also pursue development on the side at the same time.
There are some things you can do to nudge him in the right direction. As home-schoolers (technically non-schoolers) my parents were pretty good at this. For example, when I was younger, I loved video games and wanted to play them all the time. We didn't have a TV and our computer was a mac, so there weren't many games available. My parents would limit the amount of time I could play, but they also gave me an introductory license to a game engine for my birthday, and they would let me play as much as I wanted, provided that I was modding a game or building my own. That was how I started my career as a programmer.
Trying to enforce arbitrary limitations like that on a college age person would probably not elicit a good response. But, depending on the relationship you have with your son, you may be able to nudge him in the right direction. If he sees you as a rich baby boomer that he can mooch off of, then it might be a problem.
For example, if your son truely loves video games and/or software development, maybe you could do a similar thing to what my parents did, but adapted for a young adult instead of a tween? Here's how I would think about it if I were you.
1. Do not encourage or enable your son to use TV and game consoles such as Wii, xbox, playstation. If you have a TV in your house, consider getting rid of it.
2. Make sure your son has a good
work PC as opposed to just an entertainment box. A good PC can be had for about $500 these days, especially if you
build it yourself from parts. If he already has a good laptop, just slap an external monitor, keyboard and mouse on it to convert it to a real workstation for ~$120. Work PC vs entertainment is mainly a mindset thing. Maybe moving it out of his room and into a common space (like an office if you have one) might help, if he is amenable to that.
3. Encourage/enable him to do his own software or games. That means he needs
lots of time to do it, and depending on his personality, other people to do it with. Check out the local tech meetups. Where I live, there is an Independent Game Developers Association that meets regularly. All of the software required can be downloaded for free. For games, I recommend the Unity Game Engine, pirated Photoshop CS5 or Paint.NET, and Blender. For web applications, have him check out Visual Studio Community Edition, or Eclipse, Node.js, Atom, etc and give it a shot. There are tons of free tutorials online.
I guess since he is a young guy (and if he is anything like me) he won't want to do what his parents suggest. So maybe you need to use inception of some sort :P
For me, the video games thing worked... I was instantly hooked and spent 6-12 hours a day learning everything I could about video game development, including algorithms and data structures, calculus, linear algebra, GPU computing, 2D design, interaction design, color theory, etc. Didn't know I was learning all that stuff at the time, I just wanted to do games. But within a year of learning and participating heavily in the online community (irc chats, forums, and online contests) I was getting job offers, even though I was only 15 at the time.
And if he can get an entry level or internship position doing
Development (not tech support or something else) then that would catapult him even further ahead, especially if it's with a good company and doing something that he enjoys.