Tuesday, July 30, 2013

One project down, another to begin

In my experience, software programs are never finished.  You can always add a new feature, optimize some back end code, or integrate it into another workflow.  The reason why we stop working on a program is either boredom, someone deems it good enough, or the bosses want you to work on something else that they is more important.

Nevertheless, almost all projects come to some end.  Today, one of my projects came to an end.  Well, it's more like we've reached a milestone that we targeted a few months ago.  After a lot of hard work and a few late nights, we actually finished just about everything we set out to do, hooray!

In the coming days, we'll be planning the next things we'd like to work on.  I have some opinions on what would be the best features to work on, but it will be something that a few people will discuss and come to some consensus about.  In the end, the features we decide to work on will not affect my day to day life.

As a new project is being planned, the most important bit is estimating how long the project will take.  If I underestimate how much time I will need, it will put pressure on me to finish code faster and may lead to buggier code.  So this time around, I will do my best to give myself ample time.  I will do my best to not work overtime (aka, I will not work for free).

Sunday, July 28, 2013

Google app engine python search tutorial

After completing an introductory tutorial for Google App Engine using python,  I was able to create the first version of an app engine project, englishtokoreanforum.appspot.com.  I modified and extended the tutorial a bit to set up a few other handlers and data types.

I then went on to the next Google App Engine tutorial, which would teach me how to set up searching over an index that I set up for this app.  Unfortunately, when I first tried it, the application in the tutorial would run, because of this issue.  (It has since been fixed after I upgraded to the next version of the GoogleAppEngineLauncher).  

Along with setting up the search index and functionality, this tutorial is nice because it isn't as trivial as the first tutorial.  It shows how someone might want to organize all the files that might go into a real project.  The different files types in this tutorial are *.html, *.py, *.yaml, *js, *css. It shows how to separate data files, test files and the main application.  This is invaluable for a beginner, and something that isn't often emphasized.

Saturday, July 27, 2013

How many programmer days will it take?

At work, I have become the lead developer on bigger and more important projects.

I began designing the goals of projects, rejecting and championing ideas, and building and supporting much larger code bases.  I've enjoyed all of it, except for having to estimate how long it will take to build something.  I think the worst part occurs when you make an honest estimate before the project starts, and then you find that you are running out of time near the due date.  If at all possible, I try to make up the time after work or on weekends.  If it looks like I still can't make the deadline, I report it back to my manager, where it feels like I have to admit one of two things:

1. I am a poor, unskilled, lazy developer who does not fulfill promises.
2. My past self was an ambitious, cocky, know-it-all who made outlandish over promises.

As one of these projects come to a close (miraculously near the proposed deadline), I worry again about the next project.  Should I just game the estimate with tons of buffer time?  That doesn't seem honest.

Monday, July 15, 2013

Google App Engine - Python

I already spent some time building a Google App engine product in Java. Java was a natural choice because because I was already working with Java (and Google) as I was building an Android App.  While I was/am making some progress it has been slower than I had hoped.  So, for my next Google App Engine App, I am going to give Python a try.

Again, similar to Java, I'm not very familiar with python, so this will be another learning experience.  I started by following this tutorial, https://developers.google.com/appengine/docs/python/gettingstartedpython27/introduction, after which I was able to do many fundamental web actions (displaying a site, reading/writing to a datastore and responding to events).

My initial feeling is that it is great to develop without eclipse.  I believe that eclipse can be a great and powerful tool, but I have not mastered it yet.  Learning a new programming language and a new framework and a new IDE has been slow for me.

Just using a terminal to start a development server, mvim to code, and a browser to view is refreshingly simple.  Eclipse worked like magic, but for a beginner like me, it felt like black magic where I didn't what was going on.  One feature that I know I will miss when coding with mvim is code completion.

So, without further ado, here's the app I created.
http://englishtokoreanforum.appspot.com/
As of right now, it is the final product of the tutorial.  In the future, I envision to make a forum where users can view and enter english to korean translations.

As a final note, I mistakenly chose this appspot domain name.  I was playing around with different titles, and hit enter by accident.  Anyway, I'll live with it for now.

Monday, July 1, 2013

Recruiters

I had a bad experience with a recruiter, aka head-hunter, a few days ago.  Here's what happened.

About a week ago, the recruiter, let's call him Mr. X, emailed me saying that someone I knew recommended me to him.  Wow.  A personal recommendation.  That's great, but I didn't reply.

A few days later, Mr. X emailed both my work and personal email accounts saying that he has a position that seems like a good fit for me based on one of my past colleagues recommendation.

OK, because of the personal recommendation, I thought it might be worthwhile to investigate what this recruiter has.  I sent Mr. X an email saying that I would like to chat about this position he thought I might be a good fit for.  I sent him my phone number and a time range that I would be available.

Mr. X didn't confirm that he would call, but a call arrived.  The problem was, the person calling wasn't Mr. X. It was Mr. X's colleague Mr. Y.  I didn't really have any loyalty to Mr. X, but passing my file along before we ever spoke doesn't exactly make me feel special.

After informing me he wasn't Mr. X, Mr. Y wanted information from me, but didn't want to give me any.  He began the conversation by saying,
"Can you tell me about your programming experience?"

I didn't want to be difficult, but I couldn't help it.  I said something like:
"You emailed me saying that, based on a personal recommendation, you had a great position for me.  Please tell me why you think I'm a good fit for the position."  

Well, Mr. Y began speaking again, and before I knew it, he was asking me again about my programming experience.  He's a professional recruiter, and I am not a professional job seeker.  He was getting me to tell him whether I knew about smart pointers, what I worked on, what I wanted in a job and so forth, but I couldn't get a clear answer on what the job was that I was supposedly a great fit for.

The only thing I really wanted at this point was for him to tell me what the job was.  After a bit, I finally said,
"Can you just email me the job title and description?"
He replied that this was a special position and that he and the hiring manager had a good relationship, and blah blah blah.  Mr. Y basically told me that this job didn't really have a written description.  I still couldn't figure out what the job was.  How the heck did Mr X or Mr Y figure that I was a good fit for this mysterious job?   He must have gotten me really confused, because before I knew it, he was asking me for a resume and I said I would work on it.

The call ended.  Mr Y. emailed me, asked for my resume, and I guess he slipped, but he gave me the job title.  I looked up the recruiting firm and saw that this was a listed job with an actual job description.  In the end, the job wasn't for me at all, and I emailed Mr. Y saying that it wasn't a good fit.

Over the course of the emails and calls, the only thing that the recruiter said about the job was that it was 'prestigious'.  I'm not sure if recruiters will ever really understand what a developer is looking for.  I sometimes want to recommend that they read Joel's test, but I think a recruiter will use that for evil instead of actually helping developers find good roles.