Archive Monthly Archives: June 2014

Stoic Wisdom for Software Developers: Introduction

How can a bunch of philosophers who lived over 2000 years ago help you become a better software developer? The ancient philosophy of Stoicism has tools that can help you become happier and more productive.

This post is the first part in a series where we’ll explore different techniques from Stoic philosophy and how to use them to become a better software developer.

History

Zeno of Citium founded Stoicism around 300 B.C. in Greece. The school continued through the Roman emperor Marcus Aurelius in 180 A.D. The Stoic philosophers came from a variety of backgrounds. Some Stoics, like Marcus Aurelius or Seneca, were important and powerful, while others, like Epictetus were slaves.

The modern usage of the word “stoic” would make you believe that Stoicism is about being a melancholy robot. This is not the case. The primary goal of Stoic philosophy is to focus only on the things you control. The Stoics used reason to temper negative emotions. The Stoics worked to achieve a peaceful state of mind, regardless of adversity. They found happiness and peace in a chaotic world.

To achieve this peace of mind, the stoics developed a set of mental tools. These tools can be used to deal with chaotic situations, like those encountered by software developers.

Why Pursue Stoicism?

Stoicism is useful because software development is an emotional and chaotic field.

Examples include:

Most of these situations occur because we get too emotional over things that are not in our control. Studying stocism won’t make these issues go away, but it will make it much easier to deal with them.

More Information:
http://fourhourworkweek.com/2009/04/13/stoicism-101-a-practical-guide-for-entrepreneurs/

http://fourhourworkweek.com/2011/05/18/philosophy-as-a-personal-operating-system-from-seneca-to-musashi/

http://www.ryanholiday.net/stoicism-a-practical-philosophy-you-can-actually-use/

Building My First Tech Talk

Ever want to give a tech talk to your peers? I recently built and delivered my first tech talk and I’d like to share my experience.

Motivation

There are several factors that have contributed to my desire to to make a tech talk. The first is that one of my career goals is to become more involved with my local developer community. I am fortunate to live in a city that has a vibrant technical community and I wanted to contribute something to that community.

If you would like to know some of the benefits of becoming involved more in your local tech community, watch this video (It’s currently free):
Get Involved

The second reason is that when I was in college, I participated in forensics (speech and debate) and miss publicly speaking. I’ve thought about joining Toastmasters or a similar organization, but doing a technical presentation is more accessible and congruent with my career goals.

The final reason is that the best way to learn something is teach it. Teaching a subject requires in depth knowledge and the fear of looking like an idiot encourages you to thoroughly learn your subject material.

Process

The first step in build a talk is picking a subject to talk about. For this talk, I decided to demonstrate D3.js, a JavaScript data visualization library. After using it at work and seeing how powerful the library is, I really wanted to dig into it more.

I recommend picking something you are personally interested in, and not worry about whether or not you are currently an expert in your topic. Obviously don’t pick something you know nothing about, but don’t be afraid to branch out. Researching the presentation will help you become an expert.

The second step is to research. For my talk, I read Interactive Data Visualization for the Web by Scott Murray and many online tutorials. I also built lots of small demos.

After some research, start building an outline. This outline will probably change with new information, but it’s good to get an idea of what you want to talk about. Having an outline helps focus your research efforts.

While researching, I also built the demonstrations that I used in my presentation. My goal was to show the power of data visualization on the web, so the focus of my presentation was walking through lots of examples.

Tech demos have a tendency to fail, so it’s important to keep things simple and minimize dependencies. I made it a point to make sure my demos didn’t rely on any outside components. No databases, no web services, just local code. I also put my code on Github, so I could easily setup my project on another computer if I needed to.

After building the demo, and the outline, it’s time to put together your talk. If you have slides that you want to use, build those now. I had a few slides, but most of my presentation was examples and code demos.

After that, practice! Try to run through your presentation at least a couple of times. Rehearse in your head and out-loud. Give your talk to the dog or cat. Make sure your timing is good and your transitions are smooth.

Also, don’t write out your talk and memorize it. This will stifle your delivery and ability to go with the flow of your audience. Rehearse your key points and don’t worry about getting everything word for word. Your audience changes with every performance and it’s important to be able to cater to that audience. Memorizing a written speech will prevent that from happening.

Lessons Learned

So far, I’ve given my presentation twice. Once at the local .NET meetup group and once at my current employer. Both situations were different and provided different learning opportunities.

What didn’t go so well?

The one thing that surprised me was the awkwardness of transitioning in and out of PowerPoint presenter mode. My presentation initially consisted of an alternation between slides and demos of visualizations on the web. Unfortunately, PowerPoint made those transitions really awkward. To fix this, I ended up pulling those slides and just showing the demos. Less PowerPoint is not a bad thing.

I ran into another issue when I gave my presentation to my current employer. I didn’t realize that I was also giving my presentation to the non-technical staff as well as the developers. To adapt, I spent more time talking about general data visualization concepts and less time walking through code. I also told my audience that the second part of the talk was more technical. I can’t stress enough about how important it is to cater to your audience.

What went well?

I was surprised at how well the question and answer portion of the talk went. Studying up for the presentation really paid off.

I also felt like I adapted to changing circumstances well. This is probably because my forensics career in college was spent in limited preparation events, where you need to be able to think on your feet.

I put all of my talk materials on Github, so people could follow along and download the code themselves. I had a number of positive comments about that.

Tips

  1. Adapt to your audience and your situation. Don’t regurgitate a canned speech.
  2. Publicly share your demo code and slides.
  3. Beware of potential technical difficulty. Pre-load any web pages and make sure all of your code functions correctly. Make sure all of of the A/V stuff works (like font sizes and slide transitions).

Conclusion

I am glad I made this talk and plan to make more in the future. The whole experience was highly educational and it felt good to make something useful for the community. I can’t recommend it enough.

I’ll be speaking at That Conference in August, so please check out my talk.

Talk Code and Slides

3 Tips To Help You Ace Your Next Technical Interview

I used to be a little nervous about doing technical interviews. Even though I spend much of my free time learning about technology, I’m still afraid that I’ll be perceived as an idiot. To combat this feeling, I have developed several practices to improve my interviewing skills.

1. Review Your Resume

Every interview I’ve been to asks you for examples from your work history. To prepare for these types of questions, review your resume before each interview. For each job on your resume, think about the challenges you faced, what technologies you used, and what you were proud of. Think about stories you can tell from previous jobs to potential employers. Practice telling those stories in your head or in front of a mirror. This exercise primes your brain. When prompted, you will be ready with a story from your work history.

2. Practice Answering Standard Technical Questions

Depending on the technology stack and what job you are interviewing for, most employers ask a list of standard questions. You will get a feel for this list as you do more technical interviews. I’m an ASP.NET Developer, therefore I get questions on the following topics:

  • Basic OOP (Encapsulation, Inheritance, Polymorphism)
  • Abstract Base Classes vs Interfaces
  • The ASP.NET Page Lifecycle
  • String Concatenation using StringBuilders
  • Basic Design Patterns
  • Linq
  • Generics
  • Job Specific C# and ASP.NET Trivia
  • Major features in new releases of ASP.NET (async, await, etc…)

To prepare, you need to research the concept, practice describing the concept, and for more complex questions, come up with relevant examples. For example, when describing OOP concepts, come up with a novel example. Instead of the usual examples of vehicles or animals, try something a little different, like a beer factory or different types of ducks. The key here is to show that you understand the concepts, as opposed to being able to memorize a textbook example.

3. Practice Your Public Speaking Skills

I learned my public speaking skills by competing in college forensics (speech and debate). It was a great experience that has helped me in many ways. I highly recommend competitive speaking if you have the opportunity. If you are no longer in school, you can join Toastmasters or practice with a group of your peers. Meetups are a good way to find groups of people to practice with. You can also give presentations at user groups and conferences. Practicing your public speaking skills on a regular basis will help you eliminate filler words from your vocabulary and help you learn how to handle fears surrounding public speaking. If you can explain a complex technical concept to a group of thirty people, then you should have no problem with three people in a job interview.