On learning and teaching in computer science

Knowledge is power - the biggest thing that anyone can help you understand and embrace as early in your life as possible (parents and teachers reading this, please take it seriously). It is also, probably, one single most misunderstood saying in history.

So, what is making this power grow?

Invention, it must be humbly admitted, does not consist in creating out of void but out of chaos. -Mary Shelley

For years now, I’ve been helping people learn and teach others to program and it has been quite a journey understanding one more layer of great conundrum that the technology ecosystem is.

It is powerful machinery wasting its talents on futile arguments about which swiss knife is better for hammering the nails… Because, that is what we do best, and, of course, make really nice statements about our nails and our swiss knives and maybe occasional brick, or (purely by mistake, I am sure) -a hammer.

Coming from other branch of programming into current web ecosystem in it’s early stages, I had no issue understanding that depth of knowledge is viewed at the wrong angle (literally), it has been more then a decade since then and nothing changed — most of developers pursue a small niche of theirs in particular technology of interest and try to be “experts” in a “field”… I know it is whole other world out there, but there is really no Angular 2 or RoR or Zend field as there has never been jQuery or Spring field and there will never be play, laravel or reactjs one… There was always need for tools, and that is what we got, over the years of constant pattern improvement — new great tooling for constantly maturing technologies. Nevertheless, most of the people still look into depths of one language, one technology, completely neglecting existence of any other approach, even engaging into great disputes about which language is better.

make sure that what you learn is making you smarter and not stiffer

There is a benefit to deepening your knowledge on particular tech in your learning time, but make sure that what you learn is making you smarter and not stiffer — do not let it make you think that there is anything that is going to solve all of your problems. Be aware that only valuable solution is the one that solves the existing problem — not the one that is looking for the problem to solve. Knowing the difference sometimes takes experience, sometimes just a clear head, and sometimes both.

This will not just empower you, but it will give you wide perspective and after certain time, you’ll get almost prescient knowledge of new projects you are getting into.

Make sure to make your knowledge wide, learn many technologies, branch from what you need and look for different solutions, and anticipate what you’ll need in future. This will not just empower you, but it will give you wide perspective and after certain time, you’ll get almost prescient knowledge of new projects you are getting into.

Learn new programming languages, learn as many of them as you can, learn supporting technologies, become aware of what options you got out there… Learn one or two frameworks, but do not focus on them, languages are what you need, frameworks are just tools… Be aware that they are created to make stuff easier, not make them harder for you, when you need a framework you’ll easily learn it.

If you strive to be a true programmer, a true architect, an inventor, your head has to be filled with chaotic bunch of yarns and knots of interconnected knowledge, not an archive of one language’s quirks and trivia.

As Mary Shelley wrote - Invention, it must be humbly admitted, does not consist in creating out of void but out of chaos.