Computer Science Fundamentals

To be an awesome smart contract developer what are the absolute must computer science principals that should be understood/mastered and what would you recommend to get that knowledge without necessarily going to a university.

1 Like

Hey @kmatth007

It is necessary to know the basic of programming (we indeed suggest to follow our javascript course before anything else).

Then lots and lots of practice.

Happy learning,
Dani

1 Like

tl;dr

You probably want to try and look at Computer Science (CS) courses from universities, so that you can look at the books that they require or recommend. There are many paths to the same goal, but if you are able to obtain a couple of books on CS fundamentals, you will discover that these focus on different concepts than what you can learn with one specific Programming Language (PL). I think the general gist of these paths is: 1) Learn 1st PL, 2) learn basics of functions and object oriented programming (OOP) by implementing ‘simple’ algorithms, 3) progressively attempt more difficult algorithms, 4) choose another language; repeat (2) and (3), 5) At some point learn C.The idea is not to “know many languages” but to understand enough about the differences and similarities between them.

The long version

Learning to program in JavaScript (JS) is one approach, but if you never venture out of JS, you will be limited in the scope of knowledge that you are required to know and understand to solve some problems and this is particularly true for high performance applications. This is not to say that it is impossible to learn CS fundamentals with JS; I am specifically referring to how “learning to program in one language” does not correlate to “learning fundamentals”.

Learning to program in JS first is a good idea, because it is a “high level” language. In many cases, “high level” means that writing a program is relatively easy, because the language itself automatically takes care of many issues associated with the inner-workings of a computer. In this way, you can focus more on algorithm design/implementation.

If you were to begin with C programming, you would be forced to learn about, for example, data types. Data types mostly refer to how much memory one variable type occupies (integer vs decimal vs character types). You would also be forced to learn other things within the C grammar requirements, which are not necessarily fundamental to CS.

Implementing any algorithm in C will almost always require typing more code because C (as far as I am tracking) is the “lowest level” PL. You should see now that “high level” or “low level” doesn’t mean ‘valuable’ or ‘not valuable’, it just means ‘how close to the machine you are writing your code’. A “low level” PL deals with memory allocation, garbage collection, usually has unforgiving syntax and grammar, as opposed to a “high level” PL, that deals with higher level abstractions.

I hope I did not repeat myself too much.