views:

124

answers:

5

I'd like to learn a new programming language and while learning it, I want to write a replacement for Microsoft Works Calendar. That is, a fairly simple calendar software which supports reminders and has a specific reminder process which will display the reminders even if the calendar itself is not running. I would like to hear your suggestions on which language to use.

Here are my requirements:

  • Works on Windows (7 is enough, others are a plus).
  • Allows me to learn something new (definitely rules out Java, C# is questionable). Perhaps something quite different from Java.
  • Is a nice language to use (you define nice).
  • It would be nice if it was useful for my career.
  • Offers good support (built-in or 3rd party) for building the user interface.

Python comes to mind but would it be good for this kind of project and what other alternatives are there?

EDIT:
I might add that I'm trying to find a compromise between practicality and learning something new. So I don't want to stick to what I already know and make life easy on myself, but I also want to finish the project some day. That doesn't mean I don't want to try the more "exotic" languages, on the contrary. I want to try pretty much every language there is and that's another thing I'm planning on doing. Nothing major, just month or two to get a feeling what's out there. It might even be that I should do that before selecting the language for this project, but I have to think about that.

+4  A: 

If you are creating a Windows desktop application, then it is most sensible to choose C# and WPF/XAML. You'll likely find some new and interesting ideas in XAML, and C# is a wonderful language.

Adam Crossland
I'd suggest a cross-platform alternative.
George Edison
Why? It doesn't seem to be in any of his requirements, so its a fairly moot point.
Serapth
Pssst, I was talking to George. You and I agree completely. ;)
Serapth
@Serapth: got it. Raging deleted.
Adam Crossland
It is indeed the most sensible choice, I'm just not sure if it is too sensible. ;) I write C# server code at work, so I think the learning new part would be limited to XAML and I'm not sure if that's enough. But it still a possibility. Either way, I need to learn XAML somehow.
Carlos
+2  A: 

What about F# (if you want to do a Microsoft .Net App), or Clojure, if you want work in Java

Nisanio
+4  A: 

C++/Qt. Python/GTK. Python/Qt. VB.NET/WPF. Python/Django. JavaScript/XULRunner. More?

liori
+1  A: 

As a pure learning exercise?

If so, I would recommend against any C derived languages ( and that would include Python ) as if you have a solid foundation in one, learning a different one really shouldn't require any major effort.

Personally, if it was me and I could turn back time on my programming career, I would recommend a functional language in a heartbeat. Something like LISP or F#. I say this for two reasons. First, once my brain became hardwired around doing things a certain way, learning functional programming was HARD. Like brain splitting hard. Second, functional programming is becoming more and more popular and mainstream and already heavily influencing the .NET family of languages.

If not, I would probably go with a prototype based language, such as Javascript or Lua, as again, its a departure from the way you currently think in Java. That said, nowhere near the departure that learning, say, LISP would be.

EDIT:

After re-reading your requirements, I say F# or failing that, C#. Functional programming exposure but with drag/drop UI tools.

Serapth
I answered Python, but I can't disagree with you. I suppose it depends on how much of a challenge/change he's looking for..
jwp
I know very little about F#, but it does sound interesting. I've always found Python a interesting language and it might be different enough from Java for this project. At the moment I'd say it's F# vs Python. Or C# if I choose to be boring...
Carlos
I accepted your answer as I like the way you considered different alternatives.
Carlos
+2  A: 

Python is a fine choice. I'd suggest starting with something dead simple and terminal based. Move onto the GUI once the core functionality is there, and once you have a better hold on the language. As Serapth noted, it might be a little too easy being C derived.

I imagine pytz and dateutils will be projects that you'll want to look at.

jwp