<p>Hello! I plan to major in computer science this upcoming fall wherever I decide to enroll and I was just wondering if there are any programming languages I should learn before I get there. I have the basics of Java down from taking AP Computer Science sophomore year and I'm trying to learn flash game development using ActionScript 3.0 at the moment. Anything else I should learn?</p>
<p>I was thinking of maybe trying to learn HTML 5, CSS 3, and JavaScript later this year so I can maybe design websites for $ in the summer</p>
<p>I strongly recommend learning C++ instead of easier languages. Learn C++ well and after you have mastered it. You will be able to pick up HTML 5, python, ruby on rails, php, and any other language in a few days. How good are you with Java? </p>
<p>If you comfortable programming then read the book Accelerated C++ by Andrew Koenig & Barbara E Moo. </p>
<p>If you dont feel like you are good programming start learning C++ from here</p>
<p>From there you should be learn visual c++ or any language. Try to make a program with a good user interface, an android or iphone app. That will help you a lot although it sounds like a lot of reading and work :)</p>
<p>Don’t rush it. It will take some time for you to be able to program well. It is very interesting and it will pay off well</p>
<p>Thanks! And I only have like a basic knowledge of Java. Like what a for loop does, what an else-if loop does, etc. I know that iPhone apps use Objective C, is C++ that far away from objective C?</p>
<p>If you want to get a leg up, you can probably find out what languages are used at the school you will be attending, and make sure that you have the basics of those down. After that, move on to popular languages… C, C++, Javascript, Python, Ruby, etc. should all be viable choices.</p>
<p>So basically you don’t really know Java. I’d advise you to continue along with Java and actually learn the language. Or do the same with another language. But don’t keep jumping between languages until you have a solid understanding of at least one language.</p>
<p>I agree with C++.
It also makes sense to check the department webpage of whatever University you will attend to see what languages they generally use, once you know what University you plan to attend.</p>
<p>Thanks for the advice! But I really want to continue learning ActionScript because I’m trying to develop a flash game. Should I abandon ActionScript and try to learn C++?</p>
<p>If you truly want to prepare yourself, learn C. Learn its memory management features, how to handle structs and arrays and how these are stored in memory.</p>
<p>Oh, and pointers. Learn about pointers. Pointers pointers pointers. I’m not saying you should become an expert in this overnight, but being <em>familiar</em> with it all will be of enormous help later on.</p>
<p>Oh, and recursion. I’d wager more people drop out of computer science over recursion and pointers than anything else, what do you folks say?</p>
<p>I don’t think it’s too difficult to understand the concept of pointers. A good explanation coupled with a nice diagram can get the point (haha) across pretty easily. But using them effectively (and debugging errors with ithem) is another story. </p>
<p>Recursion is a bit tricky until you’re able to visualize yourself going down a code path. Otherwise, it’s easy to get confused and have no idea what to do. Honestly, to succeed at programming, your brain has to be able to “execute” whatever code you’re writing. Only then will you really understand what you’re doing.</p>
<p>Also I think the number of language suggestions is just going to keep going up as this thread stays alive. The important thing to note is that a lot of what you learn in one language will be transferable to others. So stick with one and master it (at first).</p>
<p>For what it’s worth, I think it can be substantially harder to learn C/C++ without much prior programming experience. At the same time as you are trying to learn general programming constructs, you have to deal with learning pointers and manual memory management. It’s just sort of a rough introduction.</p>
<p>Hm, usually it’s actually better not to execute recursion in your brain because of its complexity. You can just rely on induction to assume it works.</p>
<p>The truth is that there is no solution to this problem, there are only tradeoffs. Yes, the OP could start by mastering an easy language where you can put programs together quickly, but would it prepare him as well for “real programming”? OTOH he could start learning C/C++ but it would be slower to put together a program and thus he may get discouraged because it takes longer to get results. And there are a jillion other subtleties involved as well.</p>
<p>As for checking algorithms in one’s head, how useful is this really? And how often will you be able to do this for more than simple examples? I agree with the other guy, use induction to prove it works and move on.</p>
<p>It’s useful to do this when <em>learning</em> on simple algorithms, but for real-world programming? The ability to create and prove the correctness of an algorithm is worth infinitely more than the ability to run it in your head, that’s what computers are for.</p>
<p>IMO pointers are a basic concept in C/C++. There probably aren’t very many meaningful C/C++ programs that don’t make use of pointers. So if you’re going to avoid pointers in the first place, you might as well try out a different language.</p>
<p>It’s really hard to debug errors if you can’t mentally follow code paths (this is really what I mean by mental execution).</p>
<p>I’d call it “real programming” if you are making programs for other people to use, and not just for a class or for fiddling around (not that I’m belittling the importance of pedagogical programming).</p>
<p>Also, my school’s introductory component-based programming sequence deliberately kept pointers “under the hood,” so to speak. We never used pointers in actual programs, pointers were used only in lower-level classes that our types (queue, tree, etc.) were then layered on top of. We also almost never used the assignment operator, instead we had a swap operator. Instead of:</p>
<p>a=b;</p>
<p>we would put</p>
<p>a&=b;</p>
<p>which meant that the identifier ‘b’ now had a’s former value and vice versa. This was to avoid having to write code to explain what a=b means if a and b are giant, arbitrary types.</p>
<p>Keeping pointers low level may sound crazy but it worked and it avoided a lot of errors. Most algorithms can be abstractly expressed without resorting to pointers (recursion is another matter), so I’d say that one could learn a lot about programming in C/C++ <em>first</em> and then have pointers introduced.</p>