11 comments

5

Just 2-cents:

Building from scratch is the norm for us who work on real time system, where everything is measure on the real time clock positive edge or negative edge. Speaking of my own work, we build system that needs to be operational 40+ years from now so using a 3rd party library that we don't have the source code is usually a bad idea.


We even tailor our interview programming question on building from scratch. For example, given a ATMEL (a microcontroller for all of you that are unfamiliar), write a program that does XYZ (usually transfer data from another component to a SoC) in a certain time requirement. The program will always take too much time if the person were to use built in libraries (vectors) or in extremely high speed environment even the overhead using looping mechanism will break the time requirement. So it is up to the person, to read all documentation and timing cycles for said ATMEL and figure out a way to send the data in the delta time provided.

No one in the past 7 years of interviews has ever gotten this correct. We don't expect them to, it's extremely difficult to go from your regular programming job to a real time system that requires a truck loads of reading before you even start up a single function. We use this programing problem to gauge how well the applicant communicates back with us and to gauge their ability to read documentation and timing diagrams.


If they're not a hardware guy (just your regular run of the mill programmer). Write a simple plotter. Given a Vector of Points, plot each point in a line segment style. Requirements: Number of Columns, Rows, Delta X In-between Columns, Delta Y In-between Rows all needs to be changeable on the fly, this way the Graph will be truly interactive. Bonus: plotter will resize if it's parent container is resize.

We give them a primitive drawing library or if they're comfortable with WIN32, they can use the GDI set. You will be amaze on how many people fail to build this.

2

If you ask me the best way to be good at building new things is to have lots of experience in building new things - but generally a lot of people will tell you that reinventing the wheel and not using third-party libs is always a bad idea. So it's an interesting catch-22.

I've build "new things" all of my career so far and each time I get a little better at it.

1

There's always a cost benefit to be done. I've had someone approach me to make an e-learning project. Yes sure could have built something from scratch but it's much faster taking an open source option like Moodle and build off that. Second had a project to build out an HL7 interface. Again starting from scratch would be much harder than starting with Mirth.

Anyway I are both sides and I love building stuff, but I'd much rather solve the problem that needs solving that spend three months working on a framework.

1

In almost all cases you have to learn by doing with programming. Just offloading the work to third party libraries doesn't cut it. Sometimes there is merit in reimplimenting things as basic as libc (in part, anyway). Plus, knowing how those libraries work helps a lot at times - especially if you might need customization. Additionally some libraries require a lot of infrastructure that is more trouble than it's worth for the project at hand. Plus sometimes it's faster to just write a few procedures yourself instead of learning the quirks of a whole new library.

And of course there's always the possibility that the library sucks or is inefficient, or in some cases is outright unsuited to the purpose (e.g. a highly secured program, especially where you can't trust the library, or one where extreme compactness is necessary and a static executable is desired). Additionally libraries can add on a lot of bloat - these days many programmers have an attitude that "the computer has enough power/memory to do XYZ on an abstraction level, no one will notice!" Unfortunately when you have 400 things written on the assumption the computer can do something under a ton of abstraction, you suddenly find out that while your computing power was significant, it was not, in fact, limitless.

So there are some very good reasons for implementing your own stuff, whether or not it's from a library, both for learning and for building new software.

0

There's two different scenarios at play here. There's "how to learn to develop software", which requires implementing a whole bunch of stuff for yourself at all levels of abstraction. The more of this you do, the better your design skills will be. Then there's "how to build something quickly and robustly for your employer", which requires you to efficiently use existing libraries to build something. Usually in the second case you're making some kind of utility application that doesn't do anything particularly new or exciting, and processing speed is far less important than simply getting it running quickly.

2

The author does have quite an attitude. Especially reading http://www.aaronstannard.com/the-taxonomy-of-terrible-programmers/. It's not that there are not some bad devs. There are plenty. It's also though what you make of it. The determinism of actually categorizing people with that chart and writing a lengthy blog post alone does show some red flags. Not only about the chosen types of devs. But about the author aswell.

1

Great article..little self promotion, but good content.

Whole heartedly agree, I strive to be that dev everyday. I think the toughest for me us beating back the prejudices of X over Y.

2

Yeah, I submitted it here - it made the front page of Hacker News and /r/programming all by itself but I didn't know if anyone had submitted it here yet. I actually frequent Voat (although I haven't spent as much time commenting lately) and wanted to compare Voat's interest in the subject against those other two outlets.

2

Yea s'ok. I'm all for a bit of self-publishing, at least if it's good content.

Not a FUD article about Windows 10 or some other bullshit? Fuck it have an upvoat.

1

I guess I've been lucky because I've always been around those types of developers. I didn't know there was another kind!

1

That author can go fuck himself, highly recommend he utilize his generalized presumptive slurs in order to do so.

Edit: To be specific, I'm referencing the "Human Robot" section of his linked slanderfest. He's clearly talking about autistic programmers. None of those slurs have any basis in reality. Autistics have original thoughts, can be creative, et cetera. Not their fault he's a poor communicator that's incapable of explicitly defining what he's looking to do in exact, precise language.