Programming Without Knowing How to Program
June 2, 2011 2:01 PM   Subscribe

Programming a program if you have very little programming experience.

So...this question is a bit farfetched. I don't know much about programming. I've cracked open a few books in the past and have written some VERY BASIC stuff, but nothing much more complicated than "hello world" and some stuff on Python.

I have an idea for a software program that would be, minimally, like a sticky notes type application. Because I can't find a single stickynotes software program that meets my requirements (and I've been searching for years!), I am willing to sweat blood to create something like this for myself (and even share it with others, if they want it.)

Is there any type of programming language I can learn to execute my GRAND STICKY NOTES VISION? (Is there were I cackle with madness here?) I don't mind putting years (but not decades) into this, since I've been interested in programming for a while now.

If I had the money, I'd probably just hire a programmer and give him/her the ideas so they can execute it for me, but I don't have the dough. I also feel like I have such exact and specific requirements that it might be easier if I do this myself instead of driving some poor person crazy. I guess I'm obsessed with slick looking, electronic sticky notes. Yes, it's scary. If it matters, the platform would be for Mac. My ideal would be that it would look visually integrated with other Mac software. It would have zoom capabilities, calendars, all kinds of crazy shit in it.

Suggestions on how I could make such a program myself? I know it's like saying I want to walk the moon, how do I build my spaceship to get there, but I feel like I need to start somewhere. So here we are.

Thanks in advance.
posted by thisperon to Computers & Internet (24 answers total) 15 users marked this as a favorite
Might it not be easier to find an open source sticky notes program that almost lives up to your expectations, and read through it, learning as you go? Gnome's Tomboy might be a place to start.
posted by jenkinsEar at 2:08 PM on June 2, 2011

I hate to be the bearer of bad news, but what you're looking for ("zoom capabilities, calendars, all kinds of crazy shit") sounds like an unfathomably far reach for a novice programmer still at the Hello World level, in any language. By all means, jump in and see what you can do; maybe you're a natural just waiting to bust out some amazing code. Others will undoubtedly follow my post my some practical suggestions for you. Just don't be discouraged if you find this to be too ambitious of a first project. Baby steps.

Have you checked out Elance or other sites like it? You can connect directly with professional contractors who can build what you're looking for — for a price, but surely for much less pain and anguish.
posted by The Winsome Parker Lewis at 2:09 PM on June 2, 2011 [3 favorites]

I would start by writing a very simple, minimal sticky notes program. You will learn things from this that will allow you to consider making a somewhat more ambitious sticky notes program. Repeat this process until you have what you want or you're tired of working on it.
posted by FreedomTickler at 2:10 PM on June 2, 2011

It sounds like object-oriented programming is what you're looking for If you're interested in Mac programming, go straight for Objective C.

(Make sure that the "...for Dummies" book you get doesn't assume any knowledge of C, though. At one point I considered teaching myself with this book, but the needs of my lab necessitated learning Python instead.)
posted by supercres at 2:23 PM on June 2, 2011

Suggestions on how I could make such a program myself?

Here is what I do when starting a new code project.

Write down your requirements. Be as specific as possible. Even hand-draw what you expect each screen and interface will look like. What does each button do? What does each button say? Figure out the logical aspects of it first. Think about the user's flow - what process do they do first? What process do they do next?

Some folks look at me strange when I don't even have a computer on when I do this (I use up a lot of pens and scratch paper) but it's how it works best for me.

THEN, go about checking out the programming languages. Some languages are cost prohibitive - having to buy a compiler program and whatnot. It's been a long time since I've programmed for myself, so I can only suggest Java as I believe you can download Java compilers for free.

Good luck! Should be fun. :)
posted by jillithd at 2:26 PM on June 2, 2011 [1 favorite]

These are super answers so far.

Jenkinsear--I appreciate the specific suggestion to look at Tomboy.

The Winsome--I will keep Elance in mind perhaps when I've got more cash! Didn't know such a thing existed.

Freedomtickler--do you have a specific programming language you'd recommend?

Supercres--thank you. I might be interested in purchasing a copy when this is realized in Amazon!

Jillithd--this sounds like the pro move. Thanks for this advice.
posted by thisperon at 2:29 PM on June 2, 2011

Since you've already expressed an interest, Python has a gentle learning curve and wears well with increasing skill.
posted by FreedomTickler at 2:34 PM on June 2, 2011 [1 favorite]

I agree with jillithid regarding doing things with pencil and paper as a first step. Regarding languages being cost prohibitive: you can safely ignore any language without a free compiler these days.

Also think about platform - if you want to ever use the code on an OS other than your own, you should be planning that from the start, even when it comes to language choice. Python is definitely portable if you stick to the cross platform libraries.
posted by idiopath at 2:56 PM on June 2, 2011

The secret to programming is that there's no secret to programming. It's very tempting to treat it as its own unique art, but fundamentally it's the same as any other productive human activity. You figure out what you want, then you figure out how to make it.

You already know some python, so you're halfway there (and I'd stay with python or a language at that level of abstraction, like ruby; definitely steer clear of C & C++ for now). Now you need a GUI framework...

I'd recommend having a look at wxPython, it's stable and not too much of a hassle (for a GUI framework). Here's a nice tutorial:

Build a window, then build a window with a rich text control. Congratulations, you've just created the minimalist version of your sticky notes app!

Above all, start doing. The "how" will reveal itself to you.
posted by Nahum Tate at 3:16 PM on June 2, 2011 [1 favorite]

In my experience, even in this day and age there's a high barrier to entry for GUI programming. A first-class WYSIWYG editor (such as Visual Studio for C#, not sure if there's anything comparable on the Mac) gets you half-way there, but you will still need to get your hands dirty by tweaking mountains of auto-generated code and possibly wrestling with the compiler/build system/runtime dependencies.

I'd recommend starting with something like Shoes. It doesn't have all the bells and whistles that you'll eventually need to implement your dream app, but it will save you a ton of overhead and you will have something running quicker than it'll take you to read the intro chapter to an Objective C programming book. After all, it was created as part of Hackety Hack - an interactive programming tutorial for novices of all ages.

Shoes uses Ruby as the programming language - which is similar in feel to Python - and is popular enough that answers to most basic questions are a Google search away. When you're comfortable enough with programming and start feeling like Shoes is holding you back, you can switch to a more powerful platform (perhaps something like MacRuby, or straight up Objective C).

One final advice: no matter what language you choose, start small and set yourself plenty of attainable intermediary goals. Get something simple done and build on top of that.
posted by dmit at 3:33 PM on June 2, 2011

I'll second the suggestion for MacRuby over ObjectiveC - it has the ease of learning of Ruby and is a first-class deployment language on OSX (direct native access to all the system services for the shiny OSX-style features you mention). it also integrates directly with Xcode, the standard OSX development environment.
posted by russm at 4:14 PM on June 2, 2011

You can sign up as a "Developer" with Apple, which lets you download all sorts of cool stuff to program with (compilers, etc)- worth it, maybe? It's free. You will probably get stuff you don't need, but at the very least you'll get a dev environment and a compiler.

Nthing the "design it first" thing. To EXCRUCIATING detail.

You will be tempted, if you're anything like me, to want to focus on the GUI. (graphical user interface) and not on actually how it does what it does. Make an ugly, but functional program first. :) Better that than a pretty, but non-working program.
posted by titanium_geek at 4:21 PM on June 2, 2011

RealStudio is remarkably easy to use, and fairly robust.
posted by mmdei at 4:49 PM on June 2, 2011

Just start trying to learn some programming in some language first. Don't think about your sticky note program, pick some simpler thing, and do it in whatever language. REALStudio would be a very good choice. The language is very capable and easy to use, and you can get pretty things running quickly.

A useful exercise I did years ago as a beginner was not even computer-related. It was to write a recipe for something, and then have someone [maybe yourself] follow it to the letter and stop whenever something is ambiguous in the least. "add a cup of water". Where do I get the water? What do I put it into? What if there's no butter? It helps a guy realize that he has to foresee everything that could go wrong and can't take anything for granted.

Less wizzy, command-line based stuff is fast and useful, too. Write a Python script that will make a list of all the MP3s in a folder. Then expand it to extract the ID3 tag information from them. What if its multiple nested folders of MP3s? Handle that. What if there are non-MP3 files in there? Handle that. Now make it show up in a window. And so on. If not that, find something you do repeatedly and come up with a script to automate it. You'll learn how to think about programming, and then when you start your ambitious stickynote program you'll be familiar with the basic building blocks.
posted by chazlarson at 5:59 PM on June 2, 2011 [1 favorite]

Just some general advice:

- Do proofs of concept after you've picked your language to show that you are able to do *something* like what you need (e.g., you're going to need to present sticky notes, put some text on them, save them somewhere, and somehow "select" them, as in respond to clicks and such, allow for alternate font styles and such). If you find that your chosen language either does not support some of those things, or requires a lot of knowledge or jumping through hoops to make them work, then it's easier to back out of that blind alley if you have coded a bicycle than a tractor trailer truck.

- As a beginner also look at the debugging facilities of the language. If it spits up on you with some kind of "unhandled exception 2730C45 in private class" garbage, and gives you no ability to step through the program (or put breakpoints in and examine object and variable contents), then you're going to be pulling your hair out.

- On the other hand, as has been mentioned, do a lot of design and keep good notes. If you were doing woodwork you would. You can't cut the lumber unless you have in mind all the different dimensions and notches and left/right considerations. So also you need to keep in mind the relationships, attributes, settings/preferences, etc.

- If you were programming for Windows I would say VB.Net would be *great* for a beginner and yet still has a lot of power. Sadly I have done almost no programming for the Mac, and the Java I did do convinced me that Java is not an *efficient* language for producing polished applications. So read the advice above from others for Ruby and Objective C, etc.

- Ignore anyone's ranting about certain languages being ugly or evil. A language is a tool, and if you were working for a company or on a team project, you might need to work in a language they insist upon. But you're not. So use the tool that works for you.
posted by forthright at 6:54 PM on June 2, 2011

One point against realbasic is that it locks you into a product (the realbasic IDE). Its files (the content of which is your own work) are a proprietary closed format that is unusable without their software. You will develop general purpose programming skills, but the language specific skills and familiarity are totally beholden to the one company.

Most programming languages that people actually use today (including every other language suggested in this thread, even MS and Apple's pet languages) have multiple implementations from multiple companies, and store programs in plain text - meaning that you can access your own source code from outside the application with just about any program you like for whatever purposes you like.

I agree with forthright that a language is a tool, and there is a benefit as far as I am concerned to learning just about any language, and every programmer should be able to get up to speed with any of 10 languages or so given a day or two to consult their old notes. But there are pragmatic reasons to distrust and avoid proprietary platforms.
posted by idiopath at 7:22 PM on June 2, 2011 [1 favorite]

You have seen Stickies, right?
posted by Wild_Eep at 5:57 AM on June 3, 2011

Thanks for all this great information, everyone! Sounds like the main advice is to start small, plan ahead and be specific, don't rule out any language immediately, and start with something easier like Python or MacRuby or Shoes (which looks very interesting, btw)!

Looking forward to the journey!
posted by thisperon at 11:25 AM on June 3, 2011

Here are a few resources to help you get started.

Learn the basics, you will need it regardless of what programming language you choose.
Lifehacker has a good compilation of tutorials + Additional help

The comments section also reccomend some additional resources if you want to go the mac programming way

Programming in Objective-C 2.0" by Stephen G. Kochan.
"iPhone and iPad Apps for Absoute Beginners" published by Apress
posted by radsqd at 1:48 PM on June 3, 2011

Here is a related question for anybody still looking at this...

Do I want to delve into applescript at all to learn programming? I know some applescript but it seems...wonky, for lack of a better term.
posted by thisperon at 2:06 PM on June 3, 2011

Applescript is basically a macro system for automating interactions between programs in MacOS. For many people macros are a good way to dip their toes in the water for programming, just tying a few simple premade tasks together. But if you don't like applescript you can easily make sure you never have to use it, even if you are programming for MacOS.
posted by idiopath at 2:56 PM on June 3, 2011

skip AppleScript. while technically you can use it to create full OSX applications, it's really not suited for that. "wonky" is as good a description as any for the language.
posted by russm at 1:25 AM on June 4, 2011

If you're interested in Python I've heard great things about Learn Python the Hard Way.
posted by vsync at 8:58 PM on June 4, 2011

Thanks for the responses! I'm going to check out "Learn Python the Hardway."
posted by thisperon at 7:28 PM on June 5, 2011

« Older That box is the Special File in New York   |   Robosecks? Newer »
This thread is closed to new comments.