Let’s dive into the concept of “soydev”, a term often used pejoratively to describe developers with a superficial understanding of technology. I provide my definition of what soydev is, why is bad, and how it came to be. To counteract soydev inclinations, I propose an abstract approach centered on timeless concepts, protocols, and first principles, fostering a mindset of exploration, resilience in the face of failure, and an insatiable hunger for knowledge.
While we’ll start with a look at the soydev stereotype, our journey will lead us to a wider reflection on the importance of depth in technological understanding.
First, let’s tackle the definition of soydev. Urban Dictionary provides two interesting definitions:
Urban Dictionary definition 1:
Urban Dictionary definition 2:
Soydev is a type of most abundant Software Developer. The Software he/she makes is always inefficient and uses more CPU and RAM than it should. This person always prefers hard work to smart work, Has little or no knowledge of existing solutions of a problem, Comes up with very complex solution for a simple problem and has fear of native and fast programming languages like C, C++ and Rust
These definitions give a glimpse of what a soydev is. However, they are loaded with pejorative language, and also are based on non-timeless technologies and tools. I, much prefer to rely on concepts and principles that are timeless. Hence, I will provide my own definition of soydev:
Soydev is someone who only has a superficial conception of technology and computers that is restricted to repeating patterns learned from popular workflows on the internet; but who doesn’t dedicate time or effort to learning concepts in a deeper way.
Although soydev is a term with specific connotations, it opens the door to a larger conversation about the depth of our engagement with technology. This superficiality is not unique to soydevs but is a symptom of a broader trend in our relationship with technology.
Most of us start our journey in a skill by having the superficial conception of it. However, some are not satisfied with this superficial conception, and strive to understand what lies beyond the surface.
Understanding concepts from first principles allows us to achieve a deep graceful kind of mastery that when seems almost effortless to others. Deep down lies a lot of effort and time spent in learning and practicing. Innumerable hours of deep thinking and reflecting on why things are the way they are, and how they could be different if you tried to implement them from scratch yourself.
There is also an inherently rare mixture of curiosity and creativity in the process of profoundly learning and understanding concepts in this way. You start not only to ask the “Why?” questions but also the “What if?” questions. I feel that this posture on understanding concepts paves the way for joyful mastery.
Richard Feynman once said “What I cannot create, I do not understand”. You cannot create anything that you don’t know the underlying concepts. Therefore, by allying creativity and discovery with deep knowledge, Feynman’s argument was that in order for you truly master something, you’ll need to be able to recreate it from scratch.
If you are struggling with my abstractions, I can provide some concrete examples. A soydev might be someone who:
- Instead of using a simple text editor like vim/emacs/nano, prefers a totally bloated IDE like VSCode to write even basic things in plaintext. Or cannot SSH into a remote server without a GUI.
- Prefers to use black box abstractions instead of learning about basic tech primitives and protocols that would get the job done.
- Has no idea what about most concepts that are at the core of computing like bit, byte, heap, stack, garbage collector, async, parallel, CPU cycles, cache miss, L1/L2/L3 cache etc.
- Don’t understand the math, or what is going on under the hood when using machine learning libraries.
Why soydev is bad
First, let’s understand that being a soydev is not necessarily bad, but is highly limited on his ability and curiosity. A soydev will never be able to achieve the same level of mastery as someone who is willing to go deep and learn concepts from first principles.
Now, on the other hand, soydev is bad because it perpetuates a mindset of superficiality. The path of technology innovation is guided by curiosity and creativity. And paved with hard work and deep understanding. Imagine if all the great minds in technology took the easy path of mindless tooling and problem-solving? We would be in a stagnant and infertile scenario, where everyone would use the same technology and tools without questioning or thinking about the problems that they are trying to solve.
Hence, the culture of soydev is bad for the future of technology, where most new developers will be highly limited in their ability to innovate.
Why soydev is on the rise
I think that soydev culture is highly correlated with the increase of technology and decrease of barriers to access such technology. We live in an age that not only technology is everywhere, but also to interact with it is quite effortless.
My computational statistician mind is always aware of cognitive and statistical bias. Whenever I see a correlation across time, I always take a step back and try to think about the assumptions and conceptual models behind it.
Does the increase in technology usage and importance in daily life results in more people using technology from a professional point-of-view? Yes. Does the increase in people professionally using technology results in an increase of tooling and conceptual abstractions that allows superficial interactions without need to deeply understand the concepts behind such technology? I do think that this is true as well.
These assumptions cover the constituents of the rise of soydev from a “demand” viewpoint. Nevertheless, there is also the analogous “supply” viewpoint. If these trends in demand are not met by trends in supply, we would not see the establishment of the soydev phenomenon. There is an emerging trend to standardize all the available tech into commodities.
While commoditization of technological solutions has inherent advantages, such as scalability and lower opportunity costs, it has some disadvantages. The main disadvantage is the abrupt decrease of technological innovations. If we have strong standardization that are enforced by market and social forces, then why care to innovate? Why bring new solutions or new ways to solve problems if it will not be adopted and are doomed to oblivion? Why decide to try to do things different if there is such a high maintenance cost, especially when training and expanding human resources capable of dealing with such non-standard solutions?
In this context, technological innovation can only be undertaken by big corporations that, not only have big budgets, but also big influence to push its innovations as industry standards.
Don’t get me wrong: I do think that industry standards are important. However, I much prefer a protocol standard than product standards. First, protocol standards are generally not tied to a single company or brand. Second, protocol standards have a higher propensity to expose its underlying concepts to developers. Think about TCP/IP versus your favorite front-end framework: Which one would result in deeper understanding of the underlying concepts?
The rise of soydevs mirrors a societal shift towards immediate gratification and away from the pursuit of deep knowledge.
How to stop being a soydev
Despite these unstoppable trends I do think that it is possible to use tools and shallow abstractions without being a soydev. Or, to stop being a soydev and advance towards deep understanding of what constitutes your craft. Moving beyond the ‘soydev’ mindset is about embracing the richness that comes from a deep understanding of technology. Here is a short, not by any means exhaustive list of things that you can start doing:
- Stop thinking about what is latest and greatest. The tools are not important as the problems they are solving. Understand what is the need that the tool tries to address, and the major concepts on how it works.
- Focus on concepts, protocols and first principles. Forget about frameworks, languages, editors, apps, etc. Focus on what probably won’t change in the next decade in technology. It is easy (and less uncertain) to think concepts and problems, than in tools and solutions.
- Set aside some weekly time to explore new ideas. Time block it, make it a calendar event. Try to find a time slot that you can be free of distraction and worries. Free all of your working memory when you are starting a “new idea” session. Think about what problem is this idea trying to solve. Also don’t be stuck to just using the “problem-solving” lens. Most concepts that are worth knowing in computer science and programming don’t have a clear problem tied to them.
- Tinker. Play around. Break something down and see if you can build from scratch. Remember Feynman’s “What I cannot create, I do not understand”.
- Failure is almost certain. Yes, you will definitely fail. I say to a lot of junior devs, interns, and students that the only advantage that I have compared to them is that I’ve failed more times that they have tried.
- Stay curious and hungry for knowledge. I am always impressed on how children are so curious. I feel sad that almost no one retains their childhood curiosity as an adult (Maybe that’s why I love to interact with children). Also, I am amazed by how deprived of will to learn some are. That is an idea that for me, it is hard to grasp, since I feel the exactly opposite. Often I have to hold myself not diving into certain areas, ideas or concepts because I cannot afford the time to learn them. However, I am always tempted by them.
This post is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International.