<p>I didn’t read the other responses so this may have been said. I would recommend iTunes U. MIT has a good intro to computer science course using python. Many others also. The courses are free.</p>
<p>Studying a bit of programming can’t hurt to get you to start thinking like a programmer. But I also recommend buying and reading through this book as well:</p>
<p>[Amazon.com:</a> Schaum’s Easy Outline of Discrete Mathematics (9780071398770): Seymour Lipschutz, Marc Lipson: Books](<a href=“http://www.amazon.com/Schaums-Easy-Outline-Discrete-Mathematics/dp/0071398775/ref=cm_cr_dp_asin_lnk]Amazon.com:”>http://www.amazon.com/Schaums-Easy-Outline-Discrete-Mathematics/dp/0071398775/ref=cm_cr_dp_asin_lnk)</p>
<p>Yes, computer science is a branch of math and much of the stuff in this book will come up in one form or another. Depending on how “mathy” your CS program is, the more this book will help, but understanding the mathematical underpinnings of things like trees and predicate calculus will help you.</p>
<p>Wow, you guys are way over-stating the difficulty of C/C++. It’s more accurate to say that other languages like Java make certain things, like creating software with a graphical interface.</p>
<p>To the OP, if you are of a mathematical bent, it might be helpful to start off learning MATLAB as your first into to “programming” but see the MATLAB thread for more info on that.</p>
<p>Also, let me add that the first language I ever studied was C. Then C++. Then Java. I will make the argument, AND THIS IS IMPORTANT FOR BEGINNING PROGRAMMERS, that doing basic, beginner-type programs is MORE DIFFICULT in Java than in C++. Why? More overhead with Java, it takes more lines of code to do something like read in a floating-point number or various other little tasks, unless they’ve made changes to Java since the last time I tried to use it. Reading in a floating-point number and returning the square root in C++:</p>
<h1>include <cmath></cmath></h1>
<p>// later…</p>
<p>double n;
cout<<"Enter a real number: ";
cin>>n;
cout<<"The square root is "<<sqrt(n)<<’
';</p>
<p>But in Java, I remember you’d have to reading a text object or something, then convert it to a number so you could then perform an operation on it. Forget doing anything with a simple command-line interface. Another poster said that if you started learning on C/C++ you’d get too bogged down in syntax or something. I don’t believe that is the case, especially considering Java’s syntax is almost the same as C++.</p>
<p>C++ really isn’t that hard until you get far into it. You can make simple things relatively easily, and that’s exactly what you want at the start.</p>
<p>
No beginner is going to understand large scale open source projects. They certainly won’t understand the code behind something like Firefox. Fixing bugs is tedious and is not exactly something that is interesting. I agree that working to fix bugs and improve performance on open source projects is great experience, and looks great on your resume when trying to get jobs, but again, it’s not anything a beginner with little experience should be doing. Bug hunting is the least enjoyable aspect of CS.</p>
<p>
And they will need it, because C/C++ create certain hurdles that would make any beginner hate programming, like… memory management.</p>
<p>I agree that initially there are little differences between Java/Python and C/C++, but only when you’re talking about printing to the console and doing some math functions. This is quite boring to a beginner. When you move into GUI and graphics, and larger scale projects, these are more easily done in Java and Python, with much less hair-pulling frustration.</p>
<p>
There is certainly overhead with Java, due to it’s highly object oriented nature. But we’re not talking about printing to a console and doing math operations, which are things you do in the first week of programming. I agree that in your specific example, Java would be marginally more difficult - you would need a scanner object, for example.
Once you move past that, Java/python are much more simple. Try creating a window in C/C++ where you can draw shapes, move them, change their color, then add buttons and have those buttons create effects; this is something than can be done relatively quickly in Java, through the standard library.</p>
<p>**There’s a reason that even MIT, Stanford, Berkeley, and CMU do NOT start out with C/C++. Stanford uses Java for its intro CS class. Berkeley recently shifted from Scheme to Python, MIT uses Python, and CMU uses Python.</p>
<p>
</p>
<p>These things are “more easily done” in Java and Python not because they are actually easier, but because the situation is usually calling for something that runs in a very limited context, with little consideration for performance, reliability, or robustness. When these things come into play, whoever is responsible for the project must see to it that these issues are addressed. That’s when the “hard work” comes in, when someone has to actually understand what the program is doing, not just at the symbol or object manipulation level, but at the resource management level.</p>
<p>It is certainly possible to write buggy, poorly performing C/C++ programs, but those languages will (usually) reveal such problems earlier in the development phase. The programmer ignores these issues at his or her own risk.</p>
<p>As far as your comments about the open-source learning curve go, everyone goes through this, even people who’ve been programming for years. It takes time to really understand all aspects of a large, interactive program. That’s why it’s important (IMO) to be patient, and to get early experience. Being able to modularly decompose large programs is something that takes time, but the rewards are great (in terms of the experience gained, at least). Also, there will be times when a great deal of time and energy needs to be spent on a separate module if it is a bottleneck, is buggy, etc.</p>
<p>I think it’s reasonable for people to learn other languages before they learn C/C++, but I would caution that they are not really doing software engineering until they start attending to the issues I’ve discussed (regardless of the language used).</p>
<p>Im going to recommend a different approach then all the other posts before me. I would recommend getting an Arduino microcontroller for about $20. You can find one on amazon, sparkfun or a multitude of other websites. The microcontroller will allow you to do fun stuff; turn LEDs on/off, control motors, lights, etc. You can also go to the Arduino website at Arduino.cc and search around for information; the user forums have an enormous amount of info. My point, you need to have fun while learning- to help pull you into the subject matter. The Arduino uses a quasi C based language for programming. Honestly, once you learn the basic structure of how programming works- most languages are the same. I would just recommend having fun while learning the material! </p>
<p>The following video shows an autonomous car I created last month using an RC car, my android phone, an Arduino and Matlab(much like C) programmed with a neural network. Basically, the RC car is trained to follow the road I only gave the car 13 training examples and it does a pretty decent job staying on the road. </p>
<p>[VIDEO5_Autonomous</a> Car1.MOV - YouTube](<a href=“VIDEO5_Autonomous Car1.MOV - YouTube”>VIDEO5_Autonomous Car1.MOV - YouTube)</p>
<p>Whatever path you choose, just make sure you have fun doing it!!!</p>
<p>GUIs are “easier” in Java because one is built-in to Java, but with a single #include statement in C++ you can make it equally easy to do graphics in C or C++, only in C and C++ it’s a matter of choosing which GUI API you want to program in.</p>
<p>Classic introductory CS textbook:
[Welcome</a> to the SICP Web Site](<a href=“http://mitpress.mit.edu/sicp/]Welcome”>http://mitpress.mit.edu/sicp/)</p>
<p>Modified version using Python instead of Scheme:
[CS61A</a>, Spring 2012 Online Textbook](<a href=“http://www-inst.eecs.berkeley.edu/~cs61a/sp12/book/index.html]CS61A”>CS61A, Spring 2012 Online Textbook)</p>
<p>Note that the emphasis is on the CS concepts, not the programming language.</p>
<p>Also, check your school’s CS department web site to see if a course home page for the introductory CS course is available so that you can preview it.</p>
<p>@Yagottabelieve: These are all certainly true points, that understanding all of the issues you mentioned is important. But you have provided no reason that this is what a beginner should be learning. No beginner should start learning memory management and large-scale open source projects.
To give it an analogy, that’s like asking someone who has never flown before and knows very little about planes other than taking airplane trips to start studying how to fly a Boeing 747.</p>
<p>Again, the OP has to ask him/herself why computer science professors and the computer science departments at MIT, Stanford, CMU, and UC Berkeley have all decided to teach either Java/Python for their introductory CS classes.</p>
<p>As for tips for the OP, I’d recommend a textbook like Big Java - it has lots of cool exercises and is really well written IMO.</p>
<p>Berkeley introductory CS courses for CS majors use several languages:</p>
<p>CS 61A: Python (formerly Scheme)
CS 61B: Java
CS 61C: C and MIPS assembly language</p>
<p>
</p>
<p>OK, I’ll answer this a couple of ways.</p>
<p>If the OP is looking to do something that will help in learning the material from the classes that will be offered when school starts, the OP should contact the professors of the classes and ask what the best preparation is.</p>
<p>OTOH, if the OP is looking for a project to work on during the summer that can provide some programming experience, C/C++ is no worse than any other choice, as long as the OP is willing to take the time to learn how to program in those languages properly. If the OP encounters syntax problems, memory management problems, etc., those are part of the learning process, and the OP should take the time to understand the mistakes and seek to correct them. </p>
<p>
</p>
<p>Well, you have to start somewhere. Again, it is a matter of patience. The nice thing about open-source projects is that with modern technology, you can bring them up on your own computers, or use virtual machines (in some cases, you can get computing time for free, for a while, such as on AWS) to experiment with open-sourceware. It might be just a matter of taking one module and correcting some small bugs, adding some diagnostic output, or improving performance by noting a frequently traversed code path and making it the first condition reached from a branching statement. There’s nothing “off-limits” about this that can’t be overcome with a little extra time and effort.</p>
<p>
</p>
<p>Unfortunately, for a beginner who has never programmed before to try to self-study C/C++, without any instructors/TAs to help him, that will involve odious amounts of unnecessary frustration, frustration that is much more easily avoided through Java or Python, which abstract away many of the tiny, unimportant syntactical details of C/C++.</p>
<p>All your statements have been saying is that C/C++ is a “fine” language. But there has been no comparison between how C/C++ stacks up against Java/Python for a beginner.</p>
<p>
Sure. It is better to start with Java/Python so a beginner does not get bogged down with frustration.</p>
<p>
… Good luck to any beginner who tries to achieve enough proficiency to do this in a month or two of self-studying, unless they are a future Mark Zuckerberg. And you yourself admit there is going to be extra time and effort involved.</p>
<p>
</p>
<p>I find it interesting that you assume that a beginner must become frustrated. Furthermore, that you assume there is no value in struggling with something as a part of learning it.</p>
<p>
</p>
<p>Could it be that Mark Zuckerberg was patient, and that’s what helped him succeed?</p>
<p>I think there is value in spending extra time and effort to do something that you want to do. You seem to disagree. We could argue about this endlessly, and never get anywhere.</p>
<p>Anyway, the context of this discussion is a summer project, not creating a startup. But in order to better understand what is really needed, we need to understand the OP’s real motivations – what the OP really wants to get out of this summer project.</p>
<p>Well I wanted to get some programming experience before I started college in the fall. I have gotten through the first unit of udacity and have done a little on codecademy. udacity uses python while codecademy uses java. I think I have the basics down but I don’t not see how this would help create something bigger like a project instead of just lines of code </p>
<p>Sent from my DROIDX using CC</p>
<p>If you think you have the basic ideas of programming in hand and want to work some small projects, try some of these:</p>
<p>[Category:Programming</a> Tasks - Rosetta Code](<a href=“http://rosettacode.org/wiki/Category:Programming_Tasks]Category:Programming”>Category:Programming Tasks - Rosetta Code)</p>
<p>Each problem includes solutions in a large variety of languages.</p>
<p>
Again, there has been no comparison between Java/Python and C/C++. My point is that the struggle you speak of is unnecessary for a beginner, because that struggle primarily lies in syntax and pointers, which are small details that are not vital to an understanding of fundamental CS concepts like abstraction, recursion, trees, etc.
Not all struggling is created equal. There is value in someone struggling to wrap their heads around the logic of how an algorithm is implemented. There is no value in someone struggling because of some syntax issue.</p>
<p>
Patience is certainly valuable, but putting someone through unnecessary frustration just for the purpose of testing their patience is not. Not to mention the fact that Zuckerberg was first taught BASIC programming by his father, and his father also hired a programming tutor to teach him more concepts.</p>
<p>
I never said that. I disagree that there is value in spending extra time and effort to do something (learn programming) which can be more easily done in another fashion.</p>
<p>Java, Python, then C++ </p>
<p>After that, take some time to learn PHP, C#, and .NET. The demand is high.</p>
<p>
</p>
<p>Exactly this. C/C++ are worth learning, no doubt, but why should someone with no prior programming experience bother with debugging pointer errors and memory management at the same time that they are learning key concepts? It makes much more sense to learn basic programming constructs first, and then learn how to apply those in a C/C++ context.</p>
<p>
</p>
<p>The one thing that’s not ideal about Java as a starter language is the amount of boilerplate syntax. But I suppose this ordering is doable enough.</p>
<p>In fairness, for basic programming, there would be no reason to do either memory or pointer management in C++. By the time you get to that stuff, you know (roughly) as much as you would if you did Java.</p>