Linux Poetry Explains the Kernel, Line By Line
linux.com
linux.com
Algorhyme
I think that I shall never see
a graph more lovely than a tree.
A tree whose crucial property
is loop-free connectivity.
A tree that must be sure to span
so packet can reach every LAN.
First, the root must be selected.
By ID, it is elected.
Least-cost paths from root are traced.
In the tree, these paths are placed.
A mesh is made by folks like me,
then bridges find a spanning tree.
Radia Perlman
http://en.wikipedia.org/wiki/Radia_PerlmanI'd actually say I found that knowing I could understand this in condensed poetic form makes it a nice affirmation that I do actually understand some of this stuff, but I also learned a lot.
I hope this continues!
I get the impression that Morgan Phillips avoids saying she has a background in CS due to not holding a degree in it. I think she has every right to state that she does have a background (being classified as a hacker goes without saying).
Now, I am going to compile her poetry.
I've got a CS degree and 10 years of industry experience, and I'm still at clueless as she is and probably more.
Realising that you are clueless keeps you on your toes.
Henri Poincare [0] is sometimes called "the last polymath" in mathematical circles, specialisation in subjects increases geometrically with time. Modern CS I would say dates back to the 1930's with guys like Neumann, Turing and Church. A mere 80 years and the subject has just ballooned.
There seems to be a strong correlation between physicists and good computer scientists:- Knuth, Dijkstra for example.
Seymore Cray worked with radios during WWII and had a very strong background in electrical engineering. He had to rely on Maxwell's equations to analyse signal paths [0]. The bottom anecdote [1] I found highly amusing, very "egg and chicken".
[0] http://en.wikipedia.org/wiki/Seymour_Cray#Technical_approach...
[1] http://research.microsoft.com/en-us/um/people/gbell/craytalk...
That seems a bit semantic to me. She's basically saying "I never studied or worked extensively with X, so I have knowledge gaps about Y [which is tightly related to X, and often comes by studying X]".
As another researcher who is also sans-degree, I can see where she's coming from. To someone outside the field I would never split hairs about whether or not I have a formal CS background, whereas I might when speaking with a colleague or a professional peer.
You can apply that to professionals in certain scenarios. Referring to my original quote: “Every time I'd come across some concept, some data structure in the kernel, I'd have to go educate myself on it.” The only difference between someone who has a formal CS background and someone who doesn't, is that the former is given a lot of guidance by one of the most sophisticated data processors on Earth - the human brain, the latter has to bootstrap their knowledge.
You didn't mention your area of research, I would be interested in knowing.
I mean, I appreciate the concept of what she's doing here, but that self-assessment sounds reasonable to me.
There's a variable outside of the functions scope. If the value of the global variable were changed before it's referenced in the function the outcome would change.
int global_int;
int is_not_reentrant(int x) {
int x = x; // An arbitrary operation
return global_int + x; // the result depends on global_int
}
In the second, the value of the global_int is copied into a variable within the function; so the result is no longer dependent on anything outside of the function's scope. My thinking was, that this demonstrated reentrancy. int global_int;
int is_reentrant(int x) {
int saved = global_int;
return saved + x;
}
From the looks of it I did make a mistake, since it seems to be missing one of these criteria. I'll modify the snippets to fix it. Thanks! :) +Must hold no static (or global) non-constant data.
+Must not return the address to static (or global) non- constant data.
-Must work only on the data provided to it by the caller.
+Must not rely on locks to singleton resources.
+Must not modify its own code (unless executing in its own unique thread storage)
+Must not call non-reentrant computer programs or routines.Also, it's important to think about the kinds of program transformations that the C compiler is free to do with your code when going from C to assembly. I think it's likely that your compiler would produce the same output for both functions. Lines of C code do not execute atomically, and instructions can be re-ordered.
EDIT: Returning to this because I think I made a mistake. "Two calls executing concurrently" is not exactly right, because it admits the possibility of arbitrary instruction interleaving. A reentrant function must be able to be paused at any point, have another call to the function execute entirely, and then resume correctly. This is a weaker condition.
I would use "realistic", as opposed to "reasonable", look hard enough and you will see that everyone has gaps in their knowledge.
I have no idea what your agenda is in lavishing all this unnecessary praise on Morgan Phillips, but it's gross. Please stop.
Is your name Linus Torvalds by any chance?
Each to their own learning I guess - but very nice
Looking at a couple of them, I have no clue how it makes things any simpler. Removing line breaks and re-forming the text into correct sentences would make things easier to understand, imho.
I'm sure it would make it simpler to her and probably keeps her motivated and encourages her to get a better understanding. It seems more of a way for her to personally understand the kernel, and she is just sharing the poems with everyone else for whoever wants to read.