Hacker News new | ask | show | jobs
by aardvark291 2487 days ago
I remember feeling this in regards to some early "rapid application development" software in the 90's (Visual Basic or Borland Delphi or something).

"Look how easy it is to make a text editor!" - Drag the "text editor component" over a blank form. Look how easy it is to make a web browser! - Drag the "web browser component".

Or, maybe it was in PHP, "As an example, here's code to format an integer as Roman numerals." Oh, that sounds interesting... Expecting a cool algorithm, then discover it's (for some reason) a standard library function.

2 comments

> "Look how easy it is to make a text editor!" - Drag the "text editor component" over a blank form. Look how easy it is to make a web browser! - Drag the "web browser component".

But it is easy to make those things using those tools you mentioned and for the problems they were intended to solve these systems work perfectly fine without you needing to know how they work underneath.

However sometimes you need more than that and you do need to open the box and see what is inside and how to work with it. Both VB and Delphi allowed that and at least Delphi had extensive documentation (and full framework source code) about all aspects of it (VB was a bit different in that it didn't had documentation for itself but as it was built on full Win32/COM tech the knowledge was still part of the Microsoft tech - e.g. the MSDN CDs in VS6 had everything you needed to know - though Delphi was probably better on that front as a self-contained tool). And escape hatches were placed all the way down (e.g. getting a window handle was just a property in both systems, you could directly call Win32 API functions directly from both systems, interfacing DLLs was trivial, making custom controls was also trivial - at least in later versions of both systems, etc).

Last time i used PHP was many many years ago so i cannot judge that, but from what i remember it wasn't like VB6/Delphi that built on top of an existing system (for all their nice facades, they were inherently related to Win32 - an issue that still exists for LCL/Lazarus that reimplements VCL as a cross-platform library using native widgets) but instead was a system of its own that provided a raw(ish) interface to existing libraries through its module system.

Why solve problems other people have already solved?
To quote Feynman, "what I cannot create, I do not understand".
So in order for you to develop a payroll system you first need to know how to create a database?
Well, to write a high performance payroll system with lots of concurrent users it helps a lot to know how the database you’re using works internally.
There are situations where one uses a full featured abstraction like a database without needing to understand fully or modify it's internals. This is simply not one of them.

This is a situation where building a new applications with handmade layers that produce the outcome you want is more efficient than gluing together existing code.

You're coming at a complex problem by initially filtering the solution space. This discards much of the potential solution space for which the average case may be more expensive than The average case in the space after culling. However in many situations that solution space has many gems which are more efficient. Companies' tolerance to selecting those rather than using existing technology varies.

You have the quote slightly wrong, in order to understand a payroll system you first need to know how to create a database.
Knowing how a database is constructed and having to building one for the project are two different things. Yes friend, if a database is a major component of your system you should know how it works under the hood. They’re quite complicated and impose significant constraints on the system you’re building.
Well, yes, you should know _how_, even if you’ve never actually taken the time to do it.
If you are making a commericial product that features an in-memory database that can store non-standard types of data perhaps.

More often than not you would just use an existing product if you are not going to add any value.

That’s what they say, if they require a CS degree to work there.
with the current state of technology and the speed of it's progress, there will always be much more things that you don't understand than those that you do...
With regard to the details sure, but the fundamentals should be studied and understood. That's why this blog is not attempting to recreate the entire of Microsoft Excel.
That's not really the point. If someone says "look how easy it is to do X," then I want to see them doing X from scratch, so I can get an idea how hard it would be to use the language for my unsolved problems. If it turns out they're just dragging in prewritten code, that's useless to me.
Depends. If they told me "look how easy it is to apply this function to a certain subset of the elements of this array" and they show me map and filter instead of a for loop I would be all for it, even if it's "prewritten" code.

But I get the example about roman numerals, editors and browsers.

The browser drop-in was extremely useful. I made a blazing fast browser had view-source as a first class button was able to add in my favourites as icons. Better yet I could make the browser fullscreen.

I would consider it a browser that used an engine. Now a days everyone but firefox is using WebKit.. not much of a difference.

Curious how you would do that today without vb.net

I guess the point is that you can't really say you've made a browser. It's like bringing store-bought brownies to a party and claiming you made them yourself.
But he made the browser - the browser is the application itself (what he made) - not the browser's engine. Saying that he didn't make a browser is like saying Notepad++'s author didn't really made an editor because he used Scintilla.
A lot of the time, understanding someones solution is harder than just solving it myself.

If it's a complicated problem that can be boiled down to a simple API, I'll reach for it for sure. But I never have good luck with complicated problems wrapped in a complicated API. Usually I only need to solve 5% of the problem, so I'll either find a library that focuses on that 5%, or I'll code it myself.