Help me learn to program simple Windows desktop applications
July 21, 2006 12:10 PM   Subscribe

I want to learn to create simple Windows desktop applications for my own personal use. What programming language should I start learning?

I want to create some simple desktop applications for use on my own computer (Win XP Pro). Stuff like recipe collections or daily journals or a personal organizer. I don't need to create anything with a bunch of flashy graphics nor do I think I'll be doing much programming for the web (although maybe I would branch out to experimenting with that one day). This is simply a way for me to solve a few problems and learn something new.

There are a lot of options available for someone who wants to learn programming but so many of them seem mainly focused on designing for the web. I have little experience with programming (I've written a few simple interactive fiction games with Inform 6) but I don't mind a steep learning curve if I can eventually do what I need to do. Which is why I want to make sure I'm learning the right language from the start.

What I want to do first is create an application that will allow me to organize a large amount of information on world mythology. I have folders full of articles and stories and studies and images and I basically need to organize them by culture and time period and type and then display them by category. There are a lot of programs I can use for this (I'm using Keynote right now, which I like) but I have always wanted to venture into learning a programming language and I thought since I have a need now would be the right time to dive in.

Any suggestions?
posted by LeeJay to Computers & Internet (21 answers total) 5 users marked this as a favorite
I imagine C# would be a good place to start. I have a teeny, tiny bit of experience with it, and it was pretty easy to make a full-fledged desktop application, even for a non-programmer like myself. You'll pretty much need to have a copy of Visual Studio .NET, though those are easily available through the usual channels.
posted by Hildago at 12:16 PM on July 21, 2006

This is actually ideal for web programming. Install Apache or IIS along with PHP and MySQL, and away you go - you're looking to write a new CMS.
posted by spaceman_spiff at 12:19 PM on July 21, 2006

If you're OK with programming Windows-only applications, I think that Visual Studio and either C# or Visual Basic.NET fit the bill. They are nearly the same programming language, but with your choice of syntax.

If you're a student you can often get VS for free through your university, and Microsoft apparently now offers an Express Edition for "hobbyists, novices and student developers."

My other choice for fun, novice programming languages would be Python, but VS makes it significantly easier to create Windows GUI programs.
posted by shaun at 12:19 PM on July 21, 2006

I second the vote for VB or C#, using the Express editions.
posted by Diddly at 12:22 PM on July 21, 2006

A tool like Visual Studio Express cuts out a lot of the "enterprise"-grade features and is probably easier for a new programmer to learn. For Windows, I'd second C#.
posted by GuyZero at 12:24 PM on July 21, 2006

I'm going to agree that C# would be a good way to go. Since your ideas for desktop applications are fairly data-oriented, another way to go might be to use Microsoft Access, which can give you a lot of nice user interface very easily, and provides VBA for programming when you need it.
posted by Emanuel at 12:28 PM on July 21, 2006

There's also WSH--Window Shell Scripting. If you haven't done much shell scripting, you might be surprised by how robust it can be. If you haven't done any shell scripting for Windows, you might be surprised by how irritating it can be.

Personally, I use Macromedia flash for Windows projects, although you need to get third-party tools (SWKkit is one--they have a free demo, I think) if you want to do file manipulation.

Finally, I second Spiff's notion that you maybe want to do this via a web browser. I like PHP a whole bunch, myself.

PHP, WSH and MM Flash are all quite a bit less powerful than C, of course, but are correspondingly easier to learn.
posted by Squid Voltaire at 12:33 PM on July 21, 2006

I think you should be warned that you need to walk before you can run or fly, and the app you're talking about developing is not one for a beginner.
posted by Steven C. Den Beste at 1:14 PM on July 21, 2006

Best answer: Your goals are unclear to me.

Is your primary goal "to venture into learning a programming language" or is it to "create simple Windows desktop applications" or "to solve a few problems and learn something new"?

I ask because these goals are somewhat in opposition. You can use MS-Access and Windows Scripting to make an app that "just works" -- especially if you, who know your app's quirks and limitations and are OK with them, are the sole user.

However, much of what you'd learn this way would be particular to the tools you'd be using, and either not applicable or actually wrong when applied to more general programming questions. To learn other sorts of programming you'd have to unlearn particularism and idioms that may work in a particular tool but are bad habits generally.

Microsoft tools are particularly prone to this: I won't go into this at length because you can google embrace and extend.

In general, some tools, frameworks, and even programming languages can obscure what is really happening in the name of convenient "magic". This is fine so long as the programmer understands this polite function; but too many novice programmers end up believing the fiction is fact. Until and unless they understand what's behind the magic, their usefulness is limited to the tool or language they "learned". In the business, we refer to these people as "fools with tools".

This is why I warn all new and would-be programmers not start with an IDE; while the IDE simplifies compilation and testing, it obscures all the steps requited to compile and test. The result is that the novice can't do anything without the IDE -- and worse, he can't ask useful questions. Only people who use the IDE with exactly the same settings as you will be able to help you if you report "I clicked the green "Go" button which normally starts my program but nothing happened except the bottom window flashed".

If you want to learn how to program, I'd advise learning how to program with a general-purpose language, and on concentrating on plain text/teletype style output at first (adding graphics into the mix is platform dependent and a distraction to learning).

I'd avoid Visual Basic, as it's become a chimera and not the simple learning language BASIC was intended to be. I'd avoid Perl, because it's a wonderful text-processing tool, but by optimizing for text processing it can be non-obvious for other uses. I would avoid C#, because it's proprietary and it looks too much like languages it isn't -- a deceptive similarity will cause you problems when you need to ask for help.

So we're left with PHP, C, C++, or Java. Java can be a bit cumbersome for a newbie, especially if you follow my advice of eschew an IDE. C is probably lower level than you want. C++ can be difficult to learn (it's my first language, and by learning it well, most other languages seem easy in comparison, but the initial investment is high).

With PHP it's possible to get example and tutorial programs running almost at once, and as it's interpreted, you don't have to worry about compilation or linking (as such). It's also cross platform and not proprietary (although it does not, like C or C++ have an ISO Standard, as far as I know), and is general-purpose.
posted by orthogonality at 1:14 PM on July 21, 2006

Python is an excellent language with a lot of nice libraries. I use AutoIt Script to make small Windows programs.
posted by sonofsamiam at 1:54 PM on July 21, 2006

Hammer it out in Visual Basic/C#, or Delphi.

I don't really understand why all IDEs don't allow this sort of easy rapid app-making.
posted by fleacircus at 2:05 PM on July 21, 2006

I've been programming for many years but I only recently got around to learning Ruby, and it's got a lot going for it in terms of being an intuitive language. Python's supposed to be good to learn with as well. I don't know what it would be like using either of them to write graphical Windows applications, though.
posted by Songdog at 2:42 PM on July 21, 2006

You'll have the least issues and most help if you use C# or VB.NET...and if you get the express additions, it is free!
posted by jeff_w_welch at 3:10 PM on July 21, 2006

posted by Paris Hilton at 3:21 PM on July 21, 2006

Best answer: Another vote for C# or VB.NET. Programming Windows applications in C/C++ is a pain in the ass. For databases, SQLite for ADO.NET might work well. Would give you some relational DB experience without the overhead of setting up a full SQL server.

However, if you're willing to install a webserver on your machine then you probably want PHP. Graphical design in PHP is just HTML, and PHP knowledge will port to more platforms. But if you have a running webserver then you also need to be an administrator. That means evaluating security (public or private access) and installing patches to keep ahead of the exploits.

Good luck.
posted by sbutler at 4:17 PM on July 21, 2006

This might be a task for TCL. Start here then explore.
posted by megatherium at 5:04 PM on July 21, 2006

i was into perl and C++ for a while but never stayed dedicated enough to keep up with it and put it to use...i've been using access (2000, even) with VBA for quick projects--even one extensive program i developed for the office, and i've found that to be fine...the thing with learning full languages is the time you put in covering stuff that you might not necessarily put to use; with access i've done pretty well learning something as i come across the need for it...and for me, newsgroups are an amazing resource--pretty much any real problem i've come across, someone else has gotten to it first, and the answers are out there..

...these programming questions are like porn to me, and every time i see orthogonality answer one of them so gracefully, my dreams of rededicating myself to programming resurface...i love the studying and the work itself, but like a lot of people who come around here, i get lost on exactly where and how to i appreciate the insights here as well...

good luck!
posted by troybob at 5:49 PM on July 21, 2006

Response by poster: Your goals are unclear to me.

Is your primary goal "to venture into learning a programming language" or is it to "create simple Windows desktop applications" or "to solve a few problems and learn something new"?

My primary goal is to be able to create applications that I can use. I have no real desire to ever go into a career in programming. I don't think I have the aptitude for it, to be honest. My only goal here is to be able to create a few programs that do what I want them to do on my own machine. The problems I want to solve stem mainly from the fact that I haven't found applications that do what I want them to do. I realize that I might be biting off more than I can chew here but I thought I'd give it a shot. My biggest concern is learning the language appropriate to my goal of creating a few simple apps that will likely never see more than my desktop.

Thinking it over though, I realized that IF I was able to do what I wanted to do and IF I decided that I liked programming enough to maybe look deeper, I wanted to learn a language that I would be able to grow with. So, the goal is, learn how to make a few apps for myself in a language that I could go deeper into down the road if I like what I'm learning.
posted by LeeJay at 8:07 PM on July 21, 2006

Response by poster: I really want to thank everyone for the helpful suggestions. I have decided to look into C# and PHP, read the documentation and look at some examples. You've helped me narrow the field considerably and this was exactly what I needed.
posted by LeeJay at 8:08 PM on July 21, 2006

troybob writes "every time i see orthogonality answer one of them so gracefully, my dreams of rededicating myself to programming resurface."

Hey, thanks. And K&R is canonical, quite brief at 274 pages, and tutorial in nature.
posted by orthogonality at 3:30 AM on July 22, 2006

Response by poster: So, uh, bit of a strange followup: I got fed up with Windows on my old PC and wiped the whole thing and installed Ubuntu instead. And since it came with a bunch of different programming languages I decided to give one of them a go. Obviously, I'm not going to be doing much of anything for Windows anymore. Now it's strictly about having fun and learning something new. I chose Python and so far I'm really loving it. I've even managed to hack together a few decent scripts.

I'm also teaching myself how to shell script which is a ton of fun (and very useful).
posted by LeeJay at 5:12 PM on August 28, 2006

« Older Why you should buy a camera that takes AAs   |   Someone is phishing my mind. Newer »
This thread is closed to new comments.