~jmoskie joseph moskie's professional blog

26Jan/110

Programming vs. Scripting

I've been having a conversation off and on with my friend Pete. It's centered around the JavaScript language, but it had long-reaching ramifications.

I'll start off by stating that I am of the opinion that there are two types of computer languages: Programming Languages, and Scripting Languages. When pressed by Pete to draw the line, I could not come up with a clear one. It's an arbitrary line, and I'd imagine people would define both categories differently.

But to me, it boils down to this: Some languages are designed to write complex programs in, and other programs are good at pushing text around. I'm not going to debate that you can write enterprise-level applications in PHP if you wanted to, Facebook seems to be doing fairly well with that (even though they compile a lot of it using HipHop). I've written a number of websites in PHP, and a number of scripts for work. It's a familiar language to me, and a quick go-to when I need to hack together a script.

PHP, like its half-cousin Perl, is really good at pushing around Strings. You could make the case that modern computer programming really comes down to pushing around Strings, but I don't subscribe to that bleak view.  Still, it has it's purpose, and for serving up blogs or writing substitute bash scripts it works very well. However, there are many things that, as a scripting language, it lacks.

Filed under: Coding, Work Continue reading
4Mar/102

Development Crutches; What Makes a Good Engineer?

In my time as a software engineer, I have worked with many people. Over the years, I have met very talented engineers, and done my best to learn from them. I have had four "mentors" throughout my career, in three positions, and they have all been intelligent, helpful individuals that have helped me ramp-up on projects, and enhance my understanding of interesting fields of study. I fondly remember working with Brian Moore and learning a good deal about how the JVM works, especially with regard to garbage collection. My mentor during my internship at Pitney Bowes was very helpful at focusing my fresh-from-college mind to real-world tasks. My coworkers at my current position are all very skilled in their respective areas of IP Telephony, and have been doing this since before I graduated high school. Throughout all of these jobs, all of these people, I have never felt awkward asking a question, and I have been rewarded with bits and pieces of their knowledge over time.

On the other side of this coin, I have also met a handful of people who are not very talented at all. I've met "Oracle specialists" who seem to not know the first thing about designing a relational database structure. I've seen Java UI designers who can barely write a line of Java code, beyond what their "GUI Builder" creates for them. And I've seen engineers claiming to be a "domain expert" in certain things get called out as incorrect by a skilled engineer and a Google search.

20Jan/101

Working With Your Brain: Mental Exhaustion

Growing up, I would often see my father come home really late, smelling of sweat and oil. Covered in the dirt of a day repairing boilers and furnaces, he would exhale a deep sigh of relief, and settle in for a shower and some time to relax and unwind. Many days he would get home, utterly exhausted. He broke his back every day to put food on the table, and it took its toll on him: He ended the day tired and physically drained. Such is the curse of blue-collar workers. The fact that he had any energy left to do side projects around the house is nothing short of amazing to me.

Thanks to said back-breaking, I was afforded the opportunity to go to a good school. I studied computer science, and came out with a nice white-collar job at a Fortune 500 company. My father sweat out every day so that I wouldn't have to. He worked with his body, so that I could work with my brain.

My job is fantastic: I love the culture, my coworkers and management, and I'm genuinely interested in the project. I get to work from home quite a bit, and my schedule is fairly flexible. I like coding a lot; I do a lot of it in my free time. It's great to do something that you actually enjoy doing.

However, I don't feel that I have escaped the curse. I still find myself in the same situation of my father: I come home utterly exhausted. Not physically, obviously, as the majority of my work consists of sitting in a chair and typing, but mentally. After a long day, especially one that has been very trying, my brain checks out. I just want to flop down on the couch, watch some television, and putz around online.

I'm mentally drained. I've been programming all day. Reading code all day. Looking at logs all day. Thinking all day. I end up simply not wanting to think anymore, and I can't think that this is all that different from the exhaustion my father felt after going through New York City basements making sure the heat was working.

There's an old adage, "Do what you love, and you'll never work a day in your life."

Do what you love, and you'll stop doing it recreationally.

It's hard to come off a long day of work, especially when trying to accommodate people in multiple time zones across the globe, and want to fire up your text editor to work on your own projects. I still love to code, and I still work on my own things, but it's usually restricted to weekends, or days where work was light. I can't come home, drop everything that was happening at work, and just start hacking at PHP for another website. It's the last thing I want to do.

And so I can see myself sitting on a couch with my father, both of us exhausted. Broken back, drained brain, just wanting to unwind until it's time to go to bed.

At least I don't smell like sweat and oil.

Filed under: Coding, General, Work 1 Comment
7Dec/092

On Application Bloat, Plug-Ins, and Intent

I've had this feeling on my mind for several years now, and this is the proper forum for me to let it out. In the same vein as Collaboration Overload, I feel that lots of applications are trying to hard, adding too many features, and overextending themselves. This post could have easily been called "Feature Overload."

A prime example of this is AOL Instant Messenger. Remember back before 2000, when it was just an IM client? You would download it, and it would show you people you had added to your buddy list, and allow you to talk to them. That's what an IM client is supposed to do. Then, one day, an update came out, and all of a sudden whenever AIM launched, it would pop up an "AIM Today" page, with useless "news" aimed at pre-teen girls. Then came a little ad space at the top of the client. At some point, they started putting Flash up there, and it would animate and play sounds. Then they started adding games into AIM. I bailed at about this point, and started using "hacked" versions of older versions of AIM, such as DeadAIM, that removed the majority of the annoying "features". Then AIM added voice chats, which were a novelty for a month before people realized how limited they really were at the time. Various other features, and it just snowballed out of control. Now AIM is a radioactive, bloated piece of crap that most people won't touch with a ten foot pole. The only people who still use this software are barely computer literate and resistant to change.

There was nothing wrong with AOL Instant Messenger. It did exactly what it was supposed to do very well. It became extremely popular, and was (still is?) the predominant IM client for American computer users, even if we don't use their client anymore.  As more and more features got in, it went out of control, and completely ruined the software.

Why couldn't they be happy doing one thing extremely well? Why did they feel the need to add completely unrelated things such as games into the program? Any game they can come up with would pale in comparison to something created solely, from the ground up, to be a game. And for simple games, there's no real difference, other than the fact that you can now right click a buddy to challenge them to play, as opposed to sending them a link to an external website.

Filed under: Coding, Work Continue reading
26Nov/090

PlayYourTurn.com Launched

I play a lot of games. I'm a gamer.

I've played all sorts of games over the years, and gone through "phases" or "spurts" where I would play one type of game for a while. I really liked Real-Time Strategy games in high school (Starcraft, Command and Conquer, Age of Empires). I got into First-Person Shooters in college (Counter-Strike, Unreal Tournament). On my iPhone, I prefer puzzle games like Geared or Blocked. And let's not forget the three years of my life I essentially lost to World of Warcraft. Thankfully, I had a full time job and a girlfriend who played, and that kept me in check.

Throughout all of this, there was one game that was a constant: One game I always played, no matter what the flavor of the month was. Since I was twelve years old, I have played Sid Meier's Civilization.

I remember the first time I played Civilization I, I was figuring out how to play when a pixelated Shaka of the Zulu decided he was going to declare war on me, and proceeded to run through my empire. I played this for a while, and eventually got Civilization II. I have probably logged more hours of this than sleep for a large portion of my childhood. In 9th grade, I met some friends who also played, and multiplayer made it even better. Throughout high school I played Civilization II, and near the end Civilization III came out. This lasted through college, and I participated on a bunch of Civ forums, making mods, playing multiplayer games, and even chatting with the developers and hounding them for jobs when I graduated. When Civilization IV came out, I instantly jumped right in, and I'm playing a game to this day.

This is a lot of talk about games for a "professional" blog. I know this, and there's a reason.

Filed under: Coding, Games Continue reading