Mostly common sense, but I disagree with the third point:
Choose between actual jobs, not companies
People change roles within companies more often and easily than they change companies -- especially in smaller organizations. And good, growing companies with interesting challenges promote people from any starting position quickly. Meanwhile, a 'good' job in a more static company risks stagnation.
So I would counsel the opposite of this post: choose the company moreso than the job.
During my career I worked for 3 companies and technically my job was always the same - software developer, including both design and implementation. But the overall situation was different because every company has different culture, software development processes, etc.
Having been 10 years in this industry, I am not a young developer anymore, but if I would have to look for a new job now, I would focus on two points:
1) Whether the company has good software development processes and experts in software engineeering I can learn from, in other words if they know "how to do software". It looks obvious, but you would be shocked how haphazardly some companies develop their software. If you end up in such a company, your grow as a developer will be slower.
2) Good paycheck. I don't say this is most crucial, but it just feels better if you have a feeling to be appropriately rewarded, money wise. ;-)
I guess what he meant was, dont worry about the brand names. Brand names create a lot of bias esp in college grads. Lots of goodies and great people working in the company, doesnt mean you will get to do interesting work.
I agree. Furthermore, it's important to choose the right type of company. Find one where software development is a core competency and a direct part of the value chain. When senior management sees you as just a cost to be minimized your opportunities for growth and advancement will be limited.
I've been interviewing a lot of job applicants lately and have found that most of those who have worked for years in typical corporate IT departments are basically ruined. They only know how to do high-level "fill in the blanks" development and don't have what it takes to work for a software product or service vendor. Now to get back on track they would probably have to return to school and start over from scratch. Don't fall into that trap.
> When senior management sees you as just a cost to be minimized
And they'll have the same attitude toward your dev. environment. Noisy, crowded environment, out-of-date tools, machines / upgrades hard to come by, or take forever ... I'm at my 2nd such because of other constraints.
I kinda agree.
Certainly go for a job you want - and not the brand you want ot work for.
But I think the atmosphere you work in is important too. I couldn;t see myself working for a company wih strictt working times, for example. Or in an evironment that was too "stuffy".
Nice writeup, but I think he forgot the most important one...
"Delight your users."
In my experience, everything else on OP's list is a byproduct of this.
When you delight your users, everything will be easier and more fun, you'll get better feedback and support, and you'll be best positioned to steer your career.
I you're not delighting your users (for whatever reason), do everyone a favor and either figure out how to or move on.
Test everything. Test it early. Test it extensively.
If testing 'isn't needed' and is a 'waste of time' for the simple thing you're doing, it'll only take a few moments away from your busy day. If it was needed, you'll be glad you caught the error when you did.
If in doubt, ask any veteran developer about the horror stories they ran into in production due to a minor bug that could have been caught at the point of development with a simple 'complete waste of time' test.
Edit: I cannot understand why this is being down-modded to negative territory. This is classic 'advice to a young engineer'! Your development career is headed to a dead end if you cannot create reliable software.
I suspect people are (edit: were) downvoting you because of backlash to TDD (and other testing ideology) zealots.
Knowing how to test software, how to write software that can be easily tested, how to systematically reproduce bugs to can find their underlying cause, etc. is excellent advice. Just don't focus on specific tools for testing so much that you miss cultivating good analytical skills (or forgive sloppiness).
I know plenty of people who love to test everything and for some things it can be useful however I think the problem is more basic; Know The Code.
If you write something that you think might work test it. If you know the code works, let other people test. Testing crap does not get rid of the smell even if it works but sometimes you do what you need to do.
Yes, testing is the way to create reliable software. How else can you find the 'mistakes, limits, biases', etc. which come from the 'concentration, reasoning and careful thinking' you THINK you have?
Learning how to break your software is one of the best ways of ensuring you stop writing software that breaks!
If you don't reason properly, no amount of testing will save you. It is only part (an important one, surely) of what you need to create reliable software.
I saw too many developers in a cycle like this:
test->bang keyboard->test again (not working)->bang keyboard (now a hack) ->test again(still not working - let's try one more thing)->bang keyboard->test again (it works - Don't touch it!)
which is why early focus on testing doesn't seem very sound advice. The original post is about "Career Advice For Young Developers" - and for a young developer, focusing on careful thinking is better than focusing on testing.
What a fantastic article! over the last few months I've been thinking about finding a new job, but didn't want to gamble job security. I think this article has put a lot of things into perspective for me.
Oh and I couldn't agree more with bigbang. The company I'm working for advertised themselves as a company with lots of goodies and great people working in the company, but I very rarely get to do interesting work and an hour at lunch playing on an Xbox really doesn't make up for that.
I'm 28, and while I have a number of failed startup companies/ideas in my past, my current one is a success (although it may not meet the criteria of a startup here, it's a small LLC that I've "started up"). The reason it's a success is that I have 10 years of experience working with hundreds of companies (lots of contracting, etc...), so I KNOW how big companies work, I KNOW what they need, and I KNOW how many large players in a particular niche are failing to provide good services/products. Which made it easy to for me to create a better offering, that was price competitive, and met the needs of a niche of large customers.
So while I'm old, and while I definitely think you should start a startup when you're young, being old has it's advantages too:)
I don't think you're old, and I'm glad your start-up (yes, it counts) is a success. Perhaps you can elaborate on the lessons you learned and the differences this time versus previous times around in a blog post sometime. I'd be interested in reading it.
I'll definitely add that as a blog-post topic in the future.
I can summarize a few lessons I learned here though:
1) just because people like using something for free, doesn't mean even 1% of them will be willing to pay anything for it. High traffic/member numbers don't mean much unless you can monetize them, mostly they just cost you.
2) selling to a few large companies is often a much easier path than selling to thousands of individuals.
3) there are a million services that are provided almost exclusively by very large companies. Quite often they do a horrible job. There's a million opportunities there.
4) don't count your chickens before they hatch. Getting a 1/4 million dollar contract in a month, does NOT mean you'll get one every month.
5) if you start to make money, get an accountant/tax person. If you have contracts with fish that bigger than you, get an attorney.
6) don't rely on free/cheap stuff from so-and-so's friend. They could vanish and take your servers with them.
> 3) there are a million services that are provided almost exclusively by very large companies. Quite often they do a horrible job. There's a million opportunities there.
How do you find these opportunities? I guess there is no easy answer, or there would be a lot more startups, but if you have any thoughts, that would be great.
I'm 21 and am just kicking off my first major startup. I dont really think I am ready for it. I think a couple more years in-work experience (only een employed for 6 months out of university) would do me good... :)
You will never be ready for it. Yes your chances of success might be less than someone with ten years experience, but failing will teach you more about startups than 10 years of work will.
Better yet, learn several languages that are significantly different from each other. That way, your mind will be more flexible, and you'll be able to pick up whatever languages are currently popular for marketing reasons on fairly short notice.
ok, lets settle for learning languages from the two companies with the top cash on hand: M$ and Apple. That should mean F# and Objective-C. And then learn a new language each year just to keep the juices flowing.
Will Microsoft and Apple lead the programming job market in ten years? (Will they exist?) I would rather hedge my bets and just focus on learning to program.
Choose between actual jobs, not companies
People change roles within companies more often and easily than they change companies -- especially in smaller organizations. And good, growing companies with interesting challenges promote people from any starting position quickly. Meanwhile, a 'good' job in a more static company risks stagnation.
So I would counsel the opposite of this post: choose the company moreso than the job.