Debugging in Plain English?
sameerdesai writes "CNN is carrying a story about Researchers from Carnegie Melon: Myers and a graduate student, Andrew Ko, have developed a debugging program that lets users ask questions about computer errors in plain English: Why didn't a program behave as expected? I guess with recent exploits and bugs that were found this will soon be a hot research topic or tool in the market." We recently did a story about revolutionary debugging techniques; the researchers' website has some papers and other information.
"Because you can't code worth a damn."
Mr. Debugger, I'm running a multithreaded perl app using perl 5.8.3's ithreads. I am using DBD::mysql to talk to a local mysql database. At the program start I spawn a child thread that waits for a thread::queue to be filled with data. Once the child thread receives data it spawns several children of its own to process the data. Each grandchild forms its own dbd connection and successfully processes the data, then gracefully closes the connection and waits to be joined.
The problem arises when the controlling child thread begins to join the grandchildren. Despite the mention of global destruction, the entire program is not exiting - just the grandchildren are being joined. When the grandchildren join, perl dies with the following error:
Attempt to dereference null pointer during global destruction.
When performing the same style operation without using DBD (and thus not actually doing anything useful) the error does not occur. Initially, this appears to be a thread-safety issue with DBD however when isolating the child and grandchildren in their own test program (so the controlling child is the main program and the grandchildren are spawned worker children) the error does not appear.
Help me O great plain English debugger. You are my only hope!
Karma: SELECT `karma` FROM `users` WHERE `userid`=138474;
printf, System.out.println, warn, print, etc.
A version of Eliza stramlined for humor
Faith: n. -- That human impulse that drives them to steal appliances when the power goes out
Oh ... this will be wonderful for security the world over. If it works ...
Microsoft Programmer: "Why does our software suck?"
*computer hangs, then bursts into flames from the load*
In soviet russia, You ask not what country do for you, but what you do for country!
Oh wait...
Because I debug in plain english anyway, I'm always saying "Why the hell won't you work you piece of shit?!" and "Listen here you piece of shit if you insist on seg faulting again then I'll show you where you can put those damn indices!"...
So... now the computer can actually respond to my threats and questions. Excellent!
Mike.
(Yes, I did RTFA.)
Mmmm......sacrelicious.
Untill I can have a full conversation with a computer (a la the Turing effect, not the limited versions that Alice et. al. can accomplish) I'll be happy with source code, thank you very much. It's just another layer blocking me from the code anyway (read In the Beginning... lately?).
[...] "Forty-two," said Deep Thought, with infinite majesty and calm.
It was a long time before anyone spoke. Out of the corner of his eye Phouchg could see the sea of tense expectant faces down in the square outside.
"We're going to get lynched aren't we?" he whispered.
"It was a tough assignment," said Deep Thought mildly.
"Forty-two!" yelled Loonquawl. "Is that all you've got to show for seven and a half million years' work?"
"I checked it very thoroughly," said the computer [...]
www.kitchengeek.com -- Nosh for
Sounds like academic mumbo jumbo to me. Computers don't understand plain English.
WHERE THE FUCK DID MY THESIS GO??? ...if it can bring calm to these situations, we may have a contender for the Nobel Peace Prize.
Know what I like about atheists? I've yet to meet one that believes God is on their side.
It's a unix shell script:
echo "Syntax Error -- go fish!" | festival --tts
Why did Pac-Man get 0wn3d?
"Whyline, has been used only to debug programs in Alice, an academic programming language with a limited vocabulary of commands to make interactive 3-D worlds, like video games."
"Adding Whyline to a different language, like Java, which is 10 times as complex, could limit how much Whyline can help. So Whyline is a very long way from getting incorporated into the world's most widespread software, Microsoft Corp.'s Windows operating system. (When asked about its own debugging efforts, Microsoft didn't comment.)"
Which means at the moment its all speculation, and only works for very simple (hello world) applications. By the time this program is useful, we'll have robots (like Millenium man), who will do all the debugging...
computers are too darn literal. :)
"I'd rather be a lightning rod than a seismometer." -Ken Kesey
That's great, but does it understand expletives?
Computers will only be truly easy to use when they do what I mean instead of doing what say.
Jason.
is a command line interface that can cut people some slack instead of spouting out "bad command or file name" left and right.
Query: Debugger, what is wrong with this prgram?
DB: Eh.
Query: Debugger! What is wrong with you?
DB: What is wrong with you?
Query: Debugger! How do I shut you down?
DB: Option not found.
policy analysis and political satire
All these talks of "revolutionary" debugging techniques bother me a little. There's only one debugging technique, and that's the debugger's skill and experience. Debuggers, traces, logs and other printf()s and LEDs flashing are just tools.
Andrew Ko's invention is just another tool. It won't do the debugging for you. Just like modern cars have diagnostic computers, but somehow it appears you still have to fork off $30/hr for the workmanship to get it fixed...
"A door is what a dog is perpetually on the wrong side of" - Ogden Nash
Article says adding Whyline to java makes it 10x more complex. Seems to me like just another example of Computer Science grad students trying to justify their existence.
Plain english or not, make it easy for someone to debug and I'll be out of a job. I like finding other people's mistakes and being the one to say "Uh, dude, this is where you screwed up, but I fixed it for you".
Where's the fun if I can't point out someone's shortcomings?
So when is the Hawkeye movie coming out?
Why didn't a program behave as expected?
Is it because didn't a program behave as expected that you came to me?
Nice concept, wrong audience. I have never met a developer who spoke plain english.
Hopefully I'll get a better description of an error than "Segmentation Fault". If there is one error I truly loathe, it is that one.
A couple years ago I was chatting to someone who developed a program where specs could be written in plain English. Specifically, Rational already has a spec language called controlled English that is simple enough for PHBs to _read_ (but not write, kinda the opposite of APL and perl ;-)
Anyways, while PHBs cannot write controlled English, they can write English, so this guy treated the problem as human-assisted machine translation. However, it never seemed to take off. *shrug*
the debugger replies "Take off and nuke the site from orbit. It's the only way to be sure" :-)
I think I'll stick to yelling at the machine when I'm trying to run "make" when a dependency gets left out of the ./configure script and it errors out after 5 minutes of compiling.
"What the fuck is libmonkey1316-3.so??!!"
Finding whole RPMs with the name of one known file you need is always fun. On second thought, maybe asking the computer what the hell that file is could help.
It would be cool if it didn't suck.
It seems like it has only been implemented in ALICE and not for any other languages such as Java or C, implementing it for these languages would be non-trivial. There have been many de-bugging tools over the years, none of them have fundamentally changed programming, so I'd wait and see if it is actually useful, or lives up to expectation. M
I wouldn't mind being able to ask: "What is the value of FirstName during the third iteration of this loop when LastName is 'Smith'" Even if the entire process can't be performed using plain english (or language of your choice) I can see some uses here.
Hello SeanTobin(138474)!
I am Surest K. Padebugtel of Mrdebugger.com
I understand that you are having a problem with I'm running a multithreaded perl app using perl 5.8.3's ithreads. I am using DBD::mysql to talk to a local mysql database. At the program start I spawn a child thread that waits for a thread::queue to be filled with data. Once the child thread receives data it spawns several children of its own to process the data. Each grandchild forms its own dbd connection and successfully processes the data, then gracefully closes the connection and waits to be joined.
Please to reboot your system.
Has this helped your problem? (Click "Reply" to this trouble ticket if you feel you need further assistance with I'm running a multithreaded perl app using perl 5.8.3's ithreads. I am using DBD::mysql to talk to a local mysql database. At the program start I spawn a child thread that waits for a thread::queue to be filled with data. Once the child thread receives data it spawns several children of its own to process the data. Each grandchild forms its own dbd connection and successfully processes the data, then gracefully closes the connection and waits to be joined.)
Thank you for your interest in Mrdebugger.com!
Sincerely,
Suresh K. Padebugtel
What'll be interesting, if a long way off, is when they get plain English development.
...then again I wonder if it would be fun to make a shell that used something like Infocom's "INFORM" parser...actually, wire that up to some speech recognition, and you'd have something interesting. Not neccesarily super-useful or more effecient than the tried-and-true-UIs, but interesting.
Now, there's a lot of reasons why this is a tough problem; English is tremendously less precise than a computer language, and a computer would need a GREAT deal of common sense before being able to make good sense of our high level spoken descriptions.
But still...so many programming tasks are really 95% "lather, rinse, repeat", and we're striving to get Design Patterns in place for much of the rest. It really makes me wonder...
For the history buffs, I think COBOL was one attempt to bridge spoken "Businessese" and computer code. I don't know a ton about it but I think it might ultimately be an underrated attempt... (for a while, all computers were financial (base 10 for its math, usually) or scientific (binary)...over time, the scientific approach 'won out', probably because it was easier for the scientific side to emulate the business side than vice versa, or maybe because the attention span of geeks is more important than who's writing big checks. Anyway, today's Unix culture is firmly from that scientific tradition, dot com boom not withstanding...
Thus endeth the less-than-full-assed history lesson and speculation about where this stuff will end up...
SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
How useful will this be when it responds to a simple question with a simple answer?
me: why did the program leak 1GB of memory then segfault?
computer: because you don't know how to program, you idiot!
I don't think it'll make as much of an impact in the real world (e.g. replacing "general protection fault" etc) as the article implies. First it seems more to trace a set of known possibilities that happened or not, rather than to catch really unexpected occurances. If a fence post error caused a count to trigger some action an iteration too early that would be a very hard thing to see at an object level even if you were the programmer who could interpret such things. If you were the user whose binaries had been stripped of most debugging info to reduce chances of reverse engineering then you'd have an obtuse error message that probably has no way to recover from the error.
It's a neat idea, but this doesn't sound like an end user sort of innovation (or anything close to it) as the article portrays.
There seems to be a fundamental logic problem with this kind of debugger. It seems to be more of an 'interpretive debugger' in which it would need to know what you're trying to do in the first place. Thus, it would have to know what the code -should- look like in order to tell you what the problem is.
In essence, for there to be a "English debugger" (one that speaks more english than current debuggers, that is), it would essentially need to know how to program itself on top of being able to follow the flow of code and find where it breaks, so as to be able to tell you precisely what the problem is.
Sounds a bit fictional to me.
~/ssh slashdot.org ssh: connect to host slashdot.org port 22: too many beers
Hey moderators, this is NOT FUNNY! I've been wresteling with this problem off and on for nearly 3 months now. (I've come up with several varried solutions, but none of them are the way I want it to be done)
Karma: SELECT `karma` FROM `users` WHERE `userid`=138474;
Video editing for porn? Why else would they use that graphic? :)
- Determine the problem.
- Create a hypothesis of the cause of the problem.
- Test the hypothesis.
.Fight Spammers!
Melon's are fruits, Carnegie Mellon is a college.
C
Sharp
Eww, I can't believe I just said that. I need a shower. I was kidding. Kidding. I use C# for text processing as much as I drive through New Jersey on purpose.
Never.
For example, if a program contains rules about Pac-Man shrinking when he hits a ghost, Whyline will let the programmer ask "Why didn't Pac-Man resize?"
In this context it seems like it records the last few possible paths of execution the program could have taken and then tells you which branch caused the program to go the wrong way.
Hello, I found the problem. It is as follows:( @{$w{$s}}){if($y=~/[$br
push@{$w{length$_}},$_ for split$/,`cat $f`;$x=$_ for sort{$a<=>$b}keys%w;for$n(
reverse 3..$x){for$b(@{$w{$n}}){$s=$n-1;$m{$n}=$b;H:for$y
]{$s}/){$t=$y;$t=~s/$_/X/ for split'',$b;if($t=~/X{$s}/){$m{$s}=$y;if($s==3){fo
(sort{$a<=>$b}keys%m){next if$_>$n;print$m{$_},$/;}exit;}$s--;$b=$y;goto H;}}}}}
From the pdf on whyline, it seems to work with the Alice language. Alice seems to be very rigid in its design, allowing English lookups (rather like naming variable in English-word format like 'pac_resize').
This is a more user-friendly version of tools like grep and awk.
This type of debugger would seem difficult to make in the lower-level program tools without rigid naming conventions. Or else the searching would be on high-level concepts like graphic resizing that would be searched on the language functions that perform the resizing (regardless of data-var name).
I do have to disagree with their definition of a programmer: "If you've created a spreadsheet, made macros in Excel or Word or used a Web application to fetch news about your hobby or favorite celebrity, you've programmed". Although technically usable in definition, a Word/Excel macroist does not a programmer make.
debug> Why did my web server crash?
reply> slashdotting
Great to hear what he's up to these days. He's the third professor in this story from my days at CMU. Brad, if you're reading this, all that videogame stuff wasn't a waste of time after all.
^G
No.
i'm curing to know who's is actually using that for 3d? i haven't used that since the early 90's!?! and i thought i was the only one using it outside the project creators.. it's seems to be used as a teaching tools other than a viable 3d environment
So this whole article is about the UPS Debugger. Just One More Hack, and then he'll put it on the 'net...
MP3 version available at: Just One More Hack - Mark WheadonWhen your program fails, how it fails usually is some sort of indicator of what's wrong. Programmers just map an associated failure type with a problem, doing a diagnosis type system like a doctor would. This software just seems to do the same thing only explicitly. For example, when I see a bus error on a *nix box I think of some sort of memory error, and then GDB, xamine the memory locations to make sure everything is being accessed appropriately. I map an behavior to the error in order to figure out what's wrong. Why do I need to have some program that says just prints out extra words around it?
Furthermore, if you really think about it, why "dumb down" the compiler if the programming language is still hard? If you know C++ its rather trivial to learn GDB isn't it?
Sounds kinda like the ship computer in STTNG.
Jordi: Computer, why didn't the warp field form?
Computer: There was insuffient anti-mater to cause a stable reaction.
When I think about some of the bugs I have found (and coded), the Whyline approach seems very far-fetched. The degree of self-awareness (introspection) required by something like this makes it seem like the program would be able to avoid the trap in the first place. It would require the "analyst" or "observer" module to observe not only a stack trace and PC trail, but also would require the module to understand what is supposed to occur.
I don't expect this early research tool to catch all of these, but I'd like to hear the researchers' response on how their system might (after years of development) answer questions about some of these bugs:
- Why did the Mars Pathfinder software deadlock (priority inversion)
- Why did the Mars Polar Lander crash (improper state management)
- Why did the Ariane 5 blow up (arithmetic overflow in a register)
- Why did the Patriot missiles miss in the 1991 Gulf War (accumulated time error)
- Why did a radiation therapy machine zap patients with the wrong doses (inconsistent state between GUI display and internal software state)
I'm sure there are some others on comp.risks and elsewhere.
Another point: this approach is still "just" a testing tool. In other words, it can only find errors on paths that have actually been taken in tests, which means the testing program must cover enough cases to generate the runtime errors in the first place. In all of the above cases, it was the testing program that permitted the bugs to be fielded.
The Carnegie-Mellon University finally invented Clippy!!!
Way to go.
That might work in controlled circumstance, but real world systems are
never that simple. They use multiple languages, environments, and
networks. How Is it going to know that my error is in a database
stored procedure executed from a trigger on the server rather than the
client side code running on a PC? There would have to be some kind
networked debugger standard they all follow.
Write the program perfectly the first time.
--- Ban humanity.
Instead of wasting time debugging in english, why not write a program that takes a description of what your program *should* do (in english) and then it programs it for you with no bugs...
:)
It would be faster and you'd never have to track down bugs. If it does not work as expected, you obviously asked it to write the wrong thing. Ask it more explicitly to do what you want and rinse, repeat as necessary.
Seems to me that would be a better use of the money. Mind you, that would effectively put us programmers out of work.. hence why we have not done it. It's not because it's hard or anything
I can't do that, My prime DRM directive now insists I have to subdue you for intellectual copyright infringement, this won't hurt much...
errr....umm...*whooosh* *whoosh* Is this thing on ?
"[if you have] used a Web application to fetch news about your hobby or favorite celebrity, you've programmed."
No you haven't. Excel spreadsheet *maybe* counts like an instance of functional programming, but not using a freggin' web app!!!
The perfect sig is a lot like silence, only louder
I bet this software is great at finding syntax errors or maybe even some logical flaws in the code. But those types of bugs aren't what suck up all your time as a programmer. I wonder how good this software is at finding errors where the code is running correctly, but missing a required element from the specification. Or what about when your manager looks at it and says, "there's a bug in the program, it doesn't export to Excel" even though no one ever asked you for the Excel exporting capability? We'll see. I'm skeptical though, based primarily on this gem from the article:
You may not know it, but chances are you, too, are a programmer. If you've created a spreadsheet, made macros in Excel or Word or used a Web application to fetch news about your hobby or favorite celebrity, you've programmed.
Uh, no you haven't. You've used a program. Maybe you can make an exception for some macro development but successful entry of a URL into the address bar does not a programmer make.
Regular Meta Moderators are not more likely to get mod points.
In the area of error messages, we need a better balance between "understandable" and "informative". Today, it's usually one extreme or the other. Either error messages are too "friendly" to the point that they're rather meaningless (as in the notorious "Web site not found"), or on the other extreme, they're so "complicated" that the novice user has no idea what happened (as in "an xxx exception occurred at xxx, here is the stack trace, register states, and many many more confusing numbers").
It would be nice if we (as a society that happens to use computers) could adopt a guide that gives the technically-savvy enough info to go on, but still helps the novices understand what went wrong in terms they can understand too. A balanced approach.
Such an error reporting scheme, if successful, could almost certainly NOT be designed by marketing weenies nor by geeks alone, but through mutual collaboration and willingness to compromise on both sides. Hmm, no wonder it's so challenging.
I'm an animal lover -- they're delicious!
WFT?
Never use an apostrophe followed by the letter "s" unless you mean to indicate possession. What exactly belongs to the melon? Observe:
I love your mom's peaches; I want to shake her tree.
You could ask InterScope questions like "Who calls FOO?" or "What function called by BAR stores into ZOT?". It answered by referring to a pre-computed database. Naturally, this kind of thing was made easier by the fact that LISP programs are represented as LISP data structures.
One really has to ask whether there's anything really new in The Whyline apart from a pretty interface.
Q: Why is this bug taking so long to find?
/ 228241&tid=156&tid=6
A: Because you don't know the first 9 things about debugging.
Q: Why don't I know these things?
A: Because you haven't read "Debugging" by Dave Agans.
A debugging analysis tool can help you follow one or two of the nine rules, but you have to follow them all.
Shameless plug, I wrote the book - but it has gotten great reviews. See the slashdot review at http://books.slashdot.org/article.pl?sid=04/02/21
Get the cool rules poster at http://www.debuggingrules.com/
"Debugging" by Dave Agans - the perfect gift for your favorite imperfect engineer.
You really only need one command..
"Why?"
So why bother giving people any choices in the matter? =)
Melon is a fruit..
Peter: "Why did my program die?"
Debugger: "Because you touch yourself at night."
--
"Outlook not so good." That magic 8-ball knows everything! I'll ask about Exchange Server next.
There's nothing to be seen here, move on...
I can forsee at least one interesting outcome, should this technology become more than someone's thesis work. Instead of worrying about some outsourced help desk staffer's bad english...now you'd only have yourself to blame!
Already been done. Check out any mailing list. Things are debugged using what passes for english every day.
I think that this basically goes through the statements that are executed conditionally and tells you the condition that chose whether they were executed or not, that is:
x=a;
if(x==3) { printf("hello"); }
Why did hello not get printed? Because x was 7, not 3.
If it can track it further (i.e. because x was assigned the value of a on line 77, and it was 7 and that time... and a was assigned b+2 in line 44, etc. etc.), that would be mildly useful.
In any case, I think that the debuggers that can step back in time are more useful...
Why didn't a program behave as expected?
Well...I wonder how well the debugging in plain English worked when spelling "Mellon" is such an ordeal. Egads!
"He uses statistics as a drunken man uses lampposts...for support rather than illumination." - Andrew Lang
I have the beta version of this debugger. And somehow I think it needs more work.
... yawn
...shish
Plain English: Why didn't a program behave as expected?
Debugger: Because you made a mistake... sigh
Plain English: What mistake did I make?
Debugger: There are so many. Which one are you referring to?
Plain English: The one that cause my program to not behave as expected.
Debugger: Oh, that one. Well, it is found in the address range 0000:0001 through 0000:FFFF
Plain English: Can you be more specific?
Debugger: Can you? I said there too many to know which you want.
Plain English: Okay, then, the first error that caused my program to not behave as expected.
Debugger: Segment Fault! Address unknown.
Plain English: That's no help. What about the next one?
Debugger: Segment Fault! Address unknown.
Plain English: And the next error?
Debugger: Segment Fault! Address unknown.
Plain English: Is that all you can say?
Debugger: No, but I do enjoy our conversations together. Is there anything else? How about a game of chess.
Are they anything like honeydews? Last time I checked, it was Carnegie Mellon.
great post! if i had mod points you'd get them.
I've never seen so many mod'd threads that got a +4 or a +5 for funny EVER!
Will it be able to give me an answer when every 5 mins I'm wondering "Why the hell wont u just work like i want u too!"
So how close is anyone to actually being able to program in spoken english? Well, slanglish to be more accurate.... Then maybe lamer noobs like me can program.
HEY! Why should all the 1337 guys have all the fun of writing half baked unfinished buggy apps, hmmm? You think YOU are the only ones can do buffer overflows?? I bet I can make an app look like niagra falls with a speech to code gizmo!
or mellon as in Carnegie Mellon ?
This reminds me of back in approx 1985 or so, someone "invented" a human language programming environment called "The Last One" or something like that. This would supposedly make it simple to write programs without having to learn C etc. Some programmers quaked in their boots. However the real issue with programming is learning the contructs, not the language (ie. if you understand what a linked list is, then writing one in C vs Pascal is pretty simple). Anyone that thinks that programming in English is easier is seriously misunderstanding programming. The ultimate test is to look at the languages that have survived: The more "human readable" languages like COBOL have not survived, but the more cryptic ones like C have. The big "killer app" for making programming simple for the non-programmer was the spreadsheet and that's hardly a natural language.
Now debugging is pretty much the same deal. Verbose English debugging interfaces might make it simple to learn to do very basic debugging, but once you get into things a bit deeper (and get more experienced), English becomes a huge liability and you'll be wishing for more concise and expressive languages.
Engineering is the art of compromise.
"Whyline -- short for Workspace for Helping You Link Instructions to Numbers and Events"
Wow, they're really lucky that their project name ended up being such a good acronym.
Cloud and Tree - not just an immature webcomic, but a VISION.
It would probably help if developers would throw exceptions with plain english messages that stated:
1. What line in the source code the problem resides on.
2. What data elements the program was trying to munch on and any file handles used/open during the fault.
3. Depending on the language used, operating system handles and registers related to the problem.
4. The name of the file/module and function/class involved.
Finally, the application should always eat the error and continue on if possible (non segmentation fault situation, obviously), and close gracefully otherwise.
Emulation risk error 10500 TopDownSide fault: core dumped is not an acceptable message.
However, I understand that obfuscating error messages generates revenue from the resultant maintenance contracts...we wouldn't want to impinge on anyone's (dubious) livelyhood, now would we?
Lodragan Draoidh
The more you explain it, the more I don't understand it. - Mark Twain
Buddha is a debugger for Haskell that displays, in a heirarchical fashion, every function call in your program, then lets you declare every function application and result as "Correct, Erroneous, Inadmissible, or Unknown". It can thus track down the error to a particular application of a prticular function.
Why is it called Buddha? Because otherwise debugging Haskell means just staring at your code until you achieve enlightenment!
printf() debugging is sometimes the cause of the dreaded Schroedingbug.
What do you bet, when you fire it up it says: Hello. I am ELIZA. How can I help you?
Unless it's its.
> My program crashed.
What does that suggest to you?
> There is a bug somewhere.
Does it make you happy to know there is a bug somewhere?
> No.
Why are you so negative?
> Are you going to help me fix this bug?
We were discussing you, not me.
With these "natural language" languages, I always wonder- is English the only natural language out there? Doesn't look like it from the world around me.
Then why all those "natural language" thins are in English?
Seems to me that is easier to learn a programming language then to learn English for a non-native English speaker: much less ambivalence.
xslf.com
Who's gonna debug the debugger?
Oh well, your loss =P
You may not know it, but chances are you, too, are a programmer. If you've created a spreadsheet, made macros in Excel or Word or used a Web application to fetch news about your hobby or favorite celebrity, you've programmed. The author of the article is not a programmer. A programming language must be compiled to be built into a binary program -- hence, HTML is just a markup language. Thus, a programmer would have to compile and build code. Chances are you, too, are not a programmer.
Not to flame too much, but poster should learn to spell Mellon. (I'm a CMU alum, so it stuck out instantly as being wrong...)
The author of the article is not a programmer. A programming language must be compiled to be built into a binary program -- hence, HTML is just a markup language. Thus, a programmer would have to compile and build code.
Chances are you, too, are not a programmer.
...how about the compiler? One of my current random mutt
AI.cpp:33241: warning: You wrote 'neurons.merge(solution1, solution2)",
AI.cpp:33241: you probably MEANT "neurons->merge(solution1, solution2)",
AI.cpp:33241: but there is a MUCH better way to implement this whole
AI.cpp:33241: function; doing that instead.
You cannot apply a technological solution to a sociological problem. (Edwards' Law)
He also said that there were no silver bullets, and he said so over twenty years ago. It seems that every few years a generation arises who haven't read him. Put natural language debugging on the pile with case and all the others.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
Programmer: What happened? ................. .......
Debugger: Windows crashed.
Pr: Why did it crash?
Db: Faulty code.
Pr: (mumbles)I know that you stupid piece of s*!t...
Pr: Can you show me the faulty code that caused this crash?
Db: Yes.
Pr: Show me the code.
Db: One second while I compute the time needed......
Db:
Db:
Db: It will take 4 Days 14 hrs. 34 min. and 12 sec to display the code. Do you want to continue?
Pr: Nevermind. Show me the lines that did not cause the crash.
Db: 10 rem Windows
Db: 20 rem By BG
Db: EOF
flinging poop since 1969
"Why did the web server just crash?"
"You've just been Slashdotted!"
I was going to write up a cardboardprogrammer.com site with a flowchart with 20 questions to ask about a bug to clarify your thoughts. [I suppose both linux and windows can have a REBOOT as the first directive and what was the difference between now and when it was last working as the second, are you using the latest version of the code as the third has anyone else been working on these files the fourth.. well you get the idea, [it is like shooting fish in a barrel, but I have never seen it the full flowchart] that was in the dotcom era, when even a tiny good small idea like this was in someones mind a possible next big thing].
Be Free: Free Software Tuition
Ruby is awesome.
My other first post is car post.
Something seemed amiss. Anyone who is smart enough to write a debugger would immediately understand the problems with a natural language debugger. I googled the "alice programming language" and found What is Alice. Alice is a language designed for children. Hence this is a debugger designed for children.
I think developing programming tools for children is pretty rad, but the journalist totally omitted this was a tool for kids. What's up with that?
Arbitrary sig
http://stabilizer.sf.net
The idea is to quickly make buggy GUI applications more useful, without requiring any involvement from the developers.
Use a modern language and you won't have to worry about whether the lists you work with are arrays, linked lists, chunked links, or some other more esoteric structure.
You'll also get access to a number of other convenient higher level structures that C and Pascal lack: lists, dictionaries, and objects come to mind, as well as (depending on just how modern your language is) far better tools to manipulate those structures than you're likely to write for yourself.
Go ahead. Type "python" and press enter. Leave those low level languages behind for systems programmers.
I went to a speech recognition conference 15 years ago & Carnegie Mellon were reporting very similar sounding research they were doing for the US Navy.
Then it was natural speech database querying e.g. "How far can the USS Enterprise travel with the current fuel load?"
This is cool tech & it has been worked on before. If it's a program that sits over the editor & "understands" the code it could answer questions such as "why is the interest rate too high" and give you the lines where the interest rate is calculated
What are you listening to? (http://megamanic.blogetery.com/)
1. Hire both reseachers.
2. Integrate Clippy with Visual Studio.
3. ???
4. Profit!
Haven't COBOL programmers been debugging plain ;)
English for decades now.
My current best guess for that is aimed at situations where I'm available. Errors try to be at least somewhat informative for the user, giving an approximate description and recomendation, then a message for the programmer. The whole message is logged.
...
...
The error message on Windows would look like this:
Serious error while trying to save order. The current changes will have been lost. A program restart is recommended.
Please call [programmer] with the following information:
Error #43 in SaveOrderRow: Statement failed
Or this:
Slight problem while trying to get statistics. The program should continue working, but not all information may have been retrieved.
The message will be logged, [programmer] will find about it. Call the programmer only if the problem is urgent.
Error #55 in GetOrderCount: The stored procedure 'sp_count_orders' has returned an error
fourty two
3.243F6A8885A308D313
You probably meant Heisenbug , but I like the way you think ;-)
3.243F6A8885A308D313
I wouldn't want to become a programmer if it weren't a challenging process to debug a program. Although undeniably frustrating, it is arguably the most rewarding part of programming. There would be no limit to the number of "programmers" out there if debugging were as simple as answering a serious of easy-to-read questions.
-----
Make Love not [Browser] War!
Now not only do you have to worry about why your program is not working, you have to worry about why the debugger's english parsing isn't working right!
When I lived in South Africa I could speak pidgin Zulu and Xhosa and studied Xhosa at university. If I recall, Xhosa had 16 noun groups and seven tenses. This means that Xhosa is far less ambiguous as to the relationship between things. Verbs are spoken with the subject and object noun group prefixes attached. Thus the verb for "hit" is different when applied to a dog as opposed to a tree. This potentially helps remove a lot of the confusion in human/machine natural language interfaces. Problem though is finding enough Xhosa programmers and Xhosa people wanting to buy your product.
Engineering is the art of compromise.
I don't believe plain English is the best tool for the job. For the sake of discussion, let's suppose plain English is the best tool and that the only reason we don't already have plain-English debuggers is that we don't yet have the technology to make computers understand it.
Well, then it would pretty much logically follow that plain English is the best thing for other formal systems. But that is not what we see at all, is it? Advanced math has been around for hundreds of years. There aren't any computers that don't understand plain English to prevent people from using plain English as the notation to express mathematical concepts. But you don't see this happen. When you see an integral written down, you see a summa symbol and some smaller writing above and below it, and a "dx" at the end. If it's a closed path integral, you've got a little circle on the summa.
Despite what I used to believe as a college freshman, this is not some arbitrary confusing notation designed specifically to keep the uninitiated out of the elite Calculus Club. It's just the most effective and efficient way of expressing the concept . It was invented because English was not the most effective and efficient way to express the concept . It would a pain in the ass to have to write "the closed path integral along the path of an ellipse having height of eight and width of ten centered at two coordinates above and one to the right of the origin of a plane which maps onto a field whose values vary as a function of the cosine of pi times the horizontal displacement from the origin plus the sine of two times pi times the displacement from the origin". In fact, people used to do math like that, but they moved to a special notation becasuse plain English (or Latin, as the case may be) made things way more painful than they ever needed to be.
I honestly don't know why people can't get this concept through their heads, unless they just want to lie to themselves and everyone else and let everyone believe that converting into plain English is suddenly going to make things easier. Formal languages exist because they're a useful way of expressing complex things. The complex things are complex because they themselves are complex, not because we have to use a formal language to express them.
In the products I'm involved with I often get stupid reports from the field of the form "framing error causes unit to reset". When I get one of these, first thing I do is get back to the user and figure out exactly what they saw and what heppened withouth them trying to figure out the symptoms. In the "framing error" problem, what was really happening was that a power glitch was being caused when the RS232 cable was attched (because of bad grounding). This caused a reset. However, the user was a "super user" who knew bad things happen to serial data when you plug/unplug cables. One of the buzzwords he knew about was a framing error. So he "half solved" the problem by saying that a framing error caused the problem.
There is a big difference between observing and fixing problems. QA is about observing, not fixing, problems. It is better to provide a good way for users to make accurate error reports (eg. backtrace/log/whatever) than try have them try explain what went wrong.
Engineering is the art of compromise.
PC load letter? What the fuck does that mean?
I really Do!
I Wish they would sell it;
instead of it doing what I want it to do,
It only does what I tell it!
Adapted from an old computer rhyme.
"Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
>Why didn't a program behave as expected?
Why? Why ask Why! Try Bud Dry!
This is what strongly typed Exceptions and verbose stack traces are for. Seriously, take a look at the stack traces that .NET and Java produce. They're just as human readable and *concise* as any human language debugger could produce. The problem with converting from code to human language is that you ambiguate and lose conciseness.
Debugger: -Sean, bite my shiny metall ass!
Sean: -It doesn't look that shiny to me.
Debugger: -Shinier than yours!
You can't handle the truth.
"It looks like you're trying to dereference a null pointer during global destruction. Would you like to start the debugger?"
Well, this is a snippet from a response, but it really gets the core of the issue. Global destruction is a very stressful time to do just about anything. I'm by no means a programmer, and I have no idea what you're talking about, but don't you have better things to do when the end of the world comes? I'm even more alarmed if your 'threads' are actually causing global destruction. I beg of you, please stop programming!
My Blog