views:

893

answers:

22

I apologise in advance for this being a little more subjective than discrete - but I can't find a better way to phrase it, nor a better place to have this question answered. I also apologise this post grew to be so long.

About 12 years ago, I began to get very interested in programming and development. I started out teaching myself aspects of PHP and MySQL for database interaction, along with HTML and CSS, in order to quench my thirst for wanting to develop something useful. This was a relatively successful venture, and over the years I've enjoyed doing plenty of development, and have even earned a good deal of money out of it.

However, PHP/MySQL never did satisfy my desire to actually be able to do something 'useful', and I set about teaching myself more and more about technologies behind client- and web-based applications. Over the past 6 or 7 years, I've taught myself the basics (and sometimes more) of everything from Prolog to x86 Assembler, and C# to Python (and a wide range of things in between).

Within the next few months, I'll have a bachelor's degree, in Computer Science, from a reputable UK university, but I'm not going to be pursuing a career path in IT in the foreseeable future (for my own reasons). So, at this present time, I've come to a real crossroads, and I'm seeking some advice from the SO community, especially those who have a wealth of experience, as to where to go next.

I don't really know any of the aforementioned languages in any great depth (I can cope well in each and every one, but I'm by no means an 'expert' in any of them), and I struggle to find things to engage myself in, to further my development. Developing things is my hobby, and I love nothing more than finding a project and running with it - but these ideas come about all too infrequently for my liking.

I have a detailed knowledge of the more technical workings of computer systems, and programming languages - both from my degree course, and from years of self-directed learning... so I'm not short on understanding of concepts, paradigms, and the like.

Do any of you have any suggestions as to what would be the best way forward for me? I don't want to have all these years of passion and self-directed learning go to waste, but I want to keep developing in my own time, whilst I pursue a different direction, professionally. Should I pursue a particular language, and develop my skills with that, or should I continue to develop the diverse range of skills I've acquired? I want to increase the depth of my skill-set, and continue to have fun whilst doing it.

Any and all sensible suggestions are welcome. I don't want to move in a totally new direction (such as learning yet another language, especially not within a distinctly different paradigm to those I've already had experience with), but I don't want to keep flailing about, trying to decide what to do next.

+10  A: 

I think you should learn one language in depth. Create a product using that language (or languages, likely). Make it a real product (real as in "complete", not necessarily real as in "for sale"). For example, write a note taking application, or a recipe program, a web service, something to organize the nuts and bolts in your garage. Pick something you'll actually find useful for yourself.

Use this to learn skills related to user interface design and development, automated build systems, unit testing, acceptance testing, and all the other periphery of software development that you don't learn in school.

In other words, focus. Focus on solving a specific problem, and solving it well. When you can do that in one language, you can do that in just about any language.

Bryan Oakley
if he had 6 years with php, he might have learned one already ;)
eglasius
Sorry if I didn't clarify... PHP is something I've learned in depth, but the issue I'm finding right now is having something to focus on, and a specific direction to go in (PHP, as a language, is not really something I relish).
James Burgess
If that's the case, pick something other than PHP. Spread your wings a bit.
Bryan Oakley
I think that's definitely something I will consider. Any suggestions as to what direction to spread my wings? Is .NET the right area to go for, or should I go with something more obscure, etc.?
James Burgess
+1 Actually the rephrased answer is quite good bryan, was thinking around those lines.
eglasius
James, use this as an opportunity to use what you've learned. You've learned many languages, right? Decide on a project that really interests you, then use what you've learned about all those languages to pick the technology that will make it easiest to do your project.
Bryan Oakley
James, regarding platform, if you ask which is best, it will be hard to get an objective answer (i.e. I am biased to .net/c#) - btw, I posted an answer complementing this one a bit
eglasius
+1  A: 

I suggest you find some things to work on that really push your abilities to the limit. Perhaps you can find some open-source projects to work on that are related to your interests, or if more succinct problems fascinate you, try TopCoder or other sources of online problems.

mquander
+10  A: 

Work on open source projects that you find useful to you. You'll be increasing your skills, working on real projects, which will push you in the way of more things to learn. Plus, you'll be having fun!

Daniel Von Fange
+1 Exactly what I was going to say!
Andrew Barrett
"work on an open source project" seems to be a common answer to a lot of "what do I do next" questions. Is that really what's best for *him*? It might be best for the community, but it might mire him down in the politics of the project he chooses.
Bryan Oakley
So, he should choose the project wisely. The fact that some projects are mired in politics doesn't mean open source is a bad choice in general.
Andrew Hedges
Agreed, the thing is it is just way easy to overlook it, especially if you also want to get on one with high quality code (and you are learning and are not sure what would that be). I guess he can come back and ask for advise on a good open source project with high quality code that does x :)
eglasius
Big projects coordinated by large corporations are mired in politics. There are plenty of smaller projects, though, that are just one person or a small group of persons. Find something you like and start connecting with the team behind it. See if they're people you can work with.
Darcy Casselman
Getting mired in politics is a danger of anything you do with other people. It's a pitfall you have to avoid, but it's not particular to working on an open-source project.
Chuck
[insert shameless self-promotion]
Chris Lutz
A: 

The best possibly answer I can provide is to stick with what you like doing. If your current obligations require you to not pursue a career in software development then don't do it. Do what you need to, but if your passion is to continue developing on the side, then keep doing it on the side.

Perhaps you can do some free-lance work and earn a little extra $$$ on the side.

As for which technologies should you learn or sharpen your skills on? That's entirely up to you. You need to find out what you like and what you don't like. Stick within your boundaries and if time and lifestyle permit, begin to stretch those boundaries as you see fit.

Eppz
+1  A: 

Join an Open Source Project. Pick (or start) anything you find personally interesting and rewarding.

It will give you focus and thereby will allow you to deepen your knowledge.

Jens Schauder
+1  A: 

I don't know what you're working on, but in most industries, someone with cross-competencies in both a specific domain AND computer science is a good asset.

Could you find a way to develop a side-project that's related to your main work? Is there any tool in your current work that doesn't work the way you want? Is there some unmet software need? It could be as simple as managing the CMS for your business, then finding a way to add-in a little plug-in that does X for your customers, etc...

Kena
In the field I'm pursuing, I imagine there'll be a very tenuous link between it and ComSci... That said, I think it's definitely an idea I'll bear in mind, as I'm sure opportunities will no doubt arise :) Thanks.
James Burgess
+2  A: 

Ok, first: WTF? Why aren't you pursuing a career in Software Engineering with a CS degree? That seems like a waste to me. Still, you know yourself best, I'm sure.

Actually, that puts you in a great position. You have the option of doing whatever you want with your project -- not many of us with SE careers have that luxury.

I suggest that you think up some project or idea that seems really fun to you and that is maybe also beneficial to the community in some way. Then, based on your basic knowledge of the various languages you've mentioned, pick the one that is 1) best suited for the task and 2) most fun (for you) to program in, and implement the project. I'm biased, but I'd suggest C#, since it's versatile enough for almost any platform and a deep-dive in that language could help you very much if you ever decide to pursue a SE career.

Have fun with it, and report back! Let us know how it went.

Randolpho
This sounds like a good suggestion, picking a project and running with it seems like a good way forward! There are several major factors leading to me not pursuing something in SE with my CS degree, one of them is the market situation here in the UK (it's very poor for SEs at the moment).
James Burgess
I hear you; our UK division just got laid off a month ago. Good luck with whatever path you take -- it'll be difficult no matter what, with the economy the way it is these days.
Randolpho
A: 

Try to find an office job in a relatively IT-wise undereducated field. I use to work for quality control in the construction field and there were many problems that a good programmer could make bank off of by solving.

A: 

This question of mine asked previously on SO should give you good answeres

Perpetualcoder
A: 

Build something someone will use. And, build it alone if you can.

Whatever you've been teaching yourself, it becomes infinitely better understood when it is applied to an actual project. When I learn a new technology, I usually spend a couple of months in books, blogs, articles, and skimming Q&A forums like this, then double that knowledge in the first week of actual work.

With your skill-set, I'd be looking to build a web site, top-to-bottom, maybe bringing on someone else to create graphics. Make it interactive and genuinely useful. Make sure it uses the skills you've acquired to build. Try to make it pay for itself.

Nothing teaches so well as experience. And nothing teaches us what we're missing so well as having to do everything ourselves at least once.

Jekke
I've been doing contract/freelance web development work (graphic design and back-end development) for about 7 or 8 years now... I'm after a new challenge, as PHP is something I'd rather not spend 'the rest of my life' with! But your other points are very well made, thanks!
James Burgess
A: 

There seem to be at least a few different options here:

1) Product/service development -> Do you want to work for a company that sells software and help make that product? If so, then try to find those companies in your area that do this and apply there.

2) Teaching -> Would you like to stay in academia? Maybe you could teach some of what you know to new would-be developers or enjoy doing some research into the field.

3) Consulting -> This may be too close to IT but there may be some places where you'd be coming in as the hired gun to do some integration or development temporarily and then when the project finishes it is off to another client.

JB King
+1  A: 

Get on with a specific project and use it to do some focused learning (as others have said). While doing so, focus on the professional development side of it, look up for software craftsmanship - I liked this keynote that relates to it: http://www.oredev.org/topmenu/video/keynotebobmartin.4.5a2d30d411ee6ffd28880002007.html.

Unit testing can really help improve design skills that goes beyond the language you are using. Learn about TDD/BDD while doing so. First and foremost, learn well what are/aren't unit tests (update: this last bit, is because the benefit of unit tests for design is lost if one doesn't understands then well).

eglasius
+1  A: 

So many people are too afraid to admit they're n00bs (or too arrogant). So it's awesome you're asking! There's an incredible amount of wisdom and knowledge out there, especially here on StackOverflow. I myself am very thankful for it!

I've always humbly recommend the following to all people who ask these same types of questions:

1) Whatever you decide to do, buy your books from Bookpool. It's the best place to get discounted IT books other than searching for used books no Amazon.

2) Buy all the HeadFirst books you can along the lines of the technology you're looking to learn. They're an indespensible part of any up and coming developer's library, and a great reference (and lot's of fun!) for those of us who've been doing these things for a while. On that note, unfortunately, you'll probably have to decide to learn a new language as college doesn't usually keep up with what the enterprise community is doing. >:'(

3) Buy the Pro Wrox series of books as much as is possible. These are not only great references when you need them, but they're also very good at starting you from square 1 and walking you through advanced levels of development. Here's a great example of the DotNet v3.5 track.

4) And when the books fail, or you're sick of reading the pages, the most awesome thing about being in this industry is the incredible world-wide community and support structure online. IE: There's always someone willing to help you in your time of need. Blogs, forums, open-source code, StackOverflow, etc. You're only a Google away from your answer!

5) Above all other things, don't give up! You'll do great!

Boydski
+1  A: 

Three no-commitment instant-gratification ways to practice coding:

  1. Project Euler problems
  2. Code Kata
  3. Stack Overflow
Patrick McElhaney
A: 

I don't know how to answer this question for you. As some Eastern philosopher has surely said, the answer must come from within you.

But, I can relate to your dilemma, being self-taught as well. The outlet for me has been Dashboard widgets. They're not terribly difficult to build, but they're satisfying from the standpoint of being able to work through a problem from start to finish. Best of luck!

Andrew Hedges
A: 

I would recommend that the best way for you to increase your knowledge and to put a polish on the skills that you have is to help someone with a project that they want to do. You must know someone that has an idea or a need for something that doesn't exist. Help them create it or create it for them.

The best place to look for these kinds of projects is among your own network of friends and family. Some people in need are usually small businesses or teachers.

I recently had fun creating an application to create seating charts for concerts. A music teacher expressed the need and I had fun providing a solution.

You won't get rich doing those kinds of things, but you will have fun and learn something at the same time.

bruceatk
MarkJ
Thanks, someone actually voted this down for some reason without saying why.
bruceatk
+4  A: 

Here is how you can get projects that will push you, ones that can allow you to showcase your abilities and get more development work, yet at the same time give you the flexibility you have doing it as a hobby…and do something that really matters.

There are lots of non-profits, charitable organizations, churches, etc. that are badly in need of development help but cannot really afford it. Working in that environment you can get a project that is defined by someone else so is more likely to push you to grow, you are volunteering your time so they will be OK if you don’t have a tremendous amount of it, and when you are done you can use it as a reference for more work - plus the people involved in these organizations will recommend you to all the people they come in contact with (if you do a good job).

Now you have experience that makes you really marketable and at the same time you have done something to help those less fortunate than you. It’s good for everybody. Good luck.

Praesagus
MarkJ
A: 

I don't know how to answer this question for you. As some Eastern philosopher has surely said, the answer must come from within you.

A: 

If you're looking for new projects to do, I have a simple suggestion. Listen to your friends and family, figure out what they complain about. My GF has problems with Excel's graph/charting because it's not very well suited to her domain. So, I've considered writing a new app that would allow her to design graphs and charts exactly as she would like.

Not all complaints can be solved with software, but a pretty large percentage can. :)

Drew
A: 

If there is any way you can pick a project that will help you in your chosen career go with that. For example, say you are going to be a dentist (doesn't sound like you are, but hey why not?) write a program that eases some aspect of being a dentist, say managing x-rays in some way.

This way you can stay interested in the program, and push yourself to learn.

Next I'd say pick a language and really learn it. You will find that the better you know one langauge the easier it will be to pick up more later... and at some point in time you will likely need to deal with another language. Continue to use your existing skills as much as possible, but learning the ins-and-outs of a language will really make you a better developer as time goes on.

TofuBeer
A: 

If you run out of ideas frequently, my suggestion is that you try to create clones of already popular websites ( for the sake of learning - i do not mean it in an evil way :D ) . In that case your learning curve would constantly rise and I am certain that at some point of time your creative gene would strike gold.

A: 

Have you ever thought about the Gaming Industry? There are a lot of different options available to someone wanting to get into the business of making games these days. And with the way technology constantly evolves, you'll find yourself challenged with new things, regardless of what path you take.

Slateboard