Hi, I know CS is a rigorous major, and I want to be as prepared for it as possible. I got admission into some tough programs, so I’d like to hear about what I can do now, as a senior, to prepare me for this upcoming fall, as a freshman.
Are there any languages I should know well?
What math courses/topics should I know well?
even beyond being prepared, I’d also like to know some of the content so I can do well in these courses.
If anyone with experience can give books, websites, videos etc that helped them, that would be great.
From a high school standpoint, some basic knowledge of CS (e.g. AP CS principles or http://cs10.org ) is desirable but not essential. Note that lower level CS courses vary in how they are structured. Computer languages are tools, and different CS departments will choose different ones.
Math is the closest subject to CS out of typical high school subjects, although the math in CS will be somewhat different (discrete math, CS theory that is math).
Most of what you need to know you’ll learn in college. I went into CS without any prior knowledge, and feel relatively on par with everyone else in the major.
Language depends on your program. Most schools use Python, Java, or C++, likely one of the latter two. I’ve had to know all three, but if you don’t know a language, I’d pick C++. It’s a bear of a language but it will make learning Java and Python much easier, while the reverse isn’t true. It will also help you with various memory management concepts that will be useful in other courses.
Books I’d recommend are Starting Out With C++: Early Objects (or control structures through objects). You can likely find a PDF of older editions online simply by googling for it. Otherwise Programming Principles and Practice (PPP) by Bjarne Stoustrup (the creator of C++). You’ll see PPP recommended a lot, but as a beginner, you may get lost, and it’ll require more research on your part, which I don’t think is best starting out. The best thing starting out is understanding basics and programming, not getting confused and forced to research topics elsewhere. He also assumes knowledge of various topics in his exercises that he hasn’t covered yet.
YouTube BuckyRoberts. He has C++, Python, and Java tutorials. They’re not thorough, but they’re enough to get you familiar with basic ideas – be wary that not everything he says is not 100% accurate. MIT OpenCourseWare is also good.
The best thing you can probably do for yourself is good a book on Discrete Math, and try learning some of it. It’s definitely not the easiest thing to teach to yourself, but understanding basics like propositional logic, will help you program. You also use other topics in later CS courses. Otherwise, just make sure you’re solid on algebra, as it will serve you for every upperdivision math course you have in a CS major.
As others mentioned, a decent math background can be helpful but you’ll mostly learn all of what you need in college, and prepping for the major can be tough.
When it comes to starting to learn CS, you’re going to find people all over the map. I personally disagree with teaching C++ first because it makes you focus on the language syntax, quirks, and generally more details than a starting student needs rather than focusing on core CS concepts. Once you have the core CS concepts down, learning any language should be easy enough. Between the languages listed, I think Python would be a much better starting point. This isn’t to say this is anywhere near a solved problem, though.
I would avoid programming books, as while they work for some, they can be ineffective for others and confuse/overwhelm more than help. A decent CS program should ideally be much better at introducing CS, and a bad introduction can do harm even in some cases.
I think Codeacademy will give you a decent familiarity with Python, but I don’t think it’ll make a big difference in the end.
Ok thanks @MYOS1634@PengsPhils@cursiv3 I have begun some online python courses. Is discrete mathematics the main math course I should look into? I’ve heard multi variable calculus along with linear algebra are courses I could take freshman year.
single variable calculus
linear algebra
calculus-based probability theory / statistics
discrete math
CS theory courses that are basically like math courses
multivariable calculus if the CS major is engineering-based
It’s worth noting that in practice, math is usually more tangential to CS. While it helps in theoretical areas and math courses are taken academically, most math used daily will not even be calculus. The most common daily use is discrete math, hence the recommendations for it here likely. Each math is usually used in a specific subtopic of CS. Linear algebra is a big part of graphics for example, while statistics underpins many AI concepts.
OP, you saud on another thread that you have no CS experience -? So, though others may learn it from scratch, the challenge is often the logic, the compartmentalized thinking, and how to make any solution not just effective, but efficient. Make sure you’re not jumping ahead too fast, you want the mindset. Some adapt to that easier than others.
OP one of your previous threads for GT in 17’ says you are proficient in all 3 languages and have written a research paper on vision processing. with that kind of knowledge in CS topics I am sure you will sail through.
Best way to prepare is to go to the course layout for the university of your choice. They usually have a sample schedule for the four years for a given program. Then look at all the credits you will be getting for your AP classes depending on the university and your scores, most of the Intro level Physics, chem, bio, history and calc classes are waived. Look at the next level of classes that are required and that should give an idea of where to start. Most highschoolers with AP Calc BC start with Multi Variable or Linear algebra
You can also look up the classes that are required in the course catolog for that university and see what texts are recommended by a given prof.
If you have done Ap physics you will have solid fundamntals of CS and some basic knowledge of a programming lang you can build upon.