March 30th, 2008


Technical Life

In my "introduce yourself" post, I opened the floor to questions. One question was "I'd be most interested to hear more about is your technical life -- you write a lot about the social aspect of your job, but since I'm a geek I'd also be interested in what tools you're using, how you like them, that kind of thing."

I figured some of the other folks on my fl might be also curious, so here's a quick rundown. Feel free to ask more questions if you'd like.

Hmmm, my technical life. I do java development. I happen to run Windows, but I don't much care for it. I use Eclipse is my IDE and I love it. I use Agile as my style of project management, and I am a big advocate. My current project uses Scrum, a form of agile. We have 3 week "sprints" (aka iterations, in which we have a specific set of tasks (stories) we are working on and attempting to finish within the sprint), and we do two in a row. Every 2 sprints (6 weeks) the whole team travels and gets together for a colocated planning session wherein we spend a week in a room with a whiteboard and plan and design the next 6 weeks worth of work.

There are 30-ish people on my project, and I'm the only woman. There are actually 3 10-person teams, since agile is best done with a small team. We are located in several US states, Belgium, and Germany. Probably 30% the team works out of their houses, the others in offices.

I work at home when not at the colos, sitting at a desk in my den. I do lots of pair-programming (another agile/eXtreme Programming concept), and we use VOIP and VNC to do this. We also use a lot of instant messaging. It works better than I would have expected it to. Most of my projects literally involve two people working on one desktop, both talking/designing/working together, one person "driving" aka typing. This means I'm on a headset talking to one or more coworkers almost all day, even though I'm alone in my house. When I'm not driving, I sometimes have a cat on my lap. We have daily status meetings which last about 10-20 minutes, to keep everybody on the same page and aware of each story's status. A "story" is a unit of work to accomplish.

I have a laptop and a laptop backpack which always holds a spare power cord, a mouse, a headset, an internet cable. (And a spiral notebook for the occasionally scribbled notes. Other than that, my job is completely paper-free.) With this setup I can be completely mobile and work anywhere with internet connectivity. Talk about agile! That said, it's easier to work somewhere without distractions, and it's easier to work somewhere with some ergonomics set up.

Whoops, I got non-technical again I think. I am a big proponent of object oriented programming. I also love test driven design/development. I have gotten very good at the classic TDD method of coding, which is: write a test that fails, get the test to pass, refactor, repeat. It's hard to get into that mindset, but when you do it helps immensely with design and test coverage.

I also *love* to refactor, reducing redundancy and complexity, making the code clean and readable. Eclipse has lots of refactoring tools that make it easy to write code extremely fast, then tidy it up with the tool. I am a keyboard junkie when it comes to coding, and although I can barely remember what I ate for breakfast this morning, I can tell you key combinations for all kinds of frequently-used refactorings and lookups. My memory is a weird thing. (for example, these are a few off the top of my head. Classes that implement a method? control-t. Classes that use a method? control-shift-g. Open a resource? control-shift-r. However alt-shift-r will rename, and alt-shift-m is method extract. Make getters and setters? alt-s-r. And if you can't remember a refactoring combination, alt-shift-t will pop up a selection window. And yet, I still don't remember the names of everybody on my team yet, and I spaced out while driving somewhere familiar last night and made two wrong turns.....)

Okay. That's probably more than enough geekiness for now. Feel free to ask questions or request elaborations though!

How I Got Into Programming

In my "introduce yourself" post, I opened the floor to questions. Here is another question that could make for an interesting story. (See, and you probably thought I was ignoring your questions!) "How did you get into programming?"

My dad has a PHD in physics from Yale, and he always encouraged me strongly to get into maths and sciences. I also had a natural tendency toward mathy sorts of things, and science too although to a lesser degree. At the same time though, I was imaginative and artsy. I loved to read and write and imagine, and had a zillion different interests. My childhood dreams for my careers span the gambit from astronaut to first woman president to hollywood stunt artist to novel writer.

My dad wanted me to go to the best college I could get into and major in something that had career potential. (basically, something concrete - like science.) Although he claimed I could do whatever I wanted, he would get very uncomfortable when I brought up ideas like a philosophy major, for example.

Anyway I really liked math in high school. I especially loved geometry. I liked the puzzle-solving aspect of it. Given this set of assumptions and tools, how can we make this happen? My junior year when I was college-shopping, I tentatively declared my plans to major in math. This continued right until I started taking advanced placement calculus my senior year. There it all fell apart -- partly it was the teacher, and partly it was just that calculus (calcuseless, I called it) wasn't my thing. (I did fairly well in the class, but I didn't like it.)

Meanwhile my senior year I also took a computer science class and learned to program in Pascal. I had a very good time in that class, learned a lot, and it was fun. I didn't really think about it much though, because I already knew my plan was to do either math or science. At the same time I found that I really enjoyed writing, so by the end of my senior year my vague plan was to some something sciencey until I wrote the Great American Novel and became famous enough that I could write full time.

So I applied to a bunch of good colleges, and went to the best one that accepted me - Amherst College. Building my schedule for the first year, I didn't really know how to choose college courses. I just figured it was supposed to be like high school, so I signed up for math, english, and something social-studies-ish (I've forgotten what). The math class was Calc II, and I hated it. I passed, but not with a great grade, and not with any further love for mathematics.

Then I found myself a bit lost. I was supposed to be a math major, but I hated math (well I hated calc, and didn't think about the fact that there might be other kinds of math). I took a variety of random philosophy, sociology, english, and psychology classes. I decided maybe what I needed was a philosophy degree -- after all that was kind of logic and puzzle-solving, which was fun. My dad pointed out all of many types of nothing one could do for a living with a philosophy degree.

At the end of my sophomore year, still directionless, I found myself with a hole in my schedule. Looking for something which would fit, I stumbled across the computer science part of the course catalog. It was in the math department, which might explain why I hadn't thought about it prior.... "Huh", I thought to myself. "I had a lot of fun with that compsci class in high school. And it fits my schedule, so what the heck."

I started that class, and I was hooked. Why had it taken me so long to remember computer science? I don't know. I had forgotten how much fun it was figuring out computers, and telling them what to do. Look at this - technical, puzzle-solving, logical thinking, fun challenges, and it's something that people make money with! Right around the same time I started working in the computer lab , and I got to know some of the computer people on campus. I felt good, I'd found a niche that I fit into. I understood how computers worked, and I liked the challenge of making them do stuff. The coursework was interesting and the people were fun to hang out with.

I declared myself a computer science major. At Amherst the CS degree was part of the Mathematics and Computer Science department. This meant that there were a bunch of math courses required - including two calculus classes. But I hated calculus! Fortunately, my freshman decision to take math because I just thought that's what you do at school meant that I'd already taken and passed Calc II (or Math 12 they called it). My high school AP calculus had been enough to pass out of Calc I (Math 11). So the two classes that could have made my CS degree a lot more painful were already out of the way. Hooray!

Two more math classes, several more computer science classes, an AI honors thesis, and a hodge-podge of liberal artsy classes that I still enjoyed, and I stumbled down the hill, sheep-skin degree in hand, looking for a job as a Professional Computer Scientist. But really what I wanted to do was computer programming, because it was neat. It took some searching and false starts and some spiraling in on my goal, but eventually here I am.... a Senior Software Engineer. What is that? Somebody programs, who writes software, for a living. I made it!