There is Always a Need for Good Software Developers
What I’m about to say does not pertain to everyone having trouble finding employment in software development during this difficult time, but DO NOT fall into the trap of automatically believing that you’re one of the exceptions. It’s likely that you’re not.
People have been asking if I had any advice for software developers who find themselves out of work due to the economy. I think they’re looking for consoling words, but instead I’m going to provide a reality check.
A few months ago, my company was searching for a couple of developers. So for the first time in over a year, I started interviewing developers again, starting with the phone tech. And I was very discouraged at what I experienced, even after filtering out candidates from the resumes we received. The quality of candidates have always been a very mixed bag. After all, as Joel Spolsky makes abundantly clear, “The great software developers, indeed, the best people in every field, are quite simply never on the market.” But the drop-off of overall quality has been significant. If you don’t want to find yourself included in that group, I recommend you come to terms with the following…
Reality Check # 1: If your phone tech runs 15 minutes or less, you’ve failed. And most phone interviews last less than 15 minutes. I’m not exaggerating – 9 out of 10 people I interview are off the phone within 15 minutes. If you don’t care enough about your craft, you’re probably hurting the company you’re currently working for. If you don’t care about preparing for your interview, then not only should you second guess your career choice, you should also work on changing your attitude before considering another field.
Reality Check # 2: If you don’t take the time to think about what you’re doing, you won’t be much help to a company that cares at all about quality. If you can’t answer why you’d choose one technique or technology over another, or show critical thinking, you’re probably not providing enough value to your company. You risk being one of the next to be laid off, if you haven’t been already.
Do Heads-Down Coders Still Exist?
Some people claim there’s a place for "heads-down" coders, but if I just described you in the previous section, you wouldn’t even fit that description. Even heads-down coders need to make internal decisions every day. You’re likely doing things the way you do because perhaps someone once told you to do it that way, or you learned it from the book you’ve read on the topic (telling you "what" you need to do, but not "why" you’d choose to do it that way). You could be hurting your company and don’t even know it, or care.
And that’s the part that’s most frustrating. It seems that most "developers" I’ve interviewed don’t really care. It seems they think that all they need to do is throw out some textbook answers to questions, and it’s good enough to prove that they’re programmers.
That is completely wrong.
Resumes are Virtually Useless
I don’t believe the resumes I see anymore. They’re virtually useless. They’re just there for the collection of people I may need to call and filter out over the phone, because all they do is list technologies the person may have used at one time or another. And I don’t even believe that. Sometimes they just list buzzwords they could give one line definitions of, if asked.
I once interviewed someone who claimed to be a C programmer, but when he showed up for the face-to-face, he admitted, while looking me in the eye, that he only watched his roommate program in C! I’m sure many people have stories like this one, or the one where a friend interviewed someone, and only found out at the end of the interview that the person he was speaking with was actually the roommate of the person he meant to interview, but the other guy wasn’t home yet! The “candidate” went through the entire interview, and then confessed “as a matter of fact” at the end of it!
Your Job Could Be Outsourced to Someone Who Cares
Reality Check # 3: People complain about jobs going to another country. Well, if you’re going to claim you’re a developer, but you don’t take an interest in your career, then your job could definitely go to someone who’s not afraid to really think. I have rarely met a quality developer who lost their job to outsourcing and had been unable to quickly find another development job – even in this climate. True developers are in very short supply, and do not stay unemployed for long.
If you don’t want be another "outsourcing statistic", you owe it to yourself to show dedication to your career, and learn how to truly “think". It may be difficult to imagine, but some people actually act like thinking hurts. People aren’t taught how to think in school anymore, and I doubt they ever have. I was rarely taught “critical thinking” at school in the 60s and 70s. I learned on my own, from my parents, and from books. But I run into too many people who assume they’ve learned everything they need to know by the time they graduate. This is the difference between "book smart" and "common sense".
Reality Check # 4: Your career is your own responsibility – nobody else’s, institutional or otherwise. Show me a company that hires non-critical thinkers, and I’ll show you a company to avoid investing in. If you entered this field because you’d heard you can make a lot of money, but then you didn’t take the time to learn the "whys" and "whens" to do things, and all you did was "memorize" the "hows", you’ll be quickly found out. You can’t hide behind that. And then you may wonder why you don’t earn what you expected, or why you’ve been downsized.
You Can’t Hide
Reality Check # 5: It shows up in many ways. It shows up at meetings, when someone asks you how you’d implement something, and you use a generic answer, like, "I’ll write a module like I did for that other project, and just copy the code and change some strings." Or someone will ask for a feature, and you’ll just nod your head, maybe take a note or two, and never question a thing about their business. And then the stakeholder will wonder why you aren’t asking questions, and lose confidence.
During an interview, I’ll find out within a few questions if you’re just a "pretender". And if you think you can look up the answers while on the phone, and I hear paper rustling in the background, I’d know you haven’t been keeping up with the field – because if you had, you wouldn’t even be rustling through papers – you’d be clicking the mouse or typing! Even if I didn’t hear keyboard or mouse activity, I’d still know quickly, because you wouldn’t be able to answer the follow-up "why" or "when" questions. This is not multiple choice.
Reality Check # 6: What shocks me is that if someone made any attempt at all, it’s impossible to avoid accidentally finding the key information on these topics even if they tried. There’s so much information out there, anywhere you’d click would lead you to discussions explaining, discussing, and debating the whys and whens. We’re drowning in it!
If someone isn’t even learning by accident, then they just don’t care. I’d much rather hire an inexperienced developer than someone who just happens to know some facts about programming. I’d much rather hire someone who shows some passion for our field.
You chose this field. And even if you can’t get passionate about it, your life truly does depend upon understanding why things are done the way they are in our field, and how to make choices in your approach to a problem.
Don’t use the excuse that you don’t have enough time because you have kids, or you’re busy with other things. We’re all extremely busy. This stuff is fundamental. If you can’t make the time for this, you’re wasting every moment. A moment that someone else, somewhere else, is not wasting.
What Top Companies Look For
Why do you think companies like Microsoft and Google are famous for their non-technical questions? Some people think it’s because they’re looking for the smartest people. I’d challenge that and hypothesize that they’re not just looking for the smartest people. They’re looking for people with the capacity for learning. It doesn’t come from knowing facts. Even if you clean toilets for a living, you need to make decisions on how to do it the best way possible.
Like those companies, we’re not looking for people who know everything. There’s way too much to learn. We’re looking for people who aren’t afraid to think. Who aren’t afraid to make a decision and stand by it. Who can research their options and make an intelligent choice based upon the situation. Who care enough to understand the fundamentals, but also know how to learn about what they don’t know. Only about 10% of the people I’ve interviewed have shown a desire to do so. Is it that they just don’t know how to handle an interview? There’s so much information available about that, so I don’t give them a bye for it. So many people are just willing to settle. To just to get by. Everyone gets physically lazy at times, but that’s just fatigue. In my opinion, actual laziness is the lack of desire to think.
Obviously, some people just don’t interview well. Many are very nervous on an interview. Hell, I’m nervous giving an interview. That’s excusable, understandable, and never plays into my decision for consideration. But you can almost immediately tell the difference between nervousness and dedication.
Any company choosing to not bother even speaking to 90% of the pretenders out there should dominate their industry. Why do you think Microsoft, Google, and Apple are where they are?
Once you get past the first 15 minutes of an interview with us, where all we ask are the foundational questions, the next part involves asking for concrete examples of when you had to actually make decisions. Sounds simple, right? Well, at least half of the people who make it past the first part can’t do this. The third part is where we try to dig into why you chose this field to begin with, and to gauge your dedication to the craft.
If you can get past those first two parts, we’ll usually call you in for a face-to-face. This is where we’ll find out how well you can fit our team, and how you implement what you know. This is why we’ll give you an actual programming exercise. We really don’t care too much if you finish the task. We just want to see how you work. We learn a lot just by observation.
If you aren’t going for an analyst or architectural position, we’re still going to ask you questions that require analytical thinking. Maybe back in the 70s and 80s companies could get by with heads-down, don’t ask questions, locked-in-a-room coders. But these days there are so many things to consider beyond specific programming tasks, that everything you do requires some level of analytical and critical thinking. I feel that’s the most important and rewarding part of being a software developer. If you remember the simple point that programmers are actually problem solvers who use technology as the tool for solving them, you’ll understand why everything I’ve mentioned in this article is so important.
It’s sad to see so many people just sleepwalking through their career. If you care at all about your career and the field you’ve chosen, you should have little problem getting or keeping a job, even in this economy.
Ok, so I’ve smacked you in the face and woken you up. Now what? You’ve decided that you really do care, and that your job is in a tenuous position. Where do you turn? The good news is that there’s an abundance of resources available; more than you can even handle. Sometimes the flood of information can be overwhelming and off putting. But I’d start with the resources that’ll help you keep your finger on what’s most important. You normally won’t get into detailed learning with the following, but they’re invaluable for making you aware of what’s important in our industry, and will direct you if you’re interested in a deep dive. I’m focusing on the .NET development community here, because I work mainly with Microsoft technologies. But there are so many resources out there for all technologies.
Since there are many directions you can go with your skills, it’s important that you keep up with what’s happening. Then you can choose what you want to dive into. You can make a great living specializing in just a couple of technologies. But you can’t even get there until you become aware of what’s out there, and what’s in demand. Look at the topics discussed. Do a bit of research before attending a user group meeting or listening to a podcast.
Local user groups: almost every large city has an active user group nearby. These are invaluable, not only for keeping up with the field, but also for networking. I help run two of them: the Fairfield / Westchester .NET and the Fairfield / Westchester SQL Server user groups, both in Stamford, CT. You can also visit the following websites to find user groups and events in your area:
- INETA : an organization committed to the .NET community’s growth and development.
- DevEvents : a resource created and run by Steve Andrews to bring together the developer community. DevEvents was written using Microsoft’s ASP.NET MVC , in case you’re interested.
- Community Megaphone : a similar resource created and run by Andrew Duthie, a Microsoft developer evangelist.
Podcasts: there are many podcasts that have their finger on the pulse of the industry. I can’t even imagine how much of a positive impact these resources have had on my career and my life. Based on my average commute, I’d lose around 500 hours per year if all I did was drive during these hours. But instead, I spend about 3 "working" months a year in "school" in my car. That’s three entire months! Here are the podcasts I regularly listen to which have been an enormous benefit. I can’t imagine where I’d be without them:
- .NET Rocks! – the twice weekly, leading podcast for .NET developers, hosted by Carl Franklin and Richard Campbell. If you’re a .NET developer, and you listen to no other podcasts, you must listen to this one. This may be my single most valuable resource for keeping my ear to the ground about the latest Microsoft development tools.
- Hanselminutes – a weekly, straight-to-the-point show with Scott Hanselman. Scott currently works at Microsoft, but started his podcast before then, and is well known in the development community. He discusses many topics developers would be interested in; mainly centered around Microsoft technology, but often expanding to other, cooperative technologies. He also discusses cultural topics that are of interest to many developers.
- RunAs Radio – if you want to have a better understanding of the infrastructure and related technologies that make up the environment your applications run in, or if you just want to have a better understanding of the people who developers often seem to have challenging relationships with, I highly recommend listening to this podcast. At least it could help you understand and gain a bit of respect from your IT support team.
- Stack Overflow – two of my favorite technical bloggers, Jeff Atwood and Joel Spolsky (one of my heroes), recently teamed up for a venture called StackOverflow. Their site is the number one site to visit if you’re looking for development answers. I can’t begin to do justice describing the value of this site, and what makes it so special. You’ll have to see for yourself. They have weekly phone discussions that they make public via this podcast. I highly recommend it, just for their insights on development and the field. It’s a bit uneven and not as polished as the other podcasts I mentioned, but it’s still extremely valuable.
Once you’re ready to dig deeper, there are so many more resources. It gets old when I ask candidates how they keep up with the field, and the common response they think I want to hear is just, "I visit the MSDN site often." That only shows me that they’ve kept their head in the sand for a long time.
- Coding Horror – this is Jeff Atwood’s blog. Jeff is one of the founders of Stack Overflow. He always posts insightful and opinionated articles about our field, and even if it’s not about a specific technology you use, it’s about a topic that developers can relate to and find value in.
- ComputerZen.com – this is Scott Hanselman’s (of Hanselminute fame) blog. It’s another great resource, especially if you develop with Microsoft’s tools.
- ScottGu’s Blog – although Scott Guthrie doesn’t write too often, his posts are usually detailed, and very timely, coinciding with new development technology releases from Microsoft. You’ll often find info beyond the documentation, even before the gaps are filled in by books and other articles. And you’re usually getting the info straight from the source.
- StackOverflow.com – as mentioned above, this is an invaluable resource for developers.
- Search .NET – a great custom .NET search tool by the famous Dan Appleman, where he targets expert articles on .NET
- Google.com or Live.com – although "google" is now a verb, it isn’t the only search tool out there, and I do owe a lot of my career to Microsoft. So I’m also referring to Live.com here. I often use search engines as my first resort when looking for info, and I’m amazed when candidates don’t even mention it as a resource. Baffling.
- Twitter – start following key players in our field. You won’t get much more timely than seeing what top developers are reading and discussing. As a matter of fact, since I’ve used Twitter on a regular basis, I’ve stopped relying on my RSS subscription feeds almost completely. If you want to see who to follow, start with who I follow from my account – MarkFreedman, and who those people follow.
There are so many other resources, I won’t even attempt to expand on this list here. Just check out the links on some of these other sites. There’s just no excuse for not keeping up with our field, and preparing for a new job. You just need to have a bit of desire and care for your career. If you need help working on your resume, just google it. There’s so much info out there. I haven’t had to make use of these resources lately, so I can’t really recommend one over the other. But I can recommend an article by my daughter. Her resume tip article targets recent college graduates, but everyone could benefit from most of her tips.