The way you say "a good handle on the basics of programming" makes me thing you really don't. That's just too vague.
What I mean by that, what specific language(s) have you become competent in? You can't get a job as a programmer if you list "basics of programming" in your resume or CV.
If your goal is to become a professional programmer (paid), I would suggest getting competent with the following languages...
Low Level Procedural Language: C
Interpreted Language: Python
Object Oriented Language: Java
Shell Scripting: bash and/or ksh
OS Skillz: Linux
Web Stack: HTML, CSS, Javascript
Database: SQL
Books: That one about "Design Patterns"
Others WILL suggest a completely different list, but this covers a lot of different "tools". One of the most important skills you can develop is knowing which tool is correct for the task you are trying to automate. If all you know is Java, you may write a whole program for something that could have been a three line shell script. If all you know is C, you may write a huge program for something that could have been solved with a short Java program, or even shorter Python script. The bigger you make your "toolbox", the easier it will be to get and keep a good paying programming job.