Will Software Development Process Ever Mature? Part 2
It seems like software development is a hack-ish, trial and error process, with ever changing languages, libraries, and frameworks.
So if they are a little bit more interested in creating those sorts of things, then they are going to try to scratch your own itch and create those competing frameworks, competing libraries. And if they are very good at promoting their own messages, promoting their own thoughts, then they’re going to try to push their way and try to make their way to be adopted by other people. And that’s how frameworks and libraries become proliferated.
And different people also get messages differently. Nobody has a worldwide megaphone that whatever they say, everyone in the world hears it. So which means that you’re going to have Developer A, he creates a framework and he’s going to reach a 1,000 people that learns things this way. And here’s another guy, Developer B, is going to teach another 1,000 people.
They are not the same group of people. And then eventually the two sides diverges from each other on how things are done. Now, some places are going to get cross pollinated, so on and so forth, but software development at the end of the day, it’s about how do you build this? And I think that you’re going to find there are going to be as many ways of building things as there are numbers of people involved in building them.
And so my thought is that chances of us getting to a point where we will reach an equilibrium is actually quite low.
As a matter of fact, I think that we’re actually getting into a point where while there will be dominant players, there will always be dominant frameworks down in the library that gets picked. But that is picked for places where we feel like a problem has been solved. And where you’re going to see new frameworks, new libraries are places where that people feel like the problem has not been solved. And as long as the problem gets closer and closer to an artistic type of expression, basically means that it kind of has multiple solutions. It’s not that there’s a single right answer, and as long as it has multiple solutions, then people want the solutions their way, basically.
Mm-hmm (affirmative). Mm-hmm (affirmative). Yeah, for me, it’s very interesting what you’re saying because I’m trying to compare software development with any business field that I know, for example, marketing, or accounting, even accounting. So let’s say if you are accountant, you are following certain rules. There are rules with different types of accounts, and basically the creative part in accounting comes on when dealing with some creative business problems. For example, if there is an unstructured situation or unstructured problem, you might be able to apply that rule differently. Otherwise, in daily work, basically you’re following the same standards.
And what I also found out is that with accountants, unlike software developers, not only they have a different mindset, but also I found that kind of for accountants, they are a lot less likely to talk to other accountants passionately about what they do, because basically they treat their job as a job.
Now, software developers are different from my experience. They don’t just treat it as a job. It’s a mindset. It’s a state of mind. You’re always programming something. And that’s interesting because we are always keen on talking about software development, but in business areas, the mindset is somehow different.
I think the closest to software development, in terms of the type of work, is probably writing. A lot of people like to think software development as the similar type of software development is construction. But as a matter of fact, there’s a lot more similarities with writing than there is with construction when it comes to software development.
You mean creative writing?
Whether it’s creative writing or whether you’re writing essays or non essays, just think of writing books, writing blogs, writing emails even. Some stuff has central rules, and you know that there are certain amount of rules involved that will give you a good writing. But outside of that rule it’s kind of free form. It’s up to you, it’s up to you how you want to put it together, right? And software has more rules than writing because we have to make sure the code works at the end of the day, but so does writing. You also want to make sure that your writing works, whatever you’re trying to communicate, right? But there’s more flexibility because there’s more degrees of working, whereas the software, when there’s a bug, we know there’s a bug. It’s, generally speaking, decently obvious.
Right? But software development, in my personal opinion, is very dissimilar to construction. But this is where a lot of people, when they’re thinking of software development, people who’s not familiar with software development. When they think of building software, they think of somebody putting together a building, they think of someone putting together a bridge. They think that it’s all solved problem. And the thing is that you could even say that writing is a solved problem, but it’s not whether or not it’s a solved problem. It’s that writing is an expression. It’s a medium. It’s a way for you to speak your mind. And when it comes to software, there’s a lot of speaking mind, basically, because people solve probably in a very particular fashion.
So construction, I mean, [inaudible 00:05:39]. In construction, there is a lot of creativity involved that people don’t talk about, but people like to think construction is just putting one brick on top of another. Even though I’m not in construction field personally, I know that it’s a lot more complex than that. And it’s unfortunately gets that simplified. But the thing is that when it comes to software development, honestly, if you really want to truly understand the nature of software development, think that developers more as writers, instead of construction worker. Then you will get the mindset, and you’ll get the dynamics much more correct, much more closely aligned to what it actually is.
Mm-hmm (affirmative). So let me just try to rephrase it. So from what I understand, if you want to become a good software developer, I think you need to have that kind of mindset of acquiring knowledge, not just on the top level, like application level, like knowing your frameworks, that doesn’t really make you an awesome software developer. So you need to try to extend it all the way up to the device or hardware, right? So you need to understand how hardware communicates with operating system and operating system communicates with network layer, the network layer communicates with application and the application itself. So if you manage to build that knowledge step-by-step, then you can become a really good software developer. So is that right? Is that correct?
I think that you can certainly be a good software developer without knowing everything in what I’m talking about. I’m simply saying that people who does know everything I’m talking about, it’s really honestly difficult to find. I’ll just put it that way. You can be a good software developer by just knowing this amount.
Let me put it this way. Even if you just know this amount, because not every software requires network. You can spend your career in just the application tier. I can just tell you that right now. And you can spend your career in just one of the components in this tier, but you will find that you’re going to come across limitations if that’s all you know. You’re going to find that somehow when you’re solving a problem that’s application related, you’re finding that that problem comes from the tier that you depend on.
So whether that’s a library, whether that’s a framework, that some of the problems comes from that particular tier, and some of the problem comes from how you use that tier. So if you do not have enough knowledge at that particular tier, you’re going to find that you will be somewhat limited in terms of what you can do. But, if you know them, and then just by you knowing them that the rest is about how to apply them and how do you apply them? How do you solve problem? Did I solve this one first? Do I solve that one first? Do I structure the bricks in this particular way? Or how do I put the puzzles together? That is completely a expression based question.
Yeah. And this is particularly interesting. I’m thinking about education and how people actually become software developers or even hardware developers. Let’s even talk about hardware development because some people are specialized in hardware, hardware engineers, and they’re awesome in what they do. But the interesting part is that we always separate those two. Okay this hardware engineering, and this is software engineering. So you can become really good in software engineering, but hardware is just simply not your stuff. And then hardware engineers also think the same way, so finding a person who actually knows both and has experienced the both, I think it’s going to be quite hard. And maybe we need more people like this.
Again, we talked about this before. We are in the age of specialization. So basically if you’re good at, I mean, if you’re versed in both software and hardware, chances are that you’re not good at either. Or chances are that you’re not as good as you could be if you focus on just one of them.
Right? So that’s probably why you don’t find people like that. And then after a while they realizes how hard they had to work for just one of domains. So even if they know a little bit about the other domain, they’re going to say, “I don’t really know much about it” because there will be someone else who is putting as much time in the other domain as they have in their existing domain.
Right. So I understand some amount of hardware, but my knowledge of hardware, it’s like peanuts when you compare against people who’s actually focused on hardware. And the hardware people will feel similarly about the domain I’m in. They will not know much about it either as well. That’s just because in each one of these fields, the amount of knowledge that you need to gain to just be productive, it’s actually quite a lot, and it takes years to really build those knowledges.
You’re right because I’m just looking at my experience of working with people who build businesses, and some of them are really good at that. But I can tell you that, I can even guess that they have very limited amount of knowledge in certain areas like accounting, for example. Accounting is a critical business function, and yet, only specialized people actually know how to do that stuff. Then also marketing, like certain things in marketing are common sense things.
Maybe they’re not, we don’t even need to teach business people how to do this, but when it comes to some specialized areas like social media, yeah I don’t know, something else or promotion, it has to be a specialist of this or at least it has to be a work of both a business owner and the specialist. And maybe that’s the best combination, but generally it’s almost impossible to become a specialist on every single area of business and basically know everything and have experience in everything.
Yeah. I understand the point.