News for hackers. Stuff that matters.
Re:Brushing up on Computer Science Part 1, Big O by scott_s on Monday March 14, 2011 @01:47PM (#2323536)
It is a semantics issue, but just like I expect mechanical engineers to have a strong grasp of Newtonian mechanics, I expect software engineers to have a strong grasp of algorithms and data structures.
Re:Brushing up on Computer Science Part 1, Big O by bane on Monday March 14, 2011 @04:37PM (#2324325)
I suspect at some point the development community is going to have to come up with better names to call people.

A person who is fantastic with web technologies may not be great with real-time audio processing tools or graphics processing tools or Natural Language systems. But a person who is a genius at with NLP may not be able to cobble together a website or write an algorithm for fast approximations of an inverse square function. A developer who understands how to squeeze every last cycle out of an embedded system will likely be lost in a massive enterprise environment and a person who specializes in machine learning may stink at writing efficient database and storage systems. A developer great at crypto systems might be laughed at if he wrote a video game. Someone who specializes in low level cache optimization may have absolutely no clue how to write an e-commerce system. And a lifelong mainframe developer would be lost writing device drivers.

I suspect that most people aren't great at everything, even top-notch developers. More likely people are really great at one thing, and pretty good at a couple others and lousy at the rest.

There's a few exceptions I'm sure, but if your definition of "great developer" only includes those people who are great at every bit of software development trivia then we're probably talking about only a handful of people on the planet.

Algorithm optimization is hard and often not-obvious (how many people really understood the algorithm for the fast inverse square root? I bet thousands of developers used it, even plenty of great ones, but groking it is so rare that a series of articles was actually written to explain it)

There are plenty of perfectly competent and solid developers (even great) who can hack together great stuff in their domain, but struggle with even the basics just outside of that. An autodidact will probably be pragmatic with what they learn, and most of that will probably be plumbing work since that's what's strictly required to get something up and working.

I see looking at your page that you specialize in high-performance computing and parallel systems. Are only developers who understand those topics great developers? Because most developers don't do well with those topics. Even the dev shop at Valve has struggled with parallelizing their software.

Saying "I expect mechanical engineers to have a strong grasp of Newtonian mechanics", do you also expect them to have a strong grasp of non-Newtonian mechanics? Since Newton's equations are simply a special case of relativity, why shouldn't they know how to calculate the load stresses on a mechanism using Einstein's much more precise work? Shouldn't they really have a fantastic understanding of particle physics and quantum mechanics too? I mean, the binding forces that hold together the materials they work with every day are subject to that basic knowledge!

Alas! Now I'm concerned that the plucky civil engineer, when designing the overpass I take to get home from work today, didn't quite get the section on QCD Color Charge because he mistook the professor's sloppy handwriting of lambda for an 'A'!

Perhaps my downtrodden electrical engineer is hiding a secret shame, he's never understood how to accurately calculate ballistic trajectories over the surface of the Earth! Oh sure it looked so simple in class, but they never went over how to actually do it, taking into account variable atmospheric resistance, and a suitable model of the Earth's actual shape, and GRAVITY! Oh gravity...why do you have to subtly change as the mistargetted missile drifts lazily across your forlorn belly! It's just dif-EQ after all! Why then, did his water ballon slingshot fail to hit his neighbors house precisely where he wanted it?

I suddenly feel a great pity for these noble engineers, overcoming such obstacles, such gaps in their basic knowledge! Yet still my overpass stands, and still my car works, and still my lights turn on. Only because of this spark of competence shall their secret, their hidden failings, remain safe with me.

Re:Brushing up on Computer Science Part 1, Big O by scott_s on Monday March 14, 2011 @04:54PM (#2324410)
While I agree that more accurate terms would be a good thing, I don't think my expectations are all that high - nor does it only include "people who are great at every bit of modern software development." And I certainly did not imply that only people who are good in what I'm good at are good developers.

What I do expect is for "good developers" to have, at least, a firm grasp of the material covered in most undergraduate Computer Science curriculums. It's funny that you also use "real" engineers as an example, because we know that any practicing engineer does have a firm grasp of the fundamentals of their discipline: they had to take a licensing exam which ensured so.

Re:Brushing up on Computer Science Part 1, Big O by bane on Monday March 14, 2011 @05:13PM (#2324514)
Maybe we should do a poll of HN? How many people know the details of algorithm design w/r to the Family of Bachmann–Landau notations?

"It's funny that you also use "real" engineers as an example, because we know that any practicing engineer does have a firm grasp of the fundamentals of their discipline: they had to take a licensing exam which ensured so."

But do they understand the fundamentals in the examples I provided? My Civil Engineering friend (with a PhD such) doesn't know the first thing about QCD and he'll gladly tell you that. It's all just physics though right?

edit poll is submitted.

Re:Brushing up on Computer Science Part 1, Big O by scott_s on Monday March 14, 2011 @05:32PM (#2324599)
I never said details. I just expect a firm grasp of the fundamentals. If I say "This algorithm is linear," or "This algorithm is quadratic," or even, "This algorithm is linear in the worst case, but constant in the average case," I expect them to know what I mean. Anyone who pulls a B average in an undergrad CS program should be able to do that.

I find your example with civil engineering and QCD disingenuous, because one doesn't need quantum theory when building buildings, bridges and roads. My point in mentioning Newtonian mechanics is that it is the foundation of mechanical engineering. I never said "it's all just physics," so I don't know why you did.

Re:Brushing up on Computer Science Part 1, Big O by bane on Monday March 14, 2011 @07:54PM (#2325086)
Considering that the developer in question was described as an autodidact and lacked formal training, your rebuttals are just becoming pedantic.

I find your example with civil engineering and QCD disingenuous, because one doesn't need quantum theory when building buildings, bridges and roads.

You conflate fundamental academics with fundamental knowledge.

People were building all kinds of great things before Newton. Lots of that stuff is still standing, some of it is still functioning.

Here's some examples:

http://en.wikipedia.org/wiki/Eupalinian_aqueduct

http://en.wikipedia.org/wiki/Pantheon,_Rome

http://en.wikipedia.org/wiki/Appian_way

http://en.wikipedia.org/wiki/Forbidden_city

http://en.wikipedia.org/wiki/Taj_mahal

http://en.wikipedia.org/wiki/List_of_aqueducts_in_the_Roman_...

http://en.wikipedia.org/wiki/Macchu_pichu

Civil Engineering not your thing? Here's some mechanical engineering

http://en.wikipedia.org/wiki/Antikythera_mechanism

http://en.wikipedia.org/wiki/Cannon

http://en.wikipedia.org/wiki/Aeolipile

http://en.wikipedia.org/wiki/Water_clock

http://en.wikipedia.org/wiki/Catapult -- you couldn't possibly make one of these without knowing Newton's laws of motion...

http://en.wikipedia.org/wiki/Bellows

http://en.wikipedia.org/wiki/Chain_drive

http://en.wikipedia.org/wiki/Crank_(mechanism)

Here's some pre-Newton celestial mechanics

http://en.wikipedia.org/wiki/Armillary_sphere -- some even hydraulically powered!

http://en.wikipedia.org/wiki/Gnomon

http://en.wikipedia.org/wiki/Chinese_calendar

http://en.wikipedia.org/wiki/Antikythera_mechanism

These guys got along more or less alright without fundamental Newtonian mechanics

http://en.wikipedia.org/wiki/Leonardo_da_Vinci

http://en.wikipedia.org/wiki/Hero_of_Alexandria

http://en.wikipedia.org/wiki/Archimedes

I could go on, but you probably get the point.

To hear you tell it, humans were just scratching around in the dirt until Newton lifted us into civilization on the wings of F=ma.

One doesn't need big-O to write software either -- even great software. I know that in academia these kinds of things are seen as absolutely fundamental, every published algorithm paper should at least show complexity for big-O (at a minimum) to be taken seriously. And that's great for your milieu, but you need to come down from Mt. Olympus and mix with the rest of us mere mortals and just build stuff. I guarantee you can build all sorts of wondrous, magical things without ever even considering big-O.

Re:Brushing up on Computer Science Part 1, Big O by scott_s on Monday March 14, 2011 @10:03PM (#2325491)
I'm sorry if you find me pedantic, but I'm honestly trying to get a point across - and obviously failing. This discussion has been frustrating for me because I thought my point was self-evident, but most of your responses seem like non-sequiturs to me. I also think you're being unnecessarily sarcastic and antagonistic - Mt. Olympus and the like.
Re:Brushing up on Computer Science Part 1, Big O by bane on Tuesday March 15, 2011 @12:05AM (#2325861)
ahh, I'm just ribbing ya.

You do have a point, which I agree with, learning about complexity theory is a tremendously useful skill to have as a developer.

Is it required to be a good one? You say yes (absolutely), I say no (but it doesn't hurt).

Fair enough?