loading...
Cover image for What CS concepts should self-taught and bootcamp devs learn?

What CS concepts should self-taught and bootcamp devs learn?

ben profile image Ben Halpern ・1 min read

We might not need all the computer science knowledge to write code, but what concepts are still worth learning?

Discussion

markdown guide
 

Basic Data Structures

  • Hashes, Arrays, Stacks, Queues, maybe a Linked List

Big O Notation

  • It's useful for understanding how algorithms work and the limits of what computers can do.

Learn Algebra really well

  • It's basically what we are doing all day, in an abstract way. Assigning values to variables and then doing operations with those variables is the bread and butter of algebra and coding.

Concurrency and Asynchronous Code

  • It's everywhere and it's only going to be more important

Basic Database Modeling

  • You'll need it, so you might as well know it.
 

This is a hard question to answer without making it clear what area of software development the person is working at. If we are talking that the bootcamp and self-taught person is looking for a position as a web developer or maybe mobile developers, the topics change.

I've used concepts that are seldom used by web developers. For example:

• TCP package format
• Regular Expressions
• Binary Arithmetic
• Grammars, Scanners, Parsers, etc
• Operating Systems, scheduling, memory management

In general for any path I would suggest:

• Algorithms
• Profiling and measuring performance of your code

And not CS concepts but definitely a must for any professional:

• Writing - everything needs good documentation or product description
• How to keep a work journal

 
 

The concept is simple, it is just a log/diary, where you keep all your notes. What you worked during that day, the reason behind design decisions, etcetera. The main idea is for you to have something that you can refer back and learn from. If you organise it well you should easily reference back to it and find relevant information about a project.

Three words: Git commit descriptions

 

What I wish I had paid more attention to in school: algorithms and data structures, operating systems, and OOP design.

What I should have spent less time on: programming language theory (grammars/regex), networking theory, discrete structures and most of the heavier math courses.

 

Why do you think OS is more important? And network not so much? I think for a web developer I care less about OS and more the network, I haven’t studied either of them, just curious.

 

I'd say a good understanding of Data Structures and Algorithms is definitely a must to have for any dev. However, one of the most overlooked skills in this regard is System Architecture Design.

The ability to architect a robust solution from the ground up requires a lot of knowledge in certain domains along with experience to make the right decisions. It's an absolutely gold skill to have.

 

Here's my journey so far:
1) Boolean algebra
2) Karnaugh Map
3) Algorithmics
4) Boolean circuits (using logisim)
5) Forma grammar

And then:
6) C basics (loops, functions, arguments)
7) Assembly basics (x86)
8) OOP (Java, Python)
9) Web basics (xhtml then html5, css3)
10) PHP 5/7 (OOP, bit of apache, dynamic web)
11) Javascript basics (ES6/ES7)
12) Python 3 (OOP, flask's microframework, Django, ...)

I like this CS learning approach because I kinda understand how a computer is working down to the logical gates in the processor (I created a small processor that can solve additions, divisions, multiplications and subtractions in logisim) and it was really great to complete the puzzle of "how a computer works" by adding new pieces as I learned.

 

This is something I think about a lot. As a bootcamp grad myself, I attempted to have a go at SICP. Although interesting, I put the book down since Im not sure how many concepts were sinking in for me. Alot of people have mentioned it makes you a better dev to struggle through that book, so ill for sure give it another shot later in my life/career.

As someone who is more interested in backend web development, I am always trying to understand what books and core concepts from computer science I might be missing. On the other hand, I definitely learn best by doing. Although I have gotten to the point where I am holding myself back from even attempting to learn languages like Go since I feel like I am not ready to fully grasp them.

Apart from the regular interview-prep theory (Algorithms and DS), can anyone recommend some good books or maybe practical courses that cover the foundations of programming and that are less about CS theory?

Thanks!

 

I refer to teachyourselfcs.com/
I just got four books from amazon including the two they recommended most to people having less time.

 

It is simple but bit difficult to answer, the reason is, now we have jargon of thing to hit in CS basics. Even though many universities and expert prefer to have a good understanding of the C and C++. Then after, you must have to play with DS and Algo to make rigid logical and problem solving skill. You can also watch CS50 lecture on YouTube by Harvard University youtube.com/playlist?list=PLWKjhJt....

 

I have been going through so many CSS posts recently that I read it as "What CSS concepts should self-taught and bootcamp devs learn?". And my instant thought was "Do they even teach CSS in universities? (except basic 5-min starter tutorial)".

Coming to the correct question, it would be a broad experience for self-taught/bootcamp devs to try out programming with C, explore how things are built from ground-up, try building a simple version of basic features of any modern language like Arrays, etc. from ground up. It is not only a great learning experience but the feeling you get on building even a basic version of those complex components is on another level!

 

@ben , I think you're teaching(/providing the opportunity for) an invaluable one here: Document your learning journey.

 
  • How to debug
  • how to measure things
 
 

Dynamic scoping.
Static scoping.