views:

661

answers:

14

I'm in a similar position to the OP of this post and would like to program for a living.

With a year and a half before I graduate I'm trying to decide whether I should spend my energy mastering material I am already fairly comfortable with, (C and Python) or learning new stuff that I am very weak in like Emacs Lisp. With the former I suffer diminishing returns but the latter does not make me any more employable.

  • For those of you who hire new graduates do you prefer depth or breadth?
  • For those of you in industry/looking for a job how much control do you have over what your work? Do you just learn/do whatever your employer assigns you to? Can you afford to be selective if you're just an average joe?

I've been monitoring the postings on my university's job board for over a year and it seems like the only skills in demand (where I live) are web development. This is an area I don't have much experience or interest in. Unfortunately I am not particularly intelligent nor accomplished so if I'm too picky I'm afraid I'll never find work. I don't have any industry experience. My first priority is to get my foot in the door so I will bend over backwards and learn web development if that is what it takes.

Whoops, I just realized there is a similar thread here but I am still interested in your thoughts.

+2  A: 

It really depends on the job you're applying for. In an ideal world, you will have both depth & breadth. But that is usually too much to ask for in a graduate.

Most graduates will have breadth in a wide range of technologies, C, C++, Java, a scripting language, some web technologies, and that is quite adequate. Unless the job specifically says you need to be an expert in a certain tool/language/framework, I wouldn't be too worried.

Having a strong understanding of object-orientation and some design patterns will also strengthen your application.

alamodey
A: 

One advice, try to add an OO language (for example C#) to your portfolio.

Being able to grok OO is almost vital today.

Gamecat
+1  A: 

1) Ideally, I'd like to see some, not extreme, breadth and significant depth in one or two areas. I'm a bit more concerned about the depth.

2) Most people have to work on the projects their employer needs done using the technologies their employer provides/specifies. Sometimes, especially if your company is solidifying practices or adding projects or what-have-you, you get significant feedback into what gets done and how. A few people get paid to work on whatever the hell they feel like; this is called "working at Google".

chaos
+3  A: 

If I'm interviewing I prefer a candidate who has a usable, practical knowledge of the core technology I need them to use (usually the language of choice for a project) and a wide but shallow knowledge of many other things.

Understanding that things exist is the first step. Basic CS principles like what data structures to use and what algorithms to choose are more important than a deep knowledge of C++ vectors and brute force searches (when all you have is a hammer...).

What I am more interested in from a graduate is a demonstrated ability to learn and a genuine understanding that they don't know everything. There's a lot come through who think they know everything and couldn't even write a basic quick sort in any language even if they were given the algorithm and asked for code.

Adam Hawes
+1  A: 

You won't get a job if you're don't think you're particularly intelligent! Especially if you have that attitude during an interview.

It varies. You can have some control over your work. Often you get assigned things that you seem to be good at. And you're good at something because you worked on it before, or because you enjoy it. Most companies specialize in a language or two, so pick a company to work for that uses the technology you're interested in and know.

Don't just apply for jobs that are posted on job boards. That's the worst way to find a job. Instead, find companies you're interested in and approach them directly.

You need both depth and breadth! So, focus on technologies you'd be interested in working in, but spend some time looking and playing with other technologies too.

You will need to know one technology in depth. It's easy to learn a small bit about a lot of topics, but if you get questioned on them in an interview, you won't be able to answer questions. If you name a technology you have depth in, you should be able to answer questions on that. Lots of people can pretend to know a bit about everything, but in depth knowledge of at least one topic will demonstrate you have the capacity and desire to persist with something far enough to be able to make professional use out of it.

Scott Langham
+2  A: 

I like to hire technogeeks who know all sorts of esoteric stuff, because they're more flexible (if we decide to start using a new language/framework/whatever they'll pick it up a lot faster), their knowledge is valuable in all sorts of unexpected ways (sometimes you need someone who knows their way around an OCaml program, and knowing the ins-and-outs of functional programming makes you a better OO programmer anyway), and I relate well to them since I is one myself.

Most jobs out there, though, based on what job ads say, want specific technologies with unrealistic levels of experience, which suggests picking a smaller number of technologies and getting really intimate with them. (I'd debate whether those sorts of jobs are worth having in the first place, but I'm a known curmedgeon).

I guess it comes down to what you're most keen on having -- a fulfilling (though probably lower paying and harder to find) job, or one of the much larger pool of more "conventional" programming jobs. I'm in the "fulfilling" side myself, but there's no shame in "just" wanting a regular job -- the IT industry couldn't survive just on the output of the compuhippies like me.

womble
+3  A: 

Hiring new graduates the classic thing to look for is smart and gets things done. So I'm looking for people who are intelligent and accomplished. If you are just being modest when you say "Unfortunately I am not particularly intelligent nor accomplished ", then you might have a chance, but if it's true then good luck.

However, the fact you are asking the question in this forum, are familiar with C and python, and are willing to take suggestions suggests you might be smarter than 80% of programmers out there.

So to answer your questions:

  • For those of you who hire new graduates do you prefer depth or breadth?

I prefer breadth, as the more different skill areas you know, the easier it will be to learn more. But there is a certain minimum depth without which "knowing" a language is meaningless, and sheer curiousity ought to mean you get there.

  • For those of you in industry/looking for a job how much control do you have over what your work? Do you just learn/do whatever your employer assigns you to? Can you afford to be selective if you're just an average-joe?

I've been very privileged and had both. I've done languages because they were assigned, and languages because I thought they'd be the quickest way of getting the job done. When I felt I stoppped learning in a job another opportunity came along and I took it. But as I say, I've been privileged.

Nick Fortescue
+3  A: 

As a recent graduate, my experience was getting hired due to breadth rather than depth. The company I work for makes software for many different platforms, where the supported languages range from Java, to C++, to Objective C. I've also been asked to make small changes to our website to support temporarily uploading files from applications, so PHP came in handy as well.

As far as doing what your employer tells you to, of course you have to do that, but breadth really helps you if your employer doesn't have it. I've been able to convince my boss on at least two occasions to use a different language to accomplish my task than what he had originally assumed would be used.

Ed Marty
+1  A: 

When I employ new graduates (into an IT role) I look for things that make them stand out from other graduates.

If a graduate specifies on their CV that they have an interest in areas of computing (not necessarily directly related to what they are applying for - e.g. a programming role), it sticks out and I would be more inclined to interview that person.

Too many CV's I see segregate career and personal areas. I like to employ people who have a real interest in computing, not just see it as a way of making money.

In terms of breadth and depth. From a graduate I wouldn't expect to see much depth, but would like to see some breadth (mostly from personal experience and not just from an academic point of view).

Techboy
+7  A: 

I am founder and CTO of a company that has interviewed and hired dozens of programmers over the years. Generally speaking, here are the only qualification requirements I really care about when interviewing candidates and considering them for a position:

  • Basic Intelligence - can you break down and solve non-trivial problems
  • Good attitude and good work ethic - will you work out well on the team
  • Can demonstrate you know something about programming in some language(s) - for the most part I don't care which ones....but have some preference for C, C++, C#.

The rest of the details of what you actually have experience in and whether or not you know about the specific technologies we deploy with has more of a affect on what I am going to offer you in terms of salary to start.

I would argue that the above criteria is the only criteria that matters because the field changes too quickly. Experience counts, but only so long as you can continue to reapply to new technologies, new skills, and new problems.

Tall Jeff
+1  A: 

When I am hiring developers, I am looking at the following:

  • Experience in the field. How much do they relate to what we do
  • Knowledge of the programming language we use
  • Knowledge of OO Design
  • Ability to solve problems

Therefore, I guess that in our case the answer is breadth rather than depth. When hiring newly graduates I want to be able to capitalize on their ability to learn and pick up things quickly.

My guess is by learning Lisp, you will increase your ability to learn and to look at problems from different perspective.

This is very important for me as you never know what problem tomorrow will bring and you may need to use a different skill set.

My developers are using a combination of programming language, scripting, matlab, profilers, etc.

I appreciate when newly graduate not only understand how to do things but also why they do them and how it works internally. For example, do you know how virtual methods are implemented at the language level?

David Segonds
+1  A: 

There is no absolute right and wrong, as it depends on the development context, the tasks you want to assign them and the culture within the company.

If you have a specific role, with little opportunity for growth, then depth in a speciality is an option (although I wouldn't be interested such a job!).

If on the other hand, you want them to be involved in general programming duties, then I would be more interested in candidates with a broad range of interests (software and otherwise). I would especially be interest to understand how they tackle problem solving.

In either case, the soft skills are very important. In my opinion, we focus to much of the hard skills.

Jason Waring
+1  A: 

I am not an employer but graduated about four years ago. So, I might be able to give some insight.

I defiantly agree with the consensus here; breadth is better than depth. It is impossible to know what kind of job you will obtain upon graduation. In the "real world" you have the potential to encounter varied technologies and it is extremely helpful having a diverse background.

It is also difficult to quantify varying degrees of depth in an interview. Most hiring managers also lack depth in current programming languages. Subsequently this will not pull as much weight as having a larger breadth of technologies. Managers also seek flexibility in their employees. If they feel they can put you more roles you will be more appealing.

PaulWaldman
+6  A: 

I have worked in the IT industry for 14 years and over that time held a variety of leadership and individual contributor roles. When I am interviewing a person for a Junior role I am looking for the same things that everyone else has talked about.

  • Problem solving skills
  • Knowledge about the company
  • Knowledge about the industry
  • Passion for technology
  • Positive attitude (this is a big one)
  • Willingness to listen (if you can't listen you won't learn)

A few things that have been mentioned later in the chain of responses are worth mentioning again. These are critical to you finding a job where you will acquire marketable IT skills that you can use to get your next job.

  • Solid grasp on Object Oriented concepts
  • Solid grasp on basic data structures
  • Application Development Lifecycle

Here is a link to a great book on getting through the basics of a technical interview. Don't pay to much attention to the specific language that is used in the examples. The problems that are discussed are universal. If you feel comfortable with the contents of this book you will do well in almost any Junior Developer interview.

"Programming Interviews Exposed: Secrets to Landing Your Next Job, 2nd Edition"

It costs you zero dollars to start a blog and I would highly recommend that you start one immediately if you haven't already. You don't have to post personal information on it if you want to keep your private life private but you should be making posts that contribute to the technology/industry that you want to work with/in. If you want to learn Java or C# (just two examples, you could do this for any language) find some projects that others have created using those languages and put your own twist on them. DO NOT copy and paste the code change a few comments and call it your work. What I am recommending is that you make honest improvements to work that has been done by others and give it back to the community via your blog. If you don't want to improve someone else work start your own project, it doesn't have to be anything overly complex (you can never have two many image carousels). This is one way of establishing some kind of jumping off point for your skills. If you don't want to do a full fledged blog think about submitting artcles to sites like Code Project or just posting your projects on Code Plex

Code Project

Code Plex

Get involved with user groups in your local area. There are always user groups for Java and .NET and other languages in any major metro area. I am sure you can find some in your area with just a few clicks on Google. Not only will you start to meet people at these groups that you can network with but you will also meet recruiters. Don't hesitate to tell someone about your latest posting on your blog. People in the industry want to share ideas and learn from others.

Network, network, network... don't stop with user group meetings. Find entrepreneur groups and find out where they meet. Most of the time these groups are open and they have some kind of social aspect to them. You will meet people who are hungry for talent and you can leverage the community work you do via your blog to show them that you are willing to put forth the effort to get into the industry. Keep your eye open for job fairs, when you can find them they are a great way to get your resume (even if it is a one pager talking about what you want to do not what you have done) in the hands of a corporate recruiter. You should also think about using websites like LinkedIn to establish some kind of tangible network. If you meet someone at a networking event look them up on LinkedIn (or another site like that) and ask for a connection.

Linked In

Spoke

When you are trying to decide what skills to learn you might think of companies that you want to work for go to there website to check out there job postings. Pay specific attention to the kind of skills that they are hiring. You might be a year or so away from a job with one of these companies but you should know now what skills they are shopping for so that you can get up to speed. If a company is using Java today they probably aren't going to switch to .NET any time soon and visa-versa. If you don't know any specific companies but you have some general ideas about what industry you want to work in find out what companies are in that industry and check them out.

Wow, this turned into a really long post so I will try to wrap things up. If you are interesting in working on business applications you should know something about SQL. Data is at the core of any business application and data is typically kept in some kind of database. Don't worry to much about the flavor of the database right now, just make sure that you download a free or opensource database and get accustom to moving data around.

MySQL

SQL Server 2008 Express

I hope that this wasn't to much of a ramble. I wish you the best of luck on your adventure.

Ryan Pedersen