My solution is the best!

John Hotterbeekx on September 27, 2018

A few days ago I was watching a keynote speaker talk about architecture. It was an interesting talk, he had a good concept and the idea definitel... [Read Full]
markdown guide
 

This is the worst part of some conferences, especially when community leaders in the tech are given free-reign on keynotes and are treated like deities. People get up and talk shit and nobody is better for having been a part of it.

 

No, the "every solution has a matching problem" attitude is the worst.
And there are whole talks dedicated to just that.
Oh, FP and OOP both offer structure, modularity and solve shared mutable state? Whoopty do.
Oh, template rendering and render functions are almost exactly the same from a practical perspective?
For shame.
There are approaches, architectures, patterns, languages and tools that are simply worse than others. That doesn't mean we can instantly stop using them, we probably have to continue almost indefinitely for interop. But we ought to be extra careful to not proliferate the deprecated thing more than strictly necessary, and not let it become our default solution, our golden hammer, just because we get practice with it when wrangling the legacy.

 

First, there are always trade offs for every set of two given technologies. One has a better compiler, the other a faster start-up, one has a friendlier community, the other a better documentation, one is battle-tested for years, the other has that one great feature.
You never know for what reason people choose a technology.

Second, it’s about how to communicate that. Even if there is some piece of technology that is commonly known to be “a bad choice”, most often, people are well aware of that fact. Telling them again and again will only make them feel bad.

 

Well I agree on a lot of what you say. It makes no sense to define things by what they're not or to extensively make fun of other stacks/methods.

There is also an image that I like to give. We developers are pretty concerned with sorting algorithms. However, although there is some edge cases better covered by other algorithms, the quick sort is usually the algorithm that everybody ends up using. Yet if you implement it yourself you'll notice it's 3x slower than the stdlib's implementation. How so? If you look at the code you'll understand that it's a very large assembly of hybrid techniques which are here to cover the weak points of other techniques. In the end no single technique won, it's the combination of all of them that make them strong.

However, there is bad sorting algorithms that are not employed there in any way. Those are bad and should not be used. Nobody uses bogosort. Period.

Not everybody gets a medal for just showing up. Some things are just bad and we need to be able to point it out. Maybe not by spending hours making fun of it but at some point you need to be able to have an hybrid conversation where you don't just shut up and pretend to be nice.

All in all, all things should be balanced.

 

For some things this holds true, especially for things that can be measured, like sorting algorithms. However, how are you going to compare frameworks or operating systems. My phone runs Windows Mobile. Is that better or worse than iOS or Android? And if so, by how much? Is Windows 10% better than iOS or 0.6kg worse than Android? And is Android 1.3 times as good as iOS? How are you going to compare it and what unit are you going to use?

There is no way to measure the quality for things like this. Windows works for me, the Apple ecosystem does not, but that is personal.

 

Like I said, maybe you can't pick the winner but you certainly can say who's not winning. By example Notepad is clearly outside the text editors war or PHP is beyond a doubt not advisable if you want to keep your mental sanity.

And still, notepad could be good enough for what you are doing :)

I use notepad a shitload of times during the day. Guess for what I use it? To take small, temporary, notes.

It's a quick and small editor to paste some log excerpts, stack traces, primary key values, etc. which I need to have around for a while.

 

When things aren't clear, you have to break them down into smaller components and compare those.
With iOS and Windows Mobile that may be full-stack parts like security, app management, or even the system settings availability/UX, but it might also be more abstract things like "performance" and "developer experience" where there are further subtleties and it's hard to make an apples-to-apples comparison.

 

Totally agree, there absolutely are things out there that are just plain bad. Still this can be approached with decent arguments instead of making fun of someone for choosing that solution.

I think you make a great point by talking about balance. As with a lot of things this is not a black or white case, there is a lot of gray in between. And like I say with my other posts, I hope people don't blindly follow the things they read, but use them in their own way in their own process.

 

Totally agree with post author.

There is no «best» tool, language or OS. All of them are different, each has it pros and cons.

It's not tolerant to prove everyone that technology that smbdy use is better than others.

 

I would like to disagree. Not on the whole, because your point is about respect and not choice of solutions. In that respect I fully agree.

But you subtly mixed two points:
From a global point of view there might be no uber-solution which is best in all respects, but given a concrete situation and a fixed set of criteria, there might be a best in that respect, that one solution fits best into your requirements.

Why am I pointing that out? Because one could get the impression that when there is no best solution choice doesn't matter. Not that you are implying this, but you do not exclude this way of reading.

Being long enough in the industry, people realize not only that there is no best, but that there are a lot of crappy solutions mostly differing in the way they are broken. But that doesn't mean that there is never a best fit for your requirements.

 

I like the way you look at this and the idea that choice doesn't matter is a different extreme that may even be a lot more dangerous. As with everything the key for these things is balance. I love your additional insight, thanks!

 

If you want to show the best of a technology, and you are doing it by talking shit about the others, then you are doing it wrong.

I think there's no better solutions, just better approaches.
(and this also means, that no person has a better solution just a different approach)

 

This post really resonates with me what I see day to day. The constant attacks from 'pros' trying to tell people what languages and frameworks to use because they have chosen that specific stack.

My opinion: Pick the framework/language you'd prefer that meets the needs of the client and is well supported and you will have made the best decision for everyone.

 

There is a saying in our country.

(In Bengali: ) বিচার মানি তালগাছ আমার
(Literal English: ) I accept the judgement but own the Palmtree.

... which basically says that he actually doesn't care what the other person is saying and he is right after all no matter what.

That is what is going on with the society right now.

 

As per my point, A person who faces the challenges and struggles in those situations have the best solution. Every person have their own perception and own thinking level so we cannot predict that is this the right option or not?

Yes, @John I agree with your point if one who can not get the solution by their own way then he/she can look for other way and what they can, They can change their plan and execution by another way which they think he can get the result.

 

While some tools are better than others for some tasks (I had a roommate who was trying to build a text editor in Basic) there are a number of ways of performing any task, and most of the time “ the tool I know” is better than “the most optimal solution” because the learning curve is an investment I’ve already made.

 

Yeah but Vim is still the best editor.

(sorry, I had to 😉)

 

I hate that too. In fact in the summary of my talks I generally tell people to not take anything I just said for gospel, but just reflect upon it within the context of their own work and see if any of the advice was useful. You know the old saying "If you’re not a communist at the age of 20, you haven’t got a heart. If you’re still a communist at the age of 30, you haven’t got a brain."? I think we should have a version for software developers: "If you don't have the best tool when you start coding, you don't know what you're doing. If you still have the best tool after 10 years of coding you REALLY don't know what you're doing".

 

You capture very nicely the idea of both respect for other people and their choice and also the distinction between 'best' and a 'rightness of fit'. It was a lovely inspiring morning read.

It makes me want to learn more about the technologies that I don't understand the problems they solve and how that is similar or different to the ones I'm more familiar with.

 

No best solution, but most suitable solution.

My question is how can we select a suitable solution?

 

I think there are many ways to a suitable, and even great solution. Although the greatest ones might experience, this can be the experience you gather during a career, but also trying things out when you are not sure. All in all I think being able to find a suitable solution is one of the most important aspects of being a professional software developer.

 

If possible my team like to 'suck it and see', that is, try a few solutions on the problem for real, especially the difficult bits (eg: hard performance boundaries, working integrations, better UX - measurable things) to the point where the team can identify the crappy bits and how to live with them, the possible gains in our productivity or customer experience, the possible costs and the shape of the learning curve.

Often we end up choosing something less obvious than our original suggestions (pop quiz: choose a static source analysis tool!), as we discover more about our own use case too. A great example of this can be found in the rendering algorithms in Quake - skip down to the end of this chapter and find "an idea that did work" :) bluesnews.com/abrash/chap69.shtml

 

I agree 100%, all solutions should be considered, especially the ones that I'm recommending :D

But seriously, A little light-hearted shop-talk can be nice between friends or friendly coworkers, and when used right can improve the mood at work. When the foreman shows up to the constuction site in the morning and the crew are all joking around, joining in on the fun brings the team together. The wise foreman knows how to bring them back around to serious business though before starting the days work.

It's critical to know when to knock it off. If it's crunch time in the engineering department, or a deadline was passed without shipping, or a bad mystery bug showed up in production, that is NOT the time to start bashing your coworker's favourite language/tool/platform/houseplant. Certainly not on the conference stage.

Thanks for writing about this topic!

 

Absolutely, I'm not talking about having fun with friends or coworkers. The situations that I'm trying to make people aware of is when they are having a technical discussion, and even more when teaching other people. And even then, you shouldn't try and change yourself completely, that passion is a crucial part of liking your work. The one thing I hope to get from this is that you'll be a little more aware of it and find a balance that matches who you want to be as a professional and a person.

 

I totally agree on this!

Something that made me appreciate other people's decisions was pairing more with developers at work.

At first I would get slightly irked because it wasn't the exact solution I was thinking of - but after stepping back and understanding why they did it that way, it made more sense.

I definitely think that some people that are "thought leaders" in the community have times where they unintentionally do this.

Love the point you made about human nature - I 100% agree with you there. :)

 

Actually, there is a "best" solution if there exists a solution to a given problem domain. While there is rarely, if ever, a universally best solution, "best" for a given project is knowable. That is why we have value engineering.

There are 1 to n acceptable solutions based on how much of the ideal value the customer wants. 1 to n solutions may deliver (just to pick some illustrative numbers) 85% to 90% of the ideal value, while the best solution may deliver 95% to 100% of the ideal value. Sometimes 85% is enough. Many times, especially where excellence is one of the goals, nothing short of 95% will be acceptable.

Pardon the pun, but never underestimate the value of value engineering.

 

Agreed! For someone new to this industry I appreciate your view point. Everyone has an opinion and a preference. Thanks!

 

I even think that the more you learn about different technologies, the more you discover that they are a lot more similar at the core then you might think.

This a 100x times!

 
code of conduct - report abuse