
I applied to the Postbacc / Continuing Edu program to take it. Was a little bit of a pain but not too bad.
Courses are not cheap..$7k all in. Ideally you can get work to pay for some or all..
The above books are quite apt for beginners. You should expect to struggle a little but you must persevere anyway. I remember struggling with sorting and matrix multiplication algorithms when I learned it the first time in school. Do not mistake your unfamiliarity with the subject for its inherent difficulty! Once you write a few sample programs and see how the algorithms play out, you'll get the hang of it.
But for learning things inside out, Java might be a very good choice. Good books, great amounts of algorithms, in fact great algorithm books too. One really good one is Effective Java, sEcond edition. Another algorithm related (short but solid) book is Data structures and algorithm analysis in Java.
Now, don't take me wrong. I might be a little biased, because I find it easier to do a lot more in Java on Eclipse IDE, than anything else.
Started a startup right after MS, didn't go so well. Still stuck in Dallas, TX. Would love to move to CA, but immigration issues plus financial burdens.
I started out as a C++ job in my current company that hired me, with some more AMPL (Mixed integer programming). Read Ruby on Rails book, Agile programmingusing ROR or something by DHH (David heinemeir hanson). Loved it, but found ROR a little limiting for what I am doing. But my day job ended up being in Java. I do prolog hacking, although haven;t really done that in while. And still for fun, and continuing my startup on side, and completing a dream of solving a bunch of NP complete problems in seconds, still using a mix of C#, Excel, PHP, Prolog. Very soon jumping onto Javascript or Jquery probably, since I wanna move into making a real Web GUI, instead of a C# GUI.
So, yeah after all this, I found easiet and very helpful where C# on Visual studio and Java on Eclipse IDE. Loved ROR, found it quite easy too, esp the book is great. For PHP, I still am doing structural coding, although sometime in future I am def reading PHP Objects, Patterns and Practices .
I wish that would help you pick one. Because you sound a lot like me, I was so confused in college, no idea where the world is going. Personally, my research and doing my startup later opened my eyes to the real world. Of course, Paul Graham essays and HN were so much more helpful too.
Of that reminds me, go read PG's(Paul graham) essays first. I think you need to understand programming in general first, the startups and then pick up a language to learn.
Oh, Oh, MUST READ for you....I wish this came out when I was in high school or early college.
This will give you a little more perspective.
Choose Your Own Adventure: Should I get a CS Degree? Do you want to be a great developer? Yes! (Page 3) | Not Really. (Page 2)
(Page 2) That’s totally cool, actually. If you were going to force me to wager on who becomes a success or changes the world more, I would put my money on an “okay” developer with a strong business sense, basic understanding of Minimalist/Gestalt design principles, or thorough understanding of a problem domain where technology has not been fully brought to bear over a purebred “great” developer any day. The great thing about choosing this route is that you can always decide later that you want to go deeper down the rabbit hole and learn more if and when you need to. My one nugget of sage advice if you choose this path is this; Be very, very cautious of not investing too much effort in solving “big” problems without first trying to do some research about who has tackled a similar problem before and in what way. You probably have some friends who went and got CS degrees; Buy them lunch (much cheaper than getting a CS degree), explain what you’re working through and ask them if it sounds similar to any data structures or patterns that they know of. An ounce of humility and patience here can literally save your product/career. You win! THE END!
(Page 3) OK Then: Here is something you need to hear. Despite what all the “look at me, I’m a successful developer and I have no CS degree” reinforcement responses that inevitably pop up on these threads might lead you to believe, you cannot skip doing the work of understanding the fundamental and counter-intuitive principles and patterns that (most good) CS curricula impart and be a great developer. Doesn’t happen. Sorry.
However, despite what all the “You _need_ a CS degree – I got one and I know you could never be a good developer without one” responses (that also inevitably pop up on these threads) might lead you to believe, a CS degree is not the _only_ way to learn these things. It is _a_ way…and you might even say a pretty darn good and efficient way…but you can do it on your own if you are motivated enough.
That leaves us with the question below: How do you want to do the work? On My Own! (Page 4) | At A University! (Page 5)
(Page 4) Cool. I guess I’d recommend googling Data Structures and Algorithm Analysis as starting-off points…if you wanted to read (and understand even half of) Knuth’s books, you could most likely put any CS Bachelor to shame. Have at it. GO TO PAGE 6!
(Page 5) Cool. The one obvious advantage of this path is that they give you a little totem at the end that says you did the work. That little totem may be worth more or less depending on who is looking at it and their general worldview – but no one can ever take it away or deny that you have it. The other obvious advantage is that it puts you in the general vicinity of other people who were willing to do the work. Maybe you meet some of them and end up doing some things together? I don’t know. The obvious disadvantage is that doing this costs money. Don’t do too many drugs, join a couple clubs (but not a frat/sorority) and savor the concept that for 4(-ish?) years, your entire environment is focused on your personal intellectual enrichment – this will never, ever happen to you again in your whole life. Don’t be too smug when you finish, though…you have about 5-7 more years of hard work ahead of you before you are worth a real damn to anyone but your mother (but at least they will pay you)…so don’t break your arm patting yourself on the back. If you’re lucky enough to graduate during one of the bubbles, you can get hired quickly at a good rate..but save your money, because bubbles don’t last forever. If you graduate during an “offshoring trough” take a job in a niche industry or do tech support for a while, but don’t panic – the next bubble will be coming in 2-3 years…the system just has to flush out all the “Look at me! I’m a growth-hacker/new-media-guru” dead weight they hired during the last bubble. Learn at least one new “technical” thing on your own every year (just make sure it’s a real thing you can use to solve problems and not some doucheword like “agile”) but spend more time with your friends (in real places, not some MMOG). Always be the person who buys the first round of shots/beers when you meet new people – you will either get one back in return and a new friend, or you will learn quickly who is not worth keeping around…either way, you win. THE END!
(Page 6) If I am going to hire you, you better believe I will ask you what you did instead of getting that degree to learn the stuff you need to learn so that you aren’t spending my team’s time and money trying to solve problems that were solved 30 years ago in a much better way than you ever could...(No, child, you are not more clever than Dijkstra)…and if you think that me daring to ask you that is sufficient cause for you to terminate the interview process, then you have done my work for me. On the other hand, don’t let me give you a haircut, either – and I will try to; I put “CS Degree Required” on my job postings because I don’t want every bubble-jumper who spent an hour watching a Coursera video wasting my time. I want you to give me your resume, but I also want you to stop and think for a second about whether or not you’ve really done the “equivalent work” to mature as a developer. You are different from the school of fish who just aren’t “finishers” – but you are swimming in the same pond, so make sure I know the difference between you and them…and if I can’t tell, then I really do suck and you just saved yourself 6-7 months of working for a place where you don’t want to be anyhow and you win. THE END!
There are certainly less dense introductions to the subject, but Cormen is the classic that you'll see on every good programmer's shelf (and they even read it, too!)
Edit -- "Data Structures and Algorithm Analysis" by Mark Allen Weiss is an example of a common, less-dense introductory text. It's actually not bad, given its intent.