How to Self-Study for a Computer Programming Job

  1. Posted on August 12, 2007 9:30:AM by Steve McConnell to 10x Software Development
  2. Professional Development

Readers will sometimes ask me, "I don't have a college degree in computer science. How can I study for a computer programming job?" Both my company in general and I personally have put a lot of work into answering that particular question over the past 10 years. The specific answer is based on a few questions that each individual must first answer for himself or herself:

1. Do you want to go back to school, or do you want to self study?
2. Are you more interested in doing software development or in studying computer science?

If you're able/willing to go back to school ...

If you are interested in computer science (the study of computers--more research oriented), then you could look at http://www.acm.org/education/curricula.html, which gives recommendations for how universities should teach computer science. You might have to look through a few documents to find exactly what you are looking for. You could also look at university programs and see what progression of classes they recommend. This hasn't been my area of professional focus, so I can't offer any more on this point.

If you are more interested in becoming a software developer yourself, I suggest that you look at the recommended software engineering curriculum guidelines (as opposed to computer science curriculum guidelines), here: http://sites.computer.org/ccse/#_Release_of_SE2004. In this area, too, you could look at university programs and see the progression of classes they recommend. My company maintains a list of accredited software engineering programs here: http://www.construx.com/Resources/Undergraduate_Programs/ .

If you're not interested in going back to school and want to self study , the recommendations are different. This is what most people who contact me are asking about, which is not surprising considering that only about 40% of people working as programmers originally got a CS degree or equivalent, and only about 60% of people working as programmers ever got a computer-related degree.

My company has put together several sample professional development plans (PDPs). Each of these plans describes a progression of work experience, reading, and classes that a person should take to achieve what we call "competency" and "leadership" levels in software development, testing, or project management. We originally developed these plans about 10 years ago for Construx's internal use.

For example, here's an excerpt from the sample Programmer's PDP:

Activity Type
Details
Work Experience
  • Act as a developer on at least one project
  • Act as a backup construction lead on at least one project
  • Act as a backup design lead on at least one project
  • Develop unit or module level test cases for a project
  • Write one or more designs
  • Participate in the release process of a project
  • Perform personal planning and tracking on a project
  • Participate in a code review
  • Participate in a design review
  • Participate in an informal review
  • Participate in an inspection
  • Review a project's documentation including the quality plan, test plans, test cases, project plans, schedules, and work breakdown structures
Reading  
  • Code Complete, 2nd Ed, Steve McConnell
  • Programming Pearls 2nd Ed, Jon Bentley
  • Applying UML & Patterns 2nd Ed, Craig Larman
  • Conceptual Blockbusting, James Adams
  • Software Creativity, Version 2.0, Robert Glass
  • Rapid Development, Steve McConnell
  • Software Project Survival Guide, Steve McConnell
  • UML Distilled, Martin Fowler et al
Classes  

This table describes the work need to get a developer to Level 10 on our PDL. (We consider Level 12 to be full professional standing). See our website for descriptions of the work needed to attain Level 11 and Level 12.

It's important to recognize that the PDPs on the website are samples. In practice, employees normally work with a mentor to define the exact details of their PDPs. Our practice allows substitution of books, classes, and experience as long as the substitions collectively are approximately equivalent to the sample. The main purpose of the sample is to provide a starting point so that an employee can create a PDP based on something more helpful than a blank piece of paper.

Sample plans like these are often sufficient for an individual's use. But they are not the full story. They are one of many outputs of our much more comprehensive Professional Development Ladder (PDL). You can see an overview of our PDL here, and you can also download our PDL whitepaper.

Organizational Support for Professional Development

After a few years we found that some of our client companies were interested in providing better career pathing for their technical professionals, and it turned out that the way we had designed our PDL made it easily adaptable for other companies' use.

The basic idea is that we started with the SWEBOK (software engineering body of knowledge) as an organizing framework. We customized each of the SWEBOK's 10 knowledge areas into more practically focused knowledge areas that we called Construx Knowledge Areas (CKAs). The knowledge areas are things like requirements, design, construction, testing, and so on.

We then defined Capability Levels within each of the 10 CKAs. The capability levels are

  • Introductory -- performs basic work in an area, usually under supervision
  • Competence - performs independent work in an area, largely self-supervised
  • Leadership - performs exemplary work in an area; serves as a role model for others; regularly coaches others
  • Mastery - performs reference work in an area; work has not just company visibility, but industry visibility; provides leadership both within Construx and to the industry at large

Our PDL defines specific steps that a technical professional can take to achieve Introductory, Competence, and Leadership capability within each of the 10 CKAs. Consequently we end up with a matrix of 10 CKAs crossed with 3 Capability levels -- i..e, a 10x3 = 30 box matrix -- which in total has several hundred entries for work experience, reading, and classes that are needed to attain each level.

The 10x3 matrix structure can be easily applied to provide a simple way of defining consistent and structured career progression, including guidance for professional development and promotion criteria. For example, within Construx we've said that to attain what we call "Level 12" (also known as Professional Software Engineer status at Construx), a professional must achieve Introductory capability in all 10 CKAs, Competency level in 8 of the 10, and Leadership level in 3 of the 10.

Thus someone who has a development focus might go for leadership in Design, Construction, and Tools & Methods. Someone who has a test focus could go for leadership in Testing, Quality, and Tools and Methods. Someone with a project management focus could go for leadership in Engineering Management, Quality, and Requirements. The cool thing about our PDL is that it provides consistency across these disciplines and level-sets the amount of work that anyone will need to do to achieve full professional status regardless of whether they choose to specialize in development, testing, management, QA, requirements, or another discipline. It's also has the advantage of being aligned with the industry-standard SWEBOK, which makes it easier for companies to create customized versions of our PDL if they choose to do that.

Question for You

We originally created our PDL because we had noticed that most companies provided little or no career guidance to their software professionals. I thought that software professionals deserved better and would appreciate a clearer roadmap to advance their professional capabilities and their careers.

What do you think? Have you been satisfied with the career guidance provided by the companies you've worked for? What guidance have they provided? Has it been enough? What's been missing. I'd love to hear your thoughts.

Scott McMaster said:

August 12, 2007 11:38:AM

Hi Steve.  I know where you"re coming from, and I agree with it in principle.  I think the PDL is a great roadmap for professional development for those already doing programming jobs.  But for people who want to "break into" programming as the title of the post implies, the cold hard truth is that they will not even be considered for the vast, vast majority of positions without either a degree or the demonstration of *specific* technology skills.  I almost hate to recommend the various "technology certification" programs -- especially since I"m not currently certified myself -- but combining PDL-based self-education with a Sun Certified Java Programmer or MCP status might actually do the trick and land an interview.

In my experience, traditional career development for software professionals almost always attempts to hoist people up into management.  More recently, some companies I"m familiar with are recognizing that not everyone is interested in management and are creating "principal" or "distinguished" engineer positions for those folks to work toward.  And other companies seem to be (mis)using the "architect" title for the same purpose.  But at least the need is being recognized as the industry matures.

D. Lambert said:

August 12, 2007 12:12:PM

I"m afraid I have to echo the disconnect between skill set and marketability.  IME, there are an awful lot of people who are hired based on a degree and job experience, and they can"t code their way out of a paper bag.

Ok, that was harsh.  What I really mean, is that even though they may be syntactically proficient, a lot of people struggle with "what"s the *right* way to do this?"  I believe that your PDP is likely to help with that for people who take it seriously.

First catch-22:  How does someone who doesn"t know programming find out that Steve McConnell knows what he"s talking about?  (how is someone going to pick your program over a "learn to program in 21 days" book?)

Next problem: Scott"s right about having a hard time getting hired without a programming degree.  One of the keys to maximizing your chances is to make a smart transition.

If I wanted to make that transition, I"d look for a departmental job where you can become a "power user" and leverage that to more and more technical positions.  There are quite a few roles that aren"t viewed as highly technical (business analyst, technical writer, data analyst, etc.), but a transition from a job like this into a development position is more credible than trying to make the leap all at once.

Claude Baillargeon said:

August 12, 2007 7:58:PM

There are some missing accredited software engineering programs in your list.  Software engineering is "Génie Logiciel" in french.  Refer to that list for the missing ones:

www.engineerscanada.ca/.../acc_programs_2.cfm

I"ve graduated from Laval University (Québec city, Canada) in software engineering (Génie Logiciel).

Ian Clatworthy said:

August 12, 2007 10:48:PM

Steve, I"ve really liked the approach you"ve taken for some time now and have published a career development model partly inspired by it. It"s called META and it covers not just (Software) Engineering, but also self/team Management, Technology and Applications. See ianclatworthy.wordpress.com/.../meta-career-development.

Like the PDP though, I see this as a useful framework for ongoing development as opposed to getting started in IT. Without a qualification, certification or experience behind you, breaking in will remain very challenging for self starters simply because most employers don"t like to take on the costs involved and risks inherent in employing someone with next-to-no experience. I recommend getting involved in an open source project for a 6-12 months while self-studying to help overcome that barrier. Having shown you can work with others and produce good code will buy credibility in many places.

Kevin said:

August 13, 2007 11:51:AM

Here"s my (admittedly hypothetical) question, Steve:

If an applicant submitted a resume that listed "books read" and covered the outline you laid out, would you give him a job? An interview? Of course, this resume would have no CS or equivalent degree, but a classic liberal arts education.

Steve McConnell said:

August 13, 2007 2:00:PM

This question isn"t as hypothetical as you might think since we ask for a list of books read as part of the hiring process. The list helps us tentatively place each candidate on our ladder. If an applicant has read a lot of the books in the outline, we take that as a strong sign that the person is (a) self motivated to learn more about software engineering, and (b) potentially a good cultural fit for us. That doesn"t mean it"s a slam dunk that the person would be a good hire, since sometimes people who are avid readers are more interested in reading than in doing work. But we do interpret it as a positive sign.

Kevin said:

August 14, 2007 10:49:AM

Let me make my question a bit more specific. Would a list of books read be sufficient to replace a CS degree on making initial cuts through resumes?

As I look at it, this is a case of short-term and long-term gains. When a resume has a CS degree, I assume a moderate level of familiarity with IDE"s, syntax, debugging, etc., but have no idea how they might approach problem solving, analysis of information, and other related problems that lead to long-term success. If a resume has a liberal arts education and lists books read, I would assume more facility with the latter skills and little direct technology knowledge.

So the question comes, can I accept the hit of a lot of short-term training to get them useful now in the hopes of greater success later? Tough question.

Steve McConnell said:

August 14, 2007 11:25:AM

Our situation might be different han a lot of companies in that we don"t put any weight on a CS degree, so the reading list wouldn"t substitute for it. Most CS degrees wouldn"t cover most of the reading on our list. So I think our list and a CS degree are an apples to oranges comparison.

I wouldn"t assume that LotsOfReading + LiberalArtsDegree = little direct technology knowledge. Typically people don"t become interested in the more general books like the ones on our list unless they"ve been pretty deep in the technology at some point.

Kevin said:

August 14, 2007 11:48:AM

Fair enough. I had meant to add SE degree along with CS (which would cover at some of the reading), but the point is well taken. I should also have been clear that my assumption wasn"t universal, but a starting point.

I would very much like to find a way to make this a viable way of culling resumes. My own background started with a liberal arts degree, but I couldn"t get in the front door for an interview until I went back to school and got the CS paper. Since then, to be blunt, the liberal arts education has served me better than the technical one.

Peter Sung said:

August 14, 2007 1:50:PM

Actually books read doesnt do much to show the aptitude of a programmer.  I think the *BEST* example of programmers given talents is to ask for a portfolio of works that person has done in the past, wether that be for a pro bono project, freelanced for people or did work in a school or at a work environment.

To base a person"s aptitude on the books that person has read in gaging his programming skills is as even more suspect than basing that person programming level skills on a university or college level degree in the field.

Kevin said:

August 14, 2007 2:26:PM

Peter,

I agree that as part of the hiring process your method of judging aptitude is excellent. What I am trying to get at is "Can books read be used as a valid first-pass screen."

Once past that screen, a portfolio of works has greater validity. But you can"t ask for a portfolio submission with every resume, you"d be swamped.

Here"s a question for all: Would a "Self-Education" section on a resume hold any water with people? From Steve"s comments earlier, it would show some self-motivation and some hints about cultural fit. Personally, I like the idea for those reasons alone. However, there is a strong bias toward seminars and certification classes.

There"s another reason I am interested in this topic. My wife"s cousin"s boyfriends" brother (how"s that for degrees of separation) is graduating with degrees in philosophy and political science. He would be an outstanding software developer. How can I outline a career path for him that will save him from going to law school because he can"t think of where else to apply his skills?

Jay A. Allen said:

August 20, 2007 4:00:PM

<em>My own background started with a liberal arts degree, but I couldn"t get in the front door for an interview until I went back to school and got the CS paper.</em>

Kevin, sorry to hear that. But your experience isn"t universal. I"ve managed to do very well in the past 12 years with no degree to speak of, liberal arts or otherwise. (This includes a 6-year stint at Microsoft.) I do admit, though, that those first few years of no degree/no experience were what you might call..."choppy." Since that bootstrap period, however, I"ve had no problems.

As for books vs. aptitude, I would take the books a person has read as a very positive sign. How many programmers do YOU know will brag that they"ve read SOFTWARE REQUIREMENTS by Wiegers, or even CODE COMPLETE? That a programmer even evinces an interest in the greater issues of software development beyond just churning out code is a plus mark, in my book.

Oran said:

August 22, 2007 12:11:PM

This post hits close to home, because I"m currently "bootstrapping" myself into a software development, mostly through self study.  My plan of attack has three fronts: reading, home projects, and a job where I do get to write at least some code.  

I cobbled together my reading lists from Amazon.com, personal reading lists published by random developers, and friend"s recommendations.  I found it wasn"t hard to find the classics (like Code Complete) and these made it a lot easier to find other good texts.  (I don"t know about putting the books on your resume though; it seems there are better ways to *prove* you"ve done the work.)

Home projects, with free tools and libraries, were very helpful, although by no means a substitute for professional experience.  You can do far more interesting things than a novice programmer is usually asked to do, and you learn to plan and complete projects from start to finish, long before you will by given ownership of a professional project.

But neither the home projects or the reading would have been worth anything if I hadn"t had daily professional exposure to real software development.  Watching projects flounder because of "classic mistakes" or struggling to re-use a badly designed piece of code (or succeed by following best practices) gives perspective and context to self-learning.  Speaking only for myself, I would have had a very inaccurate conception of software development without that feedback.  I do think the industry is different now than it was even 10 years ago, and I think there"s less willingness to hire someone "smart" who will "learn quickly."  

So, I think the balance of real software development activities and theoretical study found on the PDP is pretty much ideal for a well-rounded software engineer/developer.  It seems to be working for me, at least in my own opinion.

Thanks for making this available!

Bill said:

August 22, 2007 8:51:PM

This hits close to home for me as well -- I do not have a college degree at all.  I was always interested in technology though,  and, while engaged in a particular project, made a suggestion about how a task could be better performed if computerized.  The manager told me to go get access to a computer and come back when I"d implemented the suggestion.  I"ve spent the last 23+ years working in the field starting from that simple directive.

It does help if you read voraciously (I"ve read a good percentage of the books on the list, for instance), and it helps if you have someone who sees that you are  making the effort to learn and helps out (thanks, Jim!).

As for my current company, I have to say that they have provided next to no career guidance and, frankly, lied to me.  I was told that there were parallel tracks in technology, business, and management - that one could be promoted up any of the career paths.  This was largely a fiction from day one and, with cost-cutting, has become even more so over the years -- if one is seen primarily as a technologist, the chances for promotion (other than managing other techies) is virtually nil.

Johannsen said:

September 24, 2007 7:57:AM

The company I work for has no guidance for me as a developer at all. This and the fact that I am not satisfied with my work, even if the customer is satisfied, has persuaded me to search for another job. There are two options for me. Number one, search for a company which helps employees to develop better skills. Number two, leave the software industry because to many companies don"t know what they are doing. Well, that is my opinion.

Pedro Rabinovitch said:

September 24, 2007 8:28:AM

Great post! But out of curiosity... How *did* you get the laser level piece from the footing? ;)

Cheers!

Post a Comment:

 
 

Steve McConnell

Steve McConnell is CEO and Chief Software Engineer at Construx Software where he consults to a broad range of industries, teaches seminars, and oversees Construx’s software development practices. In 1998, readers of Software Development magazine named Steve one of the three most influential people in the software industry along with Bill Gates and Linus Torvalds.

Steve is the author of Software Estimation: Demystifying the Black Art (2006), Code Complete (1993, 2004), Rapid Development (1996), Software Project Survival Guide (1998), and Professional Software Development (2004). His books twice won Software Development magazine's Jolt Excellence award for outstanding software development book of the year.

Steve has served as Editor in Chief of IEEE Software magazine, on the Panel of Experts of the SWEBOK project, and as Chair of the IEEE Computer Society’s Professional Practices Committee.

Steve received a Bachelor’s degree from Whitman College, graduating Magna Cum Laude, Phi Beta Kappa, and earned a Master’s degree in software engineering from Seattle University.
Contact Steve