-
Notifications
You must be signed in to change notification settings - Fork 321
Why Learn Computer Science?
After working on React and practical stuff, getting to be better JS devs, we suddenly plunge into a breadth of all kinds of computer science-y topics. At first, these might seemingly be unrelated to anything that you might use in the field.
So why do we teach it?
Although the entire program at Lambda School is called The CS Program, six weeks of the program is dedicated to Computer Science topics. That is what this article is about.
Working as a software developer, much of your career will be spent solving previously-unsolved problems. As you write more and more code, you'll get more practice solving problems.
It's a normal feeling to be presented by a problem from your supervisor or client and have no immediate idea how to solve it. In those cases, it's usually fine to say you need to research a solution before getting back to them. But the more you get used to the sensation of being presented with a problem of unknown difficulty, the more you'll realize that it's just a matter of figuring it out, just like you've done a hundred times before.
Sometimes in the course of work, you'll be presented with truly giant and intimidating problem to solve. Flight instincts take over and you just know you can't do it. But this is false.
Big, difficult problems are virtually always composed of a lot of small, surmountable problems. (The ones that are not tend to become famous in computer science, like the Halting Problem.)
Take a deep breath, relax, and start breaking the problem into subproblems. Eventually the subproblems will be small enough that you can take them on.
The more you practice this, the better at it you will become.
And, more importantly, the problems that used to be hard, will retrospectively seem to be relatively easy compared to the monsters you've been taking on.
Everything you write, even if it's something you've written before, will help you improve as a programmer. Practice!
And we do a lot of programming in the CS portion of the curriculum. The more you do, the better you become.
In addition to improving your JS skills, we'll tear into new languages! Notably C and Python.
Why learn new languages? This is something you'll have to do over and over throughout your career. Senior software devs are expected to be able to begin productively coding in a new language in about a week, and reach literate status in 2-3 weeks.
The first language you learn is the hardest. The second one is about half as hard to learn, and the third about half again. Our goal is to get those steps at least partly out of the way here at Lambda School so you're more prepared for it when you get out in the field.
Why Python? Python is a very popular, well-formed, and useful language. Although the syntax is farther from JavaScript than C is, it's an easy language to step into. There are a lot of Python shops out there.
Why C? Although C was at one time considered a high-level language, it's now considered a low-level language as so many more higher-level languages have been invented since its creation. We teach it because it gives you near-maximal perspective across the spectrum of languages. Low-level, high control, high speed, and minimal room for programming errors defines C programming. After learning it, JavaScript seems (and is) easy to program with.
Why not C++? Short answer: there's not enough time. While a really popular language, the nuances of the language are so many that giving adequate coverage to C++ in even three weeks is not possible.
C gives you enough rope to hang yourself. C++ gives you enough to hang yourself and all your friends.
That said, after learning JS, Python, and C, C++ will be a lot easier to pick up than it would be as a first language.
Many solutions to problems will come to you as being related to other problems that you've already solved, even if they're not identical.
Maybe you want to select random numbers in a range, but never select the same number twice. And you want to get new random numbers in O(1) time. If you'd already implemented an efficient card shuffling algorithm in the past, you might recognize these as the same problem.
As you build the breadth of your knowledge, more and more of these connections will become apparent, and you will find them coming to indirectly apply to many challenges your daily work.
And this part of the program is absolutely about breadth. With the web curriculum, you dove deep into React and JS, but now we're going to use those well-honed skills to branch out and explore more of what the computing world has to offer.
Jargon and acronyms abound in Computer Science. While many of these are du jour, the deeper concepts survive for decades (and centuries). If you want to operate in the field and communicate effectively with your peers, it's important to know some of the mathematical and theoretical underpinnings of what makes software actually work.
When you first start programming, the computer is a mysterious, black box into which go commands and out of which come results. This can be unsettling, like swimming on the surface of the ocean without knowing what exactly is below you.
Also, it can impair your ability to effectively utilize the computer. If you don't know what it's doing at a low level, you might make choices at a high level that don't make proper use of the low-level components. While this is more of an issue in C/C++ than it is in JavaScript, knowing what is going on deep down will make you a better dev at the high level.
Learning about computer architecture aims to help with these issues. The machine is pretty simple deep down, and once that is laid bare, you'll be more comfortable working with it at any level.
Get out what you put in
Big playground
Enjoy the problem solving aspect.
Algorithms: choose right algorithm that gets the proper performance. Biz might have a long-running process and you need to choose another algorithm. Right tool for the job. Even if you don't implement them yourself, it's useful to know which tools to use from the lib.
State machines: lots of games use state machines, diagramming. Data moves from state to state all the time. Tie in to regular expressions.
From video