Originally posted by: jread
Thanks for the advice everyone.
Would you say that programming is either something you "get" or you "don't get"? I heard a lot of people say that most programmers have a natural talent for it and it's not something that just anyone can do.
I don't believe that this is true. A lot of people can do the programming (although many can't, but these are the people who 'hate math' and just don't have the mindset for it), but many just don't enjoy it. Some people find it tedious or unrewarding. Only trying it out for yourself will let you know if you like it. It's great that you're taking the initiative to check it out.
Originally posted by: notfred
good advice
Concern over degrees
Don't worry about necessarily having to take courses in programming to pick it up. While it helps your motivation, you really don't have to have it. Do as notfred suggests and read books about good programming techniques. Here's an example of the courses I took in order for my CS program:
-----------------
Java - Some crappy Java book by a guy named Savitch, you learn to code but not the concepts
Foundations of Computer Science - learn about algorithm time, code efficiency, probability, number theory, etc
Data Structures and Algorithms - learn about all the good stuff like stacks, heaps, queues, binary trees, red-black trees, hashing, efficient algorithms, etc. This class taught you the 'why' side of programming.
C/C++ - a much more rigorous focus on the language, pointers, recursion, classes, inheritance, good program design, etc. This taught you how to actually code in a useful language that required some knowledge not to break your programs (Java holds your hand in a lot of places, which can be helpful but doesn't help you understand the program as much.)
Computer Architecture - We learned SPARC assembly in this class, how computers work, how all the hardware works with the software, etc. This was a very useful course in understanding WHY certain algorithms are better than others. You learn about caching, instruction processing, etc.
Compilers - Programming class from hell. Focus on efficient programming and large amounts of classes working together in complex ways.
Analysis of Algorithms - Mathematically intense algorithm analysis. Understanding the limitations of algorithms such as why searching can't be done faster than n log n, how to dissect an algoritm, etc.
Operating Systems - OS programming and understand how the OS works. Helpful once again when designing programs since you know what's actually going on underneath.
Numerical Methods - How to compensate for the computer's lack of abstraction. Basically generating algorithsm for doing stuff like solving equations, graphing, finding zeroes, and in general getting around the shortcomings of hardware.
Cryptography - Sweet class about how we keep data private. Little focus on programming, mostly mathematical.
Software Engineering - Large scale project focusing on several different programming projects coming together.
-----------------
Whew, OK that was a lot. I'm sure I forgot a few, but no biggie. You can see the progression of 'learning to code' starts small and works its way up. Programming is more than just learning the languages, but that's usually the starting point for most people. If you think you like Python, give Java a shot. Then maybe take it up a notch with C/C++.
If you're still interested, start getting into the stuff like algorithm design and run time and efficiency and all that. You could read about more efficient data structures and learn about some of the math behind it.
Basically, learning to become a programmer is all about baby steps and having fun along the way. Create a few programs that do stuff that you think is cool! That's what makes it interesting. When you get the small stuff done, you start wondering if you're able to do more. So you read a bit more about it and gain even more knowledge. Then you tackle that problem, get stumped, read some more, and work on it again.
Programming is just a lot of problem solving done with a computer with interesting results. If you enjoy it, stick with it. If you don't like it, well then at least you tried and you can tell those CS majors just how boring you tihnk their work is after having done it
Good luck with your endeavor and I hope you have some fun with it!