Do I Need a CS Degree to be a Software Developer?

A degree in almost every field only indicates that you have met a minimum set of requirements. It is not an indication of proficiency in the practical application of the knowledge you gained through your degree. The degree is still valuable though and we should not underestimate its worth but we should understand its limits.
First, great software developers come from all walks of life and do not need to have a formal education. We are in one of the very few professional fields where this is true and accepted. Most other fields do not provide people with the opportunity to self-teach the subject matter. For example, you probably don’t want a surgeon who has only read about medicine but never practiced it. Software development has a low barrier to self teach in that you can buy a computer for little money, pick up a few books and start writing code. That code may be terrible at first and you are not jeopardizing anyone’s life either.
Second, really smart and dedicated people have the ability to learn how to be software developers and are generally encouraged by the community. These people can take the time to learn the craft and become highly proficient. Then get a job and hone those skills. This is true of people with and without formal academic training.
Third, people with a degree in computer science, or in a multitude of other curriculums that require programming, are not necessarily going to be better programmers than the self taught. It is a matter of dedication and aptitude to the field. There are plenty of ridiculously bad software developers and CS graduates out there. The fact that they got a degree always frightens me.
Fourth, graduating form a top-tier computer science program does not mean that you are going to be a good software developer. Some of the top-tier schools use teaching languages rather than practical or rigorous languages, such as Java and C/C++. Practical languages get you a job if you are proficient. Rigorous languages, provided they are rigorous in the use of the machine rather than just having an overly complicated syntax for simple operations, teach real data structures and how to truly control the machine.
The value of formal computer science and programming courses are that the exercises and the reading materials are different from those more commonly available to the rest of the public. The books you generally find in Barnes and Nobel have a goal of getting you programming or solving a specific set of problems in the shortest time possible. These books don’t always go into the theory or the “why we are doing this” bu instead focus on how to do it. 
That’s what the text books and classes are supposed to do. The experience of guided instruction, programming exercises and text explaining theory are supposed to teach why we do the things we do. The implementation, or the how we do it, is an entirely different problem that is often easier to solve.
For example, I could ask you to write a Java program that takes a paragraph of text and displays each sentence with a count of the spaces within it. It takes about ten minutes to write the code. It isn’t hard at all. You can find out how to do it by simply searching the web.
Now, let’s say that I want you to perform string replacements for any expression within the paragraph bounded by curly braces. Then let’s say that I want you take what is within the braces and determine if it is an arithmetic expression and replace the expression with its results. The example paragraph may have a line that looks like “3 * 10 = {3*10}” and the output is “3*10 = 30”.
Can a person without a formal education in computer science do this? Sure, but pretty much any CS student can do this as a result of just the required courses. Especially any graduate student who has taken a compiler design class. 
The problem for the self-taught is that the commonly sold texts don’t go over these subjects very heavily. These books often cover an existing API or a technology that makes it simple to accomplish the task. It’s the difference between knowing how to use Apache Velocity vs writing Velocity.
Can the self taught learn these things too? Of course they can! The question is whether you will ever be exposed to the material and whether you will have the depth of knowledge that  one gets from a formal education in a subject. This impacts how far you will advance in your career and the kinds of problems you will be asked to solve later. 
Just to be clear, I know many non-CS software developers who are great architects, CTO’s, VP’s and leading software developers and they all have the same depth as a CS graduate student if not more. The difference is that they had to seek out the information rather than having it handed to them. Their dedication and intelligence is what led to ever more challenging tasks and their success. I have known a large number of CS and non-CS developers that were inept too. Their lack of dedication or intelligence led to their mediocrity and relegated  then to equally mundane tasks.

Lifestyle Companies

A friend was talking to me about his job and how things are progressing. Rather, not progressing. Things haven't changed in terms of investments, staffing, customers nor product roadmap development. The company is trudging forward with no real worries of succeeding or failing but certainly not growing and no apparent idea where it is going.
I grinned at his story and asked whether the founders had made it big on a previous startup, were independently wealthy, were investing significantly in the company, had taken no outside money and were acting as the CEO or some other C-level position. He had a look of surprise and answered that all of it was true. Lifestyle companies almost always have very little growth and do it with the founders' own money. My friend is a little bored and worried that things will never get off the ground. His worries are very reasonable too.
Being in a lifestyle company can be great during certain times of your life. There is absolutely nothing wrong with going to a lifestyle company provided that the company is profitable to the point where it is self-sustaining or has slight growth. Negative growth (AKA decline) can be dangerous for any company depending upon the wealth of its founders, the income from their other investments and their willingness to write checks.
Founders create lifestyle companies to have work that matches their lifestyle. Yes, sometimes the obvious is true! These companies are not reserved for the uber-rich trying to avoid boredom. A friend of the family runs a boat engine repair shop where he works about 4 hours a day. He owns his house through inheritance, makes very little money and he's a little too happy about life. He earns below the US poverty line but his house is paid for so he can live cheap and happy.
Lifestyle software companies are fascinating as they are often started by people who have previously made it big, or huge, and have limited motivation to do it again beyond to show that they can or to have something to do. Wealth doesn't make a person happy or busy. So they start a new company and try to make a go of it.
Boredom after huge wealth sounds crazy. It would seem like you could travel all the time, play golf, go back to school or blow stuff up on your new island. How could you be bored with all those new opportunities to goof off? Being independently wealthy may mean that you are making around $120,000 gross on your investments per year, which is obviously enough for most of us to retire on, but it isn’t enough to go on a spending spree since you may still have a mortgage, kids in school or college, all the old bills and you have new costs, like health insurance. Most of the time we hear about the people that make it huge, but there are plenty of people that suddenly find themselves with $3 or $4 million in the bank after a good exit. They have enough money to quit but maybe not enough income to do all the whacky stuff.
Let’s say that you make it moderately big and have $10 million in the bank. You have very few financial concerns at this point beyond being pretty well diversified, which someone is probably managing for you anyway. You are squarely looking at the problem of avoiding boredom. I think everyone agrees that it is a great problem to have. You may goof off for a year or so and then simply be bored and need something interesting to do every day that actually matters. Your job mattered before and now you have to do something that matters again. Finding ways to goof off is not usually a good strategy for finding a new purpose in life. Especially when most of our lives are guided by some kind of work.
As mentioned earlier, a founder may start a company just to avoid boredom but may not want to have the enormous workload they had in the startup that made them wealthy.
Some founders create a lifestyle company where the staff shares some measure of the lifestyle: the staff comes in, does some work, plays some ping-pong or darts, does some more work and then goes home. Other companies are about the founder, which means that the founder has a great life and the staff works pretty hard. However, lifestyle companies usually don't have a lot of growth. Growth means lots of work, lots of difficult challenges and stress. The former situation means that everyone enjoys the rewards of a highly successful individual while the latter means that the staff works hard, but with limited hope of significant gain that would come with a traditional startup or small company.
Startups and small companies usually have a goal or an exit planned since the inception. They know where they want to go though they may not know how to get there. Its normal not to know how to get there and to change directions along the way too. Lifestyle companies usually don't have a clear goal or make little effort to attain those goals.
I used to work in an incubator type space that had cube walls separating companies of 3 to 10 employees. It was nearly impossible to tune out the conversations from the other startups. I was parked next to a lifestyle company and I was often mind-boggled by it. First, I couldn't figure out why anyone would bother paying or even using their service. This thought is common though since many startups are doing something bleeding edge and so it is hard to judge the merit of something until it is deeply explained or adopted by the world. You may even be scratching your head about why anyone would use the product your own company produces.
Second, every Friday, at around 4:30, the founder would come over to his staff and tell them about his plans for the weekend, talk about the Mercedes and how it was failing to meet expectations for some trivial reason and then assign three more hours of work that needed to be ready Monday morning. Third, their customer base only grew in the single digits on a monthly basis. Fourth, he spent most of his time writing travel blogs, which was completely unrelated to his line of business. Fifth, he left early very often while the staff worked late.
This is an example of a lifestyle company which is about the founder. The staff works very hard while the founder is goofing off. The founder has a hobby and you get to work on it with little hope of a big pay-out at the end. What is worse is that you are at risk that the founder will become bored and want a new hobby.
Another company was built around some really good software development tools founded by some guys who had made a lot of money on a previous venture. The company had excellent engineers and they worked on difficult problems and played a lot of Guitar Hero. They may work a 40 or a 50 hour week depending upon needs, but often it was left to the developer how many hours he worked. They weren't making very much money but they were doing something difficult and interesting. The staff and founders alike were happy and the staff had a good stake in the equity of the company. The company goes on and on doing development work but has limited motivation to make it big, so it doesn’t. So it cruises forward on the strength of the founders investments and again has no clear exit or plan to become more than a lifestyle company.
The underlying problem with both kinds of lifestyle companies mentioned here is that they are more like hobbies than actual businesses. The founders needed a way to keep from being bored and so they founded something. One company worked on challenging problems while the other was just challenging. Whether either company will be successful is hard to say since the metrics are different. The founders may be perfectly satisfied with how things are going. The staff could look back on it is a happy time too.
Let's say you are interviewing at a lifestyle company and you know its a good one. You may ask yourself if it is wise to take the job? Non-lifestyle companies have goals and set expectations and you have to meet them. You are measured, challenged and groomed for later positions in and out of the company. Startups are often like pressure-cookers and force you to learn and do so much more in a short period that you grow professionally very quickly. Lifestyle companies may not be so driven and so your career or skills, like the company, may stagnate. It falls on your shoulders to grow for you to continue to succeed beyond the current job. Good and bad lifestyle companies can put you in a position where the technological world passes you by.
Good lifestyle companies can be incredibly good for your quality of life though. Let's say that you came out of a couple of really brutal startups and you are wound-up and tired. That euphoric kind of feeling where you feel a sense of urgency all the time even when there is nothing to do. It comes from always worrying about the next demo, the stability of a server, the scalability of the last commit and that the new feature has a couple of embarrassing bugs in it that will cause a conversation with the dev manager. Living with those thoughts for a few months or years is going to make you a little tense. A good lifestyle company can ease you back to a point where you can enjoy living rather than just working. They are the rest and relaxation job that you may need after a gut-wrenching personal event or overly stressful gig. Think of it as therapy.
The next issue is knowing when to leave. A lifestyle company may pay less than a startup it also may be less challenging and eventually boring. Too easy a job will cause your skills to atrophy and make it terribly hard to get a good job in the future. Further, if the founders get bored or lose too much money then they may close up shop. At some point you'll have to leave, just be sure to leave on your terms.

Interviewing the Employer

I often read blogs that have tips for interviewing candidates. I’m always looking for questions that may give me some real deep insight as to what the person is like to work with. It is also important to ask a potential employer about life at the company but I see only a few blogs about the subject. Today I’m writing a little about what to ask the startup type company to see if it is a good company for you to work at.
Take a look at the article “Startups Must Hire the Right People and Watch Every Penny. Or Fail.” and “How to save money running a startup.” Item 11 in the latter article is the most important thing to pay attention to. Then read the comments and see how many people agree with his sentiments. The specific item is that an employer should fire employees that don’t love their work or aren’t committed enough. Now, in all fairness, this was his attempt at clarification but it really doesn’t make things better.
The need for interviewing your employer is growing more critical as beliefs like these continue to gain traction. There is a world of entrepreneurs out there that would work 24/7 and they expect you to be just as committed as they are. Commitment comes in different flavors, some entrepreneurs want you just to focus, be enthusiastic, creative, happy and bring your “A” game every day. Others expect commitment in the form of hours: the more you work, the more committed you are.
Most tech entrepreneurs in major hubs like Boston, the valley, Seattle, Chicago, etc have to work incredibly long hours because there are countless meetings and presentations to make to customers, investors and the industry community at large. The last group is really important because it leads to introductions to even more customers, investors and a wider audience of the industry community. It gets very exhausting and the pace never lets up. The key point to understand is that every aspect of your entrepreneurial life revolves around work and it seeps into every interaction outside of work too.
Some entrepreneurs believe that they are not asking any more of their staff then what he is willing to do himself. This is a scary statement because the entrepreneur is probably working upwards of 70 hours a week anyway. A developer can work that many hours, but we usually see the results in the form of frantic and badly written code leading to a worse release. When a developer complains about a 60 hour week the entrepreneur sees it as a lack of commitment though.
Not all entrepreneurs are like this. Many are really great people that inspire a real sense of camaraderie and excellence. They work hard, are honest and they make sure that their staff is happy too. They may need somewhat long hours, but the work is actually rewarding. Further, some of these guys want to help you along later so that you can build your own company in the future.
Figuring out which entrepreneur you are interviewing for is not exactly easy or precise. You may not be able to find out who you are dealing with until the offer comes in either. You can find out a lot though from the staff during the interview. The following is a short list of questions I generally try to ask each of the interviewers.
1. What time do people generally get in?
It’s good to know if you are working with early risers or a company with specific start of day times. Some companies have very flexible schedules with core hours. Some startups actually run a 9-6 shop in terrible commuter locations.
2. What would you say your daily routine is like?
You could find out that the team likes to grab a coffee at the starbucks around the corner and go over the plans for the day. You could also find out that everyone reports to their desk and reads emails quietly.
3. What is the release schedule like?
Is it a web service that goes through weekly or monthly releases? Is it every 6 months? A year? 2 years? The shorter the window the more you generally have to do. Different project management, QA and development strategies are used for different intervals and kinds of applications.
4. What is your project management style: waterfall, agile or something else?
You know which of these you like and are willing to try.
5. Where do you live?
This sounds really odd, but how far everyone is driving matters. Does everyone live in town while you are going to have to drive an hour? It changes the amount of time you can spend at work and with your colleagues outside. You may find yourself at a place that expects you to work really long hours and then you have a long commute to face while everyone else is close by. They may not understand that you just can’t work the really long hours because of the commute. Another factor is the after hours commitment. Some companies have an active social life and a long commute may make it difficult to join in.
6. Where do people go for lunch?
What you are trying to find out is if people go out for lunch as a group. If you aren’t making much money but everyone goes out then you may have to go out to be accepted in the group. That could be really expensive. It could also be that everyone brings lunch from home and eats at their desk. It could also be that people don’t go out as a group ever.
At some point be sure to get a cup of water or coffee and visit the restroom. This sounds kind of odd, but you really need to see how these people live. You should see if they have an open-office plan and if everyone is silent or talking. Is the “kitchen” a nasty pit or really clean and the same for the bathroom.
These last items may not make sense and may sound dumb. Open-office plans can be noisy or silent except for the clicking of keys. Noisy places mean people are talking to each other while a quiet office can mean that there is nothing to say or everyone knows what needs to be done. A silent office can also mean that people are messaging each other instead of talking. One style or the other does not make it a bad place to work, but you need to sort of know whether you like quiet or noisy places. You also have to be sure that you can live with the total lack of privacy.
A kitchen and a bathroom tells you what the people are like and if there is a cleaning service. I personally like being someplace clean. It matters, I’m a germaphobe. Let’s say that you see an adequate kitchen with the usual things except for tables. Where do people eat? Do people hang out together during lunch?
You usually don’t have a lot of time to ask all of the questions from each interviewer but be sure to ask at least one common question from each interviewer. It’s important to hear similar answers from each person in regard to the life style of the company. A manager will always try to sell the company, but an engineer may be far more straightforward in his answers. Take some time to think about the mosaic of answers to each of the questions after the interview.
There are no right or wrong answers to the above questions. You may really like a frenetic or a silent workplace. You won’t know about the place until you ask.
The most important person to interview is a senior manager or a founder. You will almost certainly interview with a founder in a startup. The company is small and they are into pretty much everything. This is great because they set the pace of the company. You want to talk to him about everything you can and really know this person. The one thing about them that is certain is that you won’t change the kind of person they are no matter how important you may become. A crazy leader stays a crazy leader for awhile. Its whether he is your kind of crazy.
The compensation conversation is the one to listen to the most. Any discussion about stock options must include the size of the share pool. Founders may know the number off the top of their head. The reason they know the number is that they have a huge portion of the shares and they can calculate their wealth almost instantly in the event of a buyout.
Knowing the share pool size lets you determine whether it is a meaningful number of shares. Let’s say you go to a startup and they make you an offer of 10,000 shares on an unknown pool size. You may want to make a $1MM off the deal in the event of a buyout. That means that your shares have to be worth at least $100 per share to get you to a million. Now, what does the company have to be bought for to get you that money. The pool size helps to tell you that. 10,000 shares of a company with 40MM shares means that the company has to be bought out for at least $4 billion in order for you to get $1MM. Good luck.
There are a bunch of terms like ratchets and multipliers that factor into the valuation of options too. The discussion on these topics is incredibly long, but they are mechanisms to ensure that the investors get a decent return on the investment and risk they are taking. Basically, the investors get paid first and at a premium and you get your share of the remainder. That could mean that the investors take an additional $20MM or more off the top of the deal.
Don’t get me wrong, I love options. Just be sure you understand how much you are getting and set your expectations appropriately. If someone interviewing you says we’re all going to be rich, but sure that “we” means that you have a large number of options too.
Everything I am writing here is about trying to collect information about whether a company is a good pick. Some small companies claim to be startups even though they are pulling in $5MM in revenue and running a 15% profit for the past 5 years. It’s very sexy to be a startup and some startups are similar to a 53 year old woman claiming to be 39. They aren’t a startup but they want to be so badly that they take on the startup-lifestyle.
The issue is that small companies have usually already gone through rounds of investment so the share pool is very large. You have to examine the offer package carefully to see if the commitment necessary for the small company is worth the overall effort when compared to the offer from a real startup. Real startups option packages are often more valuable because the number of shares in the pool is very small. The effect is that you can evaluate if the time you will have to put in is worth the final reward.
No matter which company you ultimately decide to work for, be sure that you have done the due diligence and selected a company that you are going to look forward to going to every day. And if that doesn’t work then find a job that you can tolerate. And if that doesn’t work then you probably are better off where you are right now. But no matter what you choose, be sure to find out what you are committing to and who you’ll be working for.

Being a Developer During a Recession

There is a growing fear that we are going into another recession if we aren't already there. The mortgage finance issues, the massive losses that came to the hedge funds, many consecutive bad trading days, rumors of Yahoo about to layoff folks and so on. The picture we are given is one that things are relatively bleak and that soon we will be homeless, jobless, the wife or girlfriend is ditching us and the dog is looking like he's ready to go on the road and run with the pack.
The more immediate fear, for us developers, is being laid off because the company isn’t doing well for one reason or another. It is reasonable to be scared but it is unreasonable to do nothing. Now is the time to start planning for a lay-off and hopefully it will never come for you. But I can assure you that some people reading this right now have been laid off in the past and it will probably happen to you too at some point. It isn't the worst thing that can happen to you but you really don't want to experience it without some kind of parachute.
First, layoffs are common. In the late 80's and early 90's Digital Equipment Corporation (DEC) and Wang went through massive rounds of layoffs and saturated the market with developers. It was difficult to get a gig during that period because of such tremendous competition. Of course, many of the laid off guys founded new companies and hired old friends.
Second, most people remember the "Dot-com" bust that hit its peak some time during 2001- 2002 and 2003 was the start of the recovery. We should also remember that it was preceded by the mobile phone and telco bust that happened a year or two earlier. The network hardware companies also took a beating as Dot-com companies stopped buying. A lot of people were out of work but there were still jobs to be had.
You'll hear a lot of stuff about how to avoid being laid off over the next few months. Some will say that you need to work really hard and work on truly critical code. Work so hard on critical items that the company can't afford to lay you off. You'll hear things like "keep your head down and just do what you are told" and "avoid arguing at all costs." Don't take time off, don't say no, don't be too senior, don't be paid too well, don't be too junior, don't be average, don't stick out and be sure to stick out and get noticed for your work.
The truth: layoffs are fickle. You can be laid off for a number of reasons completely out of your control, that of your manager and her manager. There is no such thing as a person who cannot be laid off. You see C-level executives get ousted for just having a bad quarter or they fell out of favor with investors. Are these people any less critical than even the best developer or architect? If they can go, then so can you. The company, its investors and directors believe that they cannot succeed unless they make cuts and they can make cuts for unusual reasons regardless of how it will impact the company. They believe that another employee will learn the work and pick up the slack, even if the product comes out later. It's true too, someone will learn the code and go from there.
With that, let's talk about what to do before a layoff. I'm not a financial or credit adviser so take what I'm about to say as my opinion alone. You should contact an investment or financial adviser if you have any personal questions.
Saving some money every paycheck is critical. That money is incredibly valuable later on down the line if you get laid off. The cushion it provides is incredibly valuable, especially when you see your unemployment insurance check. Some experts say that you need to have at least one year's worth of salary saved. This is obviously difficult, but every penny counts.
Homeowners are especially vulnerable. In some states unemployment insurance may max out at only $1600 a month depending on your annual income. Is your monthly mortgage payment more or less than that amount? How about your monthly living expenses: food, utilities, medical insurance and car related costs (gas, state taxes, insurance)? Can the unemployment insurance cover all that? No? Then you need savings and you need to start today.
One thing homeowners can do is refinance to a lower interest rate, but you usually need to be working to be eligible. It may be worth your while to refinance and save the difference from your old payment and your new one.
The day you get laid off is terrible. It truly sucks. They hand you lots of paperwork and try to get you to sign everything. They can often withhold severance packages until you agree not to sue them later. Some companies don't give severance except to executives who negotiated it in their employment agreement. Other companies give as much as 6 months pay. It varies but it is not required. They can't withhold COBRA- your health insurance plan. Most of the paperwork is pretty standard, of course, talk to a lawyer and be sure that you are comfortable signing away some rights.
The next thing you have to do is call the state and get your unemployment insurance going. Most states require employers to put money into a pool as a part of their payrole taxes. The state then pays the money back to laid off staff at whatever the state's rate is. Don't worry so much about how much money your company paid into the fund, that doesn't impact your payments. However, the company's unemployment insurance rate often goes up for every layoff. It takes time for the state to process your unemployment request as they have to get in touch with the employer and verify the circumstances of your unemployment. Being laid off and being fired are completely different in many states and it affects what your unemployment insurance rate will be.
 Some states let you do the unemployment insurance registration over the phone while others require you go into an office. You may feel like a failure in some way, but you are not. Layoffs are supposed to be about the financial failure of the company, not your ability to perform. If you were a poor performer they could have fired you or forced you to quit. You are going to that office to get what taxes paid for. It is owed to you.
The drive home after being laid off is terrible too. You may have a wife and kids to tell and that's a hard thing to face. You may be single and you have to figure out how you are going to tell your parents and friends. Its really depressing.
Now you are laid off and you have to sit at home. You may have to make some cuts, like go out to dinner and lunch less, buy less beer or buy cheaper beer, buy less expensive clothes, go to the movies less or rent fewer movies. The trend is clear: buy less if you can.
The first week of unemployment is hard because you may miss your friends from work. It can be painful because one day you are having lunch with friends and then the next you are not allowed to see them at the office anymore. You have been evicted from people that are important to you and a routine you live by. Sure, you can still catch-up with them and have lunches and such, but it isn't the same. Even the strong and reclusive people become depressed by these circumstances.
Looking for a new job is your new job. It can be difficult for a number of reasons. First, being pushed out of a job can leave you bitter and that shows up in an interview. You have probably interviewed people that seemed angry and didn't hire them.
Second, layoffs at the height of a recession can leave you with few job options. I checked for jobs through Hot Jobs during the Dot-com bust and saw very few postings and sometimes no postings in the Boston area. Do a search today and you'll find hundreds of Java developer positions in the same area.
Recruiters can be supremely helpful when they are being employed by companies. They may be in a drought during a recession too though. Next are the online ads. I often wonder the value of ads on HotJobs and Dice whether the companies are showing off or are really hiring. Craigslist.com seems to have ads from employers actively hiring. Of course, your professional network is gold and you really should tell people about your situation. They may get know of a company that's hiring and get you in front of someone.
I've painted a bleak picture so far and now I'm going to talk about some of the joys of being out of work. Yes, being unemployed and scraping by can be a wonderful life-changing thing that may bring you a lot of happiness. And provided you can weather the financial drought, could be the best thing that ever happened to you.
Bear in mind that you are a developer. You have all the skills to write your own application from scratch. You can start your own company. You can work for yourself and now is a good time to start. Your skills will stay sharp and you can explore areas of application development that were not available to you in the past. You can learn things outside of your old job too, like learning sales, marketing and finance. It can be an incredibly valuable learning experience.
You don't have to start your own company though. Consider working on an OSS project fixing bugs and working your way up to being a mainline contributer. The minimal goal is to ensure you don't lose your valuable development skills.
There are lots of fun things you can do on the cheap too. You can go out for a walk, a long walk, every day. Reading is something you have plenty of time for. And of course, you can code for several hours a day on things you are interested in. You can also spend some time blogging (aka writing skills), cooking and gardening. You could probably paint your house too. You can go on long drives and hikes.
One obstacle to overcome is the notion that you must get hired at your old salary, old title or even get a promotion. It happens, but many developers will tell the tales of how employers snapped up highly skilled laid off folks on the cheap.
I talked to a manager at a defense research company during the beginning of the Dot-com crash who was excited by the layoffs happening in the area. She was looking forward to hiring a couple of new people at lower salaries. I lost interest immediately because I currently had a job and a front line manager probably shouldn't be so excited by how labor costs were coming down thanks to the misfortune of others. Moreover, they shouldn't gleefully take advantage of the laid off when there is actually no financial benefit to the hiring manager. An argument could be made that the manager can now hire a better engineer for the money, but that engineer probably has enough sense to leave when the market rebounds. These managers are looking to cut labor costs and a laid off person has almost no room to negotiate salary or benefits.
There are some guys out there that haven't been laid off and they attribute it to their stellar performances and that's great, good for them! The risk is that you simply never know what is going to happen from one quarter or week to the next. Preparing for a layoff is sort of like a squirrel preparing for winter, you hope it will never come, but you are ready if it does.
Now some of this sounds like words of experience. I've been laid off and it wasn't a good time for about a week and I was bitter about it for a lot longer. A few days after being laid off I started writing a lot of code every day, reading voraciously, dating more, watching a lot of movies, cooking, spending a lot of time outdoors, looking for a new job every day and met my future wife. I had saved ahead of time and had a low mortgage. I look back at that time as being one of the best times of my life, but only because I had the savings.

Ada Does Not Make The Engineer Of Tomorrow

C++
I read Computer Science Education: Where Are the Software Engineers of Tomorrow?and had a hard time not chuckling through the document. Its main issue is that Java is a bad first programming language to learn and that developers aren’t as good as they used to be as a result. They argue that C, C++, Lisp and Ada are better places to start. Ada is the one that made me blink until I realized that these guys founded AdaCore, an IDE for Ada.
I agree that learning C and C++ is valuable for pretty much every software developer. A subset will find Lisp useful too. And I am sure that a few guys out there will marvel at the perfection of Ada, which continues to be a huge commercial success. If you want to earn a living and be able to choose from a wide pool of employers, then you are better off learning Java, C++ and C#.
I strongly believe that C and C++ are fun languages. You can write device drivers, kernels, video games, embedded software and high performance software. You can also allocate all available memory, exceed the boundaries of a memory allocation, point your pointers at the completely wrong thing and fault the operating system. You can write very powerful and complex applications that fully take advantage of the target platform. Its a lot of fun, challenging and I like it a lot.
Java is my language of choice. I am a web application developer. I have a lot of job opportunities and I work on interesting things too. Java provides a good framework for building an application on one platform and deploying it to another while providing a rich set of services that let me do my job quickly.
Small software companies generally cannot afford to teach recent graduates a new language. You have to know the language well enough to start producing usable code within a few days of starting. Some languages are worth the exercise and others just take up a portion of your life that you hope to forget.
Here are a few survey results of programming language use in the corporate world. They are in no particular order of which is more valuable than another.
These surveys say that employers still look for both high and low level language skills, but especially for the Windows and web development arenas. Languages, like Ada, while interesting may not help you get a job in one of those hot start-ups that can make so many people wealthy. Being strong in multiple languages and carrying the wisdom and the choices of those languages with you is hugely valuable, just be sure that one of them can get you a job when you graduate.