tags:

views:

260

answers:

14

I am a software developer with over 6+ years of experience in Microsoft technologies (VB.NET, C#, SQL). The company I work for gives us a yearly education budget to spend on classes/seminars/books/etc to help advance our career.

I really don't want to take a class on "coding", I would much rather take someone on a different topic that will make me a better software developer. Project estimation? CI Process? class on ORM? Project management?

Any suggestions?

+2  A: 

Best conference I've ever attended is the Agile Development Conference. The 2009 conference is in Chicago this year. This conference covers a lot of different development topics, all tied together by agile philosophies. There are a good mix of topics from estimation, UI design, testing, development methodologies, and even some coding. I highly recommend it.

tvanfosson
+1  A: 

If there are any classes on Software Testing, they'd be valuable.

dommer
+3  A: 

I think every programmer should take a class on microeconomics. Also, probably communication (not communication systems; I mean talking to other people).

rlbond
+7  A: 

Writing. Being able to articulate your thoughts in text is absolutely vital, be in simple documentation, but more importantly, in e-mails and work pitches/analyses. If your prose is a cut above the rest, your ideas will get a much warmer reception.

Adam Wright
Of course, I've taken writing classes that did nothing to make me a better writer...
David Zaslavsky
+6  A: 

IMHO the best developers are the ones who really understand what they are automating. You gain a whole new insight into what your client is asking if you truly understand their business.

So I would suggest taking a class that is related to the business your company is in.

For example if your company is an accounting company, consider taking an accounting course

Andy Webb
+1  A: 

Any sort of economics class. Unless you are working for free, it is useful to understand these concepts. Also, conferences in general are useful to attend. Not only do you gain insight into industry trends, but you get to network.

jle
A: 

My old company used to do the same, but I never thought learning some technology that I'd never use was productive (or worse, learning technology I already knew enough about!), so I always headed for the "soft skills" courses - team leading (which can make you a better team player), mentoring, timekeeping, analysis, etc.

For nearly all tech you'd like yo know about, you'd head straight to google and various websites and get the requisite knowledge immediately.

If you still don't care about the non-technical skills, I'd recommend some sysadmin courses, learning how the systems you build upon work always helps - eg if you know how to code a socket, you'll be better if you knew how switches work, how WAN protocols get involved and the security and performance implications of those firewalls and routers that your code will be working over.

gbjbaanb
+1  A: 

Learn the job of your customer, and try to become an expert in his domain (to do only if you think you'll enjoy it).

Nicolas Dorier
A: 

1st - Software Project Management

Hands down the most important non-coding class I have taken. Learn what artifacts industry expects (software dev plan, requirements, design docs, work break down, etc), the difference between those documents, how to scale those documents between a small shop and large shop, how to track your progress through a project.

2nd - Requirements Analysis.

IMHOP - both classes have a bit of a bad reputation for teaching "large shop" techniques when most developers are mid to small shop. But they are anything but useless, the techniques taught work, they just don't always scale! You can always throw away what doesn't scale to your proper shop size. At least this way you are making an educated choice on what processes/tools to leave out.

Aaron
A: 

The one that is often missed out is:

Chasing Girls on the Beach and Bars, by Life Stories c1970-2009.

Seriously, socialise beyond software topics..

No seminar, even from various consultancies, and then the Intels, Suns, MS, Google 'gods' was ever comparable to a nice new face that is just clueless to all the underlying technology she uses to interface.

Simple, best creativity you can get and stay ahead of the competition.

rama-jka toti
A: 

Public Speaking. At one point you are going to have to present you software to people. This helps.
Technical Writing (if available) this will be very handy when writing documentation.
If you developing something to run on an embedded system or developed for hardware, take an introduction to engineering class, preferably electrical.
Economics.
Fun electives...why not take kayaking?

Nick S.
+3  A: 
  1. Communications. Good, effective communication is the backbone of engineering. You need to be able to effectively communicate the problem, your solution, why you chose your solution, and what alternatives you tried that turned out to be lacking. I would much rather work with a bad programmer who had great communication skills than I would work with a great programmer who couldn't explain the first thing about what he/she was doing or why.
  2. Business. Software engineering is a business. The ability to understand a profit and loss sheet, to understand the interplay of supply and demand, to discuss the client's business needs as well as their engineering needs — these are all important and you should develop them.
  3. Math. Mathematics is worth studying even if you never need to integrate an equation. Math is great preparation for thinking, reasoning, in a formal and systematic manner.
  4. Something totally unrelated. Sooner or later you're going to have a life outside of work. When that time comes, you're going to want to be able to talk about things other than work. Study the works of Shakespeare, watch every Martin Scorcese film, be able to recite Who's On First? on request. Find something you really enjoy that has absolutely nothing to do with software, and pursue that with as much devotion as you give to the other three.
Classes in discrete math can be very applicable, _especially_ if you don't have any academic background in software engineering.
Greg D
+1  A: 

Get user experience (UX) design experience/training -- I'm a developer, designer, and business owner and 90%+ of the devs I've worked with have no design skills. The old saying it true, never let developers design UIs, unfortunately. It's ever more important that you can combine the dev and UX design skills in this economy because it means a separate UX designer doesn't need to be brought in and you can turn projects with less drag effect from mis-communication, etc. with a designer. Learn how to use Illustrator and PhotoShop at an advanced level too and, most importantly, just be well read and know what the trends in information presentation/architecture are.

Also, I recommend watching sessions like those from from Dan Roam (http://bit.ly/hHrok) to assist with keeping your problem analysis/solving skills sharp along with being able to communicate solutions to customers and reading books like Bill Buxton's "Designing User Experiences."

I'd pay a premium for a developer with a good UX design background. Too many of the devs I've seen are uni-taskers. They might survive in big orgs with hundreds of devs on a project, but won't survive long in the small to medium ISV world where being multi-disciplinary is the key.

mibrop
A: 

Here are my suggestions in broad terms:

1) Foreign languages. Studying another human language can be interesting and provide some insights into grammar and how we communicate. At least this is the benefit I got from this along with having classes where the majority of the class were female.

2) Science course outside Computer Science. Something like Math or Physics may be easy if you like crunching numbers or working on theoretical concepts like quantum physics while Biology and Chemistry may have other benefits if you have an interest in any of this stuff. Even some Psychology courses could be useful in understanding human behavior.

3) Technical course on software development methodologies. Something about Agile or Waterfall and how each has its strengths and weaknesses or practices like CI and TDD compared to traditional development methodologies. This shouldn't be so much about coding but rather all those other things around code like requirements, design and testing.

4) Business course. Accounting or economics would be another idea to learn more about how the world works to some extent. If you work with any accounting software, this may be useful to help you become a subject matter expert in this area.

JB King