Computer Science major pre-freshman year question

<p>Hi guys, I'm a soon to be undergrad at Northeastern University and I'm majoring in CS. I took AP CS A this year and was underwhelmed. I just took the exam today and I think I should manage a 5 without much luck. Anyway, I've been teaching myself C++ (with the aid of an ebook I purchased) to get an understanding of concepts that aren't explored in Java and other non C languages (pointers, dealing with memory, etc). </p>

<p>The curriculum at NU has me learning Lisp in the intro courses. So my question is: What should I be doing to prepare? I really love CS, so I'm not looking for an answer such as, "Take the summer off and relax," because this is relaxing for me :). Should I start learning Lisp after I finish the book I'm reading on C++? I really wanted to learn Python next, but is that foolish since I won't deal with Python until way later in college? Also, I'm aware that knowing many programming languages is ideal, and I plan to learn a nice variety, but I'm looking to create a game plan for the summer.</p>

<p>Any and all input is much appreciated, thanks a lot.</p>

<p>Try to find a knowledgeable mentor. Any family friends? Look at nearby colleges, maybe a small computer business, or possibly geek groups like “Unix Users” (there just happens to be such a group locally). </p>

<p>I know a HS Junior who got excited about CS and began with Python. There are many introductory tutorials. Now the guy has spent some time on [Project</a> Euler](<a href=“http://projecteuler.net/]Project”>http://projecteuler.net/) and [The</a> Python Challenge](<a href=“http://www.pythonchallenge.com/]The”>http://www.pythonchallenge.com/) Working on these can easily occupy a summer and greatly increase programming skill.</p>

<p>Hmm, I will definitely see if there is something I can find. I hadn’t even thought of doing something work/group related, but now that you mention it I know a few people that work in IT and other things. Not really the field I’m looking to get into, but free experience is never a bad thing.</p>

<p>Is it really lisp?</p>

<p>Scheme and lisp are not the same. </p>

<p>Anyway, I learned lisp in high school using this book, [Practical</a> Common Lisp](<a href=“http://www.gigamonkeys.com/book/]Practical”>Practical Common Lisp) The barrier for entry with lisp is extremely high.</p>

<p>On second look, it is scheme. I apologize, one of the professors that I read about at NU is an expert on lisp and contributed to the language so I must have confused that with the language used for the intro cs class. So yea, scheme rather than lisp, oops.</p>

<p>The AP CS exam is really easy. It’s not that much of an accurate test of knowledge</p>

<p>Learn matlab and python.</p>

<p>Good luck man :)</p>

<p>If it is using Scheme, it is probably using this textbook:
[Welcome</a> to the SICP Web Site](<a href=“http://mitpress.mit.edu/sicp/]Welcome”>http://mitpress.mit.edu/sicp/)</p>

<p>You can read the book on line and download a Scheme interpreter for your computer to do the examples and exercises found in the book.</p>

<p><how to="" design="" programs,="" second="" edition=""> is the book that they use. So the general idea is that I should learn scheme right? marcdvl I don’t think I want to work with matlab just yet. Maybe down the line if I ever incorporate physics or something into my education lol.</how></p>

<p>Hey, I’m a CS major finishing up my freshman year. It’s an awesome major and I hope you’ll enjoy it. =)</p>

<p>As far as preparation is concerned, it may make your intro courses a bit smoother if you learn Scheme and develop a good understanding of how different sorting & other common algorithms / data structures work (including how to implement them—you could try implementing stacks, queues, and so on using lists in Scheme, just for fun).</p>

<p>But really, the best advice is to really learn any language (find one that has really aesthetically nice syntax from your point of view, or seems useful for a project you want to do) and just make something. Doing any independent programming project will make you a more mature programmer earlier on, and you’ll understand how to reason through and organize code quite effectively this way. Formalized knowledge (like what I suggested above) you can pick up in class and it won’t be too hard for you to grasp. </p>

<p>Also: learning different languages isn’t strictly all that useful in and of itself. It’s useful when different languages do different tasks and so you get a sense of the different paradigms and use cases for which different languages are best for, but I feel going deeply into a few languages is more enriching earlier on, because you get exposure to deeper CS concepts instead of messing around with more surface-layer things about the language, not about core programming logic.</p>

<p>It’s not really that “knowing many programming languages is ideal”, but having a level of expertise that transcends any particular language and being able to adapt to many. And whatever language you do investigate, it’s much more interesting to learn it by doing projects than just grinding through tutorials. If you want a project idea, here are a few: [Nifty</a> Assignments](<a href=“http://nifty.stanford.edu/]Nifty”>http://nifty.stanford.edu/) They’re projects different CS professors have assigned, and some of the handout material is language-specific, but most projects should be adaptable to any language.</p>

<p>Oh! You could also investigate any particular areas of CS (cryptography, natural language processing, robotics) that are interesting, so when you hit campus in the fall you can target professors who are doing cool work or more specialized classes you want to take in the future. If you get seriously interested in a particular field it shouldn’t be too hard to find a mentor to talk to, do research with, and learn from.</p>

<p>By the way, Scheme is one of my favourite languages. It’s what I learned to program with in high school and I feel a good amount of nostalgia thinking about it. =)</p>

<p>What I’ll be doing over summer break will be writing apps on Android. Incorporating topics from parallel processing to computer vision and artificial intelligence. Knowing the materials to do well on the AP Test really have no bearing on your ability to program well. It tests you on individual topics and ideas, but to be a good programmer, you must know how to incorporate all those ideas and turn them into efficient and manageable code.</p>

<p>Greekfire, thank you for your informative response. I really appreciate the insight and ideas :). Also david, I was certainly not trying to brag about doing well in an AP class. I was simply giving some background to get better input that would be directly applicable to my situation. If I came off as conceited, I apologize, that was definitely not my intent.</p>

<p>Oh no, do not take it as if I was chastising you for bragging or anything. I realize looking back at my post that it does seem to have a negative connotation; sorry for that. I am currently taking data structures and algorithms right now. I act as a TA and kids come to me for help and sometimes lecture in class. What my observation was that, even though the students are perfectly capable of doing the labs that test specific ideas, they are unable to really make a structured program. </p>

<p>You said you were in the process of learning C++; good for you. I first started out with C++, but you never really notice the nick picky details of the language until you use it for many years. Keep using C++, and when you are really competent at it, perhaps you can pick up on Assembly. The knowledge you gain from it adds so much to your understanding.</p>

<p>Thanks for the input. I would love to work with assembly down the line. Actually, the reason I started with C++ is because I have some experience with C and BASIC from programming classes before my AP class. I wanted to start off with a language that can help in my understanding of the fundamentals of programming and how higher level languages like Java, for example, are able to do what they do. Indeed the book that I’m reading is doing a good job of explaining the underlying workings behind each piece of functionality, and it is also working me through everything from the ground up. I think that C++ was a good medium between Assembly and higher level languages. I am definitely excited, though, to get my hands on some Assembly when I feel ready. I never feel fulfilled until I really truly understand what I’m doing at the most basic level, and just short of literally writing in binary, which I would find perhaps a little bit wasteful, there’s Assembly.</p>