July 28, 2017

Fullstack Academy: Week 1 Summary

We covered an immense amount of ground this first week

Fullstack Academy: Week 1 Summary

Welp, I'm going to have to go ahead and admit right now that there's no way I'm going to be able to write a post every week summarizing what we learned, at least not in any detail. We covered an immense amount of ground this first week.

Here's every topic I can remember us touching on and one key takeaway

  • History of Computing
    • lots of dead white guys and couple gals really liked math and logic and were really adamant about getting machines to do it for us.
  • Principles of Computing
    • everything boils down to on or off, yes or no, 1 or 0. Everything else is an abstraction on top of this.
  • Computer Hardware
    • transistors make the world go round
  • Computer Memory
    • there are lots of different types of memory from the disk/drive storage to the CPU register; the bigger the slower; each layer acts as a cache for the next smallest layer to reduce reading/writing on the slower memory layers
  • Abstract Data Types
    • an ADT is description of how some theoretical in-memory hunk of data in a program should behave and what the interface for operating on it might look like
  • Data Structures
    • the actual implementation of some ADT in a given language/run-time environment
  • Algorithms
    • a set of instructions for producing some output given some input; some sets of instructions are obviously more efficient than others
  • Sorting and Searching
    • even the best sorting algorithms are relatively expensive computations, but it can make the more common operation of searching immensely more efficient
  • Time Complexity
    • a measure of how quickly an algorithm's number of computations grows as the input size grows; computations take time
  • Space Complexity
    • a measure of how quickly the required memory space for an algorithm's computations grows as the input size grows
  • Algorithm Optimization
    • your biggest optimization comes from choosing the right data structure for the job.
    • Oftentimes it is advantageous to sacrifice some memory space (caching/memoizing) to reduce time complexity for computationally expensive operations
  • DOM Traversal & Manipulation
    • this is where front-end magic happens, but it's tedious as hell and the browser and DOM are rather inefficient at updating
  • Introduction to Node.js
    • JavaScript programmers aren't just front-end engineers any more!
  • Concurrency/Asynchronous Programming in JavaScript
    • the event loop is how we achieve or simulate concurrency
    • handling async stuff with callbacks was a pain; promises are going to make life so much easier

Then there was CS Saturday. Every Saturday, there is an optional lecture and workshop on some computer science subject. This Saturday, we learned about compilers, how they work, and the differences between compiled and interpreted languages. The workshop involved writing a parser and a lexer for a very, very simple programming language. This was the first time in my journey as a programmer where I genuinely felt lost. I'll definitely be going back over this workshop in my free time after Fullstack.

I wish I could share more but there is so much to work on!