When we went out to dinner to celebrate my new job, this was in my fortune cookie. How's that for karma?
There's good news and there's bad news. The good news: I have a new job. The bad news: I didn't get any woodworking done, didn't touch the basement or the garage. The house is starting to look like a candidate for Hoarders. I was too busy studying and putting energy into getting the job!
My study list.
(For convenience, I've setup an Amazon store here with all the books shown above, plus a few extra. I earn a modest commission on each sale.)
It's humbling getting laid off. It's even more humbling getting a new job, because I have a lot of people to thank for making it happen. From the friends who passed my resume to their HR departments and gave recommendations, who picked up my daughter at school so I could go to interviews, to the strangers who scrambled to do interviews before the holidays, to the readers here who offered me words of sympathy and encouragement.
I feel like George Bailey. It's good to have friends. I got my Christmas miracle. Thanks, everyone.
I'm very lucky. In the current economy and job market, just getting a phone call back can be a challenge. I've known people out of work for months, more than a year. That makes getting laid off feel like having someone take your entire life and punt it into the air.
Everything, mortgage, car payments, college for the kids, everything you've worked for the past 10, 20, 30 years up in the air, thrown into question. It's easy for your imagination to run away with you, because it's happened to real people.
I'd like to share this with you not to be smug or arrogant, but in the hopes that you may be able to glean some lessons that will help you if you ever find yourself in this situation. See one, do one, teach one. Well, I've seen it and done it, now it's time to teach it.
At this point I'll abandon any pretense that this has anything to do with woodworking, but this blog is my bully pulpit. At some further point, this will get pretty hard-core geeky. Some of what I have to say will be very industry-specific. I won't be insulted if you bail! Then we'll return to our regularly scheduled hobby.
I realize that to some extent, this is a complete anomaly. I work in a part of the country and an industry that has a high demand for people, even now, and is projected to be understaffed for the next several decades (something to keep in mind if you know anyone thinking about career choices). That doesn't apply for a lot of people.
And, yes, this is a lot easier to talk about relieved in the knowledge that I have a job. If it had taken three months to get an interview, I wouldn't be so happy-go-lucky. We would have had financial problems, would have had to pillage the 401k, sacrificing a huge chunk to penalties.
After 20 years in this area and 15 in the network communications branch of the computer industry, it seems I know someone at virtually every computer-related company in eastern Massachusetts and southern New Hampshire. If I don't know someone there directly, I know someone who does.
There are a lot of those companies centered about the Boston metro region. It's a target-rich environment. For nearly any company name I put into LinkedIn, I come back with a list of multiple 2nd level connections. That's not the Circle of Life, that's the Hoberman Sphere of Life!
Those connections are critical. When I lit up my network via email and this blog, the response was immediate, an embarrassment of riches. By the end of the next day I had two phone interviews scheduled, within four more days I had three on-site interviews and three more phone interviews scheduled, and two days after that I had another on-site.
I spent two weeks nearly non-stop doing phone and on-site interviews, gathering and sending work samples, and reviewing technical books, only managing 4 to 6 hours of sleep a night. That continued after the holidays.
In many ways this is a LinkedIn success story, because my LinkedIn connections figured into each of these. Either my LinkedIn profile caught someone's attention, or I could point out people I knew at each company. The latter is especially important, because employers in this industry value personal recommendations from their own employees very highly.
One of my blog readers here deserves special mention, identifying himself as dpmohne in his comment posting. He got things off to an excellent start, passing my resume to his boss, who, yes, I knew from a previous job! Connections: your network is your lifeline.
So I was incredibly lucky. But let's follow that train of thought. Douglas MacArthur said, "The best luck of all is the luck you make for yourself." Louis Pasteur said, "Luck favors the prepared mind." The Boy Scout Motto puts it succinctly: "Be prepared." When asked, "For what?" Lord Baden-Powell, the founder of Scouting, replied, "Why, for any old thing." Like having to find a new job.
Without preparation, luck is useless. Be prepared to create opportunities and to take advantage of the opportunities luck brings you.
In this case, ask yourself if you are emotionally, financially, and technically prepared to be laid off. I was only partially prepared.
There's probably no real way to prepare for this emotionally. You can think yourself hardened against the emotional assault, the feelings of panic and anger, but that's only a thin shell. For me, the best way to preserve my sanity was to have confidence in my technical preparation and then to act.
Get mission focus. Mission objectives: get phone interviews, get on-site interviews, get offers, choose job.
The goal is to create choices for yourself, so you can negotiate from a position of confidence. JFK said in his inaugural address 50 years ago today: "Let us never negotiate out of fear. But let us never fear to negotiate."
You can't let your emotions overwhelm you. Panic is unproductive. Anger is unproductive. Worse, they can be incredibly destructive. Instead, take the energy you would waste on them and channel it into moving forward. I realize it's hard to maintain that forward motion if no one seems to be responding, but you're the only one who's going to keep the momentum going. No one else is going to make it happen.
Maintain a regular daily schedule. Maybe you have kids to get off to school every morning to help keep you on track. Don't fall into the trap of sleeping late and lounging around. That leads to the cycle of depression. No one wants to hire someone who looks likes he's given up. Get up, maintain yourself, get some regular exercise, even if it's just going for a daily walk for 30 minutes or an hour.
Attitude is your key to survival. If some days really get you down, let it happen, let it pass, then get back in the groove. Do something creative. Occupy your mind, not with soap operas, but with intellectual challenges (see the discussion below on technical preparation).
Keep it sharp. Keep it focused. Keep it pointed.
Try to maintain a regular sleep schedule; for me, the stress manifests as insomnia. Sleep deprivation can be a problem on technical interviews. There were a couple of times where I was doing versions of basic algorithms and I just went into brain lock. Come on, come on, I know this, spit it out!
For the past month and a half, I've considered 6 hours of sleep to be a good night. There have been plenty where it's just 3 or 4 hours; it's completely unpredictable. Nights like that I just go to the basement and get on the treadmill for 40 minutes at 2 or 3 AM, and maybe I'm able to get another hour of half-sleep afterwards. Every once in a while it all catches up with me and I collapse for 8 hours.
My wife asked if I was angry at them for laying me off. Certainly I was unhappy about it, and there's always the question of why me, but there was no point in being angry. These are people I know and respect and would work with again.
I chose to take the job, working at a startup. I signed up for this. Well, I signed up for it to be a success, but I knew the risks. Startups face a number of them. They have to place their technology bet, spend the time, effort, and money to make it work, then get sufficient revenue established before the money runs out.
It was a great place to work. After the founders and two software managers, I was engineer one. That may have just been coincidence, because engineers two through ten followed immediately, but I was invited to be on the starting team. This was my first opportunity to build a product from the ground up. It was mine. Well, the whole team's. We made it work. The satisfaction of that outweighs everything else.
I believe you have to be willing to take risks in life. Otherwise you never grow as a person. You just have to take reasonable precautions to mitigate those risks. Ideally, when your number comes up, it's not in the middle of the worst job market since the Great Depression, but you have to accept that some things are completely out of your control. Meanwhile, learn from the failures and roll with the punches.
Financial preparation is more concrete. Even in the best job market, you need to be prepared to withstand loss of 40-100% of your family income for the weeks it takes to make contact, go through interviews, allow HR processes to complete, and wait for start date.
In a poor market, that can extend 10 to 20 times as long. We all know horror stories of people who have gone a year, two years with nothing. In that time, you can lose everything. You can be set back so far that even if an opportunity does come up, you're unable to connect with it.
You can probably expect at least a minimum severance package, but you also need to prepare for the possibility that the company has become insolvent, unable to even make final payroll for the period that you were still employed. Take a cold, hard look at your expenses, and work to build up 3-6 months' worth in a safe, liquid place.
That's certainly easier said than done. But just like setting aside money for retirement, the kids' college, and buying a home, start a savings account just for a layoff fund and setup automatic monthly deposits into it.
Once the fund tops out, you can switch those deposits to a vacation account (or maybe given the current economy, you should let it continue to grow to 9-12 months' worth). Just remember to keep it up to date as your income and expenses change; your layoff fund when you were a single junior employee renting an apartment won't suffice when you're a senior employee with a family and a mortgage.
Find out what unemployment benefits are available and how to access them. Remember that your taxes while you're employed go to help maintain them. They're not charity, they're an insurance claim in the face of a catastrophic event, just like when you have a car accident.
If you have special savings vehicles such as college or retirement programs, learn the rules and consequences regarding early withdrawals in case you need to tap into them. It may be your money, but there can be significant penalties.
If you have stock assets, assume pessimistically that you'll need to sell them when they're at historical lows. This is not the time to make optimistic assumptions. Hope for the best, but plan for the worst.
Triage your list of expenses. Identify those that can be eliminated should you be laid off (in the current real-estate market, selling your home and moving to cheaper housing isn't really an option).
This is more difficult than you might expect. There may be a couple of items you can easily give up for a while, but you'll probably find that many of them define the quality of life for you and your family.
Remember the words of the Matrix's Architect: "There are levels of survival we are prepared to accept." And then remember that hopefully this will just be temporary.
Where true emotional preparation is all but impossible, and financial preparation may require some nearly impossible financial adjustments, this is where you can truly take control of your own destiny.
However, that's not true for all job markets and all professions. So here I'll speak very specifically about computer-related professions. Maybe some of this will apply to yours as well.
The computer industry is constantly evolving. Technologies come and go. Programming languages go in and out of vogue. The best preparation is to make a habit of continuous learning. That not only keeps you up to date, it makes you versatile.
The tools to acquire that knowledge are easier to obtain now than at any point in history. Contrast this to when I started doing software nearly 30 years ago. At that time, information was only available through expensive college courses and textbooks that were hard to find, assuming you even knew they existed; the equipment was expensive and inaccessible; any technical work you might do was buried in some company, at most a line item on your resume.
Now, the resources and opportunities for self-guided learning are nearly limitless. There are vast amounts of information and software tools online for free. Every book under the sun can be identified and shipped to you overnight. An investment of between $500 and $1500 will get you the equipment you need to practice any software skill, a complete software engineering environment on your desk.
Open source projects and repositories allow you to participate in things you might otherwise never get to do, then make your work publicly visible, so that anyone can see the quality of your work directly; they can even download it and try it out. And not just dinky little play projects, these can be serious advanced technologies that really stretch your mind! Your digital footprint is available in seconds to anyone for evaluation (just make sure it's a good footprint!).
Tools like LinkedIn then allow you to translate that knowledge and experience into continuous marketing. While your resume is only seen at particular snapshots in time, your online profile can be visible at all times, kept up to date with new things that you do or learn, pointing to your work online.
I can confirm from my own experience that employers, recruiters, and placement agencies are constantly sifting through this data looking for prospective employees. This puts some of the power formerly held by employers into your hands. It's possible to have people come looking for you rather than the other way around.
Just be prepared to back up whatever you list in your profile on the phone and in person. Resume padding, and the people who do it, are the first things interviewers want to weed out.
The hiring process in my field follows a fairly consistent pattern: one or two phone screen interviews, first to gauge interest, then with technical focus to gauge ability, followed by one or two fairly rigorous 5-6 hour on-site interviews with multiple engineers and managers.
The interviews involve a combination of questions about work experience, technical questions, programming problems, and logic problems. These gauge ability with specific skill areas, fluency in programming languages and algorithms, and general problem-solving ability, as well as personality and ability to perform under pressure.
These are engineering teams functioning at a high level, so they want to be sure candidates are at a similar level and would be able to contribute without being a drain on resources. Remember that in some cases these employers have product lines worth hundreds of millions or even billions of dollars. They need to protect those products and engineering teams from bozos.
Regardless of how good you may feel about yourself, to them you're an unknown quantity, a risk. That's one reason companies like recommendations and referrals from existing employees; it's a risk mitigation strategy.
My attitude toward this process is to approach it as a fun chance to meet some interesting people and stretch my mind; some of the problems posed are quite fascinating. Sure, the stakes are high, I might screw up and blow a job opportunity, but I enjoy the challenge.
When you're in an interview, you need to be on. It's your chance to show what you can be. It's their chance to put you through the wringer and see how you handle it. There are times on challenging projects when the real work is like that.
In preparing for these, I received similar advice from two separate recruiting sources. I'll summarize it here along with some advice of my own. Again, this is getting very industry-specific.
I do want to give special mention to one of those recruiters. While he was recruiting for a specific employer, he understood that I was interviewing with several companies and was very generous with his time to help me understand all my options. He helped me improve my resume and gave me general advice that was good for interviewing with all of them. He's still looking for people, so if you're in this part of the country and do this type of work, he gave me permission to include his contact info here. You can also find him on LinkedIn.
Patrick Quigley, First Pacific VenturesBelow is a set of actions you should start now and repeat continuously throughout your career. You should not wait until you get laid off. You don't want to have to be trying to pick up complex new material under the stress of looking for a new job. The only thing you should be doing at that point is reviewing the things you haven't brushed up on recently; it should all be familiar territory.
Google your name, by itself in short and full forms, and in combination with all your employer names (be prepared to be surprised how many people share your name!).
Be assured that others will do this. What will they see? What would the Church Lady have to say about it? This is your Permanent Digital Record, and it never forgets. If there's anything that an employer might find questionable, you should seek to expunge it, although that may be easier said than done (how many high-profile people do we see in the news tripped up by their digital footprints?).
Look at the good things that show up. This may help you dredge up forgotten items to mention in your resume or cover letter, or discuss during interviews. It's independent tangible evidence of what you can do.
Start a LinkedIn profile and build your network of connections. Try to connect up with people from all of your previous jobs. Connect up with everyone in your current job, even if you didn't work with them directly. Down the line, these connections may know about job opportunities that can help you. Sometimes even the most tenuous personal connections can be helpful in getting others to respond to you; we're all social beings. Request online recommendations from select people.
Keep your profile up to date, including keywords that can help potential employers find you. You have to make some decisions about how much information to include and how detailed it should be in this public forum, but look at it as a live resume.
Identify the technical proficiencies for the type of work you do and develop them. That includes going back to the books every few years and refreshing your memory, because software engineering, like most other fields, follows the 80/20 rule: 80% of the work you do requires only 20% of the skills you have.
Those 20% skills will be engraved in your brain, but the other 80%, that only crop up occasionally if at all, might be the things that trip you up in an interview. Count on that one thing you studied in the back of the book 20 years ago to be the one an interviewer asks.
List these skills explicitly on your resume and LinkedIn profile, because they'll act as keywords for resume matches when recruiters are looking for people.
In my particular work, these are the core proficiencies:
- C++ programming, including libraries such as STL and Boost.
- Object-oriented design and programming.
- Data structures.
- Algorithms (standard algorithms and their analysis).
- Real-time embedded systems.
- Multithreaded (and multicore) systems and concurrency.
- Finite state machines and asynchronous event handling.
- Networking protocols.
- Network packet processing.
- MPEG video.
Don't worry if you didn't do it all on some of your projects. Everybody goes through stages of development in their career, often working in existing product architectures and designs, growing in technical responsibility over time.
Invest in a good home development environment. It doesn't have to be expensive; I run Ubuntu Linux on a $300 eMachines desktop PC that I juiced up a bit with extra memory and larger monitor. That gets me all the GNU development tools, as well as a system that supports pthreads and GNOME GUI, so I can build just about any kind of software to play with. If you run Windows, you don't even have to disturb it, you can co-install Ubuntu via WUBI and have dual-boot capability without repartitioning your hard drive. I like having a Linux environment because embedded Linux is becoming more and more common in commercial products.
If you have a Mac, you can download the iOS SDK to build iPhone, iPod, and iPad apps. There's also an Android SDK for Android-based devices, for Windows, Mac, and Linux. I think portable devices make a fantastic learning platform, because they're highly capable, interactive and fun, yet their small size demands real discipline in applying embedded systems engineering concepts.
Participate in some kind of public programming, where you can learn new technologies as well as demonstrate your skills. This might be working on open-source projects or taking part in online programming contests (such as at www.TopCoder.com). The growing set of mobile devices like iPhones, iPads, and Android-based products provides rich opportunities; create some free or paid apps (you might even make a little money on the side).
Participate in online forums where you can help people with their programming problems (just be wary of students looking for someone to do their work for them, and be sure you know what you're talking about, because this goes on your Permanent Digital Record!).
Once you have some publicly-accessible projects out there, list them on your resume and profile so interviewers can go look at them. That's part of your continuous marketing.
Here's my public programming: http://www.decuslib.com/DECUS/freewarev40/ranalyzer/. I wrote this 15 years ago, so long ago that I had forgotten about it. It turned up when I googled myself (see why you should do that?).
Include on your resume and profile any patents applied for or issued that have your name on them. Do the same with any papers, articles, books, and other publications you may have. This is additional continuous marketing.
Read the patents and be sure you can explain your part in them. The legal nature of patents makes them difficult reading. You may have trouble recognizing your own work in them, so they need interpretation! They also help when you're trying to decide how much you can say in an interview without revealing proprietary information, because they're public knowledge.
Some of the standard types of question interviewers ask about job experience are what were the most complex challenges you had to deal with, the toughest problems you had to solve, the nastiest bugs you had to fix, what you wished you'd done differently on a project, what work you're most proud of, and elaborate on them. They want to know the things that forced you to stretch your mind on the job.
Rather than answering these questions off the cuff, put some forethought into them. What are some of the things that stand out in your mind from your last couple of jobs? What made them worth talking about? How would you present the situations and what you did about them?
The exercise of thinking about it helps draw details out of the deep recesses of your mind, so you can be more direct and engaging talking about them. Everybody loves a good war-story. Find yours, and make them worth listening to.
Be honest about your mistakes, because interviewers want to know that you're capable of learning from them so you don't repeat them (and are capable of dealing with the new ones that you make).
In each job you take, look for new things you can learn. These are opportunities to add some new technology or skill to your resume. Salary and benefits are only part of what a job should provide. It should also provide ways for you to grow and improve.
I always look for jobs that allow me to pick up something new. That may be the key to getting another job down the line. I'm never so arrogant as to think I know all I need to. The great thing about high-tech jobs is there's always somethign new to learn.
Read code. Look at other people's open source and programming contest submissions. Read and understand their explanations. These can often be good starting points for your own experiments. Read other people's code at work, especially if you find someone you particularly admire; good mentors are invaluable. Look for people you can learn from.
Play with code. Even if you don't do it in a public forum, try some of the above programming tasks, as well as those you see in books. Take some existing code and change it around. See if you can improve the algorithm or tweak the performance. Or just observe the effects of changing the algorithm. Add things to the GUI menu.
Be fearless about it, no one will ever know when it blows up on you. Then learn how to debug that kind of problem. When it happens on the job, you'll be ready to deal with it. When interviewing, even if it's not actual work experience, it's still legitimate technology experience that you can discuss.
Finally, read books. You know the phrase "Knowledge is power"? For me, knowledge is comfort, like a warm blanket. It makes my serotonin flow. Knowing this material gives me the comfort of knowing I'm prepared to take on any job.
Once you've read books, re-read or at least review them every couple of years, for two reasons. First, remember the 80/20 rule, the stuff you don't use frequently will get rusty.
Second, this is complex material. Learning it is an iterative process. You read something, understand it to some level, then read something else that provides additional context and understanding. Circling back, you find that you understand the first thing better on the second or third reading in light of the new information. As you gain experience, things take on new and deeper meaning.
Maybe you're one of the lucky few for whom all of it is totally clear on the first reading, but most people don't learn that way. They require repeated reinforcement with new information, building a house of knowledge brick by brick, before they achieve complete understanding.
The study list below is a combination of some of my own recommendations and some from recruiters. I already owned many of these books, but a few I've just borrowed from people over the years, so I had to do some emergency buying to bring my personal library up to date. That can be a big expense at a time when you're running down your final paycheck, so you should buy your own copies over time as you find books worth owning. Remember, you can get these through the Amazon store I've set up, or by clicking on the title links.
- Programming Interviews Exposed: Secrets to Landing Your Next Job, by John Mongan, Eric Giguer, and Noah Suojanen
- Programming Pearls, by Jon Bentley
- Programming: Principles and Practice Using C++, by Bjarne Stroustrup
- Effective C++, by Scott Meyers
- Object-Oriented Programming in C++, by Nicolai Josuttis
- The C++ Standard Library, by Nicolai Josuttis
- C++ Templates: The Complete Guide, by David Vandevoorde and Nicolai Josuttis
- Elements of Programming, by Alexander Stepanov and Paul McJones
- Algorithms In A Nutshell, by George Heineman, Gary Pollice, and Stanley Selkow
- Algorithms In C++, Parts 1-5, by Robert Sedgewick
- Introduction to Algorithms, by Thomas Cormen, Charles Leiserson, Ronald Rivest, and Clifford Stein
- Schaum's Outlines: Discrete Mathematics, by Seymour Lipschutz and Marc Lipson
- The Essence of Discrete Mathematics, by Neville Dean
- UML 2.0 In A Nutshell, by Dan Pilone
- Head First Object-Oriented Analysis and Design, by Brett McLaughlin, Gary Pollice, and David West
- Head First Design Patterns, by Eric Freeman and Elisabeth Freeman
- Design Patterns: Elements of Reusable Object-Oriented Software, by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides
- The Little Book of Semaphores, by Allen Downey (also look for it as free PDF)
- The Art of Concurrency, by Clay Breshears
- Multicore Application Programming, by Darryl Gove
- Real-Time Concepts for Embedded Systems, by Qing Li
Why multiple books on the same subjects? Because each has different emphasis, coverage, presentation, and discussion. Multiple perspectives help cement complex subjects. Some are meant to be more formal, some more pragmatic.
There are certainly plenty of other good books on these topics as well, so treat this as a representative list, not the last word. You may have your own favorites on these subjects, and your particular specialty may require some different ones.
By the time you've absorbed this material and can demonstrate proficiency in it (via your public code), you'll be a kick-ass software engineer!
Some notes on buying books: the book-selling business is completely broken right now. Bookstores have an increasingly pitiful selection; meanwhile, if you can even find these in a bookstore, you'll pay full price, but if you buy them online, you'll pay 20-40% less. For expensive books like this, that's adds up to a lot of money, even factoring in the cost of shipping. Some of these are available as e-books, although trying to read technical books with diagrams and code on small-screen e-readers doesn't always work well. However, you may have better luck with an e-reader app downloaded to a PC or Mac.