views:

104

answers:

7

With all the great tools, languages, and libraries around sometimes I feel like all I'm doing is putting together APIs and libraries. (working on web apps)

I know that all this work that's been done for me is a good thing. And I'm aware that I can build powerful and valuable things leveraging all of this stuff. But it makes my work a little more mechanical. It seems that everything I do has been done and I can just look it up on the web. It doesn't seem like I have to solve hard technical problems.

Don't get me wrong. I'm not saying it's easy. It's challenge to keep everything in my head. And getting it to work right can be a major pain. But sometimes it feels more like a cycle of looking-it-up-on-the-web and fiddling rather than deep thinking.

Now that I'm out of school, its up to me to make sure I don't fall into a rut and become obsolete. And most of the time web-app programming feels waaay easier that the stuff we did in our cs classes. How do I keep sharp and improve my ability to do really hard stuff?

+1  A: 

There are actually relatively few jobs for people doing the hard stuff. The vast majority of paid work is for "glue" programming. So, let someone pay you to do "glue", and do the hard stuff as a hobby if you still want to code when you get home.

note: duct-tape programming refers to a particular style of programming. see http://www.joelonsoftware.com/items/2009/09/23.html

John Knoeller
this is not duct-tape programming.
Chris Lively
@Chris: noted and changed.
John Knoeller
A: 

The most effective way I've found to stay sharp and learning new things is this: find interesting and challenging problems totally unlike what you're doing at work, and complete them them in your spare time.

I try to learn a new language (or brush up on one I haven't used in a few years) every year. This keeps your mind from completely entering a "Object-Oriented Java/C#/PHP is the only way to write code" mode.

The other day I realized that I haven't used C++ in 5 years. So I downloaded Visual Studio and I'm going to write a simple action game. I fully expect it to take me a month or two just to get back up to speed in C++, and then probably a year to get something decent created. I might even add some form of basic voice recognition, if I can figure it out.

The key is:

  1. picking something to do that interests you and is different that what you do every day, and
  2. sticking with it until you've met your goals (either to get something working, or to learn something new)
Kaleb Brasee
A: 

It doesn't seem like I have to solve hard technical problems.

You certainly do not have to solve the technical problems already solved.

You can focus on a whole new set of hard problems.

And the only way to address those is most likely to use the best tools available (and have an understanding how and why and when those tools work).

Thilo
+1  A: 

You're right that a lot of existing libraries can do a lot of the heavy lifting for you, but there are definitely many places for innovation and non-mechanical behavior. Though it might seem like you're integrating these APIs mechanically, imagine if you had to rewrite the things these libraries do for you!

If you're in a domain where you're needing new algorithms, there's lots of room for innovation there. Try to come up with better, faster or cheaper ways to do things.

If you're building user-centric web-apps, there's a lot of art and skill required to build a coherent app that provides a rich user experience. It's not easy to have a user want to use your app, so you can focus on that.

Software architecture is also a great area to work in. Every application is different and each has its own design challenges. Trying to build a scalable app that is easy to maintain and modify is no easy task either.

Integrating APIs together is just one part of the job, doing it elegantly is a whole different story.

Jeff Storey
+1  A: 

You have to really focus on the type of work you'll be doing when you interview for a job. Ask a lot of questions and be sure you understand what the job will entail.

There are definitely jobs out there that involve developing new algorithms, multithreading, distributed processing, artificial intelligence, etc. IMO, these types of jobs are the ones where networking with peers can be a huge benefit, because the most interesting jobs won't necessarily ever appear in a public job listing.

ElectricDialect
+1 From me, agree.
Ninefingers
A: 

Find something that interests you in the open source world; perhaps one of the APIs you use/value most, particularly if you can see ways to improve it. Writing an API programmers want to use is almost as difficult as writing an App users want to use...

Edit: also, don't underestimate the value of duct-tape and WD40 http://www.joelonsoftware.com/items/2009/09/23.html - you can over-engineer too.

Ninefingers
The OP's use of "duct-tape programmer" is different than Joel Spolsky's use.
Jason
A: 

I find to a lot of programmers the 'really hard stuff' is not about writing code at all.. it's about:

  • talking to customers (!) and peers,
  • translating vague requirements into codeable work items,
  • accurately estimating your work,
  • delivering on time,
  • producing well documented, maintainable code,
  • balancing between dirty (quick) and awesome code (never ships),

etc. It seems its far easier to have a developer learn about some really difficult bit of code than pick up any of the above skills ;)

ArjanP