To argue that computer programming should be a required high school course is absurd. But I’ve learned that many high schools still don’t offer any kind of computer programming/computer science classes. This is surprising to me, because even my high school, a mostly rural school with children of blue collar families and farmers, offered Computer Programming I and II (and before the days of Visual Studio).
I haven’t been able to find much data on the subject, but this Washington Post article states that few than 1 in 10 high schools across the state offer computer science courses:
Across the Washington region’s school systems, fewer than one in 10 high school students took computer science this academic year, according to district data.
I imagine the statistics are similar in other states. Also, one must wonder what is considered “computer science.” A high school near my house teachers Microsoft Powerpoint, Word and Publisher classes. This I find as surprising as the fact that most schools don’t offer computer science classes at all. Computer science, as far as code design, data structures, methodologies, algorithms, is hardly something of rapid change. These fundamentals are the basics that should be learned before any student delves into the specifics of a language. The Microsoft Office Suite, on the other hand, is little more than a set of common, user-friendly tools, guaranteed to be a version or two out of date in the span of four years! Why waste time teaching such things?
I have read that finding qualified teachers to take on computer sciences courses is a challenge. This makes sense, as any skilled engineer would probably rather be earning three times the income of a high school teacher.
Maybe this is an area where the local engineering community could step up. Why not let a good engineer cut away for an hour a day to do some community service by teaching a class? It would be a great way to help high schools–a win-win. The high schools would get a qualified teacher for a specialized class, and the business community would nurture future engineers. This idea seems so obvious that I can’t imagine it isn’t already being tried somewhere!
Not long ago I found myself working alongside a brilliant college dropout–A young junior programmer who was just plain gifted when it came to software development. I was very surprised that he hadn’t completed a degree of any kind. It made me wonder why I had, without much consideration, put such high value on a four-year degree.
I attended Ball State University — a place hardly known for being an engineering college. It was a nearby school with a Computer Science program that did not cost as much as IU or Purdue. For someone like me, it was attainable. While I enjoyed my time at Ball State, and I learned much, very little of my Computer Science education turned out to be directly applicable to my career. Sure, I learned formal concepts, design practices and perhaps a little about requirements gathering and QA (very little). Some of what I thought I knew had to be unlearned, as I came to realize that things operate differently in the “real world.”
Ultimately, as someone with an inherent interest in writing software, I suspect that everything I really needed to know could have been learned in a year of dedicated study. The rest comes from workplace experience.
The problem, of course, is that if I hadn’t gone the college route, spending 4+ years working on a Bachelor’s degree, I would never have been able to land my first job interview. And it was that first job where I really learned how all this stuff that I knew really came together in a real business environment on a project of significant size.
Through the years, I’ve met great, good and awful software engineers with varying backgrounds and educations. Many of the best software developers attended college, but graduated with a degree in something unrelated (History, Art, New Testament Studies, English, to name a few). These people gravitated to Software Engineering and Development through various means, some of them going on to pursue certifications and other training.
My experience hardly reflects any kind of comprehensive analysis, but I don’t hesitate to say that most of the software engineers with undergraduate degrees in non-CS fields are among those that I consider excellent.
There was a time, not all that long ago, when droves of students gravitated to Computer Science because they heard that it was a great career to pursue. While I happen to agree that it is a great career, I don’t think it is a career for just anyone. It requires a certain type of interest and motivation. Perhaps it is because some folks enter Computer Science undergraduate programs for the wrong reasons, but I have observed all ranges of skill level from those with CS backgrounds. I’ve found myself shocked (more than a few times) by the poor quality of code created by developers with formal CS educations. I once was asked to help debug some code written by a colleague that had compilation problems. It didn’t take long to find the problme: A 2,000+ lines-of-code function that caused the compiler to choke.
Doctors, Teachers, Lawyers, Accountants–These are all people who require specific degrees and certifications. I know that I don’t want to have my eyes checked by a self-trained Optometrist. In software fields it is different. After a software engineer has some experience, it seems that his or her degree becomes afterthought. Unless the subject of college comes up during a lunch conversation, rarely do I actually know the formal education or degree of a colleague. What I do know is that person’s quality and volume of work. Don’t get me wrong–there are things that may be taught in a Computer Science department that are absolutely necessary. Knowledge of algorithms and design patterns is important. It should be noted, however, that knowledge and application are different beasts.
I wonder–If college costs keep rising at such a staggering rate, at what point does the return on investment lose its worth? With companies hard pressed to find good software engineers, and with a greater percentage of the population unable to afford a 4 year degree at even a semi-respected university, when will the traditional model change? There are so many options–from certifications to local technical schools that are available at a fraction of the cost. At some point it seems that a college degree becomes more of a social status symbol than a true reflection of one’s talent or ability.
We’ll have to begin to ask ourselves: Which candidate is right for the job? Is it the one fresh out of college with a CS degree and a 3.8 GPA who lacks experience working with others on a project of scale, or is it the non-college-route self-taught programmer who has proven talent that can be seen by way of open-source contributions?
Occasionally I have seen job postings for software engineers which claim to require a Master’s Degree in Computer Science. I have to wonder: What does the hiring manager believe he or she might get from the engineer with a Master’s Degree that differs from the engineer with a lowly Bachelor’s Degree? In my experience, most Master’s Programs a little more than the same programs that undergraduates complete… The only difference is that the students in the program have already completed a four-year degree (and that degree could be anything).
This isn’t to demean formal education. If I had it to do over, I wouldn’t change my time at Ball State University. No way! I was fortunate, however. When I went to Ball State, college was merely ridiculously expensive. Today it is insanely expensive. In 10 years, it will be unattainably expensive. When that happens, where will the software engineers come from?
This is going to be a tough question, and I suspect many won’t like the anwer.
Are you working yourself out of a career?
If this question confuses you, chances are you are doing just this. Perhaps you’re the main guy or gal on your project, and your company values your work (for now). What is your work? Are you doing the same thing day after day? Maintaining Oracle Forms? Updating a legacy web site? Parsing through line after line of Visual Basic to keep some legacy system running smooth?
If so, what else are you working on? Anything?
I remember all too well the dark days of 2001 through 2003, when, just after the dot-com bubble, many skilled software developers were out of work with no good options. Any companies that happened to be hiring took full advantage of the fact that the market for software people was flush with resumes of people who were desperate for jobs. The pay dropped dramatically. I lost my job at a startup that failed, and took the first job offer that came along: A technical writer and quality assurance contractor on a federally-funded project. The job, initially, was horribly boring. I literally hated what I was going–but it was a job.
My problem was, being somewhat young, I didn’t have a powerful resume or much experience under my belt. I didn’t have the proof, so to speak, to convey to a potential employer that I would be a great fit for a position. And the sad fact was that, no matter how great I might have been for a job (so I thought), or how hard I was willing to work, there were literally thousands of other candidates out there. The hiring companies had their pick–and believe me–they were picky!
As good as things seem to be for software developers right now, I’ve learned that the market can change quickly. So it is on you to make sure that your skills are diverse and up-to-date. To that end, it is necessary to continually pursue new learning. Let’s face it: Your employer does not have a vested interest in seeing you grow your career. An employer wants an employee to meet their needs as efficiently as possible. That’s fine. Expected, really.
So what are you doing to ensure that you are valuable when the time comes that your employer no longer needs you, or when your employer downsizes or go goes out of business? It’s a question that many of us don’t wish to ponder too much. It sounds so negative, doesn’t it? But it’s an important question.
It isn’t bad to be an expert at something. It’s great, for example, to be an expert C++ programmer. Kudos! But what does ‘expert’ mean exactly? Does it mean that you do one thing very well, but nothing else? It may mean that you are valuable as a C++ programmer, but of no value when it comes to other needs: UI design, Database Design, jQuery, HTML5, Agile, System Administration. A hiring manager would rather hire a candidate with many diverse skills (yet expert in none of them) than an expert in a single skill.
In a single week at work I find myself working on OS scripts, front-end UI design, back-end data access, business services and Rest APIs. My position requires that I have knowledge of the “full stack” (A term I despise!) as some like to call it. This is good. I feel secure in knowing that I’m hire-able (not to sound self-satisfied) based on a wealth of skills. Should I find myself looking (I’m currently quite content), I’ve built my resume up to show that, while I’m an expert in nothing, I’m skilled in many things. This is a better way to go.
This is a topic that I plan to write more about, perhaps turning it into an article. I want to leave with this, and this is going to sound a little negative if taken the wrong way: If you have been doing the same thing day in and day out for X years, you have not gained X years of experience. You’ve gained 1 year of experience X times in a row. It may be time to consider looking for a new job right now–while employers are eager to find talented software developers. And not just any new job. You need to find a job that will challenge you–stretch you to learn and grow new skills.
(I hope this post doesn’t strike anyone as self-righteous, cynical, or rude. My intent is only to point out a common problem in the career of software developers.)
I have an idea for an article, but I’m not entirely sure how to approach. It’s a subject that I believe some have written about, but as a male, it isn’t a subject that I have given much though to until recently: Where are all the female software engineers?
I suppose the only reason I’ve thought about it at all is because I have two daughters, neither of whom seem all that interested in video games or computers. Sure, there’s some passing interest. They like simple games on Friv. But really, for the most part, any interest in that which may be considered “technical,” ends once they get Pandora open and playing their songs.
I’m definitely not one to declare this an open and cut case of sexism. It could simply be a difference among genders. As someone who loved Lego as a boy, I tried pushing Legos on my daughters. It didn’t stick. I’ve presented video games. No dice. They’ve watching me tinker with Arduino… With only passing interest.
In college I had two female computer science professors. One taught Cobol, the other taught Data Structures, Object-Oriented Programming, C, and C++. This second professor, not a PhD, was one of the best professors I had. She knew her stuff–and she knew how to teach it. Sure, most professors know what they are talking about, but the skill of teaching is something, at least in my experience, that most lack.
I’m trying to think of how many female software engineers I have worked with over the years. I’ve worked with female managers, product and project managers, quality assurance engineers, and technical writers. But when it comes to counting the number of female software engineers I’ve encountered, I think the number is two or three (and only two that I can recall). I do know another female who majored in Computer Science, entered the workforce, worked for IBM, and left the field because she hated it.
While sexism, I think, is an oversimplified answer, I think that simple gender preference is equally oversimplified. After all, there are many female scientists, math teachers, and engineers of other disciplines. May it have something to do with social nature? One can only guess. One would expect just about any professional field to be weighted one way or the other. We aren’t surprised that there are more female than male nurses, or more male than female auto-mechanics. But in these fields, the reason for a gender preference seems somehow a little more clear.
I may not give this a second thought if I had encountered just a few more female software developers. But just two or three seems low enough to suggest that there is something more at play. I don’t suggest for one minute that it has anything to do with bias on the part of men, and I can say this because I personally have not encountered any such bias. I have never once heard men discuss female engineers of any kind in any derogatory manner, nor would I take part in such a conversation (I have a mom, two sisters, a wife, and two daughters–all of them extremely intelligent). Nor do I suggest that the measure of gender equality is equal numbers of men and women in a given field. I think that assumption would be outrageous (correlation doesn’t imply causality, nor does correlation necessarily imply inequality–it may or may not).
About a year ago I was helping my oldest daughter with her math homework. I was shocked when she said, “Dad, I’m just a girl, I’m not good at math.” WHAT! Where in the world would she have heard such a thing? Certainly not from me. Certainly not from any of her teachers (all of them female). When pressed, she could not explain to me why she thought such a thing or where she might have heard it. The only answer I got was, “Math is for boys.” Similarly, I wonder, if for some reason, young girls develop a sense that computers are for boys. And if so, where would this troubling idea come from?
I’m interested in hearing some thoughts on this subject, and if any female software folks happen across this post, I would be especially eager to hear from you.
comfy chairs (take your laptop elsewhere for a change of environment)
custom workspaces (let employees choose their equipment)
in-house courses (on a range of subjects)
All of this is designed to make the workplace one that is both fun and productive. Of course, in a company with the size and profits of Google, such things seem to work very well. From the article:
Ben Waber, who has a Ph.D. from M.I.T. and is the author of “People Analytics,” is, at 29, the median age of Google employees. His company, Sociometric Solutions in Boston, uses data to assess workplace interactions. “Google has really been out front in this field,” he said. “They’ve looked at the data to see how people are collaborating. Physical space is the biggest lever to encourage collaboration. And the data are clear that the biggest driver of performance in complex industries like software is serendipitous interaction. For this to happen, you also need to shape a community. That means if you’re stressed, there’s someone to help, to take up the slack. If you’re surrounded by friends, you’re happier, you’re more loyal, you’re more productive. Google looks at this holistically. It’s the antithesis of the old factory model, where people were just cogs in a machine.”
During nearly ever job interview I’ve ever had, on the phone or face-to-face, I’ve been asked some form of the question, “How do you keep your experience current?”
Sometimes (emphasis on sometimes) this is asked by someone who seems impressed that I have such knowledge on a fair amount of “new stuff.” More often this is a genuine question (and a very good one) asked of an interviewee in an effort to gauge the type of software engineer that this candidate may be. Does this candidate have a desire to keep current with emerging trends? In many ways this is a unique necessity in the world of software engineering as a career.
Software engineering is a discipline that requires a real love of the work. Its not something that anyone hoping to find easy employment stability along with a solid paycheck should pursue (warning to those considering Computer Science).
So the question remains: How do you “keep current?”
No matter how much I love software, the fact remains that I have a life outside of work: family, friends, hobbies… Its not easy, but its necessary. One guy suggests learning a language every year. I like to pick up books that look interesting, read Stack Overflow and listen to podcasts. Woe to the “software engineer” who wishes to dismiss all emerging technologies as gimmicks or buzzwords… Such engineers will quickly find themselves (if lucky) performing maintenance work on antiquated legacy code. As long as software is something of a hobby, something that is personally rewarding, all of the above should be easy enough.
While all of the above is good, and its even better to have a pet project, I have found that nothing compares to working around extremely intelligent people for a company that is serious about software.