I’m retired now, but I programmed professionally in a half-dozen languages, played around with a dozen more, and briefly taught in four of them at the college level. My suggestion would be to start with something fun and easy to get started in. I enjoyed my recent first experience with NetLogo creating simple graphical simulations of ecological or astrophysical systems. I don’t think I have ever seen a programming system in which learning how to construct a GUI for a program was so easy. And the language is rich enough so that you can also learn a bit about thinking like a programmer—“What algorithm generates the result I want?”
But NetLogo is just a toy language and it will satisfy you for only a month or two. Next, I would suggest moving on to an interpreted functional language—either Haskell or some variant of Scheme—for a few months of more serious play.
Only then would I move on to a more serious compiled object-oriented procedural language using an industrial-strength IDE. I would suggest picking two languages to learn well—one from column A (Java, C++, Python, Smalltalk, or Scala) and one from column B (Haskell, Scheme, ‘R’, Ruby, APL, Forth, or something totally exotic like a language associated with a proof assistant).
If you are not currently a Unix user, your biggest decision may be whether you want to become a Unix user. Because most of the programming language stuff (that you don’t have to pay big bucks for) assumes that you work in a Unix-like environment. If saving money is important to you, and you don’t currently know much Unix-speak, then you will find that learning Unix will be just as difficult and time consuming as learning a programming language. But also just as useful—maybe more so.
I’m retired now, but I programmed professionally in a half-dozen languages, played around with a dozen more, and briefly taught in four of them at the college level. My suggestion would be to start with something fun and easy to get started in. I enjoyed my recent first experience with NetLogo creating simple graphical simulations of ecological or astrophysical systems. I don’t think I have ever seen a programming system in which learning how to construct a GUI for a program was so easy. And the language is rich enough so that you can also learn a bit about thinking like a programmer—“What algorithm generates the result I want?”
But NetLogo is just a toy language and it will satisfy you for only a month or two. Next, I would suggest moving on to an interpreted functional language—either Haskell or some variant of Scheme—for a few months of more serious play.
Only then would I move on to a more serious compiled object-oriented procedural language using an industrial-strength IDE. I would suggest picking two languages to learn well—one from column A (Java, C++, Python, Smalltalk, or Scala) and one from column B (Haskell, Scheme, ‘R’, Ruby, APL, Forth, or something totally exotic like a language associated with a proof assistant).
If you are not currently a Unix user, your biggest decision may be whether you want to become a Unix user. Because most of the programming language stuff (that you don’t have to pay big bucks for) assumes that you work in a Unix-like environment. If saving money is important to you, and you don’t currently know much Unix-speak, then you will find that learning Unix will be just as difficult and time consuming as learning a programming language. But also just as useful—maybe more so.