

I want to get into programming - james3

I have no background in programming but after a fruitless search for a software program i decided to write it myself.<p><pre><code>  ==what i need to do==</code></pre>
write a program which will run sort of like most games do today
    -I want to make a 2D graphic interface, and there will be hefty amounts of physics, object editing, pre-scripted simulation and the possibility of editing objects and rules as the program is running
    Eventually i would like to make a 3d version but that seems like it would be very hard.
    Could I get some direction with this? What program language would be best to use? is it an impossible goal to do this with no experience? I appreciate any help
======
zellio
I cannot figure out what it is you are trying to do. You say you want a 2D
graphic interface but you don't say what to. You say you will utilize a
"hefty" amount of objects and physics but you don't say why.

Lack of experience isn't going to kill this project, lack of a spec will.
Learning to program is like any other skill, put the time and effort into it
and you can learn, but if you have no idea what you are trying to do you'll
get no where.

~~~
james3
i have a very specific idea in mind, but im not going to divulge it to the
world. i described what i thought was relevant to one of my questions: which
programming language would be best/easiest to write my concept in.

~~~
Wilduck
You claim to have no background in programming. Then how can you know what is
"relevant to one of my questions: which programming language would be
best/easiest to write my concept in"?

Programmers (I'm generalizing here) don't like to be presented with XY
problems[1]. What you've done here is decided that the best solution to your
problem, X (which you haven't described to us) is Y (learn a programming
language), so you're asking us about what programming language to learn.

The reason we don't like these sorts of questions is because there could be a
solution to X, that is more effective, or much easier to explain than Y.
You're not going to get helpful answers to your question "what programming
language should I learn" because we absolutely don't have enough information
to decide if learning to program is your best bet. Let alone how you should go
about learning to program.

It's like you're asking us "I have a great idea for how to win at racecars, it
involves taking apart the engine. What socket set should I buy?" Sure, there
are better and worse socket sets, but that's not really the relevant question
at this point.

All of that being said: Learn Python.

[1] <http://www.perlmonks.org/index.pl?node_id=542341>

~~~
james3

         Then i guess i should have a much more vague yet precise question. 
    
         Going off your last sentence, it seems that you may have misunderstood me. I know that there is no such thing as the 'best' tool, best strategy or best language or what have you. 
         My dad owns a workshop filled with hundreds of tools and machines. There is simply no best tool, each tool or machine is designed for a very specific use in a very specific situation and from what I have read on HN that seems to be the case with programming as well. 
         I remember reading an article linked on HN discussing different programming languages and one quote in particular shocked me, "what can be done in one language may take two lines of code, but done in another the same task can take a thousand lines of code." This is what led me to ask the question 'what language should i learn.'
         I'll do my best to further describe what i want to accomplish, but first watch this video of a program called gource    http://bit.ly/UHcc9w
    
         From what i have read about gource it seems that two rules define the interaction between the dots and the lines to create very complex and sometimes mesmerizing behavior. 
         A) All dots project a repelling force which only affects other dots
         B) Lines, which represent file directories, provide a sort of skeleton between dots. They are modeled with an attracting force affecting each dot on either end of a line.
    
         What I want to do is create (or find) software which allows users to quickly and easily create simulations of objects in an environment which can also be defined by the user. (think mine-craft, but you can now play god with the laws of physics, create new sets of rules, forces ect.)

<http://bit.ly/UHentV> But i would want this program to operate on two levels
of complexity. I would want to have fun and experiment with familiar concepts,
like gravity, wind, light, ect. but in an easy and accessible way. However i
would also want the ability to create abstract system with odd rules defined
by modifiers, object archetypes, environmental effects and object states. I
want to replicate the behavior of a light wave with all the glorious physics
equations which would come along with that. I would want the software to be
flexible. For a _very_ rough idea of what i have in mind look at the
scribblenauts unlimited object attribute editor here <http://bit.ly/11ts1n7>

sorry for the wall of text, i did my best to explain.

~~~
Wilduck
> sorry for the wall of text, i did my best to explain.

No need to appologize, I definitely asked for it.

I'll get back to your original questions in a little bit, first I want to talk
about your list of inspirations:

> Gource > Minecraft > scribblenauts unlimited object attribute editor

And your description of what you want to do:

> simulations of objects in an environment > Physics > experiment with
> familiar concepts, like gravity, wind, light, ect > create abstract system
> with odd rules

What you want sounds fun, but complicated. If you _really_ want to do this, it
will obviously be possible. It may take a lot of work, but from here out, I'm
going to assume you'll be willing to put in a lot of work. Even with that
assumption, I think the best advice anyone can give you is unrelated to any
technology: Limit your scope.

I've started a significant number of projects, super excited about all the
possibilities, and started writing everything for the general, most abstracted
case. When I do this, I invariably get bogged down quickly. When I'm more
focused on one small feature, things turn out better. You want something that
is immediately fun, even if the scope is tiny.

You can see this in your inspirations as well. Minecraft started development
on May 10th, 2009[1]. It was playable by May 16th 2009 (First officially
numbered version). That seems like a ridiculously short development time, but
note that inventory management (the ability to pick up and place blocks)
wasn't added until August 4th 2009. It's clear that Minecraft started with the
smallest kernel of something that would be playable, and slowly grew from
there, accumulating things that make it more fun.

So, the best advice I can give you, is to find the tiniest kernel of your
idea. What is the smallest, simplest part that could still be fun? Your goal
should be to narrow your scope as much as possible and then make that.

The next piece of advice is going to relate more to specifically what you want
to do, and the tools you'll need to do it, also though, narrowing your scope
further. There are going to be two sides to the software you're trying to
write. The first is the physics simulation aspect, and the second is the
graphical display. You should decide whether you are more interested in
simulating novel physics, or displaying whatever simulations you do. That is,
to begin with, would you rather see ugly graphics and deep physics or simple
physics and beautiful graphics (obviously, I'm using physics as a generic term
for whatever rules-engine you want to work with initially). Ultimately, what
you're most interested in should inform what sorts of technologies you pick
up.

If you really want to see beautiful animations of simple rules, you're not
going to have fun building physics simulations in FORTRAN. If you want to
precisely model the behaviour of subatomic particles, you're not going to have
much fun with processing.

This brings me to your concern:

> what can be done in one language may take two lines of code, but done in
> another the same task can take a thousand lines of code

I'm pretty sure you understand that this quote means that some environments
are well tailored to a given domain. One line of Mathematica could do more
than thousands of lines of assembler (in the extreme case). I think it's
important to recognize, though, that if you're doing anything that's even
remotely novel, you're going to be writing thousands of lines of code. So I
would simply pick something that you find fun, to start.

Processing might be fun. It's built on top of Java, so there's a lot of room
to integrate it into a larger application. Play around with some of the
examples [2] [3] [4].

Box 2D is a pretty interesting physics engine for games [5]. It's a primarily
C++ project, but has bindings to other languages as well.

Start small, keep learning and experimenting, keep writing code, good luck.

[1]
[http://www.minecraftwiki.net/wiki/Version_history/Classic#Pr...](http://www.minecraftwiki.net/wiki/Version_history/Classic#Prior_updates)

[2] <http://processing.org/learning/topics/flocking.html>

[3]
[http://processing.org/learning/topics/smokeparticlesystem.ht...](http://processing.org/learning/topics/smokeparticlesystem.html)

[4] <http://processing.org/learning/topics/follow3.html>

[5] <http://box2d.org/about/>

~~~
james3
Thank you, really. I don't think i have ever seen someone provide citations
outside of power-point presentations at school lol, definitely appreciate the
response and thanks again.

------
miriadis
If you want to develop a desktop/downloadable game for Windows/Linux/Mac I can
recommend you BlitzBasic (<http://blitzbasic.com>) . It's Basic, it's very
easy to learn and allows you to create 2D and 3D games. The compiled code runs
very fast. You can check out a lot of examples on the website.

------
dragonbonheur
You want fast results while learning the good foundations of any programming
language, so learn BASIC, seriously. You have ZERO hope of achieving what you
want in a reasonable timeframe with any other language that anyone may suggest
here. They'll suggest python, javascript, C++, some will even suggest LISP but
dream on :)

Download DarkBASIC here:
[http://www.thegamecreators.com/?id=2000&m=view_product&#...</a><p>It's free,
fast, it has 3D, 2D commands and everything you might wish for.

~~~
james3
or ill do something stupid and try to learn 2 languages at once :) thanks

------
looper42
Since you are concerned about revealing what you have in your mind, it would
be preferable to talk to someone in you network directly. Because without any
proper spec, giving direction might take to entirely other path which might
not take to your goal.

------
dgozick
I'd choose Processing for quicker results. <http://processingjs.org/>
<http://processing.org/>

------
rman666
Watch this video and see if it can help you explain better what you want to
do. You might also do a Google search for terms like: HTML5 canvas physics
game

------
suomikatzen
Start with C SDL if you only want to do 2D stuff. Pygame is pretty good, too!

