Tag Archive: programming

Pre-determined stances

Ehhhh, well this week has had its share of rough patches. I’ve been having a tough time with work lately. I’m on a project with an imminent deadline that seemed impossible to meet. I stayed late on Thursday to try to catch up only to get blocked for unknown reasons. Apparently, I had been given an example to work from that was faulty in the first place. Wonderful! On Friday I was rather frustrated at myself during CrossFit. I was having a fair bit of trouble keeping good form on a certain move and as a result coach prevented me from going further that day. I knew I could do better. I was just not performing. So yeah, perhaps my last Facebook posts have been a bit gloomy.

I suppose I could focus on all of the negatives but there have been plenty of good things as well. I’ve managed to be rather social this week. Right after Friday’s workout I went home, changed, then headed downtown to hang out with friends for someone’s birthday. Today I started another improv class which acts as an assessment of sorts to see where we might fit in in terms of future performance opportunities. I have good vibes about this class. Right after I went home then drove up to Markham for a get together with some running friends. I swear, I’m everywhere.

Anyway, I guess the purpose of me writing all of this is just to have a self-reminder that the quality of our weeks depends on what pre-determined stance we take when we view things. Know what I mean? I suppose this means that I need to encourage positivity. I suppose that’s a possibility, no?

Two week’s notice

So, OK, now that it’s official I can actually start talking about this. Although, I haven’t really been letting colleagues (at my level) in on this small secret, so it’s not like everyone knows. Oh, but it’ll be out in the open soon enough. As of today I have given my two week’s notice to the company. I will be leaving this company on the 18th. If I think about it I’ve been with them for almost 4.5 years, which is rather large in the tech world in my opinion. I’ve given them a lot of my blood, sweat, and tears. After all this time, I feel like the time is right to move on.

I’m not going to brain dump the events of the past week or two in one post; I think I’ll spread it out. Was I actively looking for a job? Oh man, not at all. I wasn’t even at that hurdle yet. I was too caught up in just trying to get my résumé into good shape. I started working on the document maybe about a year and a half ago. The situation was a bit rocky and nothing was a sure deal. I was told that it’s better to have the doc ready just to be able to leave at a moment’s notice. It took me this long to get it into a usable state. What was stopping me? I think the lack of pressure and the fact that I had a tolerable job kept me in a state of apathy. And now, why the sudden push to get it done? Well…let’s just say I needed to create change.

All this time I was getting occasional hits from LinkedIn from various recruiters thinking that I might be able to fit in a role they were trying to fill. Each time I got one I didn’t feel like I was a good fit, so I always declined. Once I got my document done, I started to wonder whether it was time to put my name out there. I was set to update my accounts on Monster and Workopolis. All of a sudden, I found a voicemail on my work phone. It was from a recruiter who mentioned that he was looking to fill in a job that made use of Perl. That set off alarms in my head. He said it was for a really large company with worldwide reach. More alarms went off in my head. I was definitely intrigued. So I decided to return his call. All of that set off a long chain of events that culminated in my getting the position in question. It was fast enough to make my head spin, honestly.

So yeah, I write more about the specifics in the days to come. It’s kind of fascinating how everything fell into place without much effort on my part. It’s like the universe was particularly sympathetic to my wants at the time and allowed it all to happen. Anyway, the countdown is on. New ending. New beginning.

Language to language

Honestly, when I was first searching for a proper post-grad job back in 2006, I was making a slight effort to get out of my comfort zone and find a job using a language that I had only used in class but not really in the workplace. Java seemed to be the language that would give me the most opportunities, so that’s where I cast my net. In the end, that didn’t pan out. This job found me due to my Perl skills listed on my resume. The language that I had used for years but decidedly set aside has kept be going for almost 4 years now. If I think about it, that’s rather fortunate, isn’t it? It allowed me to get my feet wet in the real world, though, honestly my feet were already figuratively soaked at that point, but that’s besides the point.

Perl, Perl, Perl.

I had to be the jack of all trades. I was an application developer, interface developer, consultant, quality assurance checker, business liaison, all wrapped in one. Those were crazy times. Well, as you know, times change. I’ve mentioned this before, but yeah, my job was phased out. That’s never a great feeling, eh? In the end though, the company decided to hold onto me. And now here I am trying to get up to speed in Java. I was actually a little concerned about having to make this change since it’s been many years since I last touched the language. I think it must have been my artificial intelligence class in 2005. Seriously. Over the past week I’ve been feeling better and better. If there’s anything I should be more concerned about, it’s learning the project I’m on. Besides the fact that the technology behind the project is in a different language altogether, it’s actually the evolved version of the project I was on before. The concepts are familiar but different. It’s blowing my mind. Also, my job focus has narrowed significantly. I said that the previous project had me wearing different hats, right? This new position has one hat, and one hat only. That aspect kind of makes me sad, but I guess it’s necessary due to the amount of focus needed.

Anyway, I suppose I’m writing about this because it amazes me how I’m managing this transition. I expected it to be rocky, and it is, but…I expected worse–not only from the job, but from myself. Am I selling myself short? Yeah, I am. However, in this case I was taking one of those “hope for the best, prepare for the worst” stances. Going from language to language is a scary prospect. I kind of feel like I was thrown into the deep end. I guess I knew how to swim all along=–I just forgot that I had the skill.

I’ve still got it!

So, I’ve mentioned that I’m in a transitional period at work, right? It’s been messing with my mind a little bit because the responsible part of me wants to carry on, business as usual. The pragmatic part of me has been actively trying to get the new team to take care of all day-to-day things. Makes sense, right? Well, this push and pull has been at the forefront of my mind for what’s felt like an eternity. Every person that I’ve talked to about my situation has told me that I have to listen more to the pragmatic voice. After all, the new team needs to get used to the workloads that we used to handle. Now, it seems like I’ve gotten good at pawning off tasks to them. Like I mentioned in my last post, the client has pretty much kept me out of the loop. That’s a good thing. The only thing is, there’s a side effect to all of this. See, the resulting detachment has left me feeling like my skills are rusting. I’m not as confident as I used to be that I have a good grasp on the project as a whole. It’s probably all just in my head, but I can be forgiven for feeling like I have no idea what’s going on anymore.

These days, when I’m asked to investigate something, I do a cursory check for the obvious suspects, and once I have an overview I send it back with an explanation, and a statement of what needs to be changed or investigated. If the task needs more in-depth investigation, I leave it for the new team. On Friday night, on my way out, I got a request to investigate a problem that a customer was having with his personal account. I passed it to a colleague if only because I was already out the door when I received the request. I thought that would be the last I would hear of it. The following Tuesday, I was asked to have another look at the problem. It seems that no one could find anything wrong with the code and left it to user error. The only thing was, the problem could be reproduced by a customer service person using that user’s account. It was quite odd. I thought that perhaps the customer service person screwed up, but when someone I trusted was able to recreate the problem I was stumped. I pulled up the entry in the database and stared at it for a few minutes. That’s when it suddenly came to me. There was a field in the record that should have been filled in with something, which it wasn’t. Well, God, I was downright pleased with myself. I filled it in as expected and everything started working. It was amazing! At the time, I wasn’t concerning myself with the cause of why the record wasn’t correct, but I was at least comfortable that the one user could finally sign in. Honestly, it tells me that after all this time I still have the skills for this team. I’ve been around the code long enough that I can spot this kind of thing. Though, knowing all that it also kind of makes me sad that it’s all coming to an end fairly quickly, right?

*aigh*

Linear progress and the jaywalking bear

It kind of bothers me how some people believe that the progress I make on my programming projects is linear. When I hear something to the effect that since I’ve spent X amount of hours working on a project I should be Y percent done, it makes me cringe. That’s really not how it works.

Toward the beginning, I tend to move slowly as I spend time thinking about implementation, and how things fit into the big picture of the system. From there, there are days when everything flows easily from my mind to my fingers. There are other days when I want to bang my head against a wall to try to remove any mental blocks. At some point, if I get lucky, I often reach a point where a get a good amount of momentum and I can compare progress to a boulder rolling down a hill and gaining speed. Today I was lucky enough to have one of those moments. Things were finally falling into place and I actually had some confidence that the project would work out. I was actually smiling at my desk when I witnessed my code working out nicely. Smiling? Unheard of! I made enough progress that I decided to take off a little early.

Walking through Chinatown, I stopped at an intersection, waiting for the light to turn. At that one in particular, there’s an advanced green signal allowing cars to turn left before regular traffic goes through. That advanced light came on and I turned to see if any traffic was coming. Out of the corner of my eye I saw someone running across the street trying to beat the turning traffic. I kind of rolled my eyes because running in front of traffic is never a good idea. In a split second, behind the guy was someone in this ridiculous bear costume. The bear decided to follow the guy and ran across the street trying to beat the turning traffic. Unfortunately for the bear, she tripped on a streetcar track and fell flat on her ass. The turning traffic screeched to a halt, because she was blocking the way. She just sat there moving slowly, perhaps embarrassed but probably also in a little pain. She finally picked herself up and completed the way across. I just laughed at the sheer ridiculousness of it all. See, I never would have seen any of that if I hadn’t made great progress at work. If my progress was linear, I wouldn’t have had this productive burst, and I probably wouldn’t have left early.

[ See. I managed to tie it all together after all. I probably didn't do a terribly fantastic job, but it works. ]

Pulling a tube sock inside-out

A colleague and I were on the train talking about various things when the topic of job interviews came up. He’s done a few interviews in order to find new employees and he was lamenting about how the questions frequently asked during these interviews didn’t really give enough insight into how the mind of the potential candidate worked. Fair enough I guess. It’s good to toss a question that might not necessarily have a direct answer but may require some semblance of a thought process to solve, know what I mean?

Well, as an example he posed a programming question out loud: “how would you go about reversing a simple linked list?” At first, I was kind of repulsed by it because, hey, I left work to not think about such things, right? However, the longer the words sat in my mind, the more I could figuratively feel the gears starting to turn in my head. I had to hearken back to some of my old programming courses in university.

Oh man…

So, OK. Let’s assume that it’s a linked list where each node just has a pointer to the next node. He mentioned that some people might solve the problem with a loop. I thought about using a loop, but something about that method seemed pretty nasty. I didn’t understand why I felt that way about the solution. He also said that some people could solve it with one pointer of sorts. Yeah…wasn’t sure how that would be done as well. Well, I stashed the problem away in the back of my mind thinking that I wouldn’t come back to it. Interestingly enough, it did come back to me as I was driving home and I thought of a solution that was sort of cool. I put it all away in the back of my mind again, but then it came back to the forefront when I was sitting on the can. I wasn’t sure why the solutions were good or bad up until I actually then.

So. Here lies a big big big disclaimer for the following stuff. I don’t know if my solution is sound. I certainly don’t think it’s the best solution. I don’t know if what I’m going to be blabbering on about makes sense: I could be tossing terms around without knowing exactly what they mean. Nonetheless…this sort of makes a little bit of sense in my mind, at least. And if it’s completely wrong, well…so be it.

So, say you’re using some sort of ugly loop to grab the pointers off the end each time. If you traverse the list each time you’re going to come up with the solution in O(n2) time, aren’t you? That’s because you’re doing some triangular number of node accesses [ {n(n+1)}/2 ]. OK. So…I was thinking why not traverse it right to the end with a recursive function? Each time the function is called, it calls itself again if it finds a next pointer value. When the function finally gets a node, it just tacks on its own next value and returns that. When everything returns, you’ll have that reverse list you wanted. Since you’re only going through the list once, you’re getting it in linear time O(n), right? Caveat: the list can’t have some sort of weird circular reference thing going or else this would fail.

I was actually able to think of a good visual analogy for all of this techno-nonsense. That recursive solution is sort of like putting your hand in a long tube sock, pinching the end, then pulling it inside out. The loop solution is like…doing suicide runs in gym class–you’re covering the same terrain over and over again.

OK. I’ve got to let the question go. I don’t plan on losing any sleep over it. Thanks.

Going into OT

OK, so the code release was only supposed to go until 6pm or so according the schedule. That’s how it was on paper. In the end, we finished at around 9. 8-O To be honest, that’s not so bad. Of course, the fact that were fed Swiss Chalet is probably clouding my judgement.

Can we really be so easily soothed or bribed with food? Well…when we’re stuck at our desks staring at our monitors for around 12 hours…yes, yes we can.

When resources fail…

At work, there are so many processes in place that make my job as a developer kind of simpler. We’ve got scripts that automate things. There are reports that alert us when things go wrong. And, when push comes to shove we have our project manager and team lead to point us in the right direction. I wouldn’t say that these resources make us lazy, but it allows us to place our focus on other things, which is great when time is a commodity, you know?

Today though, I’ve been forced to realize that once in a while these resources just won’t be available and that we will have to do the tasks on our own every now and then. It’s almost easy to forget that fact. Today we were supposed to initiate one of our code releases. I came in early and expected things to go smoothly. When I checked my email, I found out that my project manager had to call in sick today. He has the same cold that I’ve been afflicted with, but it looks like he was hit harder. To be honest, we’re both it rotten condition. Anyway, we would have been alright without him, but there was an important meeting with the client. Without him, it meant the team lead would have to spend most of the day in the meeting in his place. So, I was sort of on my own. I can handle the code release procedures. Being alone isn’t that bad, but it’s also a good thing to at least have people with you just in case something blows up. Luckily I was joined by a few of my colleagues within an hour. As I started to run the automated scripts, I noticed that they were failing–the connections were dropping more than expected. After a few failed attempts it was decided that we’d have to do the tasks by hand. Whoo. I haven’t had to do that in a long time. Doing it by hand tacked on another hour to our schedule. It was frustrating, but we managed.

After the first phase was done, my colleagues and I were watching our emails intently hoping that nothing was broken. Without the team lead and the project manager I was a little on edge. “What if,” you know? And, with the client in the building, we didn’t want anything horrible to happen. I think that we handled it all very well, all things considered. I’m hoping that tomorrow will be a little bit more normal. The release process continues into tomorrow. If all goes well, I’m hoping we’ll be out of there early.

Older posts «

Switch to our mobile site