Fog Creek Software
Discussion Board




Carrer advice needed

Background:

I'm in my mid-thirties and have decided to switch to a career in programming.  I have done a number of programming projects in the past ten years for various jobs, but my role was never strictly as a programmer.  Programming was maybe 20% of my duties, but 99% of my favorite duties.

Most of the projects were done in Access, but some were done in VB (w/ SQL Server) and ASP (including client-side javascript).

I've also taken some college and professional development courses in C, C++, and Java.


Current Situation:

I got laid off last year, but I remain unemployed by choice.  My spouse makes enough money to cover our bills and then some.  Plus we had a baby last year that we don't want to put in day care (we had bad day care experiences with our first two).

So now I'm in the enviable position of having two years to polish my skills and go to school part time to get my masters in computer science.


My Question:

This is where I'm in a quandary.  If you were me, would you:

1) Get a depth of knowledge and build a portfolio* in a traditionally strong language such as C++?

2) Get a depth of knowledge and build a portfolio in a locally strong (employability-wise) language such as Java?

3) Get a depth of knowledge and build a portfolio in a cutting edge language such as C#?

4) Go for the breadth of skills approach and learn several languages such as C++ and C# - thereby getting a lesser degree of knowledge in but a portfolio that casts a wider net.

*portfolio = projects on sourceforge or projects for which I can provide demos and sample code.

Quasi-newbie
Friday, April 16, 2004

I think it boils down to what kind of programming you want to do.
DB clients, Shrinkwrap apps, Enterprise app servers, device drivers, games?

Eric Debois
Friday, April 16, 2004

How old are you? Do you think you'll be hired past some age? As has been said several times in this forum, this industry only hires until a certain age. Past that and either you're management or you're almost toast.

RP
Friday, April 16, 2004

Is that an attempt to warn against ageism in the industry, or to reinforce it?

Fernanda Stickpot
Friday, April 16, 2004

Based on your experience to date, you might see expertise as being associated with particular languages, but it isn't.

Software engineering, which it seems you want to do, involves understanding concepts and approaches, and some key algorithms. In gaining that capability, you will almost certainly master C++ or Java or both, but that's not central to what you learn.

As others have pointed out though, are you sure it's a good idea? The field is definitely being commoditised, and you especially would face difficulties getting your first commercial job because you're older than most graduates.

Unless you want to write books or go on to a research career, you might be better off doing some other course. 


Friday, April 16, 2004

Ageism? I'm 56 and have been unemployed for only 5 weeks out of the last 35 years. The last time I switched jobs I was almost 50 yrs old. I'm not the oldest developer in this company either. In fact it's fairly rare to see a fresh-out-of-college new hire. The OP is only thirty-friggin-seven, she/he is just hitting her/his prime. If you have the skills you can get the job.

old_timer
Friday, April 16, 2004

I agree . . . I'm 27 and feel that those who report "only the young survive in this field" isn't really correct. By all means, i'm young and I'm surviving . . . but we all have to believe that we're valuable because of what we know; and every year, I know more.

Honestly, I still believe the bottom line (in most cases) is simply what you know and (in ALL cases) what you're willing to accept as compensation for what you know.

Like was already mentioned, I wouldn't concentrate on the physical tool (java, c++, c#) but, rather, concentrate on the intangibles. If you truly have 2 years to educate yourself, I would utilize c# and .NET as your toolbox but center your education upon architecture, design and methodology as opposed to semantics.

Steve
Friday, April 16, 2004

I would go for option #4.  Two reasons for this.  First it is good to be well rounded.  You don't want to be type cast.  Second, and maybe more important, is that employers are more likely to look for a check in the box for a particular technology rather if you are the best there is.  Sometimes that's all you need to get your foot in the door.  I worked with Perl on a project from 1997-1998 and when I had my resume on Monster last year I had several calls that went like "I see you know EJB and Perl..."  I know I would consider me for any Perl work!

Bill Rushmore
Friday, April 16, 2004

If I was you, I would go for a portfolio of locally in-demand skills.


Friday, April 16, 2004

A quote to think about: "there are no jobs with futures, only people with futures." 

Get away from the mindset which says "I need to know technology X to get a job."  Technology X may fall out of favor, technology X coders abroad will do it cheaper, etc.

If you understand fundamentals concepts (how memory is managed, how calculations worj at the lower levels, etc.), then you will be able to pick up *any* language.

Also, and just as importantly, know what business value you bring the company.  Don't go in thinking "I'm a programmer, so I'll have them tell me what software they want me to write."

Instead, think about how that company makes money, and what technology can do to make it more efficient at it.

Trump Dump
Friday, April 16, 2004

I would like to add my voice to those suggesting you take up software engineering and let the specific technologies be part of the process of learning that.

As for ageism, yes that could be a risk to take into account, but I don't think it should be a reason to give up. Everybody will tell you you can't do something until you run into the person who will tell you that you can, and that they want what you have to offer.

Okay, you could fail, but you're not on your own; you've got another breadwinner in your family and on your side. Make sure, though, that she would not be extremely upset and angry and view this whole thing as a waste of resources if you fail - there needs to be a mutual understanding that it's not totally risk-free.

Fernanda Stickpot
Friday, April 16, 2004

> If you were me, would you:

Most of the job advertisements that I have noticed ask for x years of experience in some specific language: so if you want to reply to job advertisements then options 1) through 3) might be better than 4).

You might also find unadvertised jobs by networking: e.g. employers might recruit from the school you're going to: in which case, perhaps ask your school what the various placement rates are, for different types of graduate; and, be interested in opportunities to work as an intern somewhere.

> Go for the breadth of skills approach and learn several languages such as C++ and C#

If you know C++ then learning C# is easy; I don't know whether C# employers know that, however. In Toronto at least there are more C# jobs advertised than C++.

As Eric said, the choice of language depends on what kind of software you want to write. For example, device drivers and non-Windows, non-Web software is more likely to use C++. Webbish things might (I don't know) use more Java. New Windows applications might use C#. Small DB clients might use something else again, e.g. Access.

> portfolio = projects on sourceforge

Portfolios are good. Bear in mind that if I'm interviewing you I'm looking for at least *two* things: not only ability to use my programming language, but also preferably some knowledge of my problem/application domain: for example, not just programming knowledge, but telecomms knowledge, or finance, or security, or ...

> Programming was maybe 20% of my duties, but 99% of my favorite duties.

Enjoy. :-)

Christopher Wells
Friday, April 16, 2004


I hear a lot of people saying how our industry is for the younger people and that there isn't much room for older developers.

However, whenever I go to a  conference or a large user group meeting there is a heavy concentration guys that appear to be 40+. Yes, I know that this could be partially explained by saying that only more senior, thusly, older developers qualify to go to expensive conferences. But it does indicate to me that there are plenty of developers out there who aren't in their 20's.

Mark Hoffman
Friday, April 16, 2004

As a developer I've never been sent to a conference by my company. But all my 40-ish managers did.

RP
Friday, April 16, 2004

Blank has a made a crucial point. Why worry about which language? Such a choice is totally irrelevant if your plan is to develop and not be a mindless code monkey in a sweatshop overseas somewhere.

Discussions about languages are the same thing as a discussion about which brand of hammer is best among carpenters, or which drafting pen makes the sharpest line among architects. It is of interest to experienced carpenters and architects but should be of no interest to students.

Such an unhealthy interest in the wrong thing shows that you do not yet understand what a developer does for a living.

Imagine a prospective architecture student asking "I am thinking of studying this in school. Which type of drafting pen should I focus my studies on." The answer to that question is, "Why would you want to study architecture given that you don't have the slightest idea what architects do?"

Dennis Atkins
Friday, April 16, 2004

Dennis,

Don't be such a blowhard ass. The answer to the question is, "It doesn't really matter what pen you use. It is more important to use the pen well."

But anyway, language does matter. It is NOT like carpenter's hammer or an architect's pen. Your carpenter decided to change hammers on the last week of construction; no big whoop. Your developers decide to change languages during the last week of development; may god have mercy on your soul.

If you want to do embedded devices or games focus on c/c++. If you want to do enterprise business apps focus on .NET or Java. If you want to work in biotechnology you would focus on whatever languages they tend to use.

NathanJ
Friday, April 16, 2004

""" Discussions about languages are the same thing as a discussion about which brand of hammer is best among carpenters """

I just love it when you computer nerds start pontificating on worlds in which you know so very little about. Go try to get a job as a carpenter with your 17th century replica carpentry tools. Sure.... tools don't matter.

Elephant
Friday, April 16, 2004

To address (and hopefully put to bed) some of the questions raised:

  - ageism doesn't scare me.
  - commoditization of programming doesn't scare me
  - I don't care what type of development work I do.  In the past I've done some enterprise apps, but I'm not stuck on that.
  - I've never seen a job ad that said: "Good architecture and design skills needed; no programming language proficiency necessary."

To re-emphasize the last point, I realize that design skills are needed.  It would be great if I could walk into a job as a lead designer, write state machines for everything, then hand them off to the developers and say"implement these in your language of choice."

Yes, I'm being a bit of a smartass, but I mean it harmlessly. Seriously, I do appreciate any feedback that I can get, but I think some of you are missing the crux of the questions.

So, let me distill the questions.

/***** MY MAIN QUESTIONS *****/

(1) Is it better to have a shallower breadth of skills in many languages or a deeper set of skills in one language?

(2) Is it better to focus on a fundamental language such as C or C++, or a cutting edge language such as C#?

/***** CONCERNS *****/

(1) If I try to spread my self too thin, I may end up with still having only beginner level skills in any language. (Being home with a baby gives you a lot less free time than you might think.)

(2) I've always been a stickler for learning fundamentals.  But it the case of C or C++, I'm afraid that two years of experience in these won't mean squat when compared to others in the field, so I'd be in a perpetual disadvantage in the job market.  But if I concentrated on C#, in two years I could develop advanced level skills and be more distinguishable in the maket place.  If I concentrated on Java, I have the feeling that many employers would also expect a background in C++, so I'm back to issue (1).

/***** END *****/

P.S. I can't believe I missed the typo in the title. Should be "Career advice needed", of course.

Quasi-newbie
Friday, April 16, 2004

I think your post should be "How do I get a job?" because your primary questions are all about how to make yourself look good for a hiring manager.

It's an ephermral way of thinking which will always leave you one step behind the curve.

Trump Dump
Friday, April 16, 2004

Quasi, you enjoyed working with Access, VB and coding ASP pages.

Use VB.NET and ASP.NET and you will maintain the same level of thrill. Don't get too caught up in the C# hype, after all, C# is just VB with semi colons.

BSharper
Friday, April 16, 2004

Trump Dump,

That's actually a good point, and it's one I've struggled with.  Maybe my viewpoint is too short sighted.

Like I said, I've always been a strong believer in fundamentals and eschew the tech-lemming mentality, so that leans me toward C/C++.  But, I personally don't know anyone that codes in those languages anymore - they've all switched over to Java and C#.  Though I realize that my small circle of friends, classmates, and acquaintances isn't necessarily representative of the whole programming whole, it does strongly lean me back in the other direction.

The other issue with this dilemma is that in order to establish a career, one must first have a job.

In most other careers, career-oriented decisions are in line with job-finding-oriented decisions.  But in programming it isn't always the case.


BSharp,

Since moving away from VB programming to C-style languages, I've grown to used to the tighter syntax.  Even when I did VB apps I never liked the verbosity.  To me, it justs makes reading the code much harder. I haven't become a language bigot, though.  I still do some small apps in VB when it fits the bill.  Also, I've already put some effort into learning C# and am currently writing an app in it now.

Even though I'm a quasi-newbie, I know enough to know that I like C#.  And even though I try to avoid being a tech-lemming, I think .Net is a platform that you can bank on.

Quasi-newbie
Friday, April 16, 2004

<<The other issue with this dilemma is that in order to establish a career, one must first have a job. In most other careers, career-oriented decisions are in line with job-finding-oriented decisions.  But in programming it isn't always the case.>>

I think you're confusing "career" vs "making a living".

Yes, it would be great to be able to do both, and that should be your goal.

But just because there aren't jobs right at this moment which match your career ambitions, that does not mean you should use "making a living" type jobs to define your career.

If I were you, I would start with a definition of your career: write a specific vision or mission statement of what you want your career to be.

Next (and only then) see if you can find a job, or create a job (convince a company who doesn't have someone like you why they need a role which makes your career vision).

If you can't, then by all means take a "making a living job" but only if you need it to pay your living costs (and if you go down this road, make sure it's temporary, and make sure you're always refining your career statement and/or are on the lookout for places where you can be paid to do the things defined in your vision statement.

Trump Dump
Friday, April 16, 2004

Quasi-newbie,

I'll tell you exactly what you should do.  Learn C# really well.  Not every single api, but try and understand the language.  You'll learn strong OO concepts, and you'll be very marketable.  Don't worry about specializing too much in ADO, or ASP.NET, or Web Services, just learn the language and whatever else you need to know for your job.  If you program reasonably well in c#, and truly understand OO, it will be *trivial* to switch to java.  I don't mean a few months worth of work.  I mean, you could start being productive in java in a couple days.  Now, C++ is a little more complicated, and i've never been very experienced in it.  But from what i've seen, I'd venture to say with a little time and effort, you could move to that quite quickly too.    Good luck. 

vince
Friday, April 16, 2004

Just learn Hindi and Mandarin.


Saturday, April 17, 2004

Quasi, maybe your question really is what you should work on over the next few months, while looking after your little one?

I think you should do two together, C++ and C#.

C++ means you can work with and understand established and important code bases, whether in books or in downloads. It's important for all serious software engineering and gives you flexibility across all platforms.

C# means you establish yourself for lightweight corporate type work. It's interesting too.

Work your way through both, alternating. I wouldn't worry about Java until you get up to speed on the others.


Saturday, April 17, 2004

Quasi

You say
Programming was maybe 20% of my duties, but 99% of my favorite duties.

I think you try to say here that although programming
was only a small part of your job, you nearly 100 percent liked it.

But in fact you say nothing.
Stay with me. I don't think you are a bad person and I am not convinced
that you are worthless just because you can't count :)

Say you got 10.000 duties
8000 non programming duties
2000 programming duties
you have 1 favourite non programming duty
you have 99 favourite programming duties
you hate 1901 programming duties
you hate 7999 non programming duties.

At this point you can say Programming was maybe 20% of my duties,
but 99% of my favorite duties.


But it is also true to state that you hate 95 percent of your programming duties.
And worse: you hate 99 percent of all your work.

I think you are impressed with my contribution :)
Sorry, i'll go and see if the coffee machine is already fixed.


Seriously, I would go for the detailed knowledge of a platform/language.
Being someone with a general knowledge is important when you just come
out of college and are looking for a career. When you just want to get hired
being a specialist is always a good start.
When you are in, you have time enough to show that you
also have astronaut-, and other general capabilities.

Further try to get a (small) programming job asap. Being without a payed programming
job for long is not a recommendation.


kind regards
John Fisher

John Fisher
Monday, April 19, 2004

*  Recent Topics

*  Fog Creek Home