I'm new to the world of professional software development and i'm having some doubts about how i should build my career.
Is it better to have intermediate knowledge of a good amount of programming languages or to specialize in 1 (maybe 2) language and become an "expert" (as much as an expert as studying can get you)?
If the first choice is the most recommended, can you please name a few languages that are important? (or most used).
It depends where you want to go in your career, and as a freelance database application developer I don't really have a "career" - just a series of jobs - so maybe I'm the wrong person to answer this question! But here goes, anyway...
I'm not sure if anybody can afford to be a pure specialist these days. The industry changes so fast that your priceless specialist skills today can become worthless legacy skills tomorrow. One option is to become a "generalising specialist", with a few core specialist skills but also enough general experience/skills to help you adapt quickly to changes in the industry.
Of course even here, you will still need to develop a sense of the broad areas you want to specialise in.
If you want to move into management, then you will probably need to aim for particular roles that will give you relevant experience - team-leading, mentoring colleagues, etc - and also relevant qualifications in general project management and experience/qualifications in particular approaches to development (Agile, SCRUM etc).
Alternatively, you might want to aim for senior technical or semi-technical roles e.g. architect, designer, business analyst etc, where you need good technical and business experience, and also some training/qualifications in relevant architectural approaches, business analysis, software design, testing etc. Or you might want to go for senior sys admin/DBA type work, which involves a different set of skills/experience.
But whichever path you are aiming for in the longer term, in the short/medium term you probably need to focus on acquiring solid experience and technical expertise in one or two key areas e.g. JEE development, C++/hardware, databases, OO design, or whichever areas you find interesting. You will probably need to work on this stuff in your spare time as well, so you need to have some personal interest in doing so! Also, keep checking the job websites to get a sense of what is currently marketable, and also what might be starting to be popular i.e. next year's marketable skills.
This will help you to become more valuable to potential employers than less experienced candidates, as well as giving your more opportunities to get into the kind of roles that you may want in the longer term.
At the same time, try to acquire a variety of technical and especially business experience, because this can give you the edge over somebody who has just done one thing for one company/industry. Plus it's more fun and you'll learn more if you do different things. Become familiar with a couple of industry sectors e.g. financial services, telecoms or whatever, because having relevant domain knowledge will also help you to get a better job in your chosen sectors. The key thing is to keep learning something new in each role or workplace.
Also, don't neglect the "soft" skills - dealing with people successfully in your professional roles, building a network, dealing with business users, and so on - because these are really important to employers as well. Indeed, many empoyers claim that they can find all the technical skills they need, but they have trouble finding candidates with the "people skills" they want. Not sure I believe them 100%, but they're the ones trying to recruit people so you need to be able to offer them what they (think they) want!
Finally, there are various books that can give you a broader view of how to be a good and successful developer e.g. "The Pragmatic Programmer" by Andrew Hunt and Dave Thomas, or "The Productive Programmer" by Neal Ford. And I can also recommend Chris Duncan's book "The Career Programmer" for a smart and entertaining look at how to stay in technical work through your career.
OK, it sounds like a lot of work, but you don't have to do it all at once, and remember to keep reviewing your own goals as you go along, because you may find that your ambitions change as you gain more experience, and this industry changes so fast that last year's goals may no longer be relevant anyway.
Best of luck.
No more Blub for me, thank you, Vicar.
Joined: Jun 08, 2011
Thank you for the answer.
Seems like i have the basic tools needed at the moment, but guess i'm seriously lacking in the people skills department. Apparently i need to start learning to code for iPhone or android (browsed through some IT jobs sites, and saw a lot of requests for that). On that note, i found several tutorials on google for android. Is there any that is widely recommended? (Verbosity never scared me by the way). Since i don't have a mac for the iPhone sdk, guess i'm losing out on the most profitable market at the moment.
Also, is there any book about magically creating ideas? I'm really bad at creating my own ideas for software and seems like i'm losing a bit on the mobile app market because of it.
Thanks for the suggestions on books, I'll take a peek on "The Pragmatic Programmer" first, since a friend of mine has it.
I think the answer is in the middle. Being too specialized is risky. Being too generalized may not allow you to learn anything deep enough to learn general things. Ironic, but it's easier to write small applications in many languages than understand the underlying hardware/security/performance/etc.
Daniel Marti wrote:Thank you for the answer.
On that note, i found several tutorials on google for android. Is there any that is widely recommended? (Verbosity never scared me by the way). Since i don't have a mac for the iPhone sdk, guess i'm losing out on the most profitable market at the moment.
I'm not working on Android myself (well, not yet....), but a good place to start would probably be with Google themselves e.g. the Android Developer blog. Lots of videos, articles, tutorials etc.
In fact, Google put a lot of useful content online for developers, not just relating to their own tools but covering wider technical areas as well. Check out the Google Developers channel on YouTube and Google TechTalks for more general stuff.
Sites like these are good places to get a sense of best practice and current/future trends in the industry, and it can be a lot easier to absorb a 40 minute video on an interesting topic than read a tech manual after a long day at the office. But in the end the best way to develop your skills is simply to try things out for yourself, of course!
I'm sorry, but I think this question is fundamentally flawed. A career is long, usually 40 or more years. No decision that you make at the start will hold up for the entire length. You don't want to be the engineer who specializes in steam locomotive design when the world is moving to diesel locomotives.
I believe its pointless to think that you can pick a winning language today. I've used at least 25 over my career. If you read my other postings here on the Java Ranch, you will see that as much as I love Java, I think Java has peaked and will be replaced by some newer, better language. Similarly with areas: four years ago, there were no significant smart-phones. Today, everything has a touch interface, and is wireless. As a result, desktop development is dead, everything is going to IOS and Android.
You can pick a broad area, say backend databases, but that's about all. When I started, there were no SQL databases, as SQL was just a research tool in the academic press. It was followed by 30 years where every database uses SQL. Now, there is a huge movement to NoSql.