Thoughts on Abstractions

A couple months ago I read an article based on this Milton Friedman video about how no one person in the world knows how to make a pencil. It resonated with me a lot, it became clear to me the power of specialization and the abstractions that came with it.

I have seen a lot of programmers including myself struggle with embracing abstractions of programming languages, because we feel we are missing out on an in-depth understanding of a language or do not want to be looked down on by "hard-core" programmers as taking the easy way out. Sometimes this is seen when a new preprocessor, framework or language hits the coders equivalent of the Billboard top 20. What is forgotten is that whatever language that we are trying to be an expert in is already an abstraction of something else, coming to that understanding opened my mind to so many possibilities.

I think that a lot of people who enjoy programming sometimes miss the ultimate goal of programming, to create something. A programming language is a tool that helps you achieve a goal. The goal is usually to solve a problem and sometimes you need to know EVERY thing about this tool to achieve your goal and sometimes you barely need to know anything. I think the true art of coding is knowing which one it is for the problem at hand.

Today we as humans have abstracted a lot of our lives. Few of us plant the food we eat, we buy it from a supermarket, which is a group of people that have liaisoned with farmers that grow food. A lot of us also do not make from scratch the clothes we wear. This is even more interesting to me, considering your clothes is a means of self expression but we leave it to other people to both design and manufacture it for us. We are ok leaving segments of our lives in the hands of others because we have more "important" or "intersting" things we want to do and they are more efficient than we are in producing these items. We do this and no one complains that we are not living life to the fullest or we are missing out on parts of life. I think we could also embrace these efficiencies from specialization in programming.

People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones - Donald Knuth

Chris Coyier explains in the first few minutes of this video, that abstractions in programming gives us a clean slate by reducing complexity and allow us as a community to advance into the next frontier of programming. For some people creating these abstractions in programming is their calling, they represent the farmers that farm for all of us, while most of us create tools for the rest of the world using these abstractions, we are also farmers to them. I am starting to believe, if everyone focused on aspects of programming that interested them the most rather than re-inventing the wheel to prove they can code, we would have an economy of people making life easier for other people. Which will allow us to build systems in the future that we can barely imagine today.