DEV Community

Discussion on: What computer science concepts should devs without a CS background prioritize learning?

Collapse
 
jedd_ahyoung profile image
Jedd Ahyoung

Some developers come from a Computer Science background. Others, like me, never studied Computer Science in an academic environment.

In my opinion, the three main things for developers without a Computer Science background to study are Data Structures, Algorithms, and Lambda Calculus. Why these three?

  1. Data Structures. These are the building blocks of data inside of a program. There are many different types of data structures, both simple and complex, and all of them have advantages and disadvantages (in terms of reading, writing, and space complexities). When a dev has to model a problem domain, he or she will first reach for the a data structure. It's good to know the pros and cons of different types of data structures and what they can offer in order to make the best choice for the problem domain. Understanding data structures will help a developer to solve problems quickly and efficiently using the right tools; in some cases, it will also give a better understanding of how data is mapped to computer memory.

  2. Algorithms. Computers are fast - very fast - but solving problems still takes time. Devs should understand algorithmic complexity, know the advantages and disadvantages of specific approaches, and cultivate the foresight to make algorithmic choices based on input and time. More importantly, devs should be able to identify problems which can be solved (trivially or non-trivially) versus problems that cannot be solved at all within a reasonable time period. Algorithms, in conjunction with Data Structures, are the meat and potatoes of our programs.

  3. Lambda Calculus. Modern languages have many design patterns - OOP, functional, declarative, and so on - but Lambda Calculus is a basic, simple model of computing that lends itself very well to any developer who wants to improve the way that they read, write, and understand code. Gaining an understanding of Lambda Calculus can allow a developer to think in terms of inputs and outputs, which lead to further inputs and further outputs. Understanding the compositional, functional style of Lambda Calc can make many problems much more accessible. With Data Structures and Algorithms, Lambda Calculus can elevate a developer to the next level.

Collapse
 
mistermocha profile image
mistermocha

Non-CS-major here. Got any suggested readings on algorithms or lambda calc?

Collapse
 
aweary profile image
Brandon Dail

I really liked the introduction to Lambda Calculus in Haskell: Programming from First Principles: haskellbook.com/

Collapse
 
lluismf profile image
Lluís Josep Martínez

This one is very good coursera.org/learn/algorithms-part1 although a bit hard.