I tried the Fasteroids example on piemenus.com, and I must say, I found it much easier -- provided the number of options does not exceed 8. See, I have no mouse, I use mousekeys. So in this case, all I had to do was hold down ctrl while hitting the appropriate number key (ctrl makes the mouse jump). Since the menu items had infinite depth, there was no aim needed.
I like GUIs that don't make me aim (is why I just can't bring myself to like black and white, because it imposes a gratuitous physical challenge to an otherwise cerebral game, thus entirely shutting out those with physical handicaps.)
Cascading menus might be trickier. I suppose if they cascaded such that going the opposite direction the menu was opened in always escaped from it, it could just pop up more pie menus. Has to be better than the cumbersome mess of The Sims...
Mind you, if this doesn't work with the menu key, then forget it -- I have no desire to have to right-click with mousekeys, it's annoying.
> What I describe above is Lisp, but with a more C/Java/C++ like syntax.
Actually it reminded me of nothing so much as the ML line of languages, which includes SML/NJ, Ocaml, and Haskell. All of those give you "anonymous types" like that, with named fields. They even infer types for you, so you can pass an anonymously constructed struct into a field that expected an AddressBookEntry for example, and so long as it had all the same fields, it would accept it. In fact, you don't typically tell functions what type to expect, you just write the code, and the compiler will infer it all for you (sometimes it needs help, so they support type constraints, but those are still inferred, you don't need to declare your anonymous struct as such a type).
A certain Mr. Stroustrup disagrees with you. In fact, C will teach you all kinds of things you need to unlearn in C++, such as pointer usage, arrays, and imperative design, that can be superseded with references, containers, and predicates, all to be found in the C++ standard library. To say nothing of generic programming with templates (you can actually write entire programs in nothing but templates, they're turing complete).
You want to get finicky, that's still not great OO design. Unless you're designing a class hierarchy where every object has a print method, chances are you want to tell some output stream to print something, at which the output stream requests some format it prefers from the object being printed. With a.print method on objects, you have to have some print object in scope somewhere, on the object, the class, or globally. Should each possible scope really be deciding on its own what the default output stream is?
Thus
stdout.print(hellomsg)
Or in more familiar syntax...
cout hellomsg;
(Note that I have issues with C++ iostreams, but they did get this part right).
In in a language that supports multiple dispatch, the issue is a bit moot, but what you put on the left side of the dot (or arrow or whatever) in most OO languages can make a big difference in design down the road.
Go see that page, oop.ismad.com and you'll mod the parent up to +5 funny. Just ignore the gross misunderstanding of OO, the selective process of argument where he flips between implementation and concept, the plug for some vague "table driven programming" thing (that basically is OOP without inheritance), and the entire fallacy of division (google for it) that is promulgated throughout... probably a good fifth of the material is dedicated to red baiting, to the point of displaying a hammer and sickle flag. My congratulations on a masterful troll. It had me going for a bit. Love the "beat up spock" visual analogy for "abuse of logic" too.
I know it's nitpicky but evolution is a scientific "possibility". It is still regarded as a theory after all
No it is not. Evolution is accepted as fact by any scientist who subscribes to the scientific method. There are mountains of evidence to back it, no counterexamples to it, and speciation has been directly observed through rigorous experiment. It's as much theory as the "germ theory of disease" or the "theory of relativity".
I could post a link, but just google for talk.origins FAQ and do some reading.
If you get a Wiki, please use the free links feature (and don't use it if it doesn't support it), and not the godawful WikiWords. It's almost painful to read and have to write things like "CeePluePlus" or "HTMLMarkupLanguage". WikiWords destroy searchability when not using a stemming search engine... to say nothing of the aesthetics of StudlyCapsEverywhere...
No matter what Wiki you use, keep in mind that most every Wiki stores pages in a database of some sort, and not directly in the filesystem. Wiki is not intended to, and indeed cannot manage an existing site.
My advice is to use DAV, which can be exposed as "web folders" to windows clients (it's an buggy awful DAV client, but it does work), and given simple command-line access through cadaver. I believe Zope has support for DAV, should you need to expand to greater functionality later (Zope also has a wiki product, though it's not terribly featureful)
Now, after reading this, I've come to the conclusions that I am sticking with Perl 5, as for my Web stuff, I'm finally taking theplunge and learning PHP.
Feel free, I'd be the last person to dissuade someone from learning another language. It'll be more like a wade than a plunge, of course, but if all you do is "web stuff", perhaps PHP or cold fusion are more your style. Personally I use things like Parse::RecDescent, Safe, POE, and Tie::MLDBM, but I do things slightly more complex than guestbooks.
Personally I can't see why people complain that such an ugly language is becoming not uglier but just a different shade of ugly. Only thing that really tweaks me is the awful _ operator. I think I'll be doing more interpolation now instead. My main complaint was that all these apocalypses were turning perl6 into vapor, then out of the blue, the parrot crew writes what amounts to an alpha release of perl6...
Still, I now have extension work in C and C++ to do , and when it comes to that, it's hard to beat python. Perl5's source gave me the screaming fantods, so I don't hold out a lot for perl6's hackability. Perl6 is definitely not too little, but for this hacker, it may well be too late.
am i nuts or imagining things b/c i thot at some point soon KDE is gonna move away from using XWindows/XFree/whatever
The only thing about KDE that really depends on X is DCOP. Everything else is through Qt, which already is orthogonal to X. KDE really doesn't care about X, but I sincerely doubt they'd endorse the idea of throwing out the standard desktop underpinnings. I suggest upping your dosage.
DO ask for demos of working apps from previous jobs/schools. If they don't have anything working to show, they can't take a project, even a simple one, cradle to grave. You want self-starters who don't need constant supervision.
You also apparently want someone so self-starting that they negotiate rights to all the code they write. I can't show you line 1 of any of the code I've written for previous employers because it's their internal code.
As for personal projects, you just can't know without making the interview last all the live long day whether they actually wrote that code, whether they understand it, and whether it actually works. I suppose you can demand something that's already widely deployed where you can look at the credits/authors file. I suppose with all these criteria, you can take years to find a candidate (I also suppose that's not accurate in today's economy). Just apply this criticism to the other pieces of advice.
DO, for heaven's sake, call their references.
That should be quite sufficient. You're hiring a programmer, not a wife.
I agree with informative names, but only have one problem: the button is misnamed. Much of the time, it's not OK, but there's no button to help you with actually resolving the problem. If you point out a problem, it's incumbent on you to point out the way to fix it -- even if it's just Microsoft's ubiquitous "contact your system administrator" message (at least we know it's a dead-end)
"Dismiss" is a better name for the single button, though "Close" is probably a little less idiomatic.
Buh. The UI guidelines require every popup to have a different set of buttons for every question it wants to ask you? What do you bind the standard shortcut for "keep file" to? Do you even bother with a shortcut, or just assume everyone has a mouse and enjoys aiming the pointer at controls?
How about asking sensible yes/no questions in the popup? How about getting rid of the popups entirely if at all possible? Ones that demand a yes/no may be difficult, but ones that merely pop up warnings and notifications could be accomplished by prominently displaying a status indication while work proceeds.
Also, i keep hearing that utilizing an EJB App Server will bring with it database connection architectures like Container Managed Persistance etc. BUT... there are some great examples of utilizing other data access patterns like Data Access Objects (see the jpetstore example [ibatis.com])
Bah. Beans, EJB, CMP, BMP, DAO... Where does it end? My demands are really simple:
I want to write Java. I want to run it. I want it to create objects. I want to publish them with a name. I want to move them around. I want to save those objects.
Specifically, I do not not want to write stubs, "descriptors", configurators, managers, contexts, and all that bloody damn scaffolding. I do not want to write some sort of object/relational mapping -- I have no desire to convert a working object oriented schema into a SQL schema when I will never be querying it via SQL. I want objects with remotability and persistence that if it isn't orthogonal, is at least trivial -- as in one operation to effect each, at runtime.
Only product I've seen that does anything like this is Objectspace Voyager. Is there *anything* free that comes close to that functionality?
Space partitioning has a simple solution: cubicle walls. Just buy 'em off any failed company, then drill some particle board to 'em that's painted up in various, uh, gnarly motifs (I really am approaching my geezer years to be saying "gnarly" for lack of another word). Just don't go lugging them around yourself when you do setup if you value your back, get some real dollies and handcarts. Adorn with more stuff like fake razor wire (I rather strontly suggest not using the real stuff) and you have *atmosphere*.
The PC upgrade cycle isn't quite as bad as you think it'd be -- mostly you need to upgrade to newer video cards, less often the PC itself. Even a TNT2 will render counterstrike just fine, and its requirements are never going to increase. Obviously newer games will need newer video cards, but I bet just paying lab assistants (no you can't run it on all volunteer labor from kiddies who want free games) will come out to more than equipment costs.
As for fountain drinks, you have something to learn about concessions -- that stuff eats into your margin quick, and the only way you're going to get away with free drinks or even free refills is to bump up rates. Though that might not be a bad idea...
"The Toledo Blade is reporting that several Ohio universities have dropped their internet radio broadcasts due to the DMCA and CARP fees. It mentions how conviently parents, students and administrators used to be able to keep track of school news from accross the country and world. Now their silent thanks to the money and time that would be needed to comply with the new regulations."
Without these stations, the qwality of edducation is droppinng as we speek!
Editors: it is acceptable to correct spelling. Sometimes even to paraphrase. Without editing, you're just a glorified usenet feed.
> but what heppens when a third party writes something in straight assembly, or writes a compiler for another language, like C?
The compiler has to compile down to crush, which doesn't give you access to arbitrary address spaces. If you try to feed it straight machine code, you'll have no facility to load it. Still, I'm not too much a fan of the idea that with no address space protection whatsoever, tricking brix into branching into an arbitrary address space would cause it to execute with full permissions over the rest of the system. It seems that it's more ideal for running on either virtualized hardware (e.g. vmware), or in dedicated application spaces (embedded, consoles)
Eros on the other hand is also orthogonally persistent, but uses machine address space protection for its security on a per-object level. Despite this, it manages to be reasonably fast regardless.
Take a look at the list of types elsewhere in the hyperspec, and C looks untyped by comparison (though I still prefer the ML family with its inferred types).
I'll admit though, the lineage of Crush doesn't exactly look terribly inspired...
At least without more info. Your career is what your apply your skills to and get compensated for. Whether it's a job where you punch the clock every day, or whether you run the whole show. So it really comes down to: what do you want?
> not 2K, never designed to be installed by consumers
eh? I've installed win2k numerous times, and found it dead simple, even with weird hardware. hell, even win2k server was a cinch. even easier than freebsd, which i could probably do in my sleep by now. NT4 OTOH was... not fun.
If I add features to an FSF GPL'd program, I'm doing volunteer work for the free software community and it makes me happy. If I add features to a BSD-licensed program, I become an unpaid employee of anyone who feels like forking the code--I don't find that so attractive. If I add features to Gobe Office, I possibly become an unpaid employee of just one company, Free Radical. Once again, life's too short for that.
I'd really like to know whether you had useful patches for apache, bsd, or xfree86 that you held back because of the non-GPL license. Heck, I'd like to see anyone come up and claim that. Those making the most noise about licenses are usually those with nothing to contribute.
Gee wiz. In all of these cases, you deal with people who either do or do not follow directions, do or do not get very aggrieved, but at the end of the day, their problem was an episode, and they may never even call again. Dealing with stupid people all day is a drag, but the real killers come from politics.
Try internal tech support for a company that accidentally drops a thousand user accounts, then decides to let every one of them call the helpdesk when they discover that their account is no longer there, and that the service level agreement gives the sysadmins three days to sit with their thumbs up their asses, you get no access to fix the problem, but have to tell people that everything is okay, and that we'll take care of it. Lie lie lie, all the live long day. I ended up quitting over having to lie all the time. Went to work for a company that stated in its IT support SLA "if we don't have root on it, we don't support it" and actually stood by it. It sucks being a human speedbump. Even someone bagging groceries gets honest work done.
In fact, computers should have been able to beat humans at chess sometime around 1960, when the calculating ability of the computer exceeded that of the fastest human calculator/estimator
Calculation, yes. Storage, no. A human brain stores exabytes or more of information (using a lossy format, yes), much of it in very efficient indexes. John Henry could probably place a pin quicker than most machines (the accuracy of robot assemblers and the like relies on controlled conditions) though that probably wouldn't make him feel any better...
I tried the Fasteroids example on piemenus.com, and I must say, I found it much easier -- provided the number of options does not exceed 8. See, I have no mouse, I use mousekeys. So in this case, all I had to do was hold down ctrl while hitting the appropriate number key (ctrl makes the mouse jump). Since the menu items had infinite depth, there was no aim needed.
I like GUIs that don't make me aim (is why I just can't bring myself to like black and white, because it imposes a gratuitous physical challenge to an otherwise cerebral game, thus entirely shutting out those with physical handicaps.)
Cascading menus might be trickier. I suppose if they cascaded such that going the opposite direction the menu was opened in always escaped from it, it could just pop up more pie menus. Has to be better than the cumbersome mess of The Sims...
Mind you, if this doesn't work with the menu key, then forget it -- I have no desire to have to right-click with mousekeys, it's annoying.
> What I describe above is Lisp, but with a more C/Java/C++ like syntax.
Actually it reminded me of nothing so much as the ML line of languages, which includes SML/NJ, Ocaml, and Haskell. All of those give you "anonymous types" like that, with named fields. They even infer types for you, so you can pass an anonymously constructed struct into a field that expected an AddressBookEntry for example, and so long as it had all the same fields, it would accept it. In fact, you don't typically tell functions what type to expect, you just write the code, and the compiler will infer it all for you (sometimes it needs help, so they support type constraints, but those are still inferred, you don't need to declare your anonymous struct as such a type).
I strongly suggest you check out ocaml
> To learn C++ you need to know C
A certain Mr. Stroustrup disagrees with you. In fact, C will teach you all kinds of things you need to unlearn in C++, such as pointer usage, arrays, and imperative design, that can be superseded with references, containers, and predicates, all to be found in the C++ standard library. To say nothing of generic programming with templates (you can actually write entire programs in nothing but templates, they're turing complete).
> "hello, world".print
.print method on objects, you have to have some print object in scope somewhere, on the object, the class, or globally. Should each possible scope really be deciding on its own what the default output stream is?
...
You want to get finicky, that's still not great OO design. Unless you're designing a class hierarchy where every object has a print method, chances are you want to tell some output stream to print something, at which the output stream requests some format it prefers from the object being printed. With a
Thus
stdout.print(hellomsg)
Or in more familiar syntax
cout hellomsg;
(Note that I have issues with C++ iostreams, but they did get this part right).
In in a language that supports multiple dispatch, the issue is a bit moot, but what you put on the left side of the dot (or arrow or whatever) in most OO languages can make a big difference in design down the road.
Go see that page, oop.ismad.com and you'll mod the parent up to +5 funny. Just ignore the gross misunderstanding of OO, the selective process of argument where he flips between implementation and concept, the plug for some vague "table driven programming" thing (that basically is OOP without inheritance), and the entire fallacy of division (google for it) that is promulgated throughout... probably a good fifth of the material is dedicated to red baiting, to the point of displaying a hammer and sickle flag. My congratulations on a masterful troll. It had me going for a bit. Love the "beat up spock" visual analogy for "abuse of logic" too.
I know it's nitpicky but evolution is a scientific "possibility". It is still regarded as a theory after all
No it is not. Evolution is accepted as fact by any scientist who subscribes to the scientific method. There are mountains of evidence to back it, no counterexamples to it, and speciation has been directly observed through rigorous experiment. It's as much theory as the "germ theory of disease" or the "theory of relativity".
I could post a link, but just google for talk.origins FAQ and do some reading.
If you get a Wiki, please use the free links feature (and don't use it if it doesn't support it), and not the godawful WikiWords. It's almost painful to read and have to write things like "CeePluePlus" or "HTMLMarkupLanguage". WikiWords destroy searchability when not using a stemming search engine ... to say nothing of the aesthetics of StudlyCapsEverywhere...
No matter what Wiki you use, keep in mind that most every Wiki stores pages in a database of some sort, and not directly in the filesystem. Wiki is not intended to, and indeed cannot manage an existing site.
My advice is to use DAV, which can be exposed as "web folders" to windows clients (it's an buggy awful DAV client, but it does work), and given simple command-line access through cadaver. I believe Zope has support for DAV, should you need to expand to greater functionality later (Zope also has a wiki product, though it's not terribly featureful)
Now, after reading this, I've come to the conclusions that I am sticking with Perl 5, as for my Web stuff, I'm finally taking theplunge and learning PHP.
Feel free, I'd be the last person to dissuade someone from learning another language. It'll be more like a wade than a plunge, of course, but if all you do is "web stuff", perhaps PHP or cold fusion are more your style. Personally I use things like Parse::RecDescent, Safe, POE, and Tie::MLDBM, but I do things slightly more complex than guestbooks.
Personally I can't see why people complain that such an ugly language is becoming not uglier but just a different shade of ugly. Only thing that really tweaks me is the awful _ operator. I think I'll be doing more interpolation now instead. My main complaint was that all these apocalypses were turning perl6 into vapor, then out of the blue, the parrot crew writes what amounts to an alpha release of perl6...
Still, I now have extension work in C and C++ to do , and when it comes to that, it's hard to beat python. Perl5's source gave me the screaming fantods, so I don't hold out a lot for perl6's hackability. Perl6 is definitely not too little, but for this hacker, it may well be too late.
am i nuts or imagining things b/c i thot at some point soon KDE is gonna move away from using XWindows/XFree/whatever
The only thing about KDE that really depends on X is DCOP. Everything else is through Qt, which already is orthogonal to X. KDE really doesn't care about X, but I sincerely doubt they'd endorse the idea of throwing out the standard desktop underpinnings. I suggest upping your dosage.
DO ask for demos of working apps from previous jobs/schools. If they don't have anything working to show, they can't take a project, even a simple one, cradle to grave. You want self-starters who don't need constant supervision.
You also apparently want someone so self-starting that they negotiate rights to all the code they write. I can't show you line 1 of any of the code I've written for previous employers because it's their internal code.
As for personal projects, you just can't know without making the interview last all the live long day whether they actually wrote that code, whether they understand it, and whether it actually works. I suppose you can demand something that's already widely deployed where you can look at the credits/authors file. I suppose with all these criteria, you can take years to find a candidate (I also suppose that's not accurate in today's economy). Just apply this criticism to the other pieces of advice.
DO, for heaven's sake, call their references.
That should be quite sufficient. You're hiring a programmer, not a wife.
I agree with informative names, but only have one problem: the button is misnamed. Much of the time, it's not OK, but there's no button to help you with actually resolving the problem. If you point out a problem, it's incumbent on you to point out the way to fix it -- even if it's just Microsoft's ubiquitous "contact your system administrator" message (at least we know it's a dead-end)
"Dismiss" is a better name for the single button, though "Close" is probably a little less idiomatic.
Buh. The UI guidelines require every popup to have a different set of buttons for every question it wants to ask you? What do you bind the standard shortcut for "keep file" to? Do you even bother with a shortcut, or just assume everyone has a mouse and enjoys aiming the pointer at controls?
How about asking sensible yes/no questions in the popup? How about getting rid of the popups entirely if at all possible? Ones that demand a yes/no may be difficult, but ones that merely pop up warnings and notifications could be accomplished by prominently displaying a status indication while work proceeds.
Also, i keep hearing that utilizing an EJB App Server will bring with it database connection architectures like Container Managed Persistance etc. BUT... there are some great examples of utilizing other data access patterns like Data Access Objects (see the jpetstore example [ibatis.com])
... Where does it end? My demands are really simple:
Bah. Beans, EJB, CMP, BMP, DAO
I want to write Java.
I want to run it.
I want it to create objects.
I want to publish them with a name.
I want to move them around.
I want to save those objects.
Specifically, I do not not want to write stubs, "descriptors", configurators, managers, contexts, and all that bloody damn scaffolding. I do not want to write some sort of object/relational mapping -- I have no desire to convert a working object oriented schema into a SQL schema when I will never be querying it via SQL. I want objects with remotability and persistence that if it isn't orthogonal, is at least trivial -- as in one operation to effect each, at runtime.
Only product I've seen that does anything like this is Objectspace Voyager. Is there *anything* free that comes close to that functionality?
Space partitioning has a simple solution: cubicle walls. Just buy 'em off any failed company, then drill some particle board to 'em that's painted up in various, uh, gnarly motifs (I really am approaching my geezer years to be saying "gnarly" for lack of another word). Just don't go lugging them around yourself when you do setup if you value your back, get some real dollies and handcarts. Adorn with more stuff like fake razor wire (I rather strontly suggest not using the real stuff) and you have *atmosphere*.
The PC upgrade cycle isn't quite as bad as you think it'd be -- mostly you need to upgrade to newer video cards, less often the PC itself. Even a TNT2 will render counterstrike just fine, and its requirements are never going to increase. Obviously newer games will need newer video cards, but I bet just paying lab assistants (no you can't run it on all volunteer labor from kiddies who want free games) will come out to more than equipment costs.
As for fountain drinks, you have something to learn about concessions -- that stuff eats into your margin quick, and the only way you're going to get away with free drinks or even free refills is to bump up rates. Though that might not be a bad idea...
Anyone else take notice when they credited a Dr. Rumplestiltskin in their findings?
"The Toledo Blade is reporting that several Ohio universities have dropped their internet radio broadcasts due to the DMCA and CARP fees. It mentions how conviently parents, students and administrators used to be able to keep track of school news from accross the country and world. Now their silent thanks to the money and time that would be needed to comply with the new regulations."
Without these stations, the qwality of edducation is droppinng as we speek!
Editors: it is acceptable to correct spelling. Sometimes even to paraphrase. Without editing, you're just a glorified usenet feed.
Wow, I've never heard of anyone being compared to Hitler on the Internet. What a stunningly original rejoinder.
> but what heppens when a third party writes something in straight assembly, or writes a compiler for another language, like C?
The compiler has to compile down to crush, which doesn't give you access to arbitrary address spaces. If you try to feed it straight machine code, you'll have no facility to load it. Still, I'm not too much a fan of the idea that with no address space protection whatsoever, tricking brix into branching into an arbitrary address space would cause it to execute with full permissions over the rest of the system. It seems that it's more ideal for running on either virtualized hardware (e.g. vmware), or in dedicated application spaces (embedded, consoles)
Eros on the other hand is also orthogonally persistent, but uses machine address space protection for its security on a per-object level. Despite this, it manages to be reasonably fast regardless.
> LISP has neither strong typing nor namespaces.
a ns icl/dictentr/type.htm
I used to believe this too. Since it's hard to get actual examples of its use, here's the hyperspec.
http://www.franz.com/support/documentation/6.2/
Take a look at the list of types elsewhere in the hyperspec, and C looks untyped by comparison (though I still prefer the ML family with its inferred types).
I'll admit though, the lineage of Crush doesn't exactly look terribly inspired...
At least without more info. Your career is what your apply your skills to and get compensated for. Whether it's a job where you punch the clock every day, or whether you run the whole show. So it really comes down to: what do you want?
l ightenment?
House?
Kids?
Spouse?
Travel?
Education?
En
Choose your life, and if you apply a tenth of the willpower in making those hard choices to your career, it will follow naturally.
> not 2K, never designed to be installed by consumers
... not fun.
eh? I've installed win2k numerous times, and found it dead simple, even with weird hardware. hell, even win2k server was a cinch. even easier than freebsd, which i could probably do in my sleep by now. NT4 OTOH was
Gee. A debian developer trashes RPM. How unexpected. You should talk about trashing the reputation of linux: you guys were responsible for dselect.
If I add features to an FSF GPL'd program, I'm doing volunteer work for the free software community and it makes me happy. If I add features to a BSD-licensed program, I become an unpaid employee of anyone who feels like forking the code--I don't find that so attractive. If I add features to Gobe Office, I possibly become an unpaid employee of just one company, Free Radical. Once again, life's too short for that.
I'd really like to know whether you had useful patches for apache, bsd, or xfree86 that you held back because of the non-GPL license. Heck, I'd like to see anyone come up and claim that. Those making the most noise about licenses are usually those with nothing to contribute.
Gee wiz. In all of these cases, you deal with people who either do or do not follow directions, do or do not get very aggrieved, but at the end of the day, their problem was an episode, and they may never even call again. Dealing with stupid people all day is a drag, but the real killers come from politics.
Try internal tech support for a company that accidentally drops a thousand user accounts, then decides to let every one of them call the helpdesk when they discover that their account is no longer there, and that the service level agreement gives the sysadmins three days to sit with their thumbs up their asses, you get no access to fix the problem, but have to tell people that everything is okay, and that we'll take care of it. Lie lie lie, all the live long day. I ended up quitting over having to lie all the time. Went to work for a company that stated in its IT support SLA "if we don't have root on it, we don't support it" and actually stood by it. It sucks being a human speedbump. Even someone bagging groceries gets honest work done.
In fact, computers should have been able to beat humans at chess sometime around 1960, when the calculating ability of the computer exceeded that of the fastest human calculator/estimator
Calculation, yes. Storage, no. A human brain stores exabytes or more of information (using a lossy format, yes), much of it in very efficient indexes. John Henry could probably place a pin quicker than most machines (the accuracy of robot assemblers and the like relies on controlled conditions) though that probably wouldn't make him feel any better...