jump to navigation

Why is the Microsoft Surface such an awesome gaming experience? August 22, 2013

Posted by azsoftwaredeveloper in Uncategorized.
Tags: , , , ,
add a comment

Microsoft @Surface is asking its Twitter followers why the Surface is such an awesome gaming experience.

I have used a Surface running Win RT, so I thought I give my two cents on the gaming experience.

First, I like the ability use multiple different types of controls. I got a chance to play Halo: Spartan Assault, and the game play was fantastic. I originally said to myself “how are you going to pull off a good third person shooter with touch controls?”

Well, I can honestly say they nailed it off. Your left thumb is used to move move the Spartan while your right thumb is used to both shoot and aim. The Surface’s screen is a great virtual joystick. I also liked the fact that there was no joystick overlay telling the gamer where they had to put their thumbs. You place them were they are most comfortable and that is the center of the joystick. Need to throw a grenade? The button easily within reach of your thumb. Don’t like touch controls? That’s OK, because Halo: Spartan Assault works with keyboard and mouse as well, and the Surface supports both.

The next item that makes the Surface a great gaming experience is Xbox Live. I enjoy being able to earn achievements and compete with my friends. Having a metric to see who progressed through the game further / with more difficulty is a lot of fun.

The Surface is also compact. I brought it one once while traveling, and it fit great on an airplane in my cramped coach seat. It’s built-in kickstand allowed me to set it up on the tray table and continue destroying piggies in Angry Birds: Star Wars.

Finally, I like that you can quit out of Halo: Spartan Assault on the Surface, and pick right back up where you left off on your Windows Phone. I hope to see more developers dual release for both platforms and offer this same functionality. Beating Angry Birds twice is not as enjoyable.

Software Development Has Changed and Time Management / Productivity Skills Are More Important Than Ever! January 25, 2013

Posted by azsoftwaredeveloper in Software Development, Time Management.
Tags: , ,
add a comment

When I first began writing software professionally, I never invested much time in learning better time management techniques. It wasn’t really necessary at the time, and I regret it now that I have more responsibilities. I love writing code, and I had to improve my time management skills to maximize the amount of time I have available for writing code and learning new technologies.

These days software is moving at a faster pace than ever, and it is extremely exciting; however, it can also be very overwhelming.

Fourteen years ago, when I started, things were easier:

  • Developer tools released less frequently
  • There were only a few dominant programming languages
  • You could cover most of the market by simply developing for Windows PCs
  • Instant messaging in the workplace was uncommon
  • Our company used the “waterfall methodology” and developers were less involved in technical support
  • I was single, so I had more personal project time outside of work

Developer Tools Released Less Frequently

I started writing software not long after Visual Studio 6 was released. It was released in June of 1998. The next version of Visual Studio .NET did not release until February of 2002, three and a half years later. While there were six service packs released for Visual Studio 6, there were not many new features added to the product. It was easier to “master” the major framework of the time. For me it was the Visual Basic Runtime. For C/C++ developers at our company it might have been MFC and ATL.

Now I find myself updating Visual Studio and Eclipse as often as any other piece of software on my machine.

Fewer Dominant Programming Languages

When I first started their were fewer popular languages in the Windows world. If you were writing a rich client application, you typically used C/C++ or VB. If you were doing web development, you used ASP for the server side code. CGI applications were also common and could be written in languages like C/C++ or Perl. The client side consisted of HTML and JavaScript. ActiveX Controls and Java Applets were also available, if you needed a more rich experience on the client side.

Résumés these days are always peppered with twenty to thirty acronyms and programming languages. It’s easier to feel like I am missing out on the “latest and greatest” and therefore inadequate. I want to know them all, but it is overwhelming. And the “jack of all trades is a master of none,” right? Scott’s blog post “I’m a phony. Are you?” echoes this sentiment that I feel sometimes. I almost feel like I am not keeping up with technology as properly as I should. A good example is Objective-C. It is mainly used by iOS developers, which is one of the most popular mobile operating systems for both tablets and smartphones. While I am sure I will learn it one day, I hate the feeling that I have not already mastered it. And I have several other books in the queue before I get to Objective-C and iOS development. Using proper time management techniques will help me realize this goal sooner.

Windows Dominated the Market

Fourteen years ago, you easily covered 90+ percent of home PC users by developing for Windows.

While Windows still dominates the PC market, consumers are more frequently using their smartphones over their PCs. Android dominates this market followed by iOS, so as a developer I find myself having to learn additional frameworks and operating systems. I have a successful Android app, but it is a lot of work and learning to port it to iOS and Windows Phone. While I may look into Mono for my next project for this exact purpose, I still find myself desiring to know the ins and outs of each platform’s SDK.

Changes and New Distractions in the Workplace

These next couple of sections point out some changes in the workplace that make being productive more difficult and reinforce the importance of time management skills.

Instant Messaging is a Horrible Distraction

I was enamored with Microsoft® Office Communicator (now Lync Communicator) the first time I ever used it. I could get instant feedback from anyone! No more waiting for them to respond to email. I could share my screen while talking with another developer on the phone without having to setup a WebEx or Bomgar session. It made code reviews, paired programming, and “hey could you look at this real quick” very easy.

As I gained more responsibilities, I realized how much I had been torturing others with instant messages. Context switches in computer systems have a cost. The state of the thread, including its stack and other information, are copied before the scheduler activates the next thread in the queue. Switching tasks also has a cost for humans. There is a certain amount of time that is needed to regain concentration after dealing with an interruption. I’ve found that most instant messages are better suited as emails. That way they are non-blocking.

Scrum is In and Waterfall is Out

Most companies these days use some sort of agile methodology for releasing software. I love Scrum, because it accounts for “scope creep” which used to be frowned upon when using the Waterfall methodology. Once you were in the QA phase, you didn’t add new features in Waterfall. Scrum on the other hand consists of a set of iterations called “sprints.” Sprints usually range from two to four weeks. The goal is to a have potentially releasable product at the end of each sprint. Requirements or features can be added, removed, or have their priorities changed without any issue between sprints on the product backlog. This great, because requirements change all of the time; however, it makes time management skills more important than ever. This is because you want to have a potentially releasable product at the end of each sprint. In Waterfall you would: gather requirements, design, implement, test, and release in stages. In Scrum you are doing all of the above during each sprint. It makes it more difficult, since you are responsible for producing release quality software at the end of each sprint. This means scheduling adequate time for both development and QA and being able to switch freely between the two roles.

I’m Engaged!

I love my fiancée, so there are no complaints here. Time management is needed to properly allocate time for both personal projects and the lady (not necessarily in that order).

Improving My Productivity

I found myself context switching so much, that I felt like I was never getting anything done. I had to do something. I read a couple of books on the Kindle, including the Pomodoro Technique, and I’m an avid follower of Scott Hanselman’s blog. Here are some of the things I’ve done to improve my productivity:

  1. Turned off toast notifications in Outlook and created several inbox rules (these came from Scott)
  2. I schedule blocks of time in my Exchange Calendar dedicated to uninterrupted work
  3. Improved the lighting in my office
  4. Added a shared calendar for myself and the fiancée
  5. Time blocking
  6. Pomodoro Technique
  7. Identify which tasks are better suited for listening to music
  8. Better Diet and more efficient exercise

Turned Off Toast Notifications and Created Inbox Rules

I got this from Scott Hanselman’s Productivity Tips video, and I highly recommend watching it. I immediately turned off Outlook’s toast notifications the next day at work along with the envelope system tray icon. This was excellent, because I was always distracted by those balloons or toast notifications that would pop up and fade away each time I received an email. I felt compelled to read it immediately. This caused an unnecessary context switch which caused me to lose focus, especially if the email demanded a long response. Now I schedule certain times for checking email. Scott also recommends completing one task in the morning before even checking your email. This is also a great idea. How many times have you “time traveled” while answering emails? You look at the clock and it’s time to go home, yet you have not accomplished any of the tasks you wanted to finish. It is an awful feeling which can be avoided by working on a task before checking email in the morning.

The second item Scott mentions is creating several inbox rules to prioritize your emails. One example is moving all emails that you are CC’d on to a separate folder that is checked less often than your inbox. This is also good idea, and I recommend watching his video for others.

Schedule Blocks of Time in Exchange Calendar for Uninterrupted Work

This is useful for me since Lync Communicator flags you as “in a meeting” during those times. You are less likely to be interrupted by instant messenger. Some people change their status to “Do not disturb,” but I still want to be available for urgent matters.

Improved the Lighting in my Office

I feel dumb for not researching this one earlier. I originally shared an office with a window. The glare from the sun in the morning would make the monitor difficult to read, so I closed the blinds. I eventually ended up turning out the lights in the office and working in the dark with a small desk lamp. I thought it more comfortable, and it was for a bit. After a while I realized that I felt more fatigued during the day than normal. After a bit a research I concluded that natural light or artificial light which closely resembles daylight is best. Fluorescent bulbs are only distracting when they are flickering. Working in the dark does in fact send mixed messages to your body which can make you feel tired. Also a desk lamp for task lighting is useful.

Use a Shared Calendar with the Loved One

This was a bit of a life saver, and most of my co-workers do this now with their wives. It is a good idea to use a shared Hotmail or Google Calendar with your significant other. It avoids the “do we have plans tonight?” question. Or the “I forgot babe, I’ll do it tomorrow.” Now I just say “put it on the calendar, and it’ll get done.” It works great. We also took the time to sit down and time block our evenings of each work day. We have certain days blocked for going to the gym, dates, and I have other nights allocated for personal projects. This helped me make sure I was dividing my time evenly.

Time Blocking

As mentioned in the previous section, I time block my evenings in a shared calendar so that there is no confusion between “my time” and “our time.” A book I read said that you should time block each week hour by hour for the entire week each Sunday. I found this to be unreasonable. I am an agile developer and task priorities change frequently, so trying to time block the entire week ahead of time is impossible especially at work. I prefer a method proposed by Scott Hanselman which is also in his productivity tips video. Choose three things that you are going to get done today and that is it. You might only get two done, but that is ok.

It is easier to not feel overwhelmed when you look at a task list with three entries on it versus looking at a task list with fifty. Each morning write down three tasks, and then break them down into “Pomodoros.”

Use the Pomodoro Technique

Use the Pomodoro Technique to break your tasks for the day up into “pomodoros.” It makes tasks less overwhelming then are broken up into pieces. A pomodoro is a unit of time equal to 25 minutes, and it cannot be interrupted. The word is derived from the Italian word for tomato and references the popular tomato kitchen timers. I suggest reading this book as well.

Break your tasks up into smaller tasks and estimate the number of pomodoros each task or subtask will take to complete. Draw boxes for each pomodoro allocated for the task or subtask. Set the pomodoro timer for 25 minutes and get to work. After the timer rings, draw an ‘X’ through one of the boxes, take a five minute break, and repeat. After about three or four pomodoros, you can take a longer ten to fifteen minute break. The breaks are great for feeding your social network addiction. Do your best to avoid interruptions. Put a tick mark next to the task for each small interruption for tracking purposes. If you run out of estimated pomodoro boxes, then add circles for the additionally used pomodoros. This helps you improve estimating the amount of time a task will take to complete as you use the technique.

pomodoro-schedule

I was skeptical about using the Pomodoro Technique at first, since software developers always strive to “get in the zone.” I thought the timer prevent me from getting into the zone or prematurely take me out of it. It turns out those five minute breaks are great for collecting your thoughts.

Identify Which Tasks are Better Suited for Listening to Music

I love Digitally Imported radio. The Club Dubsteb station is great to listen to while cranking out code; however, I found myself listening to music for other tasks as well. Tasks that require a great deal of focus and concentration such as code reviews or reading documents are better suited for silence. I’m more productive when I choose the correct option for a task: music or silence.

Better Diet and More Efficient Exercise

I was so busy with life, that I let my weight get out of control. The result was a bit of depression combined with fatigue in my early to mid twenties. Using low-carb dieting and later “Slow-carb” dieting, I lost one hundred pounds. I added about thirty pounds of muscle, after I added exercise to my regiment.

It can be difficult to fit exercise into your schedule, so I try to be more efficient. I have been doing CrossFit for about six months, and it is great. You never acclimate to the workouts, so it is always difficult. Workouts are fairly quick, and I always feel completely expended by the end.

Conclusion

Software Engineering is moving at a faster pace than ever, so time management and productivity skills are more important than ever to keep up. These tips have helped me, and I hope they do the same for you.

Console.WriteLine(“Hello World!”); October 1, 2011

Posted by azsoftwaredeveloper in Uncategorized.
add a comment

I have spent the last year putting more time into my personal projects. Personal projects are great, because they allow developers to learn new skills and technologies that they might not learn at work. I get a significant amount of cross training at work; however, there are some technologies that interest me that I won’t get exposed to on my current team.

After losing a hundred pounds on the low-carb Atkin’s diet, I created a Carb Counter  for Android which communicates with my REST API hosted in Windows Azure. I learned a lot while developing these components, and I decided I would blog about some of the cool things I learned.

Follow

Get every new post delivered to your Inbox.