1,351 karma · joined May 20, 2013
Zhang et al (2021) 'Understanding deep learning (still) requires rethinking generalization'
1. Most of the time you are not implementing foundational algorithms like sorting or SAT solving. You use mature implementation in libraries.
2. If you are in fact implementing foundational algorithms, then the existing volumes of Knuth cover only a very limited set of problem areas.
3. If you are implementing something in an area covered by Knuth, the books are worth looking into as a reference, but often writing performant and robust code requires considerations not in Knuth. This is because Knuth works with an idealised machine ignoring things like parallelism, memory hierarchy etc. and understandably does not get into software design issues.
The whole early Unix obsession with plain text files was a step in the wrong direction. One grating holdover of that is the /proc filesystem. Instead of a typed, structured api you get the stuff as text to be parsed, file system trees and data embedded in naming conventions.
Lot of actual academic work happening on Twitter, blogs and sites like MathOverflow.
On the other hand, right now I follow only a few dozen accounts on Mastodon and I'm already drowning in irrelevant posts. It can at best be a glorified group chat.
I agree that most of us can do at most a few hours of intellectually demanding work every day. But to win those few hours of freedom, to gather the preconditions of doing work, to maintain the social organizations necessary for collaboration, and to make the results presentable, can easily eat up a whole day year after year.
I'm a teacher of economics and open source software including Python, Julia, LaTeX, R and Linux are essential to my work. I would find it hard to pay for proprietary equivalents of all the open source software I use. I consider it my duty to contribute back in whatever way I can.
My national pride is not hurt just because another Indian who did something wrong was criticised on the Internet.
#Cell 1
a = [1,2,3]
b = (a,True)
#Cell 2
b[0][0] = 5
#Cell 3
print(sum(a))
Now if I change Cell 2 to # Cell 2'
b[0][0] = 4
and execute, Cell 3's result becomes stale. Do you track such dependencies? Would really love to read more about the underlying implementation.As a user I see myself as a gainer from the Debian/Ubuntu or GCC/Clang duels.
For some, being a dilettante may precisely be the life that they want. The problem is that if you are perceived as "smart" people all around you will push you to "succeed" in traditional ways, either because they want a share of the profits of such "success", or because they see someone not doing the boring grind as a moral failure, or out of concern that the dilettante is "throwing away their potential".
I'd say that if you are "smart" then it should make your life freer and not more constrained.
I can't say if cheating is more of less acceptable in India than elsewhere, and for sure very many students in India are honest and genuinely interested in learning, but people treating knowledge and teachers as divine is far from reality.
Some of those 120 lines were commentary, blanks and things like "qed". Also, I tried to used small steps in the proof. You can have a more concise proof if you are willing to take larger steps and rely more on automation. The cost is that the justification for the steps might become opaque to humans.
Here is a second attempt at the proof that follows your argument and uses more automation. It is much shorter than the original: https://gist.github.com/jmoy/27bcc72fb5a3f871b72c31e81bccb55...
In C, pointers are used for many different things: they stand for arrays and strings (which IMHO is a questionable choice); they are used in types where the structure of an object changes at runtime (linked lists, trees); they provide a way for different parts of the program to refer to a common state; they allow subroutines to modify objects 'owned' by calling routines; they provide a cheap way to pass big structures as arguments to subroutines even when they won't be modified; they provide a way of incorporating large structures as elements of other structures which allows replacing one value with another without a full copy.
Some troubles with pointers are specific to the ways that C uses them: manual memory allocation means that you can use before alloc or after free; the NULL value means that you can dereference an invalid pointer; pointer arithmetic means that a valid pointer can be used to produce an invalid pointer. At possibly some small runtime cost we can eliminate these problems.
But there is one unavoidable problem at the heart of the use of pointers. When you are referring to something with a pointer, are you doing it just for convenience, to avoid copying large structures; or are you doing it to share state with other parts of the program? Things will go horribly wrong if you end up doing the latter when you just wanted the former.
Rust's type system is an attempt to keep track of different uses of pointers to catch such errors without compromising on efficiency. There have been other attempts ([1],[2]) but Rust finally has a rich enough language and library to attempt writing serious programs in.
I think it will be interesting to see whether the authors of such programs find the mental effort of keeping the borrow checker happy worth the efficiency gains of using pointers for both purposes on an equal footing, or whether they fall back to the extreme models of Python (and many other languages) where everything is a pointer which shares state or that of Haskell where there are no pointers by default and one has to switch to a explicit and cumbersome syntax (using the IO or ST monads) when one wants to use shared mutable state.
[1] https://en.wikipedia.org/wiki/Substructural_type_system [2] http://pauillac.inria.fr/~fpottier/slides/fpottier-2007-05-l...
I can understand HPC applications where the high-speed interconnect on the chip would make a big difference.
But in business applications where the cores are dedicated to running independent VMs, or are handling independent client requests, what is really gained? There would still be some benefits from a shared cache, but how large quantitatively would that be?
If you look at the treatment of this on Wikipedia or a physics text it is the phase difference beteween the front and back reflections which matter and not the total path length.
Even for a windowpane there will be some wavelengths where the two waves are in phase and others where they are out of phase. The true explanation is that for a windowpane these two kinds of wavelenghts are clustered densely together and therefore even for tiny wavelength ranges the interference effect averages out.