<p>Hi there! So here's my deal: I've always been better at liberal arts than math/science, but I don't know if that's simply because I spend more time with it. I'm not necessarily a bad math/science student, but I typically get A-s or B+s, and easily get As in liberal arts. The school I go to is very liberal arts heavy and the math/science teachers I have been pretty bad. I finished Calc BC junior year and got a 5 on the AP, but unfortunately, there are no higher math courses available. So, the only math/science course I'm taking this coming year is AP Bio, and I hear that is basically all memorization.</p>
<p>In college, I plan to do ROTC and serve 20 years in the Air Force. They are downsizing, and they've always liked people with technical majors a lot more. At first I decided maybe I'd get a degree in Russian (since critical foreign language majors qualify as technical majors) or just try my luck without a technical degree. However, I've begun looking into computer science, and I'm thinking maybe I'd want to double in that and psychology. (Or minor in psychology -- simply for interest, not job prospects). I've always wanted to be a math/science person, but I put most of my efforts into my liberal arts classes because I was naturally better with it. I now regret that.</p>
<p>My dad's an electrical engineer who has a lot of programming experience, so I borrowed two manuals from him -- one for Python, one for C++. Over the next few months, I'm going to learn Python in my spare time and when I feel comfortable with the mindset/logic of programming, I'll move to C++. I haven't gotten too far into Python yet, but so far, I'm really, really enjoying it. While programming is pretty fun, I really love the creative/problem-solving aspect of computer science. </p>
<p>Sorry for the wall of text. If you don't want to read through that, here are my questions:</p>
<p>1) I keep hearing that computer science is really hard and some people just don't get it. I hear from others that it's easy. When will I know which group I'm a part of? I hear that the first two years of CS are manageable enough; however, the latest I can contract with the Air Force is end of sophomore year and after that, it'll be near impossible to switch majors. So, computer scientists/ex-computer scientists, when did you know if you "got" it or couldn't "get" it?</p>
<p>2) What is the workload like for CS? I'd like to major both in CS and Psychology (planning to get my Master's in Forensic Psychology eventually). People keep saying that psychology is a "slacker" major, which would theoretically make double majoring easier, but I don't want to "slack off" in anything I do. Is it reasonable for one to balance AFROTC, CS, psychology, and a part-time job without compromising much learning? (BA in both)</p>
<p>5 on Calculus BC as a junior => you are good at math (that is two years ahead of normal). That is an important factor in predicting how well you will do in CS. (If you want to take more math before you graduate in high school, check for sophomore level math courses at a community college. If offered, a discrete math course that is transferable to a university can give you a sampling of what math you will find in more advanced CS study.)</p>
<p>If you like programming and are good at it, that is also a good sign. CS is not just programming, but you will be doing a lot of programming exercises and projects as you learn various important CS concepts. But note that programming exercises and projects can be somewhat time consuming.</p>
<p>If you do well in the introductory sequence of CS courses for CS majors and your math courses (particularly discrete math and, if you choose to take them, advanced math in abstract algebra and number theory (useful for cryptography)), you should do well in more advanced CS courses.</p>
<p>I think one reason why some people say CS is easy and some say its hard is because in CS you have to apply a different way of thinking. Some people can see and problem and know easily how to solve that problem using instructions that computers can understand whereas for others it is very hard to try and transfer what they want the computer to do into instructions.</p>
<p>OKay. Let me break it down for you instead of answer your question directly.</p>
<p>Computer Science is like art + math. Let’s first forget about programming. You are going to learn about how data are stored, how to analyze an algorithm, and the basic mathematics tools that you can use to help you develop your own algorithms. To actually test your implementation, you need to simulate it. How? You need to write an actual program.</p>
<p>Programming, or developing a software application is a subset of computer science. If someone think computer science is easy, good for them. To be precise, the career of computer science is one of the hardest. I am not talking about job prospects, so let’s get that ■■■■■ stuff away LOL. </p>
<p>Why is it so hard? There are at least ten major programming languages out there (I am also including HTML5, but note that HTML5 is not a programming language, it is a markup language, but with Javascript APIs it can do many amazing things.) </p>
<p>Do you need to learn all of them?
</p>
<p>Not to mention that there are frameworks which aim to make your development quicker. Learning a frameworks is sometime “learning another language”. </p>
<p>Now you see the problem?
Let me pick Javascript out for example. I am preparing for next Thursday’s the Google App Script Hackathon. App Script is basically running Javascript on cloud on Google to use Google services like Google Calendar, Google Docs, Gmail APIs, etc.</p>
<p>A good understanding of Javascript is needed. I don’t really play with Javascript. Having done C++. Java and Python in the past did help me to get started. In fact, a few weeks ago I attended the Google HTML5 Hackthon. I spent only three days learning basic stuff about Canvas (2-D drawing using HTML5) along with Javascript. That was my first time ever seriously used Javascript myself. My experience was: “Yes. I think I can write a small app after 3 days of learning HTML5 and a little bite of Javascript, just based on my experience with other programming languages.”</p>
<p>But until I picked up Javascript: The Definite Guide (6ed), and I realized that I was wrong about that assumption. Yes. I can write Javascript right away, by knowing how to declare a variable and how to write a function (and classes, so, how to make an object). But that book taught me a lot of things. I thought I could skip basic stuff like “variable declaration”. But I couldn’t. With “var” keyword when you declare a variable, it will appear to be a local variable if the declaration is in a function, or become a global in the global scope. Without “var” your variable is merely an assignment of a new property added to the so-called global object. This is still pretty intuitive. If you are coming from an object-oriented language, you will be familiar with “this” keyword. Well. Javascript is a lexical language, and it treats “this” a bit differently.
I wish I could give better examples. Anyway. These differences can be trivial for light users, but for serious implementation such small difference can produce a serious bug that is very hard to debug. In fact, you would have to look through the scope chain to find out what happen. Yet, you wouldn’t even begin looking at the scope chain at first. It would be one of the very last things you notice. </p>
<p>My point is: yes, you can be very good at C++. Picking Java is merely learning all the new stuff. Synatx is trivial. But if you want to work seriously, you better know your stuff well. That mean you need to pay attention to all the little details.</p>
<p>The bottom line is: you don’t want to write baby codes. You want to write good codes. Codes that make sense, and efficent. You want to understand most of the obvious details of the language. So there is no free ride in “skipping all the baby details” until you find out that you are missing out the big picture of the language.
Object <—> primitive conversions in Javascript is already overwhelming.</p>
<p>Another thing is you need to read a lot. Yeah. Beside learning from books and online tutorials, you really need to read a lot of documentation. That’s another thing.</p>
<p>Ideas can flow to you if you go out more and attend a few tech meetings. If you live in a city it might be easier. For example, we have AOL, Microsoft, Google, and many startups here in NYC. So you can attend many tech meetups. For my App Script hackathon next week, I actually have a good idea (something beyond just app script), and I thought of it when I was in the shower thinking about my girlfriend and the hackathon.</p>
<p>Whether I will make that happen or not is another story. My point is computer science seems easy to some people because some people are more focused. If you want to do web development, it might be easier. Learning a web framework isn’t all that easy (remember beside makeups, you need to learn about the framework itself, which means the language “could be java, python, c++, php, ruby on rails, etc”, and most likely a database language."
Of course no one man can do all the jobs. But computer science is easy? The career is not easy.</p>
<p>As one of the CCers here would say: "you have to be ready to be learning new technology every three, four years, and be purchasing new books every year.</p>
<p>If you are very patient, you don’t be reading all the time, and you are very good at googling (which I am, extremely good at), give yourself a shot.</p>
<p>General CS education may not be your cup of tea. But other related fields are more or less the same - reading reading reading and have to have patience.</p>
<p>Patience = reading reading, trying trying, asking questions, and try again and again and more reading, and forever in front of your computer. Just kidding about the forever part. But you get the picture. You just need to work smart. You will learn that as you continue with your life journey. It isn’t a CS thing. </p>
<p>Give yourself a shot. At this stage you have to narrow down your focus to just one language, and don;t hopping to another one until you have mastered that first one. I did that a lot. I think I have done good programming in at least 5 different languages, but I don’t think I am a master in any of them. This is something I regret, and please keep that in mind.</p>
<p>Enjoy your life as well. I think I am scaring you. But just letting you know that CS is fun but can be a hell if you are hopping all the time.</p>
<p>I just want to add one more important point:</p>
<p>No. You don’t have to know 5 languages to work at Google. I don’t know if you need three or four or six or ten. But you just need to be good at one particular language minimally when you graduate. Being able to pick up a language, a library, or a framework quickly is a bonus. </p>
<p>What you need is a good portfolio. That means you need time. Many ways to do this: get an internship, work on some hobby projects (a mobile app, a website, a browser plugin/extension, what not…), or contribute to some open source projects.</p>
<p>How do you go about mastering BOTH programming and CS?A certain prof at Utah posted this on his blog as a study guide for CS majors.Do you think it can make one both a good programmer as well as a computer scientist?
[What</a> every computer science major should know](<a href=“Matt Might: Not found”>What every computer science major should know)</p>