miloshasan
It makes sense for the industry to concentrate on making a buck out of the easy instances, and leaving the hard stuff to the academics. However, that is different from claiming that hard instances don't exist.
First, child abuse is beyond what most would call "parenting"; that term is mostly applied to things like strictness with respect to school homework, video games, pressure to choose certain careers, etc. My argument was that those of us that care about giving their children the best should not sweat too much over where precisely to draw the lines, because the effect of these decisions on the child's personality and life outcome is minimal.
Second, it is very possible that the same genes that increase the chance of a person being a child abuser also increase the chance of their child being, say, an alcoholic or criminal.
In fact, lots of research on twins and adopted children suggests that parenting matters very little in shaping a child's personality and skills, while biology and peer groups matter a lot. Identical twins turn out quite similar regardless of whether they grow up in the same family, while adopted siblings are as different as any random people. (Check "How the Mind Works" by Pinker for a great overview.) People have a hard time accepting this, since most would like to believe that they have a power to shape their children, but this does not make it any less true.
> the Immigration Act of 1965... didn't just abolish racial quotas, it also created preference categories for science, math and engineering-trained immigrants to come over.
Ah, so Asian immigrants to the US are far from an unbiased sample of their original populations! This explains a lot more than bitter fights over parenting.
It is very common for people to enter e.g. CS or EE programs with no intention of pursuing an academic career, and instead planning to find an industry job afterwards. Indeed, there were some people I met in grad school that left well-paying jobs at (say) Microsoft with the intention of getting a Ph.D. and going back to industry to work on more interesting stuff. As far as I know, they usually succeeded.
Does a Ph.D. increase your expected salary, if you get an industry job afterwards? Probably not enough to be worth it. Does it raise the level of problems you will be solving, and the quality of people you will be surrounded with? Absolutely.
I am not disagreeing with you, I am saying that I would love to see a better data-parallel language than C (or CUDA to be precise), but it does not exist right now (at least not a practical one that would run on a real GPU with reasonable performance and allow non-trivial nested and hierarchical algorithms).
You may well be right, but I challenge you to prove it. I myself am very interested in whether this would work. I have spent many sleepless nights programming GPU algorithms, and wondered if ideas from other programming languages and paradigms (especially functional programming) could be applied to make it easier and more elegant.
The nested data-parallelism approach does look promising on paper, and many people are well aware of the theoretical possibility of this working on GPUs (including people at Nvidia itself), but so far nobody succeeded to make it practical.
So, doing data parallelism in CUDA may be brain-damaged, but the flexibility and performance it delivers is mind-blowing. If you can achieve something comparable using a higher-level functional approach, I will be among your first users, and I'll tell everyone I know.
MultiLisp (AFAIK) is traditional task-parallelism rather than data-parallelism, and would not work well on a GPU.
A Breakthrough Result
- Matrices are a pain. The r_[] and c_[] operators could be a reasonable replacement for Matlab's elegant matrix construction syntax, but they do not work as expected (as smart hstack and vstack), instead doing something completely different and inconsistent for vectors and matrices.
- Tensors are a bigger pain. Matlab has a very well-defined semantics for operations like permute and reshape; in NumPy these operations sometimes create just a view, at other times they reshuffle the memory contents. I know the idea was to "protect" the user from having to know the memory layout of data, but this idea is bad.
- Ipython is great in every way except when it comes to reloading parts of your program. After any tiny change to your code, the only safe thing to do is to quit ipython and start it again. All the other options (run, reset, reload...) make some secret and wrong assumptions on what you want to reload. In contrast, this works flawlessly in Matlab.
A basic message of CS is that most general-purpose programming languages are to a large extent isomorphic in their expressive power, and that many computing problems can be solved efficiently in the mathematical language of sets, matrices, or abstract nodes sending each other abstract messages. The translation to a real language is then the easier step (though it still can be time-consuming and error-prone, for sure).
If only we all worked this way - there would be fewer language wars, and less terrible code resulting from "thinking in the language" rather than "thinking about the problem".