Personally I don't think physics is that confusing. And it's not a fair comparison; we have a bit more control over language design than the laws of nature:)
If you read my post, I endorse C as a teaching language (although my more mathematically-inclined colleagues would doubtless prefer Lisp or Haskell). C++ doesn't model anything except itself, though. I've done a fair bit of development with it, and like Java, I mostly find it useful for the libraries. It's full of random gotchas, and doesn't possess the almost one-to-one mapping to machine instructions which C does.
Unless you do a lot of embedded or systems programming, you may as well think of the computer as a virtual machine. It certainly is one to a user process. Most software spends all its time waiting for the user, so "slow" languages are fine.
"C++: an octopus made by nailing extra legs onto a dog" -- Steve Taylor, 1998
"I *made up* the term 'object-oriented,' and I can tell you I did *not* have C++ in mind." -- Alan Kay, one of the inventors/designers of Smalltalk
Java gets in your way a lot, compared to C++. It's only a contender in contests because of libraries like java.awt.geom.*. Also, debugging tends to be easier under Java, because of all the runtime bounds and type checking; but if you find yourself doing extensive debugging during a TC contest, you are probably screwed, whatever your choice of language.
When TopCoder started it was Java only, and the C++ support was lousy when first introduced. I really learned Java for TC, but switched back to C++ once the environment was acceptable.
I can visualize some things, but often I must resort to pure symbol manipulation. If I am picturing anything when writing a complex SQL statement (relational algebra is math, and this comes to mind just because I've done it a lot lately), I'm not conscious of it. I would say that a join looks like a zipper, but I have to forget any pretty pictures and just think about subsets of cartesian products when I am doing anything really complex.
Likewise for devising algorithms, describing a language with a regex or grammar... it's abstracted to an essentially non-visual, non-spatial domain.
I acknowledge the value of visual metaphors, but I am not convinced this kind of thinking can be taught effectively to everyone, or that it applies to all of mathematics.
C++ is a terrible teaching language. A portable assembler that thinks it's an object system... what could be more confusing? Teaching systems programming is certainly apprpriate, but please, use C for that.
I am probably also guilty of having a weird laugh and making odd comments:) Dave was memorable, but didn't seem particularly impaired socially. The party was usually in his team's hotel room, as I recall.
A coder who knows how things work all the way down to the bare metal is sometimes very valuable. And just because a person likes to rewrite things doesn't imply they cannot make an appropriate decision when a deadline is involved.
Also, there are some wheels out there that really *should* be reinvented.
I've been working a relatively undemanding job in a shop full of scripters for a couple months now. The only thing that makes me want to leave is the condescending attitude they have towards their clients.
Well, it measures *something*. I would love to have most of the people I know from TC onsites as coworkers. Keeping them motivated on dull projects would be difficult, of course.
What a waste of a good programmer that would be. "Write the underlying code for all dialog boxes" or "make a tool that lets average developers crank out GUI code faster" might be more fitting uses of her time.
Speed is really just a tie-breaker after correctness in TopCoder and ACM contests. It's not a contest to write *crap* quickly... the fastest coders usually have the most readable and robust code (a couple C++ users in the TC top 10 excepted).
Umm, many other languages can call C libraries. Admittedly, something with internal state and callbacks (like a networking library or GUI toolkit) may present some difficulties.
Speaking as someone who has used C almost daily for eight years, I would agree that it is an inappropriate tool for most application programming. And better tools do exist; the problem is primarily one of education and inertia.
Re:This sounds like what the Pentagon needs
on
8.6 GB Internet?
·
· Score: 2, Informative
This is useless to the Pentagon. Their problem is a shortage of raw bandwidth, not lack of a transport which can efficiently use what is available.
I've actually had bash segfault on me a few times, which zsh has never done. and zsh uses less memory unless you do abusive things via scripting or the command line editor. zsh scripting is a superset of sh, so the things I try generally work; csh users can have a similar experience after setting a few options. (But remember, csh programming Considered Harmful.) I've become accustomed to spiffy zsh features like reporting when other users log in and out (before the prompt, just like new mail), extended globbing, very customizable completion behavior, being able to tab-expand history references (makes trying "!rm" much less dangerous), and so forth.
It's even the little things. Like, zsh expands commands when it prints a job completion report, but bash doesn't; so if you have a loop which does something on a bunch of items, each of which can complete in the background, under bash you get a report where each item looks like "[%] Done wget $i" or something equally useless, but under zsh you can see the actual text of the command that finished.
I have 100+ lines invested in the four rc files for zsh by now, so something new might not be immediately superior for me. I have been meaning to seriously try out es and rc for years.
Use microscopic pieces of plastic which are the same density as the other material? It just seems like you could get the markers as small as natural defects and impurities from manufacturing and packaging.
SkyCrap is indeed a fun place. They always have what looks like a row of ancient disk cabinets lined up out front, and a huge bin of useless popcorn boards just inside the door. Their capacitor aisle is really scary, I'm sure it would be useful for those backyard railgun projects. I mostly find myself there when I need some weird connector or a length of cable cut. Ony my last visit I picked up some case fans, and considerably cheaper than I could have any place that sells them as PC hardware.
If the average netizen had access to a more capable mail server, there would be a technical solution to this. One which I already employ when I need to give an email address to someone I don't trust not to or resell it.
Generate a random string to use as a mailbox name. Forward that to your real inbox. Use procmail or MTA rules to bounce any messages it receives which are not from the expected sender, or just remove the mapping entirely when it outlives its usefulness. Certainly this process could be made more automatic and user friendly if there was demand for it.
This also allows for greater anonymity, although you could still require recipients of the city newsletter to give real names with their special-purpose addresses. Who lives in the city is already relatively easy to determine regardless.
Personally I don't think physics is that confusing. And it's not a fair comparison; we have a bit more control over language design than the laws of nature :)
If you read my post, I endorse C as a teaching language (although my more mathematically-inclined colleagues would doubtless prefer Lisp or Haskell). C++ doesn't model anything except itself, though. I've done a fair bit of development with it, and like Java, I mostly find it useful for the libraries. It's full of random gotchas, and doesn't possess the almost one-to-one mapping to machine instructions which C does.
Unless you do a lot of embedded or systems programming, you may as well think of the computer as a virtual machine. It certainly is one to a user process. Most software spends all its time waiting for the user, so "slow" languages are fine.
"C++: an octopus made by nailing extra legs onto a dog" -- Steve Taylor, 1998
"I *made up* the term 'object-oriented,' and I can tell you I did *not* have C++ in mind." -- Alan Kay, one of the inventors/designers of Smalltalk
The example solution to SkewTree is dynamic programming, not brute force.
Java gets in your way a lot, compared to C++. It's only a contender in contests because of libraries like java.awt.geom.*. Also, debugging tends to be easier under Java, because of all the runtime bounds and type checking; but if you find yourself doing extensive debugging during a TC contest, you are probably screwed, whatever your choice of language.
When TopCoder started it was Java only, and the C++ support was lousy when first introduced. I really learned Java for TC, but switched back to C++ once the environment was acceptable.
I can visualize some things, but often I must resort to pure symbol manipulation. If I am picturing anything when writing a complex SQL statement (relational algebra is math, and this comes to mind just because I've done it a lot lately), I'm not conscious of it. I would say that a join looks like a zipper, but I have to forget any pretty pictures and just think about subsets of cartesian products when I am doing anything really complex.
Likewise for devising algorithms, describing a language with a regex or grammar... it's abstracted to an essentially non-visual, non-spatial domain.
I acknowledge the value of visual metaphors, but I am not convinced this kind of thinking can be taught effectively to everyone, or that it applies to all of mathematics.
C++ is a terrible teaching language. A portable assembler that thinks it's an object system... what could be more confusing? Teaching systems programming is certainly apprpriate, but please, use C for that.
I am probably also guilty of having a weird laugh and making odd comments :) Dave was memorable, but didn't seem particularly impaired socially. The party was usually in his team's hotel room, as I recall.
A coder who knows how things work all the way down to the bare metal is sometimes very valuable. And just because a person likes to rewrite things doesn't imply they cannot make an appropriate decision when a deadline is involved.
Also, there are some wheels out there that really *should* be reinvented.
I've been working a relatively undemanding job in a shop full of scripters for a couple months now. The only thing that makes me want to leave is the condescending attitude they have towards their clients.
-- a topcoder
Well, it measures *something*. I would love to have most of the people I know from TC onsites as coworkers. Keeping them motivated on dull projects would be difficult, of course.
What a waste of a good programmer that would be. "Write the underlying code for all dialog boxes" or "make a tool that lets average developers crank out GUI code faster" might be more fitting uses of her time.
I spent a little time in person with him at ICPC 2002. He seemed perfectly sociable to me.
Speed is really just a tie-breaker after correctness in TopCoder and ACM contests. It's not a contest to write *crap* quickly... the fastest coders usually have the most readable and robust code (a couple C++ users in the TC top 10 excepted).
That guy did not, in fact, win the 2001 TCCC.
TopCoder permits only Java, C++, and C#.
-- a red
It doesn't expand globs to include "." or "..".
The ANSI SQL-92 standard does indeed specify a uniform mechanism for accessing metadata.
Try select * from information_schema.columns for a taste.
Umm, many other languages can call C libraries. Admittedly, something with internal state and callbacks (like a networking library or GUI toolkit) may present some difficulties.
Speaking as someone who has used C almost daily for eight years, I would agree that it is an inappropriate tool for most application programming. And better tools do exist; the problem is primarily one of education and inertia.
This is useless to the Pentagon. Their problem is a shortage of raw bandwidth, not lack of a transport which can efficiently use what is available.
I would vote for zsh, personally.
I've actually had bash segfault on me a few times, which zsh has never done. and zsh uses less memory unless you do abusive things via scripting or the command line editor. zsh scripting is a superset of sh, so the things I try generally work; csh users can have a similar experience after setting a few options. (But remember, csh programming Considered Harmful.) I've become accustomed to spiffy zsh features like reporting when other users log in and out (before the prompt, just like new mail), extended globbing, very customizable completion behavior, being able to tab-expand history references (makes trying "!rm" much less dangerous), and so forth.
It's even the little things. Like, zsh expands commands when it prints a job completion report, but bash doesn't; so if you have a loop which does something on a bunch of items, each of which can complete in the background, under bash you get a report where each item looks like "[%] Done wget $i" or something equally useless, but under zsh you can see the actual text of the command that finished.
I have 100+ lines invested in the four rc files for zsh by now, so something new might not be immediately superior for me. I have been meaning to seriously try out es and rc for years.
Use microscopic pieces of plastic which are the same density as the other material? It just seems like you could get the markers as small as natural defects and impurities from manufacturing and packaging.
How could it be unsafe to put some inert plastic in explosives? At the very worst, you make them slightly less effective.
Fortunately for the attacker, few users are surprised these days when applications use hundreds of megabytes to accomplish trivial tasks.
SkyCrap is indeed a fun place. They always have what looks like a row of ancient disk cabinets lined up out front, and a huge bin of useless popcorn boards just inside the door. Their capacitor aisle is really scary, I'm sure it would be useful for those backyard railgun projects. I mostly find myself there when I need some weird connector or a length of cable cut. Ony my last visit I picked up some case fans, and considerably cheaper than I could have any place that sells them as PC hardware.
If the average netizen had access to a more capable mail server, there would be a technical solution to this. One which I already employ when I need to give an email address to someone I don't trust not to or resell it.
Generate a random string to use as a mailbox name. Forward that to your real inbox. Use procmail or MTA rules to bounce any messages it receives which are not from the expected sender, or just remove the mapping entirely when it outlives its usefulness. Certainly this process could be made more automatic and user friendly if there was demand for it.
This also allows for greater anonymity, although you could still require recipients of the city newsletter to give real names with their special-purpose addresses. Who lives in the city is already relatively easy to determine regardless.