Job Security
Tuesday, July 8th, 2008Apple Boss: Hey font guy, are you done yet so we can fire you?
Apple Font Guy: Err…no! I still have to do the…um…Braille font! Yeah, and the…um…Cherokee font! I’ll get back to you.
Apple Boss: Hey font guy, are you done yet so we can fire you?
Apple Font Guy: Err…no! I still have to do the…um…Braille font! Yeah, and the…um…Cherokee font! I’ll get back to you.
I’m going to puke if I read about “the cloud” or “cloud computing” one more time. It’s become popular in the past half year but it doesn’t describe anything new. Sometimes the computer tech industry has more ridiculous fads than fashion.
I’ve started learning a theorem proving tool to help me with my thesis. It’s called Coq, which has got to be the most unfortunate name I can think of. I think the creators are French, and coq means cock, as in rooster, in French. Why rooster? I have no idea. Why does anyone name anything what they do?
From Structure And Interpretation Of Computer Programs:
In a similar way, we can regard the evaluator as a very special machine that takes as input a description of a machine. Given this input, the evaluator configures itself to emulate the machine described. For example, if we feed our evaluator the definition of factorial, the evaluator will be able to compute factorials.
From this perspective, our evaluator is seen to be a universal machine. It mimics other machines when these are described as Lisp programs. This is striking. Try to imagine an analogous evaluator for electrical circuits. This would be a circuit that takes as input a signal encoding the plans for some other circuit, such as a filter. Given this input, the circuit evaluator would then behave like a filter with the same description. Such a universal electrical circuit is almost unimaginably complex. It is remarkable that the program evaluator is a rather simple program.
I see the light! (It’s full of stars!)
It’s a shame how much software is rewritten all the time. Incompatibilities of language, interface, and execution platform and the proprietary nature of most software development seem to have doomed us to forever reinvent the software wheel. The number of linked list implementations out there must be staggering. In a perfect world, someone would decide a linked list would be a nice thing and implement it, and then everyone else would use that one implementation from then on. Sadly, the reality of software today is that one person’s implementation of even a very generic data structure probably won’t satisfy the needs of other people. There’s a missing link in the software systems we use that would let us create abstractions that anyone can reuse for their own needs.
Rasmus Lerdorf, the inventor of the programming language PHP, came to Cal Poly yesterday to give a two-hour lecture on PHP and related web technologies. I didn’t know anything about him, but I was pleased to find he’s a very intelligent, pragmatic, and humorous person. He spoke at length about the transition of PHP into an open source project, the evolution of the language, and some security and performance topics that I found very interesting. He works at Yahoo full time on PHP right now, and apparently they use PHP everywhere, so they have him optimize and improve PHP for their own needs and then contribute his work back to the open source project so that everyone benefits. He also demonstrated Yahoo’s JavaScript user interface library, which was pretty nifty. I wish we could get more big names in computer science to come talk to us. I’d listen.
It seems to me that political debates nowadays are a waste of time. Two people come together to debate an issue and wind up either talking about different things or don’t address what the other person is saying, much less provide concrete support for their arguments. There’s just too many tricks to fudge your way out of really committing to something and sticking to it. I blame the dependence of our electoral process on audio/video media. You can’t slow down what they’re saying and pick apart their words, weigh their meanings, and make reasoned judgments if their words are flying past you at the speed of speech. One candidate speaks, and the others have to scribble quickly on a paper pad to remember what to say in their rebuttal five minutes later. There’s no provision for going back at leisure and examining the merit of every spoken word. This isn’t just a disadvantage for candidates, it’s a detriment to the electoral process: it diminishes our ability to correctly choose the best candidate.
What we need is a shift from audio/video media to written text and an emphasis on constructing and critiquing arguments using logic and verifiable facts. No more hand raising. No more thirty-second answers to loaded questions. No more Jack Johnson versus John Jackson (see Futurama). In order to participate in the electoral process, candidates should have to present formal arguments on a range of precisely-defined topics. Then all the other candidates can take turns inspecting and critiquing each premise and argue whether their argument is valid and sound. It is only through a system like this that you can really get down to the heart of things.
I think a cool experiment would be to build a computer system, maybe a web site, that could facilitate arguments like these. It wouldn’t need to be used solely by electoral candidates. If you could guarantee that only real people contributed to the arguments and critiques in the system, then judgments made in that system could have real logical and political significance. Imagine if the system was very popular and many people read it, contributed to it, and deferred to it. Judgments made in this system could have an impact on real-world decisions.
I would pair this system with a public forum that facilitated interesting and relevant political discussions, where posted articles may be rated somehow by quality of their content, and highly-rated authors may rise to prominence and be heard by the rest of us. I’m not aware of any other such system.
I see backticks ( ` ) used quite frequently as an opening quotation mark online and in program output, as in “You named it `Carl’ “. Is this some kind of quiet leet development that people don’t talk about but just pick up, like slang?
LaTeX is a tool used almost exclusively for formatting academic Computer Science papers. Instead of formatting your paper through traditional what-you-see-is-what-you-get (WYSIWYG) means, LaTeX is a markup language that is interpreted and formatted for you. For example, instead of highlighting a word and clicking a bold button to make the font bold, e.g. bold, you embed a markup notation that is transformed into the intended formatting at the end, e.g. \textbf{bold}. The argument goes that this allows you to focus more on the content of your paper and not have to screw around with fonts and spacing all the way through the writing process.
What I can’t figure out is why it’s such a giant clusterfuck when it comes to actually getting anything to work with it. WYSIWYG may have its shortcomings, but at least it works out of the box. There’s been something wrong with every LaTeX distribution I’ve ever tried. You’d think a tool used by Computer Scientists all the time would have been improved by now. I don’t understand why academics aren’t up in arms. Maybe one person got it working, and then everyone else just copied his or her setup. That reminds me of a joke I heard about how there isn’t really any Makefile format specification, just a master Makefile floating around from which all examples are copied.
Here are the commands to format your LaTeX document:
That’s right, you have to invoke latex three times. Why? I guess twice wasn’t good enough.
Is Computer Science really a science? Computer scientists don’t apply the scientific method. Testing is currently essential for implementing software correctly, but only because we’re either too lazy or incapable of verifying correctness beforehand due to the extreme complexity of the systems and tools we use. It all boils down to manipulating an abstract machine, in most cases a register machine, which is a mathematical construct. The colors that appear on your monitor and the data written to your hard drive are merely side effects of the mathematical operations we compute. I think Computer Science is mathematics, not science. In fact, many universities place their Computer Science program within the mathematics department, not the engineering department.