So the big Q: Where do I start? Do you have any resources to break down my options (Languages for Dummies?) and help me decide what, and how, I'll go about this.
Background info: I've programmed in C, C++, and VB, but nothing more than what an entry level course would teach. I'm rather adept in CSS, but that doesn't really count.
That said, I suggest you start with something fun because it will motivate you. Example of that might be a simple dynamic website (using php, python, ruby, or whatever else you might like).. Also fun is creating a small game (Using some excellent libraries for beginners).
You told us what you knew about programming, but you didn't tell what was your strength in other fields in life. Again, I suggest you start coding something related to other fields you're pretty good.
To give you a personal example, I first built a website about dragon ball because that's what I liked when I was younger ;-) Also, I made some chat robots because I pretty much liked IRC. That was my really first projects. (Done with pure html and mIRCscripts! The real important thing is to start somewhere.. once you create something, it motivates you to learn more and more. For instance, I switched from mircscripts to C++, then learn a dozen of languages for fun and now, I live from that :) However, it might never have happened if it wasn't about those dragon ball web pages that I had so much fun building.
In short, do this course: http://cs.northwestern.edu/~akuzma/classes/EECS110-s10/index...
All the labs and assignments are online. You get to make maze solvers, generate fractals, implement Conway's Game of Life, lots of genuinely fun stuff. Just work through it and tell yourself you are doing it for fun not for work. You'll be done before you know it. Good luck!
And your code often gets to control graphical libraries to spice things up.
I would recommend http://diveintopython3.org/ instead.
That being said, when I started, I made due with what I had. QBasic. Then a borland C compiler. Then Java. And then I just started experimenting.
It didn't matter to me, I just loved to create things.
Bottom line... you have to love building a complicated puzzle and you have to be able to drive yourself to finish a project.
This "okay okay" business basically says to me.... you're in trouble already.
From CSS, an obvious way to go is Javascript or PHP, or better yet both.
If you think that you don't want to build a specific thing, but instead want a birds-eye armchair view of the essence of what programming is about, don't waste time; try SICP:
http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...
But odds are that you'll quickly find that you don't actually want to be a computer scientist. ;) You want to build something. So find an example of the thing you want to build, learn what it was built with, then learn to program that.
Bonus advice: Whenever you don't know what else to do, learn about Unix, find a new feature of your text editor or version control system, or study regular expressions.
The process goes something like this: Okay, SICP sounds good. They're using LISP. How do I make a LISP program? The internet says SLIME is THE way to go and I'd be an idiot to try any other development environment. Ok, I guess I'll just install that... (3 weeks later)... okay that didn't work. Screw this, I'm learning PHP.
That said, the first term of my freshman year of college used SICP as the textbook. I banged my head against a wall for the first six weeks and had an epiphany in week 7. It's the best feeling in the world when functional programming finally makes sense.
SLIME is supposed to be the way to go for a complicated LISP like Common Lisp or perhaps a richer Scheme or Clojure, but SICP is trying to teach you programming, CS and the like, and what you learn from about Scheme is incidental (well, until you get the the metacircular interpreter magic).
Learn PHP. You know more than you are letting on, because you evidently understand exactly why PHP is a big success. Get some stuff done. I assure you that the websites you build with PHP are real websites, and the money you earn with them is real money.
Given that I work at a Drupal company, I would be remiss if I didn't suggest that learning to build sites with Drupal is a great way to learn to work with PHP, Javascript, a web stack, et cetera. The community has lots of people who are coming from just the same place that you are.
I suggest Python, check out these resources:
The reason is, this combination (like it or not) has a very good chance of completely taking over a wide spectrum of applications within a couple years (web, mobile, tablet, server, and desktop). Java and especially Ruby might be trendy now, but I am starting to believe the days of mega-sized application layers are numbered. JavaScript + HTML5 + touchscreen stuff on the iPad is already hot, and not to mention really fun to play with and learn.
You asked about breaking down the options. Something which I've only fairly recently realised, is that languages differ in more ways than just syntax and built-in modules.
As I see it, the three main 'types' of language are:
Object Oriented ("OO"/"OOP")
Functional
Procedural
OO languages are usually built on top of procedural, and procedural languages are by far the most widespread.Functional languages are based on a more mathematical model, and if you've studied maths they'll probably make a lot of sense to you. They're still seen as largely academic languages, but they are used in some real-world scenarios, and they have devout followers. It's a powerful paradigm.
Object-Oriented purports to allow you to model the real world more closely, but the degree of success is debatable. Personally it's my favoured approach; to me you can lay out your model really simply with an OO approach, which in turn lends itself well to separation of concerns, reusability and modularisation (i.e. you don't want to build your login system and have that also handle thumbnail uploads, they're different concerns, they should be handled in different parts of your code)
Procedural, to me, is really a necessary evil en route to OO.
So, yeah, I thought a broader view of language types might help, rather than a specific view of particular languages.
I found personally that event-driven programming (signals, triggers, listeners) is different enough to be considered another style. Synchronization, causal sequences of events, and a clock, used for GUIs or workflows, requires a different sort of thinking than functional, procedural, or OO.
That was a bit of a tangent. My original thought was that there are several thousand lifetimes worth of programming knowledge online, and it's getting more and more organized by the minute. Google and StackOverflow will be your best friends. It may take you some time to learn how to ask the question, but beyond that you should be able to find solutions to any problem that you run up against.
With this in mind, it's important that you actively apply that knowledge. Learning is one thing, doing is quite another. I've often times postulated to myself that there's probably some optimal ratio of studying vs. doing, in all things. Then, I realize there's more to it than that -- there's the context switching. If you spend 5 years learning, then 5 years doing, you'll never learn as much as if you spend 1 day learning and 1 day doing for 10 years straight. Learning and doing feed off of each other.
So, learn and do. Find something you really want to work on, and try to build it. When you run up against a wall, which you most definitely will, it's time to learn. Once you're ready to give it a shot, do it. When things start getting too complicated, you're probably doing it wrong. Start over, make things "cleaner" (this becomes a 6th sense after awhile), and you'll find yourself naturally creating patterns that you become comfortable with. Like any other skill, it's really a pleasure to see your abilities progress.
Have fun.
http://norvig.com/21-days.html
PS. I'm not sarcastic. Actually, the article contains the best advices for a programmer I ever read. Maybe you just don't have to rush things..
Also, google "Learning Python the Hard Way" for an equally-excellent Python intro.At first, your choice of language isn't all that critical so long as you start out with some resources you've turned up that'll let you get some of those first projects completed. Then you'll be good enough at formulating ideas then implementing them to make a more informed choice. Either you'll be comfortable enough with your chosen language's idiom to solve problems even if they don't necessarily align with the language's strengths, or you'll have a better basis to pick a new language that addresses your problems with the first language. After some initial discomfort, if you've picked well the new language will start to feel handy and expressive in a short while.
Any of the major languages can be taken on by the new programmer, I usually recommend one of Ruby, Python, JavaScript, Java, or Groovy. The resources for beginners are good, the user communities are supportive, and they're all expressive enough to create powerful programs.
There are lots of other good languages--no knocks on them--these are just my favorites presently. I teach programming to non-programmers, BTW.
Once you pick a language, come back and ask for resources for that language. ;)
The take away message I got from seemingly everyone was to first decide WHAT I want to build, then find the best language. Teach myself using fun, interesting examples, and keep plugging away no matter the difficulty. Also, I should take full advantage of the wealth of information that can be found online. Lastly, since I'm already in the web-design field (for the one person that asked I own my own small web/graphic design firm), I might wanna stick with PHP or Java (or Python / Ruby).
Again, thank you.
You can program cool, fun programs in the browser with Processing.js, a simple, cool graphics drawing language. Check out the exhibitions and learning stuff.
1. Buy a Linux or Mac computer, because all the standard parts work quickly and simply on those platforms and are difficult to run on Windows. That, or have a remote computer where you do your dev work.
2. Learn Ruby or Python. It doesn't matter which. People on HN seem to love Python, but there's no substantial difference if you're using them to build web applications.
Personally I find Win7 has a far superior interface to OSX and out-of-box linux distros if you like using your keyboard and a minimal\no-shortcut desktop. The taskbar looks great left-aligned which, ideal for widescreen monitors. To open any program all you have to do is press the Windows key on your keyboard and type 2 or 3 letters for an autocomplete to find it, then press enter. No menus or shortcuts necessary. The only downside is installing CygWin for BASH, but I'd rather do that than install WINE for Adobe.
Tool chaining. For me, the ease with which I can bang out scripts and makefiles and have the tools easily check out versioned code from rcs/svn and that I can pipe and redirect and have a host of efficient tools like grep and nm and objdump and more, and they all work together piping and redirecting to make exactly what I want in so many easily altered configurations. Release and debug and partial debug and static-checking build and more, with all the makefiles just text - so easy to alter and tweak and copy and share (and even have them configure on the fly, reading the output from the compilation and rerunning with extra warnings or debug symbols) and have them run commands themselves like sending eMails to everyone who is listed as an interested party on the source controlled spec list, and so much more. Valgrind is so useful that if I have to develop on a Win32 machine I get a version of it going under MinGw, and sometimes I run a Win32 debug under Wine on Linux so I can use Valgrind on it.
I sound like the biggest *nix dev env fanboy ever.
You didn't even give a reason why OS X or Linux are better, which tells everybody you are just a zealot (and the people who upvoted you are as well).
"You didn't even give a reason why OS X or Linux are better, which tells everybody you are just a zealot"
Actually, I didn't give a reason hoping that it would spark an intelligent discussion with other people sharing information about pros and cons. I was opening the topic. I can understand how it looked like zealotry and tribalism to you.
That opens up both server and front end web programming [jQuery/DOM and Node.js on the backend]
For books, try Crockfords 'Javascript the Good Parts' and mimic some of the nicer idioms as you see more jQuery code.
6th edition of Flanagan's Definitive Guide coming out.
The thing about programming is that it's a creative process where you apply ideas in order to create a solution, the more clearly you understand these ideas the better you will be at programming(which is just writing down a solution so that a compiler can understand it).