Via a completely off-topic post in the forum over at The Daily WTF comes this nifty link: TIOBE’s TPCI - The Programming Community Index, ranking the popularity of programming languages. Java is still going strong at the top, despite a perceived backlash. But I have to ask myself, what’s with the sudden jumps in the rankings of Visual FoxPro and ColdFusion? The statistics seem a bit suspect there – certainly I’d not been aware of any major boom in those languages. The language I’m currently making my living in, ActionScript, comes in way down at 28th, while I’m pleased to see that “Lisp/Scheme” is approaching “mainstream language” status with an A– rating and a ranking of 14th, up three positions from a year ago. I suspect this may be in part due to their lumping Lisp/Scheme dialects together as one entry, however, whereas C and C++ are kept separate, as are other languages that are highly similar and/or closely related. I suppose it’s hard to say sometimes where to draw the line between certain languages, or even to define what a programming language really is. I notice no mention of JScript, so I wonder if it is considered equivalent to JavaScript – both of them are ECMAScript-derived, but then again so is ActionScript. Anyway, had they made separate entries for Scheme and Common Lisp, I suspect neither of them would have as high a showing individually as does their composite entry. Interesting information nonetheless.

Last night I had a dream that I was writing the most brilliant blog post ever. Of course, when I woke up, I had no recollection what it was about. But it served to remind me that this thing is here, and that after the time I spent setting it up I had ought to put it to good use.

Anyway, I thought it would be interesting to write about student loan consolidation. My old blog probably had some rants on the subject. Overall, I recommend it. It’s a whole lot easier (and probably cheaper payments-wise) to have all your student loans in one place rather than receiving multiple bills.

What irks me, however, is the tactics that student loan consolidation outfits are resorting to to get your business. Like on the level of prescription drug spammers and junk mail factories. Apparently, as soon as word gets out that you have some student loans, some sort of network of mailing lists is put into play that is picked up on by dozens of rabid hungry consolidation lenders, all with similar, official-sounding names like “National Student Funding Foundation” that are intentionally chosen to sound like some sort of reputable nonprofit or government agency, in the manner of the fake organizations set up by PR companies who try to pass off bogus “research” as authoritative. These consolidation companies then spring into action sending you mailing after mailing, all of which are carefully made up to be similarly official-looking, purporting to have important information or announcements about your student loans that require your immediate attention. “Please contact us regarding your student loans.” But they’re basically ads.

It gets worse if you actually choose to consolidate with one, or just already have multiple loans through different agencies and lenders, because the names all sound so similar and official, and often one company’s loans are serviced or otherwise handled through another company with one of those names, or there is some business relationship between companies with different names that you don’t know about and nobody bothered to tell you. For instance, after I applied for a consolidation with Student Funding Services, I started getting mail from American Education Services. Taking it for more ads from yet another consolidation company trying to attract my business, I didn’t bother paying much attention to them. But then it turned out that they were in fact, documents I needed to fill out and information I needed, because AES “services” loans for SFS or some such thing. Meanwhile you’re still getting these cleverly disguised ads from different places. And, check this out, my SFS/AES loans show up on my credit report under acronym names that are neither “SFS” nor “AES.” I think there’s ACS and then there’s a duplicate report of the same account that lists it as something like “PSC/ACS.”

Plus you get their telemarketers. I actually went with Student Funding Services because I got one of these unsolicited phone solicitations and the guy on the other end, a one Jon Sullivan, actually didn’t treat me like an idiot, didn’t come off like he was trying to put one over on me, wasn’t pushy, and took the time to examine my somewhat complicated array of loans and give me detailed, intelligent answers to my numerous questions. I was so surprised to be not having my intelligence insulted, let alone that the company had actually bothered to hire someone who could actually speak English (something that seems to be too much to ask from many of these companies), that they had my business on the spot.

Anyway, that was way back in July and the consolidation isn’t quite complete even now. I’ve been getting impatient. I’m trying to buy a house and the mortgage company is breathing down my neck about the page and a half of different student loan accounts that are still yet to be tied up in a neat little bundle, demanding that I secure 12-month deferments from each and every one of them and provide them with papers to prove it. And I’m still getting tons of clever mailings and pushy phone calls from different consolidation places. Keeping the ads sorted out from mail that legitemately pertains to my real student loans is enough to drive a person batshit crazy.

I have some notes up on my wiki from things I’ve been reading about the Common Lisp programming language. I became intrigued by it last summer when the new edition of Practical Common Lisp was about to come out, and went to read the book’s web version. I found the language a bit big and daunting; I always seem to do better learning a small language or small subset of a language and understanding its theory before moving on to the big language, like when I tried to pick up C++ and found there was just too much to try to keep in my head, but had an easier time with plain ol’ C and got the impression that it would be much preferable to learn the ++ on top of it. Similarly my interest in Common Lisp was renewed upon learning Scheme in Dr. Wallingford’s Programming Languages course at UNI last semester. After typing (define stuff (lambda (stuff) stuff) a few times, the few chapters of Practical Common Lisp I’d managed to get through popped into my head and I had the magical epiphany that CL’s (defun may be just a syntactic abstraction of that idiom, and furthermore, was probably implemented as a macro. Turned out I was on the right track.

Anyway, I’m trying to get going in earnest on a research project in network analysis that I need in order to graduate. Once someone with a bit of modern-day CS background starts learning a little bit about the theory, I gather that the natural thing that springs into one’s head is that it’s practically a textbook case for applying Object Orientation. It did for me. So I decided to have a look into the Common Lisp Object System, or CLOS.

Anyway, I ran across this really cool tutorial. The CLOS is interesting, a bit different, but I think I like it. One key difference from the OO I’d learned in school by way of Java, however, was that the methods of an object don’t conceptually “live inside” the object. This idea struck me as kind of un-OO at first, since I had thought that kind of encapsulation was really at the heart of Object Orientation. Then, near the end of the tutorial, came a section titled “In OO languages the functionality lives in the object” which began with this rather shocking statement:

This preposterous claim is the product of a diseased imagination. However many OO systems feel obliged to try and enforce it. Try to avoid having to program in one of these.

As for that last sentence, I bid ye good luck with that in the context of one’s career. As it turns out however, the way that a CLOS method works – whatever object you want it to act on must be passed as an argument – resolves an old annoyance of mine with the syntax of Java style OO. Those of you who used Java a couple years back probably remember having to compare strings (and other objects, no doubt) this way: MyString.equals(otherString). I guess it’s okay once you’re used to it but it takes the conceptual operation of comparison and forces it to “operate within” one object according to an “argument” that is the other object. This seems to hurt the proper perception of commutability of the equality operation in an annoying way. And it probably drives people with a mathematcs background crazy that you can’t just use the equals sign to compare complex numbers.

This has implications for a project in networks too. Say you want to find out the shortest distance-in-links between two nodes. The algorithm, an old graph theory staple, conceptually should be an operation on the nodes themselves – with nodes passing the same query on to their neighboring nodes – and the operation itself is a commutative relationship between two objects of the same type in which both nodes are on the same footing (neither is subordinate to the other). If the method “lives on” one node at a time, which node should you ask? Should it matter which node is the actor and which is the argument? Of course not. Plus you’ll likely end up having to test the method from both ends to make sure it works the same way.