Hacker News new | ask | show | jobs
by bad_user 6076 days ago
I actually think the reverse of this is the biggest problem in our industry.

From my experience most programmers I've worked with don't understand the underlying mechanism that make their tools work. And when they hit a bug or a problem their tools weren't designed for, the shit hits the fan.

And I've seen the reverse of what you're talking about quite a lot ... developers or managers choosing off-the-shelf software with no clue of what they are choosing, just to spend countless resources and important amounts of money ... later to realize that it doesn't fix their problem. But they use it anyway, adapting the problem to the software, just to get a return of investment ... which is the most idiotic thing one can do. But it happens quite often, especially in big companies that get lured by salesmen with promises of greatness.

Another thing that happens is that quite often I've seen situations where inventing the wheel is faster than using something prebuilt. That's because software development is not like lego-building. Many times you'll find a module that's close to what you want, but it's not good enough. So you start fixing that, and then you realize that the mismatch is greater than what you thought, and you lost more time than doing it from scratch and keeping it simple.

And more to the topic ... the first rule of programming is there are no rules. What works for one project, doesn't necessarily work for another.

Also, developers that consciously and constantly try to "keep it simple" and "not to repeat themselves" are doing a pretty good job at not reinventing the wheel anyway.

1 comments

I also think that the "use a third party library" mentality can, but not always, cripple programmers.

I've almost always written something that has less features/worse code/more bugs than a library that would have been a perfect fit. And I did it intentionally.

Why?

Because I learned something new. I've written my own C++ DirectX game library... then went out and used HGE/Goblin 2D. It made me a better programmer because I understood why the design decisions were made because I had similar problems when doing it myself.

I've written my own PHP framework. Why? Same freaking reason. I can look at similar frameworks, CakePHP/Django and quite literally see what it was they were doing under the covers without looking at the source because I've solved the same problem myself.

In the event that there isn't a third party library out there that does what you want, the programmer who is accustomed to look for those first will be screwed. They've never had to make a large system by themselves and they don't understand ahead of time what types of problems they'll run into because they've used other frameworks that have prevented them from making those mistakes.

tl;dr; Using a framework just because its there is similar to a parent coddling a child. When its time to enter the real world they simply won't be ready.

The anecdote here, I believe, is knowing when doing it yourself is a great learning experience, vs a COMPLETE waste of time. Always doing it yourself is stupid, but never doing it yourself is the easy way out.

It's worth noting that your learning experiences and experiments don't need to become production applications, though. This is what gets many people into trouble.
Not being able to write your own code to deploy into a production environment won't get you very far as a software developer.

Merely my $0.02.

But unless you're a web host or something, you are not being paid to write web servers. In the limited amount of time you have to solve your business's actual problem, do you want to learn the ins and outs of HTTP, or do you want to learn the ins and outs of the actual problem you are trying to solve?
This is an extreme example of my previous point: when is it a good choice to learn vs a complete waste of time.

I don't think anyone would write a web server unless they were in that business. But if they were, they wouldn't simply pick up Apache just because they can.

There are always at least two correct sides to every argument.

deploying is one of those cornerstones that you need to get right once, right at the beginning. #twitter
You are not Twitter.