Entries
RSS 2.0

Comments
RSS 2.0

Joining the Telligenti

When I first graduated from college, the job market was pretty bad, and most companies were cutting back rather than hiring new employees. A few months before I graduated, I sent out over 100 copies of my resume to various IT and software shops around the area. I got only one call back, and it was from CTI, where I’ve now worked for most of my career. They took a chance on me when I was greener than grass, and challenged me with some very interesting and difficult projects. I’ve learned a tremendous amount about software development and business in my time here, and while there have been ups and downs, the experience I’ve gained has been invaluable. However, a couple of months ago I decided that it was time for the company and I to part ways.

In May of this year, I met Dan Hounshell, Joe Fiorini, and Leon Gersing at the Cleveland Day of .NET, and Dan asked if I would be interested in applying for a position at Telligent. I’ve had a lot of respect for the company and followed the blogs and Twitter streams of several employees, and when he mentioned that they would consider people for telecommuting positions, my curiosity was piqued. At the time I hadn’t made up my mind to leave my current job, but once I did I pinged Dan to see if they might have an opening for a ninja-obsessed codephile such as myself. :)

After going through their interview process (which was very impressive), I’m happy to announce that I’ve accepted a position on Telligent’s Product Development Team as a Senior Software Development Engineer, starting at the beginning of September. The company is based in Dallas, Texas, but I’ll be working remotely from my home in Ohio — which should prove to be an interesting experience in and of itself. (Oddly enough, several of the people in Product Development that work remotely are in Ohio, although as far as I know, only Joe Fiorini is in the greater Cleveland area like myself.)

I’m very excited to be joining the team, and working on some very cool products with some of the industry’s best and brightest minds!

Cardboard Computers, or How I Started Programming

Mike Eaton recently started a new meme within my Twitter tribe: discussing how we found our way to the joy and light that is software development. :) My story might not be particularly interesting, but I figured I’d share it nonetheless.

Early On

I’ve been interested in science fiction as far back as I can remember, and so my fascination with computers developed at a very early age. Rather than play with my toys when I was young, I’d often take large pieces of cardboard cut from the sides of boxes and draw keyboards and screens on them with Sharpies. I’d sit in front of them for hours and pretend I was flying a space shuttle or doing whatever the hell else a young kid thinks computers can do.

When I was 6 years old, My grandpa bought me and my sister our first PC, a Tandy 1000 SX, with a CGA display, a roaring 7.16MHz 8088 processor and 384K of RAM. (And hard drive? We don’t need no stinking hard drive.) Rather than buy all sorts of games for the computer, my mom bought BASIC Computer Games, a book containing the BASIC source code to a bunch of different games. She would enter the source into GW-BASIC, and I would play the games. At first I just played the games, but eventually, I recognized that I could change the way the games worked by changing the way I entered the source code from the book. I started by making simple changes to the games (if I remember correctly I changed one so my name would be at the top of the high score list), and little by little the changes got more complex. Eventually I’d taught myself GW-BASIC.

When I was about 10, I wrote a half-assed word processor application. I learned the special command codes for bold, italic, and underline for dot-matrix printer, and made a cheap markup language — something like B(bold) would be printed as bold text. I was a strange kid. :) For some reason, I was amazed at how I could make the machine do what I wanted it to do. Once I was in middle school, I was introduced to the Apple IIc, and armed with my knowledge of GW-BASIC, I learned AppleBasic, and wrote some simple little games.

The Internet

Eventually, I graduated to a Packard Bell computer, which had a VGA output, a 386mHz processor, and a hard drive. This plunged me into the wonderful world of Windows 3.1. Around this time a phenomenon called “the Internet” was also starting to become popular, although the majority of the computing world was still oriented towards BBSes, and the Web was very much in its infancy. After trying and failing to convince my parents to sign up for CompuServe or AOL, I discovered the Akron Regional FreeNet (which is actually still around under the name ACORN), a dial-in BBS service through the local library. ARFNet also provided access to Gopher, and text-based access to the WWW via Lynx. It also had a service for IRC, which I used to meet other young geeks from the area with similar interests in programming. As it turned out, a couple of the people I met were volunteer administrators for ARFNet. They recommended me to the sysop, and I joined as an admin myself, which meant I could break out of the BBS system and get shell access to the two Solaris boxes that the system ran on. The other admins helped me learn UNIX and got me started learning C. I remember understanding C’s type system and functions, but never did anything very substantial with it because I couldn’t wrap my head around pointers and memory management. (That light bulb came on a few years later.)

Eventually, one of the other ARFNet admins set up a MUSH, which was basically Second Life before there was Second Life. :) It was a text-based virtual world that you could “walk” through and interact with objects in the environment. The objects were programmed in MUSHCode, which was kind of like LISP. I spent way too much time learning it in order to create a giant mansion and spaceships that could fly to different parts of the “world”. We ended up creating a virtual economy, along with shops and vending machines that you could use your “money” in.

In 1999, ARFNet introduced PPP, which meant that I had dial-in access to the Internet-at-large. Amazed at how much more advanced the Web was than any of the text-based stuff I’d seen before, I set out to teach myself HTML. I also got involved with IRC on a larger scale than just a few people, and I met some people who I’m still friends with even today.

College

Sometime around the turn of the millennium, I got my first job as a website developer at Signature Words & Pictures, one of the millions of design firms that decided to branch out from print design to interactivity during the first tech bubble. I was mostly a graphic artist there, but I also discovered PHP, which let me add some intelligence behind the layouts that I was creating. At work, I only had occasion to use PHP for little things like email response forms, but on my own time, I set out to learn everything I could about the language. I’ve always been interested in framework development, and I remember creating a templating system that let you embed tags in HTML, and when it was preprocessed, it would execute bits of PHP code — basically, a half-assed version of ColdFusion, although at the time I’d never heard of it.

At the same time, I started college at the University of Akron’s computer science program, where I was exposed more formally to concepts like combinatorics, data structures, computer architecture, assembly language, and later, object-oriented programming. My prior knowledge of most of the topics let me spend a lot of my time learning things outside the classroom, including C++, Perl, Java, and a little bit of C#. It wasn’t until probably my second year of college that I really understood what was going on in the computer.

The “Real World”

My first real programming job came in 2004, at the company that I’m still working at now. 2004 was not a good time for software developers, at least in the Northeast Ohio area — there were a lot of graduates, but not a lot of jobs available. I sent out about 100 copies of my resume to every company that I thought might be interested in having a software guy on staff, and got one response. As it turns out, one of my friends from college had recently been hired there, and he recommended me.

The company is traditionally a Linux development shop, and so I started out writing a lot of PHP and C++. A few months after I started, the company needed someone to learn C# to work on a new project, and I stepped up. I was immediately attracted to the simplicity of the language, and its familiar roots in C and Java. As I tend to do when exposed to a new technology, I devoured every scrap of information I could find on the .NET platform. A few years later, I’m hopelessly addicted.

Looking Back

The most fun I’ve had programming was seeing the original version of our RFID-tracking software in use at a live NASCAR event in 2005. At the time, I didn’t have a lot of experience watching users work with software I wrote, and I felt a tremendous amount of pride knowing that I’d been involved in creating something that was useful to others.

Knowing what I know now, I absolutely would still have become a software developer. It might sound odd, but I feel like I was born to do this stuff. It’s almost like my brain is hard-wired to understand computers. Neither of my parents are really that interested in technology, but somehow it got into my blood at an early age and it’s become a part of me. Sometimes are less fun than others, but this is definitely what I’m built to do.

To give advice to other would-be or novice programmers, I’ll steal a phrase often attributed to Confucius:

To know, is to know that you know nothing.

When I graduated from college, I was sure that I knew everything about how software was written. Every lesson I’ve learned since has taught me how little I (or anyone, for that matter) knows about what we do. Be confident in your abilities, but recognize that it is only through humility and great effort that you will find wisdom.

So what, you’re my Master now?

My wife Nicole is graduating today with a Master’s degree in Industrial / Organizational Psychology from the University of Akron. It’s a great accomplishment, but she’s not that excited… she’s on the MA/PhD track, meaning that although she’s graduating, she’s immediately going back for another 3 years to complete her PhD. In spite of it just being “another milestone” in her educational career, it’s a very significant one, and I’m very proud of her.

Meet the New Boss, Same as the Old Boss

I’ve decided to leave my current job at Merge Healthcare and take a position at Commercial Timesharing, where I was previously employed. A lot of things factored into my decision, but I’ve enjoyed my (brief) time here at Merge, and I have a great deal of respect for the developers and managers that I’ve worked with in my six months here. I wish them nothing but the best. I’m excited to return to CTI and work to build their .NET / business intelligence practice.

The Virtues of Experience

Wow.

There are moments in life when you think you know everything. These moments are inevitably followed by moments where you realize how little you actually know. Before it became a cheap buzzword, this was called a “paradigm shift”.

I haven’t written a post in over two months. I’ve been more obsessed than usual in the past few weeks with work, both on a professional and a personal level. In my new position, I’ve been tasked with the construction of a framework library using .NET 2.0 that supports the development of new applications, as well as seamlessly integrating them with the existing legacy code. It’s our hope that the framework will be used in all new development efforts throughout the engineering division, so as a result, I’m also doing my best to evangelize the framework and the ideas contained therein.

In order to better understand what’s required, I’ve been “deconstructing” the source from any framework-type project that I can get my hands on, including Spring.NET, CSLA.NET, the Castle Project, the Enterprise Library, and ObjectBuilder. As a result, I’m doing my best to absorb a very large amount of information. I’ve been exposed to a lot of new ideas in terms of software development, and I’ve undergone a major paradigm shift. Inversion of control, dependency injection, aspect-oriented programming, configuration-driven development, test-driven development, domain-driven design, loose coupling via interfaces, the list goes on and on.

I think every developer goes through a series of paradigm shifts as they gain experience. In high school, I was satisfied when I used a pointer in C and my program didn’t crash. (Although, as I recall, I didn’t quite understand the difference between the &, *, and ** operators.) In college, I was satisfied when my program would compile and fulfill the predetermined requirements in the assignment. In my first job, I was satisfied when my program made the client happy and it was deployed and used in the field without too many support calls.

It’s funny, because at each juncture I was certain that I understood how software was written. I’ve always been aware that I was learning new things (and I’ve always been obsessive about finding new things to learn). But it’s only now that I’m coming to understand that it’s not only new technologies that we as developers need to learn. We also have to keep abreast of new ideas and methodologies, and challenge the way that we write software to become better at what we do. We can’t fall into the common trap of saying “it’s always been done this way, so that must be the way it’s done.” To the contrary, we have to constantly ask, “why is it done this way?” and “how could I improve the way we do things?”

I have a great opportunity at my new job to play the role of “architect” and help bring these new ideas to the other developers at the company. I hope to also write about them here, including our successes and failures in using them. (First I need to stop being so obsessed about work!)

Dim Sum!

For lunch today, Niki and I went with a couple of her friends from school to Tom’s Seafood Restaurant on the east side of Cleveland. It was my first real experience with dim sum, which are Chinese dumplings served either steamed or fried. It was all-you-can-eat, served buffet style — but instead of going up to a traditional American buffet (you know, with mysteriously wet plates and a sneeze guard), a group of servers wheeled carts filled with food to the tables.

I was really impressed with how different everything tasted. There were some things that were a little bit off the beaten path (even for me, and I really enjoy sashimi. For example, things like “chicken feet braised”, which, despite our best efforts, we couldn’t figure out how to eat. There were dumplings made with all kinds of meats, beans, and soy. They even had dim sum desserts, which were sort of like donut holes filled with custard. My favorite was probably the har gao, which are shrimp dumplings wrapped in rice flour.

The hardest part was trying to explain to the servers what type of food we wanted, because they didn’t speak too much English. (Although, I’m sure their English was better than my Chinese.) Niki’s friend Yoshie is Japanese, so they tried to speak Chinese to her but with no more success than any of the rest of us. :)

In the end, we all ate way too much. If you have the opportunity to try dim sum, expand your horizons!