Dec 10 2009

Programmer’s career path and how to get where you want to go

krystiano

IMG_7803bs

When it comes to career choices, many IT professionals chose to just go with the flow due to so many options out there. We need to choose a programing language, operating system, industry, etc to specialize in. No wonder some just get discouraged while trying to make their next career move. After all it’s our future we’re talking about and we can’t go back in time if we make the wrong choice. Wouldn’t it be nice if someone could just show you how to be in control of your IT career by teaching you where to invest your time to become the most valuable professional in any company? …now there’s a book for that.

I’ve recently read “The Passionate Programmer” by Chad Fowler (@chadfowler). What a great book. So many valuable tips and so entertaining to read. It’s a comforting feeling when you can related to what you’re reading. In his book, Chad writes about how to stay passionate and what actions to take to have a successful career as Software Developer. Following, are some points that I’ve either already put into practice or found interesting. I hope this will be enough to persuade you to read his book:

  • Dig deeper. Don’t just use your tools, understand them. If you use ssh everyday to accomplish one specific task, take few minutes to read the ssh man page. See what else ssh has to offer. How about regex? Do you understand how to use it, or you just keep trying until you get what you want out of it? Same goes for your favorite IDE. You will be way more productive if you know your tools.
  • Practice, practice, practice. Programming is a creative process. Any creative profession requires long hours of practice. I like photography, so I’ll use that as an example. I often take my camera out just to take some practice shots. I almost never leave home without a camera, but I don’t post photos from every photo I take because a lot of them suck really bad. Which to the viewer could mean that I suck as a photographer (I hope it’s not the case). Musicians, athletes, designers, painters, writers, they all spend time practicing. So why would that be different for a programmer? If the only time you write code is at work, then you are practicing on the job. A great way to practice your programming skills is to work on some personal projects. If you have hard time coming up with an idea for a side project, you can instead do some coding exercises which can be found on sites like CodeKata.
  • Finish things. Before you move on to your next task, finish what you’ve started. I personally hate not being able to say “I did it. It’s done.”, after I’ve invested my time into something. Saying “Done” or writing a check mark next to an item on your todo list feels good, doesn’t it?
  • Deadlines are your friend. Without having a time window for your task, you will probably spend way more time on it then you should. Sense of urgency can make you more productive.
  • Make a hit list. If you acknowledge that you’re procrastinating, then write a hit list. Enumerate tasks, then pick one per day and do it. Make sure the tasks are small enough so you actually have time to do them. After that, that’s it, you got no excuses.
  • Be positive. This one made my life so much easier and much more enjoyable, so many times. Stay positive, keep your mind on the present time. That way you will enjoy small victories instead of always focusing on the big goal.
  • Stay away from whiners. Also called chronic complainers, and they can stealthy bring you down before you even realize what hit you. Try to stay away from work conversations about promotions, office politics or gossips. Here’s a tips on how to handle chronic complainers.
  • Make boring exciting again. From time to time we all have some boring tasks on our plates, so we might as well accept it. Whenever you’re working on a dull task, try to go the extra mile and do a bit more then the minimum required, this should make it at least a lit more interesting as it will make you think.
  • Don’t be a yes-man. “Yes” is a positive word, but the ramifications of what you could be committing to by saying it, could potentially be negative. Don’t be afraid to say “No” when your gut tells you so. That way you will avoid unnecessary disappointments.
  • Stay cool. Usually, when the feeling of being overwhelmed kicks in when we start to panic. Try to stay calm when fixing a last minute bug. Also remember that everyone makes mistakes, and we all forget. Even if it currently feels like it, chances are that the mistake you just made will never have any impact on your career.
  • Own it. Try to be independent and have ownership in your current projects. It will automatically make you more passionate about your work. Propose solutions to your leader or manager. Talk to them about the ideas you have, the additional functionality or performance improvements.
  • You are what you explain. I can relate to this one big time. English is my third language. There was a time when my vocabulary was rather limited and I had hard time selling the great ideas I had, during conversations with the director of IT department. I found that if I took the time to write a clear and concise email instead of struggling to explain it to him while standing in the door frame to his office, the chances of him getting excited about it and giving me a “go ahead”, were much grater. Point is, you might have an idea, but if you can’t sell it, then the idea will remain just being an idea. Communication is a skill that can be learned. Personally, I found that a good way to improve communication skills is by writing. Focus on writing clear and concise sentences and eventually you will start talking the same way.
  • Speak their language. This is an extension of the above point, but with regards to “translating” what you do, so that non-IT people can understand the benefits of your work. Say, you wrote an app which once a day goes over the records of all accounts and verifies if a credit card is about to expire. So what? How does that benefit the company or department or your client? You can say that instead of the database admin emailing results of a query to the secretary every morning, he will have an extra 30min a day to work on something else. Learn the business language of your industry. Good way to practice is while you work on a task, take a minute to think about how you would explain the business benefits of what you’re working on.
  • Share your work. Contribute to an open source project or start a new one. This is a great way to practice your programming skills, learn from other contributors and make new connections. By doing so, you will demonstrate that you’re passionate and got a nice set of skills to potentially lead a project.
  • Be a good listener. No matter what’s their title, everyone appreciates a good listener. People like to talk about their achievements and their passions. Appreciate the fact that they want to share something with you, learn from their experiences and feed of their positive vibe.
  • Focus on the process. Everyone probably heard this many times before, how maintenance cost is the biggest chunk of total cost of a project, but never tried to do anything about it. Be nice to your code and it will return the favor. Good process will lead to good code. Bad legacy code will enforce bad process. Take the available time to get it done right. Don’t burn time gold-plating, but make sure you’re satisfied with what you’re committing. Before you write a single line of code, run your architectural design by co-workers. There are (hopefully) more brains then just yours in your team, so rely on them and implement changes suggested in code reviews. Oh, and ideally…TDD everything. TDD positively affects the way you write your code, and makes both production code and test code more maintainable.
  • Seek feedback. This was always a natural thing for me to do. At any job I had, I was always curious about how am I doing from the manager’s, director’s or president’s point of view. Do they think I’m good at what I do? Do they even notice the effort I’m putting in? Do they wish I was better at something they could benefit from the most? Think of people you would like to get feedback from. Then ask those people to honestly answer few questions about yourself and your performance. Do it in writing, so that they can do it whenever they find time for it, this might also yield to more honest answers.
  • Be agile. Agile works well for software projects, but it’s applications are not necessary limited to software. Apply agile approach when planning your career. It’s a fast changing industry, and no one can predict which way it’s going. By being agile with your career, you will be able to better adapt to changes as they come.

Those are just few tips that will help you drive your career as software developer to the destination of your choice. If you do want to be in full control of where you going, then pick up Chad Fowler’s book.


Oct 24 2008

I ____ LIFE

krystiano

Life rocks! Yep, life is awesome! For me, the best thing about life is challenges. Seems like I can’t go through a day without challenging myself. The more I do, the more ideas I get about what to do next, and so on and so on and so on. Recently I found a bug in the way I live my life. I spend most of my time chasing stuff and not because I have to, but because it’s fun. I wish I would spend some time enjoying my achievements before I attack the next challenge standing in front of me.  Just looking at the last 12 months, we bought a brand new house, we got married, I worked on a lot of great projects, I made more money then I expected, I met a lot of cool and smart people, and lots more. But now that I look at it, I just took it all for granted, instead of stopping for a moment to say “WOW” or “sweet”, or whatever sounds fresh those days.

OK, the above paragraph totally sounds like I’m miserable. I’m not. No really, it’s all good. I’m just amazed with the endless pool of things that I can occupy my mind with. I don’t recall ever saying that I’m bored. There is just so many things I want to do. Now that I think of it, I don’t remember last time I brushed my hair, but that’s because I like to keep them short like my phone conversations. Perhaps a slightly different topic? …Anyways.

Recently I decided to brainwash myself by watching documentaries about the “Law of Attraction” (like “The Secret“). I came to the conclusion that it’s pretty much how I have been living my life without even knowing “the secret science” behind it. Yeah, I did have to deal with some unpleasant crap in the past, but I dealt with it and I moved on. Some might argue, but I think that one’s past doesn’t determine one’s future. There are so many different paths to chose from, that the path you chose doesn’t mater that much. That is, as long as you have a goal, a destination which you want to eventually reach and you are motivated to reach it. (The key word here is motivation). It’s sort of like driving on a highway at night. You’re driving from Saskatoon to Vancouver, and you know that you want to end up in Vancouver even if you can’t see it yet. The only thing you can see is what is few hundred feet in front of you, or whatever the headlights can reach. There is always a chance that you will take a wrong turn or you might get a flat, or the car will break down, or you will run out of gas money, or even stop along the way to enjoy the Okanagan Valley, but this might only slow you down, not prevent you from arriving in Vancouver.

So all this to say that life is awesome, and that I plan to take some tome to enjoy it. My goal is to organize myself to find time again for things that I used to have time for before. Like photography, music production, blogging, and most importantly my wife.


Oct 8 2008

Ballmer Peak

krystiano

Definition of Ballmer Peak: “The theory that computer programmers obtain quasi-magical, superhuman coding ability when they have a blood alcohol concentration percentage between 0.129% and 0.138%. The discovery of this effect is attributed to Steve Ballmer, CEO of Microsoft – who probably “discovered” it by simply monitoring his own perpetually inebriated nervous system, and deducing that programming ability “peaks” after a few drinks and then dips dramatically after full-blown drunkenness ensues. …” from Urban Dictionary

Now a graphical proof by xkcd:


Oct 8 2008

Photo competition: "Photographer's choice"

krystiano

For the fun of it, few weeks ago I submitted some shots to a local competition and I just got back the results. My scores are better then expected. Here are the shots and their scores:

J-Nice

Pictorial 7/10, Technical 8/10, Interpretation 7/10, Comments: Nice close-up. Technically well done.

Pictorial 9/10, Technical 9/10, Interpretation 8/10, Comments: Too much empty space on top, Flash is very strong. Great shot.

Pictorial 7/10, Technical 7/10, Interpretation 7/10, Comments: Nice colors and shadows. No fill light. Nice title.


Oct 1 2008

Smooth landing

krystiano

Smooth landing

I figured it was time for a change, so I moved my blog to WordPress.  Setting it up and importing previous blog went very smoothly.  I did not have much time to play with all the settings, themes and CSS, but it will happen eventually. This new blog not only looks different, but it will contain more as well. Previously it was mostly work related, but there is a lot more going on in my life so I decided to take it one level further and share more with you.  Future posts will tell.

Other then this, as usual, a lot of stuff is happening. Few weeks ago I felt like everyone wanted me to do some work for them. Me being me and constantly trying to push myself to see when will I snap, I did end up accepting them all.  For the first time, I did outsource some of them, and it was a very positive experience. I can definitely get used to outsourcing. It does take a lot of load off my back, but there is a catch. How do you know if the person will do as good of a job as you would? In my case it was simple, I did previously work with the guy and I knew he was good.

So far winter has been awesome. 25C and up, for about 2 weeks now. I’m considering planting some palm trees in my backyard.


Aug 6 2008

Future Me

krystiano


I decided not to count days anymore as I’m starting to feel like I’ve been a freelancer long enough. I’ve learned so much in the last couple of months, that I feels like I’ve been doing this for years. One cool thing that I realized just last week, is that working long hours is good for me. I actually see it as an investment. I spend most of my time writing code. Since the beginning, I kept track of my hours, what I worked on and when, etc. (Doing stats on myself is interesting.) Recently it felt like writing code got easier, and was taking me less time to do the same amount of work. Being an engineer, I had to back it up by some proofs. So I checked my time sheets from few moths ago and last few weeks and it was true. I improved my efficiency by about 25%. So by spending long hours coding, I now can spend less hours coding. Sweet.

Why stop there? That got me thinking that I should try to enhance my other skills. As a freelancer, there are other things that one needs to take care of. Accounting, marketing, documentation, research, customer relations, etc. By having to deal with the above on daily basis, I obviously got better at it, but I’m sure there is still room for improvement. I’ve always been a self-learner. (That might explain why as a kid I walked into a river and almost drowned.) I find it more rewarding when I figure out things all by myself. But the future me decided to try a different approach for once. I decided to learn new things by means that I never tried before. So I decided to read a book. I read books before, but they were all technical and related to my field of study. This time I’ll be reading a book that my wife have chosen for me. I asked for something with content but nothing too technical.

OK, let’s jump to different subject now. Salespeople. Their job is the exact opposite of a developer (me).  A good salesman can sell anything, even something that doesn’t exist. To make things even more interesting, he can promise the client that it will be ready by the end of the week. As a freelancer, I get to be the salesperson and the guy who makes it happen. Therefore I need to make sure that I don’t commit to unrealistic requests. What’s interesting is that freelancing offers way more then just more money. It gives me a chance to explore different fields and opens a lot off doors. Let’s say I’m an employee (programmer) and one day I decide to make a turn and become a marketing manager. I got no experience in marketing, so what do I do? As a freelancer, I get to explore the marketing side of business whenever I feel like. Maybe it’s not on the same scale, but still, it’s a good introduction to something new.

So basically, I decided to invest some time to learn the non-technical things and try out some new learning methods. I will let you know how it goes.


Jul 24 2008

Day 106: 73 days later

krystiano


Time flies like never before. It’s been 73 days since my last post and I have about 73 stories to tell. Yep, lots has happened, thus my excuse not to blog :)

When I started this whole freelancing adventure of mine, I sort of new what to expect thanks to many freelancing blogs and advices from family/friends and others. Well, knowing what to expect and living thought it, are two totally different things. I mean, when you know it’s going to hurt, you’re still fine. When it actually hurts, you realize that you were rather optimistic when you though you knew it was going to hurt.

In the last 73 days I managed to get quite a bit of new contracts. Short ones, longer ones, easy ones, and some shoot-myself-in-the foot ones. Sometimes customer’s expectations are very unrealistic, usually deadline wise. I can implement anything, but I need time to do it. So facing a customer like that, there are only 3 choices. Choice 1, refuse the contract and let some else commit suicide. This choice will likely lead to the customer never contacting you again (in the near future). Which is probably fine, when you have been a freelancer for some time and you have a well established clientèle and a nice fat portfolio. If you’re still new to the game, refusing a contract is not an option. I might be too optimistic, but I find that the more difficult the customer is, the more experience I gain. Choice 2, try to educate the customer. Explain the procedure and why it will take that long. If it’s a new customer, this choice will most likely lead him/her to try to get someone else to do it. If you have already done some work for him/her then the likelihood of your customer lessening to you is slightly grater. Choice 3, take the bullet. Be a hero now and suffer when you get back to your home office.

I did end up choosing 3 more often then I should, which translated to many sleepless nights. The only thing that kept me going is the challenge and new experience. By learning the hard way, and chances of me not making the same mistake are lower. Even if my social life has been close to none, I don’t regret anything. (By the way, thanks to my wife for being so understandable and patient.)

I started practicing choice 2 on customers for whom I did some work previously. It worked for some, actually it worked for most. Sidenote: I noticed that when I charge more, they pay more attention to what I say. If I charge less, I find myself being treated more like an employee. So they tell me what to do and how much time I am being given to do it.

So far, it only happen once that I actually refused a contract (choice 1). I got to admit, it’s a strange feeling, a weird feeling, but I try not to look back. Some customers might actually respect you more for being honest and have a better image of you.

OK, so besides work, I did some more work. Different kind of work though. I organized few things. I’m already an organization freak (and I’m proud of it), but there were certain things that I have been putting aside for too long. I even made myself an excel sheet…actually I don’t use Excel. Instead I use IBM Lotus Symphony, which is free, and is not bad at all. I just love IBM stuff, specially their laptops. Anyways, so I made myself a list of what I know I have to do for my customers and I tried to come up with realistic time estimates. It came close to 500 hours. So my next post will be in about 4 moths. Just kidding.

Also, one of my main servers died on me. There is never a good time for a server to go offline when it’s being used 24/7. So between juggling projects, I ended up rebuilding a new server. I decided to go virtual this time and free. I’m running VirtualBox, and so far so good. I figured, next time hardware go bye bye, I’ll just have to copy the virtual OS image to a different computer and I’ll be back in business. That will be 10min of work instead of 1 day.

Another thing, I think I’m starting to understand what others mean by “isolation”. The other day I went to pick up mail and I felt like I don’t belong outside. The sun shining on my face felt weird. For a short second I thought about getting back to the cube land, but I like being a freelancer and I like programming. I just need to find time for other things.

I got much more to write about, but I will keep it for future posts. Yes, I will write again :)

Picture of the day: “Big Mac”, probably the only fish who have seen so much code in his life and will see much more.


May 14 2008

Day 33: Since we last spoke

krystiano


I’m back. For the last 2 weeks I’ve been busy like this guy in the picture. And no, I wasn’t slacking of because GTA IV came out.

My office is starting to look like an office. We finally installed blinds which were totally worth it. One cork board was not enough anymore, and I finally framed all my certificates and diplomas to remind me what I achieved so far. Maybe I should just post some pictures of my office.

Just 2 days ago I finished an important contract (aka. “Door-opener-to-a-warehouse-of-contracts”). I did put a lot of time/effort into it and judging by the feedback I got, it was noticed.

After 33 days of me, myself and I, life is still good. It is actually getting better and better everyday. I’m starting to notice certain mistakes I made when starting this adventure. Only some minor ones, but I guess it’s a sign that I’m gaining technical experience and business skills.

Once again, thanks to “Feed the Dog” for poking me.


Apr 29 2008

Day 19: Mastering productivity

krystiano

What a productive day. After driving my awesome wife to work, I went for a short walk by the river. Then, on the way back home, I stopped as Starbucks to get a grande-mild-with-room-for-cream. By the time I got back home I was already pumped to do some serious coding. I grabbed my TODO list to carefully chose my next victim. Before 4pm I already accomplished more then I expected. So by walking away from my desk at 4pm I would have been completely satisfied with my performance for today. But Why stop there?

I found an interesting tool called nLite. It lets you create an image of your own version of Windows XP. You can customize it whichever way you want. I managed to shave off 250MB of clock-cycle-wasters and harddrive-space-polluters. Time to go through all the options and decide what to disable… 4 hours. My own custom image Windows XP that is faster then Carrera4 on the picture above…priceless.

Entertainment of the day: grocery shopping with my wife.

I added FeedBurner. Hopefully some of you will find it useful.


Apr 18 2008

Day 8: Like a fish in the water

krystiano


The meeting with the big guys went very well. Even if I’m just a little fish, deep waters don’t scare me. Looks like we will be moving ahead with the deal. I’m super excited, this might just be the tip of the iceberg of contracts with this company.

Other then that, I did some mockups and tried to figure out few bugs. Not much to write about. Overall a very positive day. Looks like the weather will be crappy for the weekend, but I can already think of 99 things that I can do indoors.

On the picture: A must have office furniture: Sumo bag.