views:

436

answers:

19

I tend to finish my work related tasks pretty quickly, and I get to have some free time on my hands. What should I write in order to become a better developer ? I'm familiar with c++/java/perl/python/ruby.

I wrote the following stuff on my own:

  • simple web server
  • simple web clients (different languages)
  • DSLs, internal and external
  • some lexers
  • code indenters (source beautifiers)
  • simple IDE

I would like some suggestions about some software that would be both challenging and fun to write.

+11  A: 

A compiler.

Edit: Or an emulator. Both very challenging.

BenB
+3  A: 

Something in a distributed environment.

Macarse
+4  A: 

what about a code generator, this will also be of use for you after you are done

SQLMenace
and of use to us! ;)
asp316
what would it generate?
Geo
@Geo, you need to identify common aspects of what you work on. Many systems have an underlying common framework of structure that can be generated as required when implementing new functionality.
Rob Wells
it could generate the body of a class or webpage based on templates
SQLMenace
code generator? T4... implemented. :) CodeSmith... implemented. :)
Robert Koritnik
+2  A: 

I would identify a real problem and create a solution for it. It could be an algorithm or a complete project: web project or client application.

The important thing is that you solve real problems.

That's what programming is all about.

Nelson Reis
+5  A: 

Something that relies on knowledge you don't currently possess, which means you will have to educate yourself in the process of creating it.

TheTXI
+1  A: 

I agree with the compiler idea. That would a challenging and fun project. Pick a language that's easy enough. Maybe even design your own :)

Sergey
+9  A: 

Contribute to an open source project

edit: start here

ignorantslut
+7  A: 

Something with actual users involved. As funny as it may sound, in my perspective it's a totally different story, if others are using your work and depend on it!

merkuro
Couldn't agree more. Your users will test 10 times as many bugs as you.
Ben Shelock
+1  A: 

Participate in an open source project which helps you to learn about some software development practices like using version control system and bug tracking system.

Write an AI game such as checkers which I think is pretty challenging and fun.

David
+2  A: 

Write a binary search tree and implement insertion, deletion, search, etc. When that's done write a splay tree. If that's not to your liking, pick something out of Introduction to Algorithms and write that instead.

Andrew Austin
I already implemented some data structures to see what it would be like. Not a very fun experience.
Geo
Oh! Well, you asked what you could write to become a better developer, not what would be the most fun.
Andrew Austin
+3  A: 

A game, probably a simple one like Pacman or SpaceInvaders. It's not only fun, but you will also enter a completely new realm.

ammoQ
I wrote a tic tac toe game using swing, but I feel that I've cheated by using JButtons instead of actual graphics.
Geo
+1  A: 

G'day,

What abut start writing some fragments for reuse in other pieces of software? That way you can:

  • optimise the particular pieces of functionality by revisting them every now and then,
  • not have to re-invent the wheel everytime you need to have this functionality incorporated into your main pieces of software,
  • start spreading them around and make a bit of a name for yourself.

Off the top of my head, some of the things I'm thinking of are things like:

  • logging
  • reading config from a file
  • setting up a common environment

All of which, if you had them already written, would make your turnaround time on other projects where you'd used them much faster. The functionality would also be consistent across multiple projects.

HTH

cheers,

Rob Wells
+1  A: 

you could go for implementing a version control system of your own...
It will require a lot of coding and cover different aspects like algorithms,protocols, os etc..
But it is always better to contribute to opensource projects than coding something which is already built
you can also try developing an expert system that uses AI to do some interesting stuff :)

Neeraj
+1  A: 

I've found that rewriting a prior project in a radically different environment is a great way to learn about both the new and old environments.

Back in school I wrote a baccarat game in C (we had to pick a card game and I wanted to pick one I never played). The next year I rewrote it in scheme. And then smalltalk the following year.

In both cases, I walked away greater understanding of C.

sal
+1  A: 

You don't seem to have done much graphics. How about a game as already suggested, a 2D simple physics/shooting such as asteroids game is fairly easy to start off with and fun to test.

Even better and probably more useful how about an image editor?

Captain Lepton
yeah, I haven't. I tend to avoid it as much as possible. I prefer command-line applications :).
Geo
+1  A: 

A book. A tutorial. Anything that teaches. Teaching is a great way to learn.

Trying to explain new concepts to people typically forces you to go into more depth than you would normally go. That act of trying to turn your knowledge into a set of cohesive sentences reinforces it in your own mind and reveals any weaknesses or gaps you may have.

And you can always learn something from your students or readers.

Terry Wilcox
+3  A: 

Pick up any open source application that needs help with component, enhancement or for bug fixing. Your skill can make difference in open source world. Other than that i suggest you to use your skills for developing these :

  1. IDE for Game development(as you're already familiar with IDE developement)
  2. Improve existing libraries
  3. Develop emulator/Virtual machine software
  4. Develop folder and drive protection software (or better encryption related software)
Mahesh
+2  A: 

You've already got a lot of great responses to your question, but I feel there's a suggestion that has been missed: Learn AS3/Flex!

My background is quite similar to yours, but I recently learned AS3 for a project, and have loved it thus far. It has the same 'feeling' as other languages that you've worked in (e.g. Java), but it allows for powerful visual/aural applications without the bloat of an annoying framework. AS3/Flex have both been through several iterations of fine-tuning and lend themselves well to fairly rapid development.

Another reason to learn AS3/Flex is that it seems like you have interest in technologies that either run standalone, or as the server in a networked environment. Experimenting with AS3/Flex might give you a chance to play with the client side of the client/server duo.

Anyway, have fun! :)

A: 

Writing more code doesn't magically make you a better developer. Some suggestions I have are:

  1. Learn to write better code. What do you know about design patterns, refactoring, unit/automated testing and continuous integration, for example?

  2. Learn about software engineering. Do you know Scrum, Lean, XP and other agile practices? What about use cases and user stories, and project estimation and management? Managing (and choosing) a team is a whole other skill too. Do you want that to be part of your future?

  3. Learn to talk to users (an essential part of Agile techniques, actually). Your customers are almost always wrong about what they need. How do you cross the divide between what they think/say they want, and what they actually need you to build for them? There's usually a communications problem in both directions :-)

  4. UI design. This is a lot tougher than lining text boxes up and setting the tab order. This is a difficult discipline to master for most of us, and has branches for fat clients, web apps, small devices (phones, PDAs etc) and so on.

I'm sure others can think of things I've forgotten, but my point is that writing code is not all we do as developers. A lot of the time, writing code is the least that we do.

Jim Cooper