Joe Weaver

I'm JustaProgrammer who stumbled upon the Wiki a few months ago and was quickly caught up in the WikiRapture.

By day I create training software, by night I do lots of stuff. I was JustaStudent until a few years ago, so I'm still acclimating to the RealWorld. My roommates used to call me IronChefBachelor?, so that should give you an idea of one of my hobbies.

To get a sense of my personality, read the the following passage: I want to start a company called Tenser, and we would manufacture the world's fastest, quietest hard drives. We'd do this by putting the platters on liquid bearings. That way I could honestly say I make my living by selling Tenser's Floating Disks.

[Joe, what are "Tenser's Floating Disks" anyhow? -- CuriousToo?]

They're created by a spell in DungeonsAndDragons. Invisible large hovering disks which, as their most basic use, can carry stuff around for you. That is, I like GeekyThings, and I like puns.

Also, MyMyersBriggsTypeIs INTP. I think I'm more of a JoeWeaver, which has many striking similarities to an INTP but is not quite the same.

Interests I'm having trouble coming up with a nice, short list. I think I'll just paraphrase one of the nicer compliments someone has given me, "Joe is a great guy, he knows a little bit about so many things that you can always have an interesting conversation with him about any topic." I'm pretty sure they were sincere.

What's on my mind

WikiRefactoring Beliefs

Most recently found WikiGem?

From XpMailingListQuotes:

The code done yesterday should be as good as you could make it yesterday. The fact that you know more today, and are more capable today, is good news about today, not bad news about yesterday. -- RonJeffries

Refactoring I was in the process of making CrcCards BackLinks point to CrcCard. My plan was to move the content from the page with the pural name to CrcCard. The following question was raised:

Shouldn't this point to ClassResponsibilityCollaborationCard??? -- DevilsAdvocate

I'm not touching the current spell out every acronym debate, though I do have my own views. On most of the pages it lives on, CrcCard is a common enough word that spelling it out every time is 1) unwieldy in context and 2)provides as much use as turning Laser into LightAmplificationbyStimulatedEmissionofRadiation??. Also, I'm a lazy git and done with my original approach


Congratulations on your fiancee! Also, I'm passing on my Wiki Gnome Propriety Award for your WikiGnome edit. Congratulations again! -- JohannesGijsbers

ThankYou for the ThankYou! It was very cool to sit down this morning and find my name on RecentChanges, and see that someone noticed and appreciated the Scrum work. Between that and my cup of coffee, it was a great morning. -- MichaelIvey


Hi Joe, I came across one of your minor edits (that was listed under RecentChanges instead. It happens.) to AntiMicrosoftBiasOnWiki, and decided to peruse your website. (I'm just curious that way) I'm glad that I did. I like the content and I will be using your "Refactoring Beliefs" to help form my own RefactoringPhilosophy?. Thanks! -- CarlosNsRodrigues

When it's a stylistic issue I feel strongly about, I tend to not check the minor edit box. That's probably a failing of mine. Glad you liked my stance on refactoring.

My quick and dirty notebook of stuff I have an impulse to refactor but can't at the time I notice it.

A quick jot before I jump back into the code.

Brief idea: A consistent naming scheme for tests really helps show when a class has too many responsibilities. It has yet to be determined if this is useful, too obvious too need stating, or pure bunk.


The class I'm working on right now takes a stream of characters, interprets those characters as specific commands, and executes the commands based on the interpretation. I am creating a bunch of test methods like:

Obviously, the class has too many responsibilities. This is good, because I knew that it had too much to do, but I made my saving throw vs. clever and did DoTheSimplestThingThatCouldPossiblyWork long enough to both verify my suspicion and clear up some finer details on how things have to be implemented (before making expensive to change assumptions).

Update: Somewhere on the Wiki someone mentions that if you're testing too many private methods, it's also a sign that the class has too many responsibilities. I'm also getting that. I did a quick check of CodeSmells and while there's a brief mention of the OneResponsibilityRule, it could probably be fleshed out with these and probably many others.

Useful Links

To/From Robert Abitbol

AR: What language do you program in? The training software you do is for Windows applications or specialized?

JW: I work for a group that develops specialized machines which are very expensive to operate.

AR: What do these machines do?

JW: Contractually, I cannot say.

JW: The machines hook into a few other pieces of software. Training future operators of the machines with a physical machine is not cost-effective at all, this is where I come in. I'm developing software which simulates the machine and interfaces with the other software components.

AR: Your software does simulations as a form of training; it simulates a machine. This is pretty net and new!

JW: It is neat, but actually not very new.

JW: The simulator also allows a human trainer to inject errors and directly affect other simulation parameters. The application is written in C++ and currently runs on Windows. The particular choice of language and platform was the customer's; his group will inherit my source and his stable of programmers are most familiar with that environment.

JW: I'm mostly language agnostic but feel a sort of vibe with Java and Smalltalk. I can't stand Lisp due to the bad taste Dylan left in my mouth (which is my own fault), and used to love Perl but then had to reread my programs (also my own fault).

AR: Lisp. You do E-macs? Why you lost interest for Perl? Please leave me your e-mail address. I'd like to ask you something.

JW: I've used Emacs, but not often. Dylan is a lispy language, it has all the bad with little of the good. At least, that was my experience in a horrible college course that used it. Perl is a fine language, it was a perl program which finally made me understand why I may want to use a hash instead of an array at times. However, its basic tenent of being liberal in what it accepts as programming style allows me, in my foolishness, to create write-only programs. I can provide more business value when using other languages. I have an expiring email address at; I'm dreadfully slow at replies and the amount I can receive is limited. I hope other people reading recent changes do not mind seeing this exchange.

AR: I am sure many people are genuinely interested about you since you don't reveal much and you seem to be so kind and so discrete by nature. By the way I heard you got engaged recently. My sincere congratulations especially to the lucky girl! :-)

JW: Thank you, I am actually the lucky one.

AR: Write-only programs? You don't find Perl rigid enough? Do you have a copy of e-macs along with a wiki for e-macs. I have all the problems in the world downloading them!

JW: People often claim perl is write-only. This is a clever way of saying perl is so flexible in how it allows you to program, that it is very very easy to quickly write a program that is very hard to read (and, therefore maintain) later. I've never tried to use emacs under windows, sorry.

Just found this in some legacy code:

 float alim( float arg1, float arg2 )
  float temp ;

temp = (float) fabs( (double)arg2 ) ; return ( (arg1 >= temp) ? temp : ((arg1 < -temp) ? -temp : arg1) ) ; }

It's comprehensible, but it strikes me as taking too much effort to understand. A definite candidate for MeaningfulNames treatment. (And ya gotta give love to the ternary operator.)

The above is making me consider the following question. Where are the (admittedly fuzzy) lines between discussing process improvement using real world examples, blowing off steam so that you can put an annoyance behind you and get back to work, and blatant unprofessionalism? Really interested in input for this.

More (modified to be legible, in complete sentences and WikiWorded) shared notes from my ProgrammersNotebook:

That's twice this week where setting up a test was hard, due to visibility or demeterish smells. Both times, it turns out that this was because I was initially giving responsibility to the wrong class. It turns out the right place is also the place where it didn't hurt at all to write tests. Fortuantely I've started picking up on this and didn't have spend time writinig painful code before the realization. So yeah, that's proably pretty much a specific case of ListenToTheCode.

LateCeePlusPlus has me thinking about my devel habits. I've decided to at least play with using vectors instead of a CPtrList today, and see where that takes me. Amazing, Wiki is actually relevant to work again. I should also point out I'm very much a neophyte to STL, lest anyone attach too much weight to my words.

One of the great things about STL is for variable size data structures. The old C approach of having maximum-size arrays of FOO or using realloc() is truly ugly by comparison.

Tip: There are multiple books about STL, but apparently only Matt Austern's "Generic Programming and the STL" really explains the rationale behind why STL is the way that it is. It goes into huge detail about the different kinds of iterators; before reading that, I thought it was bogus to have so many kinds, but actually it's all just codified common sense. This may not be the best intro book, but it's the only one I read carefully, and it seems to have given me a different view of the STL compared with people who read other books.

Then again, I may be prejudiced, since I know Matt from before he did all that (he used to moderate sci.physics.research).

Still, I admire the design of STL (e.g. O(n) performance because of that book, and most people seem startled to hear me say that, so it seems to me there's a unique approach in it. Matt is a brilliant guy, maybe that helps.

Trivia: I just found out recently that STL actually dates back to the late 1970s; it was originally an experiment in generic programming for Ada, of all things, before Ada's design was even finalized. Weird. But maybe that gives it more depth. -- dm

Thanks, the local library doesn't have it, but I'll check into ILL and give it a look. About the Ada thing, neat.

It may appear that I just added some porn links to random pages. Be advised I haven't gone evil, it looks like myself and a gnome are stepping on each other's reverts. Ward has too many helpers on a holiday :)

From SneakInNewTechnologies,

RefactoringNote? to DeleteWhenCooked: I've removed some stuff along the lines of of well, how should we amend something on a Wiki, this page was apparently started many years ago before there was a good grasp of WikiNow. Still, it's a fairly large bunch of outright deletion, so I figure I'd leave this note for a while so people know what I did and why. -- JoeWeaver

I'd say after two months it was cooked 8-) . Just passing that way, thought the "new to organisation vs. new to programmer doing the work" thing was important so I put it back in... ThankYou for the edit. -- MatthewAstley

Joe AreYouThere? I am looking for people who know both PHP and PERL in practical situations to comment whether it is better to choose PHP over PERL, see IwannaLearnPhp. -- dl


EditText of this page (last edited November 21, 2005) or FindPage with title or text search