Yearly Archives: 2011

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!

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

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!

 

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.