Interview/Hire Great Devs: Part 2

This is the 2nd and last post on hiring great developers. You should probably read Interview/Hire Great Devs: Part 1 if this topic interests you.

Fulfilling Expectations

Remember that the type of person you want to hire is going to expect around 3-4 hours total in the hiring process. If they feel that you don’t perform due diligence with them, their concern will be that you are not doing it with anyone else and that the team will suffer. Of course if the candidate doesn’t seem like a good fit at any point, cut them loose immediately and politely.

If your candidate made it this far, it’s time for…

Phase 3: In-Person Interviewing

Let Your Experts Do The Talking

Evil Nerd Genius

And now we all know the truth about German programmers…
They code in cuff links.

Next, have candidates interview on-site with your existing people for one to two hours (if you don’t want the whole team in there at once divide the time into 20-30 minute blocks). There are pros and cons to both approaches.

Be sure to communicate any overarching goals with your team. If this person is to fill a specific role, let them know so they can analyze the fit. If everyone you hire should be a continuous learner, make that clear. If you want someone who won’t be bored with tedious work, that should also be communicated. There are only two technical guidelines to stress.

Just.

Two.

  1. Long coding assignments should not be performed on a whiteboard.
  2. Long coding assignments should not be performed on a whiteboard.

There are plenty of decent alternatives to making a developer sweat about syntax and handwriting. Bring a laptop to the interview and pair program with them. Send them a coding assignment to complete on their own prior to the interview (time-boxed of course). This applies to anything longer than a fizz buzz-type problem.

Otherwise, let your experts ask whatever questions they believe are important. They are evil geniuses who want to unleash hell on your candidates, AND THEY SHOULD.  These should be some of the people you trust the most to help achieve your goals as an organization, they know the right questions to ask!

Afterward, get a quick thumbs-up count from your team and if it went well…

Perform A Leadership Review

Do an in-person with anyone your team doesn’t dislike. Probably 30 minutes or less. See if your impressions from the online/phone screenings seem to hold up. If you are considering this person for a role that may increase in responsibility, make sure to ask the right questions (including if they are interested in that sort of thing).
At this point, assuming success, proceed to…

The Final Phase: In-Person Closing

Sell, Sell, Sell (Be Obvious And Honest)

Allow 30 minutes to answer their questions and really sell them on the opportunity.

Sale! 50 Percent Off

What you have to offer is great, remember that! This is the company you chose to work for and continue to stick with. Even you you are having a bad day (we are all entitled occasionally) do not sell the opportunity short. Talk about the best parts of your job. Be enthusiastic. After all…

“Nothing great was ever achieved without enthusiasm.”

- Ralph Waldo Emerson

Be completely open and honest. Don’t conceal problems but don’t highlight them as anything other than what they truly are: opportunities to improve. Developers are optimists. We believe in change for the better and want to help it happen. Appeal to our desire to solve problems.

Eat Lunch

The candidate that makes it this far should have a very informal lunch with the team he will be working with so everyone can get a feel for interpersonal relations… it’s very difficult to get a feel for someone who is expecting trick technical/personal questions at any point and is on foreign territory. Lunch offsite is neutral territory and you can learn a lot about a person in that environment.

Lunch is a good habit to get into anyway. I like it.

It goes without saying that if you get to this point then you most likely have a keeper.

Make An Offer

Do this after lunch or do it the following day. You should know if this is the right person for the job or not. You have all the information. If the answer is no, tell your candidate as soon as you know.

The Offering

Negotiation is to be expected. However, in today’s competitive market, get your best offer out on the table as soon as possible.

NEVER try to undercut a programmer/developer/engineer/etc. It will not end well for you. The candidate maybe offended and walk, or worse, join the company and go though all the training and ramping-up and leave for a better opportunity in 6 months.

There are many, many jobs and too many online resources available to compare salaries and other benefits. If you aren’t sure you are being realistic, check out your competition on Glassdoor or general rates on Salary.com. Take this data to the powers that be and make a change if needed.

If there are other great reasons to work for the company, things that give you a competitive edge, highlight them. If you have a great environment for learning (see my posts on the subject here, here, and here) tout it! If you’ve hired well-known or respected developers, point candidates to their online presence on Github, LinkedIn, and Stack Overflow for verification. If you have stock options, great healthcare, or free/discounted products, talk about them.

You get the idea.

Conclusion

Overall, this is pretty similar to the process one employer used when convincing me to move to halfway across the country (for minimal pay increase, no stock options, etc.) and I had plenty of other opportunities. The overall process is proven and is common with really good shops that care about hiring the right people. Remember to always end the process after any stage as quickly and succinctly as possible. Do not get a reputation for wasting people’s time.

Image credits:

https://www.flickr.com/photos/mbiskoping/

https://www.flickr.com/photos/soulrush/

https://www.flickr.com/photos/liquidnight/

Posted in Career, Software Career, Software Development, Software Engineering, Team, Technology Career

2014 Developer Learning Guide: Part 3

This is the 3rd and final post in my series on continuous developer learning. I recommend you read 2014 Developer Learning Guide Part 1 and Part 2 if you haven’t already.

When I started writing about this subject, I thought I would cover all of the options in one post.

I.

Was.

Wrong.

One of the wonderful things about learning, is that there is a lot to learn about it! I’m in the process of recording a new podcast with a friend of mine and one of our first episodes will iterate just exactly why we believe continuous learning is so important. Stay tuned!

Now, the finale…

In-Person (Larger Groups/Formal Training)

Hackathons/Hack Nights

Hack-er

Um… wrong kind of hack!

This is one that I need to get more involved in. I’ve heard great things about hackathons. I only attended my very first one a couple weeks ago and it was a good experience (all WiFi issues aside).

Additional personal experience is more related to startup work even less formal than these events. There have been a couple of times I’ve tried to put together a quick app or program in a short amount of time using the MVP or “Minimum Viable Product” approach from The Lean Startup. I found that I learned a remarkable amount in a short amount of time.

I learned even more when I did this together with some friends who ranged in skills from entrepreneur to systems admin to programmer to business development.

Code Camps/Large Conferences

I’ve considered writing an entire post about these. There is nothing like being surrounded by others who are looking to improve and be awesome at what we do.

This kind of event can run from half a day to a full week. They tend to be a little heavier on the pocketbook, but you can find lower cost options as well. If you live in an area with a very active tech community, you will probably have many great local options that at least save you on the travel costs.

Conferences really get the creative juices flowing and keep you fired up about your work. Most major tech companies have at least one developer conference per year (Google, Apple, Facebook, Microsoft).

WWDC

Employers with a decent training budget send their developers to 1-2 larger conferences per year (almost never 3+).

I try to mix it up like so:

  • 1-2 out of town conferences. I enjoy travel and this is a nice opportunity to get out of the state for a few nights.
  • 2-3 local conferences. To help keep the budget down.
  • As many code camps as I can reasonably attend.

Why so many? There are a lot of topics I’m interested in and it just so happens that they are all related to my work. This year, I attended an AngularJS conference (ng-conf), an Agile conference (AgileRoots was amazing), Utah Code Camp, and DevFest Family. I’m still planning to attend a large UX conference and a more hard-core software engineering/architecture conference.

I’ve also found it extremely valuable to speak at some of these events. No one learns more than the person who stresses over getting in front of a bunch of smart people to tell them about something!

On-site Training

This type of training is great when you have a team that all needs to get on the same page.  Schedule a trainer to come out to your company on your schedule. I will turn you loose on Google for this one… do a little research and you will find many companies offering this type of service.

My experience here is positive. On-site training sessions can be highly valuable just make sure you get a great trainer. Interview them first or suggest a trial session.

Costs, I’m not super sure on but what is published online is $1000-5000 per session. If you think you will have an ongoing need for this, negotiate a better rate.

Certifications/Degrees

Certifications are highly valuable for IT people although they are not be as well recognized in development circles. I have a former boss who refused to interview candidates with Microsoft’s developer certification on their resume…

MIT

MIT. Yes, I know there’s a TARDIS on it.

Advanced degrees are valuable if you are specializing in certain areas of our field. Machine learning, concurrent programming, and human computer interaction are all excellent examples.

Both certifications and advanced degrees become considerably more valuable if your company is willing to pay for part or all of the tuition. Without that, I would probably avoid them because your return on investment may not be very good.

Conclusion

As you can see, the options for learning run the full gamut of price, time, and commitment. The great news is, even if your company has little or no budget for training, all you need is a couple committed developers to get started with the less expensive (free) types of training. Even better if your company agrees to a budget or commits to learning in other meaningful ways (time/food/support).

I recommend that you seek out employers who understand and value learning. I have and I couldn’t be more glad.

Remember to read 2014 Developer Learning Guide Part 1 and Part 2 if you haven’t already. Follow me on Twitter (@dubmun) for comments about development and other shenanigans.

Image credits:

https://www.flickr.com/photos/anantns/

https://www.flickr.com/photos/notnil/

https://www.flickr.com/photos/bbcamericangirl/

 

Posted in Career, Learning, Software Career, Software Development, Software Engineering, Training Tagged with: , , , , , , , , , ,

2014 Developer Learning Guide: Part 2

In Part 1 of this sequence of blog posts, we covered online and print learning. Part 3 is now available as well. This time we will review some of the in-person options for learning and focus in on smaller groups. But first…

An Elaboration On “The Best”

I suggested in 2014 Developer Learning Guide: Part 1 that A-players, top developers, etc. only want to work for companies that have a great learning culture. This doesn’t necessarily mean that they already ARE working for these companies. The point is that, given the choice, the best developers know the value of learning and want to be part of groups where everyone is actively engaged in it. If you are already working for a company like this, I congratulate you on your outstanding choice!

The most common argument I’ve heard for choosing or sticking with a company with poor learning policies/funding: “If a company pays well enough, I can afford my own learning/training.”

Money Vortex

Don’t get caught in a money vortex that leads to stagnation.

This is true. The fallacy is that all of the developers will use their “extra money” for this purpose. We all have obligations and sometimes paying off that credit card or taking a family trip might take priority over paying for our own training. When the employer provides budget and opportunity specifically for training, the entire team is far more likely to take advantage of it. This leads to the entire team learning and growing together. You avoid the situation where stragglers are content to stagnate and contribute a steadily degrading quality of work (and contribute steadily degrading quality of feedback on teammates’ work).

TL;DR I stand by my original statement with a few caveats.

This is not to say that everyone should try to learn in the same ways. Some people don’t take much away from certain types of training and learning opportunities. There is absolutely nothing wrong with this, in fact, it is the purpose of these posts to provide a comprehensive list of the options that are out there! My hope is that you won’t focus on only one type of training. A rich selection of options awaits. I encourage you to try many and find out which work best for you.

In-Person (Smaller Groups)

Book Clubs

Start or join a book club/group/discussion. If you don’t like the word “club” find something different. Oprah won’t mind… why do you even care what she thinks? oprahAndDubmun Hopefully your company is willing  to sponsor a  book group with lunch provided and books paid. This is a minimal expense and provides a great return on investment. Reading books alone often isn’t enough. Having discussions with peers (who will definitely have takeaways you didn’t consider) is a great way to help maximize learning. In addition, adding coding exercises that pertain to the book topic occasionally really helps to cement the knowledge. More on that later…

One thing I’d like to call out here: if your group is larger than six people, consider breaking out into smaller groups for the majority of your discussion time. This is a neat trick I picked up from Mike Clement at Utah Software Craftsmanship meetups. Large groups tend to lend themselves a couple of antipatterns:

  • At best some participants may not participate because the more dominant voices in the room are taking up too much time.
  • At worst, you may have people napping in the back.

We implemented the breakout approach at my current company with great success. We get back together for an overall discussion for 10-15 minutes at the end of the hour and cover the points each group thought were most important.

Selecting the right kind of book is a very important concern here. Voting as a group is a nice way to get an idea of what people are interested in. Always be sure to select titles that will be good for discussion. Code cookbooks are an outstanding example of what not to read. I tend to prefer books grounded in theory, patterns, practices more than how-to books on specific technologies. If you aren’t sure where to start or don’t have money for books initially, there is a lot of great free material for discussions available online. Many blog post make for excellent discussions (hint, wink, nudge).

Presentations/User Groups/Meetups/Open Space

This section is a little more broad. Intentionally. There is an entire class of in-person interactions that can be extremely valuable learning tools. Many are existing groups and some you’ll have to go out of your way to create.

IPresentToYouTheOceanPresentations – The most formal entry of the section. Presentations are sometimes more valuable for the presenter than they are for the people watching. Nothing cements knowledge in your brain like stressing over sharing it with 5 to 500 other people all at once (for me anyway).

What you will take away from attending a presentation depends on your own personal learning style, the effectiveness of the presenter, and how much attention you actually pay to the presentation. I get nuggets from attending presentations but in general they have moderate value for me. So, “Present, present, present!” becomes my mantra.

“But where can I present?” you ask? The opportunities are out there. Present at work, user groups/meetups, coding dojos, code camps, large conferences, or just record yourself and post it online. Not sure how to get started? Go and watch someone present and ask them how they did it. This is also a topic I may write more on in the future.

User Groups/Meetups - Unfortunately I missed a great one of these (Utah Software Craftsmanship) last night because of pressing matters elsewhere. These groups are somewhat hit and miss, but if you find a few that are a good cultural fit and really match your interests they can be fantastic. User groups/meetups are a great place to learn, practice presentation skills, mingle with fellow techies, and often get free food.

Meetup LogoIf there isn’t a local user group that fits your interests, start your own. The most difficult part is securing a venue but local colleges and businesses are often willing to host your group. In addition, larger groups will attract sponsors who may provide swag for giveaways and/or food.

The best current place to look for a public group (or start one) is on Meetup.com.

Open Space Technology - I’ve only participated in one open space-style of meeting/collaboration unfortunately. It was at an Agile Roots conference back in 2009 and had a fairly profound impact on me. If you have the opportunity to attend an open space, I highly recommend it.

For more info check out OST on Wikipedia.

Coding Exercises/Katas

Coding exercises are a general term for writing code following a format lead by a presenter. There are many different subsets of exercises including design, gamified, and code katas. All of these have value, but I’m going to focus on the latter.

If you aren’t familiar with the term code kata, here is what Wikipedia says:  “code kata is an exercise in programming which helps a programmer hone their skills through practice and repetition.http://en.wikipedia.org/wiki/Kata_(programming). I like to compare it to a martial arts kata where we work to develop the equivalent of “muscle memory” for certain coding techniques. Kata Coding dojos are specialized meetups of people who perform code katas as a group. Participating in a coding dojo is something I look forward to every week. I always learn something new and almost always have the opportunity to help others do the same.

I have a future blog post queued up about my experience with starting a coding dojo at HealthEquity over the past year.

Part 3

It turns out I have too much to say for a 2 part post. In the third and final part of this post I will cover more in-person options for learning. It focuses on larger groups and formal training. Find it here: Part 3.

Also, be sure to check out Part 1 if you missed it.

I’d love to see your thoughts and comments below or to @dubmun on Twitter.

Posted in Career, Learning, Software Career, Software Development, Software Engineering, Team, Technology Career, Training Tagged with: , , , , , , ,

So You Think You Want To Write Code?

Intro

I had the opportunity to present a couple of sessions at the inaugural Dev Fest Fam conference today.

I’ll predict your next question: “Is this what has been keeping you from posting  the sequel to 2014 Developer Learning Guide Part 1?” The honest answer is no. I’ve been busy, it’s true, but I want the next installment of this post to be very good so I’ve been particular about publishing it until it is 100% ready.

#DevFestFam

http://devfestfam.com/#sessions

This conference is a fantastic idea! It was put on by a couple of local Google User Groups and hosted at Utah Valley University. For a first time conference, it was great and I have the feeling it will only get better. The beauty of it, was that coders/programmers/developers/engineers were to bring not only their spouse or significant other, but also their kids.

I took 3 of my own and they LOVED IT. My 10-year-old daughter coded all night long until it was time for her to go to bed after we came home! So cool!

My first session, “So You Think You Want To Write Code?” was a big hit and well attended:

session attendance

Almost a full house!

 

The second was at the end of the day and was titled: “Websites for Smarties”. It was a beginners hands-on-session teaching the basics of HTML. I used w3schools and Google Sites  as resources for teaching. I won’t post more on that here.

So You Think You Want To Write Code? Resources

The slides from my session “So You Think You Want to Write Code?” at Dev Fest Fam 2014 for kids age 8 and up.

 

The videos played:

 

I also handed out a flyer with the following information.

Online Resources
Code.org – code.org
Codecademy – codecademy.com
Pluralsight: Free Courses for Kids – http://www.pluralsight.com/training/Kids
Kids Ruby – kidsruby.com

Languages/Platforms
Scratch – scratch.mit.edu
Hopscotch – gethopscotch.com
Alice – alice.org

Other
BOOK: Snake Wrangling for Kids – http://briggs.net.nz/snake-wrangling-for-kids.html
GAME: Hakitzu Elite: Robot Hackers – Google Play and iTunes
MORE RESOURCES: http://happynerds.net/

Posted in Career, Family, Kids, Software Career, Software Development, Software Engineering, Training, Uncategorized Tagged with: , , , , , , , , , , ,

Interview/Hire Great Devs: Part 1

Hiring great technical people starts and ends with making a great impression on the best people. This means you have to get the best people in the door.  Once you have hired some of “the best”, your team will attract more of the same but starting out can be difficult. This post focuses on what to do once you’ve attracted their initial interest. I’m specifically covering interviewing and hiring awesome developers, but much of this is applicable across technical disciplines and other skilled positions.

Initial Phase: Resume/Profile Screening

Know What You Are Looking For

NYSpyglassStart the process by knowing what kind of great technical people you are looking for. Are you looking for great young talent that is unafraid of making mistakes? Or tried and tested people who account for exceptions before they arise? Are you looking for teachers or learners (or both)? Do they need certain specific skills or only the great desire and ability to learn, grow, and improve? What is the near, mid, and long term composition of your team?

Many questions should be asked and those questions don’t always have a clear answer. Do you need a consultant or full-time hire to help determine what you are looking for?

Be able to narrow your search quickly based on your must-have criteria and let the rest be discussion points during later phases of the hiring process. Don’t spend more than 5 minutes per resume, LinkedIn profile, or StackOverflow Careers profile weeding out the “No Call” people. It should be obvious because you already know what you are looking for.

I recommend creating two Top 5 lists to assist with knowing what you are looking for. The number of items on the list isn’t the focus. Use 3 or 7 or whatever suits you. It’s the exercise that is important. Write down 5 must-have attributes and 5 must-not-have attributes. Use these lists during initial screening. Pass on anyone with less than 4 must haves or more that 1 must-not-have.

Second Phase: Phone/Online

Personality First

Phone screen or Skype/Hangout for personality and team fit first. I prefer to see people face to face but this isn’t always possible. If you are starting a new team, this phase is even more important. The person you are screening should be someone you can see yourself having an interesting conversation with over lunch. You will be spending a lot of time together building a team. Getting along well is vitally important.

Split PersonalityThe personality screen doesn’t need to be long. Maybe 15-30 minutes. If it goes well, move on to the next phase without hesitation. If is doesn’t, this is the end of the road for this candidate regardless of their other credentials. This may seem extreme or harsh but honestly it saves your time and effort as well as the candidate’s.

On the flip side of this is the importance of representing the culture and personality of your group as accurately as possible. Talk about your goals and aspirations as a team and as a company. This gives the candidate an opportunity to self-select out of the hiring process as well. You don’t want to hire people who won’t be happy in your environment. Honesty is definitely the best policy.

If you are looking for a leader (or emerging leader) this is also the time to make a early assessment of the candidate’s ability to fill this role. Confidence and charisma matter more here that they might otherwise.

The Learning/Knowing Equation

A technical (and partly cultural) phone/online screen of the people you think might be a good personality fit is the logical next step. The interview should be performed by a trusted technical member of your team. This phase is going to go back to the first section because you must know what you are looking for. Rank candidates based on that knowledge.

That said, don’t hold out for a “unicorn”. For our purposes, a unicorn is a developer who knows your tech stack inside-out, knows your business, and knows what you need to do to solve all your current and future problems. I believe unicorns can be developed if you hire people with the right potential, but they cannot be found and hired. At some point the mask comes off.

unicornDeveloper

With this in mind, your focus should be on the candidate’s ability to learn and on gauging what they already know and their ability to teach it. These traits are and probably always will be vital for a technology employee. Of course you’d like someone with experience in some of your technology. The point here is not to miss out on someone who is a fantastic learner/teacher and doesn’t check all of the other boxes on your checklist.

teaching LearningI describe this second screening as partly cultural for a reason. Your interviewer should be verifying that the candidate not only can learn and adapt quickly, but also if they enjoy learning and adapting quickly. When going through the things they do know, the interviewer should look for something they are personally less familiar with. They then can encourage the candidate to teach it to them.  Remember to discover if the candidate is not only capable of teaching but also if they enjoy it. The collaboration component is important.

There are great tools to help with this phase. A good screen-sharing app like GoToMeeting, Skype, or Screen Hero is the best way to do some quick pairing on a simple problem. The problem should be something the candidate may not be wholly familiar with so that their capability of dealing with the unknown can be assessed. That said, this should still be fairly short and sweet. 30-45 minutes tops.

If it seems like this is a good possible fit, personally invite the candidate to visit your facility. If you don’t have a facility, invite them to lunch. If you are looking at remote or relocation hires and the position is permanent, you should arrange transportation/lodging. Under no circumstances should you ever make an offer at this point in the process.

The candidate should have a clear and concise understanding of the next steps at this point. If you are unsure if you should move on to in-person contact, the answer is no.

Part 2 Coming Soon

I will cover the particulars of the types of things you should be doing to “Hire Awesome” in the in person interviews. No specific date, but stay tuned. In the meantime, I’d love to see your thoughts and comments here or on Twitter.

Posted in Career, Software Career, Software Development, Software Engineering, Team, Technology Career Tagged with: , , , , ,

2014 Developer Learning Guide: Part 1

Background

This is part 1 of a now complete series of blog posts. Be sure to read 2014 Developer Learning Guide Part 2 and Part 3.

I originally wrote on the subject of developer training in 2010. It was with the idea that I would convince management of the importance of training technical employees. I wrote an internal document for my boss and we implemented a couple of the ideas. My boss was understanding although his boss was less so and that limited some of our options. One year (and one move to Texas) later and I was back in the same boat; I was handing a document off to my boss and trying to convince him of its validity and importance. We eventually started some great traditions at that company and I ended up publishing my Guide To Developer Training For Managers on my blog around the same time. As I started looking into moving back to Utah in late 2012, I was despairing that I would forever have to sell leadership on the value of developer training every time I came to a new company… can you say facepalm?

facepalm

It occurred to me that I might be taking the wrong approach. As I ramped-up  on interviews I noticed that a couple of companies stood out because they already had begun to establish a culture of learning. I’m happy to say that I chose one of those companies and today I enjoy a work environment where leadership not only “gets it” but is an active promoter of learning and training. Ideas that are brought up to improve training are not only appreciated but are also seriously considered. And I don’t even have to write a long and windy proposal first.

What a difference!

I’m still going to talk briefly about a few of the reasons developer and technology employee learning is important. Convincing managers will no longer be the major focus of the article. As you may have noted from the updated title, I’m refocusing to list learning options that are possible, valuable, and current. I’ll also post an updated list each year.

Importance

The anecdote I’ve heard several time goes like this:

Decision Maker 1: What will happen to our company if we train our technology employees and they leave to find better jobs elsewhere?
Decision Maker 2: What will happen to our company if we do not train our technology employees and they stay?

Two varying points of view obviously.

On a team where learning is not important, developers tend to stagnate or move on. Will the best talent stay in an environment like this? I’ll spare you the A, B, and C-Player talk. It should be sufficient to say that a lack of learning isn’t healthy for development culture.

Ultimately, it is the responsibility of the developer to seek learning and the best developers know this. Are the best developers going to be working for companies without a great learning culture? That scenario seems unlikely to me.

Learning Options

What if I told you that a classroom isn't always the best learning environment?

Developer training doesn’t necessarily begin or end in the classroom.

There is a wide spectrum of cost among differing methods of learning. A good mix assures plenty of coverage without completely breaking the bank.

This list is meant to be only as inclusive as I could make it given my current knowledge. Please leave a comment or contact me if you know of options I’ve missed.

Online/Print

Videos

This is usually one of the best places to look for technology-specific and implementation-specific training. There are multiple options and they are growing all the time.

Free – YouTube, Vimeo, Egghead.io, Channel9, etc.
The quality of free videos varies. The only advice I can give, is to avoid wasting time with something that doesn’t seem valuable pretty quickly.

Subscription – Pluralsight, Wintellect Now, Lynda.com
Subscription-based video training tends to be pretty well curated by the company selling the subscriptions. They rely on ongoing subscriptions for revenue so new high quality content is constantly being released (or the model is not successful). Pluralsight (http://pluralsite.com/) in particular has an enormous and constantly updated library… and no, we aren’t affiliated. Pluralsight has purchased several of the smaller players to help build out their library over the past couple of years. Subscription may cost as much as $499 per year, and is a good return on investment if you learn well this way.

Purchase – Udemy, Cleancoders.com, etc.
These tend to also be of higher quality than the free options in my experience. There are some great sources out there… but you may have to hunt for them. Word of mouth has been valuable to me here.

Social Media/Blogs/Podcasts

If you enjoy this blog, follow me on Twitter.

If you enjoy the blog, follow @dubmun on Twitter.

There are a wide variety of options here. Find people who talk about things you are interested in and subscribe to their blogs or follow them on Twitter/Google+. In my experience, many of the thought leaders in the developer community are on Twitter. This has the added benefit of allowing interactions if you have a question about someone’s latest tweet or blog post.

Podcasts can also be very, very good as long as they aren’t too sales/technology focused. Choose wisely. I find them particularly useful for long commutes. HerdingCode (http://herdingcode.com/), Ruby Rogues (http://rubyrogues.com/), and Writing Excuses (my SF/Fantasy writing guilty pleasure) are among my personal favorites. A good podcast app is a must as well… downloading all the episodes manually can get tedious.

This is where the cutting edge lives and breathes. If you want to know what is really happening you should be reading and hopefully contributing to this kind of content.

Open Source Repositories

This is the section for Github, Codeplex, Google Code, and Sourceforge. Github is definitely the current leader and you can find awesome and interesting code in any of these repositories.

Looking at how other people code is a great resource for learning. Additionally, submitting a pull request to an open source project can be the fast track to learning (albeit a potentially humbling one). Humility is a good thing, it lets us know where we can improve.

Books

I’ve heard a lot of varying opinions on books as a training resource. Yes, technology-specific books are often outdated before they are printed. I generally avoid the latest C#, Java, Clojure, Javascript, etc. books (with a few exceptions). The flip side of this is… if you do choose to read tech-specific books, be sure to get the latest version.

What a library!

Some options here…

My thought is that when you are really looking to deepen your knowledge on something specific, books are a great resource.

There are also many classics that are as close to timeless as you can get in this industry. I highly recommend books like The Pragmatic Programmer, Clean Code, The Art of Unit Testing, Design Patterns, and Domain Driven Design as examples of excellent resources for learning practices and patterns or as reference material.

Books are available in several formats as well: hard-copy, ebook, and subscription.

Hard-copy and ebooks are basically just a matter of preference. I find that I like having a hard copy of books I might lend to others, but nothing beats the convenience of an ebook that you can read on multiple devices. When I have the option, I get both.

Subscription to a service that provides ebooks can be really handy as well. Particularly if you find yourself reading a lot of technology-specific books. Safari Books (http://www.safaribooksonline.com) offers hundreds of titles on technical subjects for $199 or $460 annually.

Remember…

…to read 2014 Developer Learning Guide Part 2 and Part 3.

I’d love to see your thoughts and comments below or on Twitter (@dubmun).

Posted in Software Career, Software Development, Software Engineering, Technology Career, Training Tagged with: , , , , ,

When To Quit Your Job

A friend asked for my advice on this subject recently:

I’m kind of thinking about changing jobs. I’m doing good at [COMPANY] so no concerns there. I would honestly rather be working in the software and technology space, instead of the financial industry. [...] The other factor is that I’m not in an area where I can attend conferences and be involved in a good development community. I’ve only been at [COMPANY] for [less than 12] months. What do you think?

While I was flattered to be asked for such personal advice, I’m not really qualified to say what’s best for anyone. Maybe not even myself. Remember this.

The following is the philosophy that I try to follow in terms of changing jobs in case helps anyone.

When To Leave

First, as anyone I’ve talked with about this will tell you, I’m a big proponent of changing jobs at least every 3-4 years.

Departures

In our profession, this helps us remain fresh and exposes us to new tech/architectures/ideas in a way that is hard to ignore. This is a good thing. My general rule holds unless there are special circumstances. For example: vesting concerns, when nearing retirement, or another important life event. I’ll also interview every year or two in order to keep my interviewee skills honed and because it helps me to be a better interviewer when I’m performing interviews at my current company.

When To Stay

As for a shorter end of the tenure spectrum, I usually will stay a minimum of 1-2 years.

Again, this is a rule of thumb. I’m not going to cover all of the exceptions here. If circumstances like a hostile work environment or an amazing new opportunity came up, I would consider breaking it. I have a friend who left a company after a couple months once because it ended up being hostile. I can’t imagine any decent future employer who would fault him for this. However, it is the only instance like this in his career. An established pattern of “hostile” work environments is a read flag all by itself.

If you are making an immediate decision, sleep on it. One more night can help organize your thoughts and shouldn’t hurt anyone involved.

Regrets

Don’t make a hasty decision you might regret.

As for my recommendations, the first year is basically for resume purposes… taking a full-time employee position and then quitting before a year is up might make some employers question the value of going through the cost and effort of bringing you on. It may even be “interview prohibitive”.

The second year and beyond is often when I find that I learn the most about a business, can contribute the most (due to knowledge, trust/influence earned). It is also when I solidify relationships with people I work with.

Contracts

MercenaryAll of this is basically thrown out the window for contract positions. Contractors are expected to be mercenaries, to an extent, and might switch companies/projects every month without much scrutiny. I think there are some interesting things to be learned from that as well but I don’t have a lot of personal experience. I’ve considered joining a firm similar to Catapult or StG that sends contractors out to multiple companies and has a bench program for downtime. I believe it would be a valuable experience.

Summary

So the short version is: except for contracts, aim for a 1-4 year stay whenever starting a new job. Commit to this mentally, or don’t accept the offer. An exception could definitely be made in either direction under the right circumstances, but don’t plan on it. In practice, I have stayed at each of my gigs for 2-3 years without exception.

In my friend’s case, his company/team doesn’t match the values he wished they had and isn’t working on anything terribly interesting. Also, he is considering leaving the area. Not an emergency per se, but not great either.

My advice to him was to stick it out until a year is up while doing his best to influence change at the company. If things don’t start to improve in that time-frame, (i.e. if he felt he wasn’t having a positive impact) start looking.

Again, I’m not really qualified to advise anyone on their particular situation. I do believe these ideas have value and should be discussed.

 

Posted in Career, Software Career, Technology Career Tagged with: , , ,

Legacy Dependency Killer

As promised, here are the slides for my hands-on coding session at Utah Code Camp. Thanks to everyone who attended the session. I had a lot of fun and I hope you did as well.

Also, the code is on Github: https://github.com/KatasForLegacyCode

I’d love to get it translated into Java, C++, and any other language that would be reasonable. I could probably do either of those myself, given past experience, but it’s been so long I couldn’t guarantee that the code I produced wasn’t legacy as well. If anyone is interested in helping out here I’d be very appreciative.

Hopefully, I’ll be creating other katas for legacy code in C# using other common patterns and publishing them here as well.

Posted in Software Development, Software Engineering Tagged with: , , , , , , ,

I Like Food

Hopefully this article isn’t as banal as the title suggests. “I like food” is what I say when someone in the office asks me to join them for lunch (usually).

Why?

food-question-mark-628x363

 

Because I like my teammates? Sure.

Because I’m hungry? Usually.

Because I like food? Also true.

Because want to enhance my relationship with my coworkers and build camaraderie among the group? Getting warmer but not quite. The familiarity that comes from knowing someone outside of work does tend to humanize them and help with relationships and camaraderie (and all those touchy-feely things we engineers aren’t supposed to care about because we’rerobotswhoonlyknowhowtowritecodeanddrinkmountaindewandurinateinemptybiggulps).

In my experience, the real benefit is in improvements to communication and cohesiveness. It’s in the ability we gain to understand each other as people, to know our strengths and weaknesses, to use shorthand in communication, to avoid causing or taking offense, and to just be more effective working together. Whenever possible, I like to participate in non-work activities with my brothers-and-sisters-in-code (and sometimes with others at the company as well) because it makes us more effective. Good companies/managers understand this concept and go out of their way to engage teams in “teambuilding”. This can be a dirty word in the wrong environment. Don’t work in that environment!

ready_to_eat

So unless I have an important errand to run or previous plans, invite me to lunch. I like food.

Posted in Career, Random, Software Career, Software Development, Software Engineering, Team, Technology Career Tagged with: , , , , ,

Software Prototyping: Please Throw This Away

I believe in the value of prototypes.

So do manufacturers, designers, and silicon valley. New hardware concepts at large coprorations like Google, Apple, and Microsoft are accompanied by many prototypes (for example Google Glass).

prototypes

User interface prototypes are key to discovering usability and are commonly used by designers. Often this starts with pen and paper before a single mouse is clicked or keystroke registered.

uiprototype

One similarity shared by all prototypes I want to mention before continuing is this: prototypes are never meant for use by the end user. In the case of Agile software development, we may have a select group of users work with prototypes with the knowledge that they will never see production usage in their current state. Additionally, if a piece of software serves some purpose in a production environment, it must be developed as such.

Opinions will vary on this subject, but here are the most important traits of a software prototype in my opinion.

  • A software prototype is developed in isolation. No (or absolute minimum) interaction with existing code.
  • A software prototype follows coding standards. We write clean code regardless of its final use. Perfect practice makes perfect results.
  • A software prototype is written by people who are constantly learning and training to hone their craft. More on this later.
  • A software prototype is written by people who will be responsible for writing the finished product.
  • A software prototype is discarded. I repeat. Throw it away after demoing it.

When the above specifications are followed, we gain some specific benefits.

  • We are provided the opportunity to experiment with a few of the myriad different solutions to a given problem.
  • We have the opportunity to learn from mistakes before creating a production-worthy solution.
  • We have the opportunity to use the best design possible based on first-hand knowledge when creating the final product.
  • Product/business people see their concepts in action earlier in the software development lifecycle.
  • Other groups/departments aren’t paying people to learn to develop software they aren’t ultimately going to create.
  • The company enjoys faster overall development times as technical debt remains low.

everyoneWins

My continued belief is that many companies have a large disconnect between technical and business people on the purpose and value of software prototypes. Prototypes are as much for developers and engineers as they are for business and product people. Technical teams should own prototype implementations.

Posted in Software Development, Software Engineering Tagged with: , , ,

C# Little Wonders: An Introduction

csharplogoI’ve mentioned C# Little Wonders to engineers on various teams in recent years and several had expressed interest in the URL (when I successfully remembered/found it). I thought I would share it here and save some time.

James Micheal Hare (the series author) has added multiple posts to his blog over the past 3-4 years after switching from being a C++ engineer to C#. Given his background, Mr. Hare is very focused on efficiency. His concise approach and thoughts on why to use certain language features (or not) are very valuable.

If you are new to writing C# or have been doing so for many years, you’ll agree that it is a complex language. I have found and continue to find in C# Little Wonders much that I either didn’t know, had forgotten, or didn’t realize the value of.

C# Little Wonders

http://blackrabbitcoder.net/archive/2011/09/26/c.net-little-wonders-the-complete-collection.aspx

I hope you enjoy it as I do!

Posted in Uncategorized

Movies: Physical Or Digital Media (Legally?)

The Problem: Physical Versus Digital Media

Let me begin by saying I’m a programmer and we are, by definition, lazy. I despise physical media for its inefficiency and general in-the-way-ness. DVDs, CDs, cassette tapes, VHS, etc. The only real exception here is books. Something about holding a dead tree… but I digress.

digital media

I’ve gone out of my way to digitize everything possible for many, many years and it hasn’t always been easy. Recently, laws have been passed that say you can’t even make a copy of your own physical media for backup or viewing on your computer or media device. I’m certainly as willing to pay for digital content as the next guy. You just have to make the value proposition worthwhile. That’s all I ask.

Why Is Getting A Copy Of Digital Media So Hard?

The first time I tried to redeem a copy of a Blu-ray in digital media format via UltraViolet (http://www.uvvu.com/) was a couple years ago. It was some movie we had bought and I’m not sure I even remember why… probably just because we wanted so badly to support the people who made it. I get that way sometimes. Great work should be encouraged with cold hard cash.

Frankly, the UltraViolet process was TERRIBAD. Account creation was a joke and once I finally made it through that travesty, I couldn’t get the movie to register in the system. I tried again at some point not too far in the future (due to an unrealistic sense of optimism) and was again devastated by the total lack of anything resembling working software from UV. I downloaded a copy of the movie through alternative means at this point and forgot about the whole thing.

A New Experiment

Fast forward to last week… I am in the unique position of having my electronics infrastructure spread around the United States and I find myself buying DVDs/Blu-Rays more frequently than I normally would given the lack of available alternatives. Couple that with the fact that the missus had a flight to California scheduled and wanted to watch the copy of The Hobbit we just purchased on her Kindle Fire. Staring down the possibility of shelling out cash for a digital copy direct from Amazon, and paying AGAIN, I found myself gazing upon the UltraViolet sticker on the dragon-hoard pilferer’s Blu-ray and thinking to myself:

There is no possible way this will work, but I have to try.

The digital rights for the movies are kept by UltraViolet but it turns out that I can actually redeem them through Vudu (http://www.vudu.com). Vudu also works on iOS, Android, PC, and a ton of other devices as well. I’m vaguely familiar with Vudu because there is an app for it on my PS3 so I figure, “cool, I’ll be able to watch it there as well if by some freak chance it actually happens to work”.

I begin the registration process on Vudu and… it. is. surprisingly. simple. It asks me to link my UltraViolet account OR it will go ahead and create one for me if I don’t have one. I choose life:

It lets Vudu do the work so it doesn’t get the hose again.

This seems to be going okay but I’ve yet to enter the code for the movie. I search for the movie regarding the adventures of the esteemed Mr. Bilbo Baggins, click the button to redeem my UV copy, and presto-chango! I now have a digital copy of the movie that I can either download or stream through Vudu… apparently at will! I click play and the movie queues up as fast as anything on Netflix. No complaints there.

Next I navigate to “My Collection” on Vudu and find that they have gifted me with 10 other random movies that are now synced to my  UltraViolet account as well. Some of them are even good!

Now, some of you may see the problem that I ran into next… there doesn’t appear to be a Vudu app on the Kindle Fire.

Facepalm.

Some quick Googling reveals that I could sideload the Vudu app from Google Play but that doesn’t seem to be confirmation that this will actually work. The alternative is to create a Flixster (http://www.flixster.com/) account, attach the UltraViolet account to it, and watch the movie through that app which IS available on the Kindle. My sense of foreboding returns as I can only imagine that using the UV account with more than one movie vendor is going to cause a giant charlie foxtrot… if you take my meaning.

Strangely the process is pretty smooth. To my delight, the Flixster account now has access to not only the short, round, furry-footed fellow from The Shire, but also all of the free movies I received from the Vudu signup process. IT’S LIKE MAGIC THAT ACTUALLY WORKS WHERE IS THAT WIZARD HIDING AND WHAT IS HE UP TO?!

digital media

Now my wife has plenty of entertainment for her trip and I’m kinda stoked about this whole thing. I grab the few other movies I have laying around my temporary residence and find that they are added to both Vudu and Flixster with ease as well.

This is giving me warm feelings because I’m generally happy to pay for media that I love as long as it isn’t more trouble than the alternative. I’ve long since traded in my mp3 collection for a Spotify Premium membership and generally watch anything and everything available on Netflix before looking for another source. It seems I may actually have a viable way to own the movies I really enjoy without the hassle of living on the edge of the law. If only the Television industry would make shows instantly available and do something about the prices of their series I could get behind that as well.

One final thing: Vudu and Flixster are both offering another tempting option. You can purchase digital media copies of every physical movie you own for 2-5 dollars each. This is making me pretty glad I still have that considerable DVD collection!

Posted in Random Tagged with: , , , , , , ,

Guide To Developer Training For Managers

Developer training often neither begins or ends in the classroom.

Developer training often neither begins or ends in the classroom.

First things first, why on earth would you want to train developers? Isn’t that just an added expense? This is a fallacy for a several reasons including the fact that:

DEVELOPER TRAINING DOESN’T HAVE TO COST ANYTHING

More on that part later!

Development training and continuing education is vital to companies that want to maintain a healthy and satisfied development group. When we opt to invest in training, we are choosing to ­­retain valuable specialist employees and to teach them to be more effective at what they do. This has multiple benefits for the company and the employee:

Efficiency/Simplicity – Employees become faster, more efficient, and make fewer mistakes when they have hands-on training in best practices. This also results in a simpler and more easily maintained code-base.

Hiring – A great training program for development is an excellent selling point when looking to attract new development talent. Top tier developers want to surround themselves with others who are as good or better than themselves. A great training program is a good way to develop that talent and is something top talent looks for.

Preparation – Developers with training in upcoming technologies are quicker to see how they can implement them in their organization to the good of the company. These developers are better able to see industry and social trends which can give your company an ongoing competitive advantage. Also, they will be able to point to reasons why a new technology choice may not be right for the company. When the company’s bottom line is healthier, everyone wins.

Teamwork – Developers who train together work well together. They tend to develop camaraderie and work more effectively at solving problems as a team. Training together also helps expose developers to each other’s strengths.

Job Satisfaction – Well trained developers are are learning developers and let’s face it… if we didn’t like learning we wouldn’t be in this profession. When developers begin to feel stagnant they may start looking for work where they can grow or they may also become careless and write poorly thought-out code.   A good training program will help to keep developers satisfied and satisfied developers don’t go out of their way to look for other employment. This allows the company to retain their existing workforce longer and save the money and overhead involved in hiring (training, recruiting fees, bonuses).

——-

Potential Technology Training Topics

Topics should be chosen based on their applicability to the needs of the business. No responsible developer would expect otherwise. Also, real business problems should be given to help teach theoretical concepts through workshops (more on this below).

Methods of Training

Technology training can be very expensive if allowed to be. Hiring outside training companies, attending seminars, and certifications should be supplemented with sessions presented by internal experts, videos freely available online, and book discussions.

Valuable employees should be encouraged to train on their own time in addition to being given training on company time. This give and take approach will help your company realize the best gains by encouraging a knowledgeable and proactive culture among developers.

Online Videos
1-2 Hours – Daily/Weekly/Monthly
Free
These can be held during lunch or outside normal work hours. If a developer misses the presentation they can catch up on their own. A great resource for Microsoft related videos is http://channel9.msdn.com/

Developer Presentations
1-2 Hours - Weekly/Monthly
Free
Could be held any time. Presenters should be by volunteer only. Topics should be in line with the current curriculum.

Workshops
2-4 Hours - Monthly
Free
A workshop should follow a series of videos and/or developer presentations that cover the same or similar topics. No specific homework but the implementation should be something of value to the company at least as a prototype. Sessions held during business.

Workshop Follow-up
30 Minutes - Monthly
Free
Developers present their solutions to the workshop problems. Should take place a few days after the initial workshop.

Book Discussions/Club
1 Hour - Weekly
Cost of Books (Free-$80 per participant)
Developers vote on and read a technical book each month and discuss it for an hour during lunch or work hours. Books could be purchased by the company or by the developers. There is a lot of great free material for discussions available online as well.

Onsite Training Seminars
1-N Days - As Needed
Varies: $1000-5000 for up to 25 attendees
An inexpensive, onsite training. The internet is your friend… do a little research and you can find many companies offering this type of service.

On-Demand Video Training
1 Year - Annually
$100-500 per user
This type of training can be handy because is is available at any time and the people who produce/present are professionals who are not only experts in the field but can also give great presentations. There are several providers of this kind of content including Tekpub, PluralSight, and Peepcode. **
http://pluralsite.com/
http://tekpub.com/
https://peepcode.com/ 

**Tekpub and Peepcode have been purchased by Pluralsight since this was written. Looks like we’re going with Pluralsight!

Safari Books Online
1 Year - Annually
$199 or $460 per user
Safari Books offers hundreds of titles on technical subjects related to the development profession and Microsoft specific technologies.
http://www.safaribooksonline.com

Offsite Development Conferences
2-5 Days - Annually
$500-5000 per attendee
These are the conferences that really get the creative juices flowing in developers. Most major tech companies have at least one developer conference per year (Google, Apple, Facebook, Microsoft). Most companies with a decent training budget send their developers to one per year (almost never 2+). Estimated cost includes hotel and transportation.

developer training

Offsite Developer Training

Certifications
Varies - Varies
Varies
Some companies pay for developers to train for and take development certification tests.

Graduate Degrees/Tuition Reimbursement
Varies - Varies
Varies
Many companies offer to reimburse employees engaged in higher learning. This is another great opportunity. Encourage your employees/coworkers to take advantage of this benefit if it already exists!

——-

As you can see, the options for training developers run the full gamut of price, time, and commitment. The great news is, even if your company has little or no budget for training, all you need is a couple committed developers to get started with the less expensive (free) types of training. Now is the time to start training so that your company will attract, retain, and benefit from more highly trained and competent developers!

Posted in Training Tagged with: , , , ,

SassAndCoffee Is Not A Smutty Romance Novel

SassAndCoffee !=

 Not SassAndCoffee

So what IS SassAndCoffee? From the author’s (Paul Betts) blog post:

SassAndCoffee is a library for ASP.NET (both MVC and old-school WebForms) that adds drop-in support for two new languages: Sass and SCSS, a language that allows you to write reusable, more structured CSS, as well as CoffeeScript, which is a JavaScript dialect that is much more syntactically elegant, but still preserving 100% compatibility with regular JavaScript.

I’ll go into more detail about the features of SassAndCoffee momentarily, but lets start with getting it into your project in Visual Studio.

You could grab the project form GitHub and compile it yourself but the simplest way to include the assemblies needed is through NuGet

SassAndCoffee’s NuGet project also adds some entries in your web.config:

 <system.web>  
     <httpModules>
       <add name="CompilableFileModule" type="SassAndCoffee.AspNet.CompilableFileModule" />
     </httpModules>
 </system.web>

 

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="CompilableFileModule" />
      <add name="CompilableFileModule" type="SassAndCoffee.AspNet.CompilableFileModule" />
    </modules>
</system.webServer>

 

Once this is complete, just create a .scss or .coffee extension file in your project and reference it from your HTML as if it were already interpreted as .css or .js respectively. We’ll go into more detail on this.

The main features you get from SassAndCoffee are as follows:

  • Easy setup: No need to install Ruby or node.js or anything else. Everything that is required is included in the NuGet project.
  • Automated compilation: simply add .scss or .coffee files to your project and reference them in HTML as you normally would (as .css or .js files) and SassAndCoffee handles the compilation and output linking at runtime.
  • Automated minification: minify your output files as well as other .js and .css files in your application with a simple naming convention.

Now let’s check out an example with Sass using the file SassAndCoffeeDemo.scss:

@mixin customDivText($size){
    font{
        weight: bold;
        size$size;
    }
    text-align: right;
}
 
div.big{
    @include customDivText(70px);
}

div.bigger{
    @include customDivText(150px);
}

Index.cshtml:

<div class="big">Big</div>
<div class="bigger">BIGGER</div>

_Layout.cshtml:

<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" 
type="text/css" />

Now our output looks this in the browser:

And SassAndCoffeeDemo.css contains:

 

div.big {
  font-weight: bold;
  font-size: 70px;
  text-align: right; }

div.bigger {
  font-weight: bold;
  font-size: 150px;
  text-align: right; }

Let’s try a “Hello World” in Coffeescipt. I’ll add the following code to a file named SassAndCoffeeDemo.coffee.

helloCoffeeScripters = (name) -> 
alert("Welcome to Coffeescript, "+ name)
 
$ ->
	helloCoffeeScripters ("World")

And refrence it in my _Layout.cshtml master page:

<script src="@Url.Content("~/Scripts/SassAndCoffeeDemo.js")" 
                        type="text/javascript"></script>

When we run our app we should see the following:

When we view the source of our .js file we see that the Coffeescript compiler has emitter the following javascript:

var helloCoffeeScripters;
helloCoffeeScripters = function(name) {
  return alert("Welcome to Coffeescript, " + name);
};
$(function() {
  return helloCoffeeScripters("World");
});

Now lets consider the other SassAndCoffee feature that tends to get overlooked, Minification. If we change the Coffeescript file name in our _Layout.cshtml file to include “.min” like so:

<script src="@Url.Content("~/Scripts/SassAndCoffeeDemo.min.js")" 
type="text/javascript"></script>

Then when we compile and view the source of our file we will see:

var helloCoffeeScripters;helloCoffeeScripters=function(a){return alert("Welcome to Coffeescript, "+a)},$(function(){return helloCoffeeScripters("World")})

The beauty of SassAndCoffee is in the amount of attention that you DON’T have to pay to it. It just works! Import the NuGet project and you can get to the business of learning how to use Sass and Coffeescript right away.

Refrences:
https://github.com/xpaulbettsx/SassAndCoffee
http://nuget.org/List/Packages/SassAndCoffee
http://sass-lang.com/
http://jashkenas.github.com/coffee-script/

Thanks to @alamocoders for letting me present this topic at their last .NET meeting. I had a blast. Here are the materials from the presentation if anyone is interested. It includes the source code and my slide deck.
http://dubmun.com/projects/SassAndCoffeeDemo.zip

Posted in Web Development Tagged with: , , , , ,

WHAT IS YOUR FAVORITE INANIMATE OBJECT?

Easy answer for me… but first a tiny touch of background. I am a self-proclaimed CGFWB (Computer Geek From Way Back) according to my profile on http://www.dubmun.com :)

So, my favorite inanimate object?

TRS-80ii

Clearly I’m going with a computer! These days I would prefer one a little more modern, but you get the picture!

Posted in Random Tagged with: , , , ,

Thermonuclear War: Or How To Make Recruiters Behave

If you’ve ever posted a technology-related resume on Monster, Dice, LinkedIn, or any number of job board sites, you know that tech recruiters/headhunters can be a huge time sink. We spend time building an online reputation and sometimes it seems that our only reward is to be bombarded by calls and emails from people who barely grasp computer basics let alone the complex work that we do.

Recruiters Want You!

My take on recruiters varies. Some are spambots (or just as annoying) and many don’t understand our industry very well having only memorized a few buzzwords so they can “sound” knowledgeable. These are the emails and calls we get regarding positions for project management, that esoteric language we had 6 months of experience with 8 years ago, or some other equally random position.

The trouble is, when you’re looking for work (or worse, out of work), recruiters can be something of a necessary evil. Also, in the current job market, I’ve had the occasion to point several unemployed friends to specific jobs that had been forwarded to me by recruiters.

There are also an elite few technical recruiters who have worked in the tech industry and ACTUALLY GET IT. These recruiters can be valuable allies and will only work with quality positions/professionals/companies. Having a few in your email and LinkedIn contact lists is highly recommended. They can advise you on preparing for your interviews and help negotiate acceptable salaries. Most importantly, they point you to positions that are exactly what you are looking for in every respect.

My advice is to start building a list of recruiters you feel comfortable working with now and filtering out those who spam you or merely fail to stand out from the crowd. I know that networking is distasteful to many technical people, but it is worth the time it takes in terms of finding interesting, meaningful, and lucrative work with people and companies that you like.

Here are a few tips to get you started:

Thermonuclear War

  1. Unsubscribe from automated emails. This will save many hours of headaches reading job descriptions that are barely related to your skills. If this does not have the desired effect, filter them to spam.
  2. Be direct with recruiters. Tell them exactly the kind of positions you are interested in. Include background, preferred companies, technologies, and locations. See Example 1.
  3. Don’t be a complete jerk. Like everyone else in the world, technical recruiters are trying to earn their paychecks… Also, if you make a name for yourself as being difficult to work with, the best recruiters will avoid you.
  4. Proactively manage your recruiting contacts. Let recruiters know your policy of not working with them if they aren’t useful and nuke the ones that have been ineffective. See Example 2.
  5. Follow through. This probably goes without saying, but stick to your guns! There are plenty of recruiters out there, choose to work only with the best!

EXAMPLE 1: An approach I took when looking for work (but not too urgently).

Subject: Opportunity Search and New Resume/CV

As may you know, my current employer has recently performed layoffs. I still work for the company but I’m seriously entertaining other options at this time.

Management has always interested me and my experience has grown in this area so I will be focusing my search on leadership roles (Software Development Manager and equivalent). I am willing to relocate to make this career jump and am searching far and wide but I am particularly interested in opportunities in the states of Utah, Texas, Oregon, and Washington. I am mainly interested in permanent positions but contract-to-hire could be acceptable as well.

I’m attaching two recently updated copies of my resume for your review. Please note that one is management focused and the other is software engineering focused. All of the differences between the two resumes are on the first page. As always, I welcome any and all feedback: positive or negative.

Sincerely,

William Munn

EXAMPLE 2: Clearing out ineffective recruiters now that I am settled in my new position.

Subject: Recruiters/Talent Sourcers

Friends,

You may not have noticed, but I’ve recently trimmed my LinkedIn contacts to remove people I have little connection with and that includes about half of the recruiters who were connections. I’m trying to keep the list more clean and will continue to blow the cobwebs out of the corners occasionally.

The point of this email: If you and I have ever worked together and it resulted in my being offered an opportunity with a company, GOOD NEWS! I probably won’t be removing you… ever (but don’t let that stop you from writing a recommendation for me)  Those of you who haven’t, you should consider this notice that you might want to find a good reason to stand out in my mind from time to time or I will likely drop you as a connection in the next 6 to 12 months. This will be even more difficult because I’m happy with my job and not currently looking for a change of any kind. Most of you have already done this to an extent or I would have cleaned you out with the recruiters who made no impression on me at all. You are the cream of the crop. The best of the best. Insert more Top Gun references here!

I know this is very blunt and probably a bit brash as well but I feel it needs to be done. Remember, I’m still more than happy to stay in contact with professionals who I feel can bring something to the table that might be interesting to myself or my large pool of talented former/current work colleagues. I know I’ve alternated the tone of this message between serious and lighthearted but I assure you I am very committed to working with people who have something serious to offer. Just keep in mind that this is an ongoing initiative for me and my memory is short!

All the best!

Sincerely,

William Munn

Please email or tweet me your comments and suggestions on how you manage recruiters and I will update this post with the best of them. My contact details are available on my profile website http://www.dubmun.com

P.S. Special thanks to my proofreaders: Dwayne, Kelly, and Jeff!

 

Posted in Career Tagged with: , , ,

Technology Internships: Paid or Unpaid?

I recently tweeted the following:

Devs/Designers: did you have a paid internship when you were in college? If so how much did you make? #howtechnologyinternshipspay

My goal was to get some perspective for a friend who was considering various options for his upcoming college career. He was hearing conflicting information on getting a paid internship while going through a Computer Science program and had only my own experiences to go by.

Once I started reviewing the results, I found very them interesting so I thought I would share with anyone who cares to know. Namely you: my friends and tweeple.

Now the facts. First, most of the responders interned at some point during the past 15 to 20 years. The range of pay during that time was between $8-$22 per hour with the majority falling between $12-$15 per hour. Of the those that responded who are currently interns or were interns between 2010-2011, the common range seems to be $15-$20 per hour.

It is also worthwhile to note that many respondents also received other perks that I did not attempt to monetize. Examples of perks range from free food to tuition assistance to free rent.

The reality of the situation seems to be that future technology interns should not be asking if you should take a paid or unpaid internship. The real question is: “How MUCH should you be paid?” I’m certainly not suggesting that you should avoid creating a class website for your professor or a quick shopping cart or inventory app for your mom’s side business for free. These experiences are good and valuable… I did many projects like this and learned a lot!

If you are looking for an internship doing software or web development in the current market what should you be looking for in terms of compensation? I would probably suggest you hold out for a minimum of $15 an hour. Also, consider asking prospective employers for additional benefits once it is clear that they want you on staff. These figures may vary from market to market. I highly recommend checking with your college or university’s career guidance counselors for the going local rates. Some schools even publish expected rates (eg. Waterloo in Ontario, Canada http://www.cecs.uwaterloo.ca/employers/salary.php ).

Whatever you decide to do, get out there and create some experience for yourselves! You will be more prepared for work in the field and have a much easier time finding it. Don’t be afraid to ask for compensation for your efforts. You are in a high demand field where your talents are needed. There is no time like the present to start paying off those student loans!

P.S. Much thanks to @shanselman and @mayhemstudios for the retweets! The exposure of my question was much broader thanks to you. Also thanks to @nshirazie for the link to Waterloo’s salary guide.

Posted in Career Tagged with: , , , ,
Coding, Learning, Agile, Travel, Education, Hacking, Gadgets, Career, Random stuff no one cares about...

Most Munn & Done articles discuss technology, careers, or travel in some way or another. However, like life, there are no guarantees.