Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411993 Posts in 69441 Topics- by 58486 Members - Latest Member: Fuimus

June 17, 2024, 03:21:06 AM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsDeveloperTechnical (Moderator: ThemsAllTook)A time line-esque way to absorb the ways of programming?
Pages: [1] 2
Print
Author Topic: A time line-esque way to absorb the ways of programming?  (Read 4872 times)
SpaceBrance
Level 1
*


The one with White Eyes


View Profile
« on: January 12, 2009, 06:28:10 PM »

Fellow TIGers, I know many of you can program things, and many of them are amazing. If  one(or more) you wouldn't mind going out on a limb, and share how you learned to program, or can give me a sort of timeline on what I should start with and move up to, or an efficent way to learn a specific language, I'd be very happy.

Thank you for your time.
 Noir
Logged
george
Level 7
**



View Profile
« Reply #1 on: January 12, 2009, 06:41:53 PM »

I'm not at all qualified to give you practical advice, but there's one essay I recommend reading as a good start to your journey.

Teach yourself programming in ten years.
Logged
imaginationac
Level 2
**


Makin' games instead of makin' money.


View Profile WWW
« Reply #2 on: January 12, 2009, 10:41:45 PM »

The earliest attempt at programming I can remember was back in middle school with my TI-83 Plus graphing calculator. I made some short text adventures with TI Basic.

I learned the basics of Java taking an introductory computer science course three semesters ago. I increased on that knowledge the following semester taking a software development course (also in Java). I'm now taking a systems programming course which will cover C++ and programming in a UNIX environment.

I self-taught myself some basics of web development over the years (HTML, XHTML, CSS, JavaScript).

I always recommend taking a course at live school if possible, but I'm very much an academic.

If you're going to learn to program, find one language, and learn the...basics, I suppose you would call them. The skills you learn from one can be [with varying degrees of difficulty] applied to any other.

I suggest on reading up on the difference between object-oriented languages and procedural languages.

Try not to do anything big too soon.

Good luck!
Logged

Youtube channel | Charger! Dev Log
              
bateleur
Level 10
*****



View Profile
« Reply #3 on: January 13, 2009, 01:25:12 AM »

It depends what you mean by learning to program.

Back in 1982 I learned to program on a BBC Micro (an old 8-bit machine that was a distant ancestor of modern ARM systems). I coded entirely in Basic and got my knowledge from a mixture of books, magazines and knowledge shared by older friends.

I wrote my first game within about six months. All ASCII, looked terrible, sound was even worse... but it played really well if I say so myself! However, I wouldn't say at that point that I "knew how" to program. I was really, really bad.

Until about 1990 (when I was 17) I wrote exclusively in BASIC (first BBC BASIC and later the excellent BASIC V on the Archimedes). I then switched to ARM Assembler. It wasn't until this point that I wrote my first game good enough to be worth releasing commercially.

Between 1994 and 1998 I was doing academic computing research and that significantly improved my grasp of theoretical ideas and languages other than Assembler. It was during this period I learned to hate C++ for what it has done to the world of software. I spent as much time as possible working with languages like OCaml... lots of fun, but not very well suited for most games!

Between 1998 and 2006 I worked for a company who made operating systems and media libraries for mobile phones, PDAs and the like. During this period I coded mostly in Java and was targetting mobile devices with my games too. The main thing I was learning as a coder during this stage was stuff to do with how to build multithreaded designs and the evils of not-quite-portability!

At around this time various decent modern languages started to become viable for games use. Python, C# and Actionscript 3 being probably the most used. The last of these particularly appealed to me since Flash being a platform solves the majority of porting issues with no extra work at all.

I wouldn't exactly recommend a timeline like this, though. It's left me with a pretty diverse set of programming skills, but it's possible you don't have 26 years spare for training!

My main recommendations for a timeline would be:

* Take a language you actually want to learn (not a shortcut tool like gamemaker) but then start with really easy, very short projects.
* Add to your knowledge in small, manageable increments. Never start a project more than twice the size of what you've done before (except for "Hello World").
* Read other people's code as much as possible. Find open source things that actually work and make small changes to them as a means of understanding them.
* Always have fun. If you don't have fun whilst learning something that will make it so much harder you are much more likely to give up.
* Stuff takes as long as it takes. Which is longer than you expect.
Logged

J.G. Martins
Level 2
**


AKA anvilfolk


View Profile WWW
« Reply #4 on: January 13, 2009, 02:29:43 AM »

Well, I learned to program through semi-crappy courses, with php, and then moved on to a CS degree.

I would recommend you pick up a high-level language like Python or something along those lines, and set some modest goals. Achieve them. There are some great free books out there, like Dive into Python which you can just follow. Not sure if it's the best for someone who's never programmed before...

However, there are tons of tutorials all around the web. Just go at them and keep doing them! The main thing is that you understand what you are doing and are not just copy pasting code. If you're in doubt as to what something in another person's code does, change it and figure it out - never leave a doubt unanswered. Always tinker with given code.

When you're comfortable with programming per se, you can start understanding some higher level stuff and start composing software together more logically - and you'll be up for bigger projects.


Like imaginationac, I recommend live classes. It's different, and serves as an incentive Smiley
Logged

Gold is for the mistress -- silver for the maid --
Copper for the craftsman cunning at his trade.
"Good!" cried the Baron, sitting in his hall,
"But iron, cold iron, is the master of them all."
--- Rudyard Kipling
Mr. Yes
Level 5
*****



View Profile WWW
« Reply #5 on: January 13, 2009, 02:52:00 AM »

This is a really interesting thread. I hope a lot of people post in here, because I've got a large curiosity of how our members learned programming, especially some of the more talented ones. These kinds of threads in general are awesome.

It actually hasn't been that long for me (around the middle of 2007, I'd say) - I'm still a beginner myself. But my first programming language was Python, and it wasn't too hard to learn even as a first language. Naturally, then, I agree with Anvilfolk's first suggestion: learn a high level language like Python. Make a few projects in it. I found myself bouncing from tutorial to tutorial to find that one explanation that would finally make me 'get' it.

Admittedly, I didn't stick to Python for very long. As soon as I reached the point where I could actually create something, I decided to move on to C++. Well, I didn't decide it at first, I was just sort of "testing" myself with a C++ tutorial to see if I would understand it. And I did.

But learning a language isn't even close to enough. I had completely learned C++ way before I felt the right amount of confidence to program anything. There's a point where it all starts to make sense, and that's after you've already written and read a lot of programs. At that point, you'll start creating something awesome.

That's me, anyway. I had absolutely no confidence until about two months ago, and after that, it felt so much easier. I still have no idea what triggered it.
Logged

Ishi
Pixelhead
Level 10
******


coffee&coding


View Profile WWW
« Reply #6 on: January 13, 2009, 05:29:14 AM »

I started coding about 8 years ago I think, a short dabble in QBasic then I moved onto DarkBasic and eventually Blitz Basic. I just coded whatever I felt like at the time, I have a couple of hundred tiny projects from back then: bad and/or unfinished tetris/columns/mario/pacman/pong/space invaders/bomberman/sonic/etc clones, particle effects, AI experiments, graphical things, screensavers, and tons of other stuff. None of it is worth anything on its own but it all contributed to my skills which I put into full games these days, and it was fun to do which is the important thing.

I've just been looking through my old stuff and spent far too long playing "quick game".

I didn't even remember I ever coded this. Then I discovered the feature where holding left and right unfolds the tank into a big turret thing - awesome.
Logged

Cymon
Level 9
****


Computer Kid


View Profile WWW
« Reply #7 on: January 13, 2009, 09:34:41 AM »

http://www.cymonsgames.com/about-joe

Of course Cymon's Games is an attempt to allow others to learn the way I did. Successful or not? You decide.
Logged

Cymon's Games, free source code, tutorials, and a new game every week!
Follow me on twitter
David Pittman
Level 2
**


MAEK GAEM


View Profile WWW
« Reply #8 on: January 13, 2009, 09:54:05 AM »

I started "programming" when I was about 5 or 6 years old by copying simple GW-BASIC games out of 3-2-1 Contact! magazines. I'd make small changes to understand how it all fit together and eventually learned to write my own games (most of which were of the PRESS ENTER TO NOT DIE variety, but hey, I was 6).

I liked programming and dreamed of being a programmer on big commercial games (or as I said back then, "I want to work for Nintendo!"), but I lingered in BASIC purgatory for a while, mostly writing QBASIC games and eventually trying Visual Basic when they added VB DirectX hooks. I dabbled in level design and 3D modeling and animation, but that went nowhere. I knew that programming was what I really wanted to do, and if I was going to really make it, I needed to learn C++. (Bear in mind, this was around 1999--the current era of high-level languages with wonderful libraries wasn't what it is today. And I wanted to make big commercial games, which are still typically written in C++.)

My self-discipline back then wasn't as strong as it is now, and I never could take the time to learn C++. I enrolled in a Computer Science program at college where they offered a Java path (for most students) and a C++ path (recommended for students who already knew C++). It wasn't a great CS program. I spent two years in CS Java hell and eventually took an elective class that (unknown to me at the time) required all homework to be submitted as C code. So I finally, in the lamest way possible, wrote my first working C program and so began the long road into C++.

For the next two years, I wrote a mix of Java, C, and C++ for different classes, only vaguely grasping the differences between C and C++ and not really feeling like I was learning anything. Of course, CS projects are pretty far removed from games, and I finally realized that I just needed to man up, stop wasting time watching TV, and MAEK GAEM. I downloaded SDL, dug into the documentation, and made a bouncing ball demo. It had sprites moving around, it had keyboard input--once I could do that, I thought, it was a small step to make a game.

Meanwhile, I'd been looking at the Guildhall at SMU as a path into the games industry, but I didn't believe in myself. I didn't think I had what it took to be accepted there. On the other hand, I didn't want to program business applications for the rest of my life, and my only graduate school alternative was to follow my dad's steps and go to law school. I aced the LSAT--it's all just logic and any good programmer should do fine on it--but I had no passion for law. I wanted to make games. So in my senior year, I started cranking out game and tech demos with the intent of building a portfolio for entry to the Guildhall. Months of anxiety later, I was accepted to the Guildhall, but I still felt like I was behind the curve in game programming. I spent the months after graduation brushing up on the areas of C++ where I knew I was weakest (namely, the entirety of object-oriented programming in C++).

The Guildhall was an awesome experience for someone like me--spending all day every day immersed in programming and games and learning genuinely useful information from the teachers and classmates. It's what I imagined undergrad was like before attending and being disappointed at the lack of passion there. If you ever have the opportunity to spend two years with twenty other programmers equally as driven and enthusiastic about game programming as you, take it.

And so I graduated the Guildhall, got my job in commercial games, and continued to program independently on the side. I finally feel that I really grok C++, but I'm finding so much more to learn in related fields: I'm developing better build processes, getting excited about tools development and content pipelines for the first time, exploring shaders a bit more, and reading lots of papers on graphics and game AI.

tl;dr: It took me about 18 years to get my black belt in game programming, and that's just the beginning.
Logged

nihilocrat
Level 10
*****


Full of stars.


View Profile WWW
« Reply #9 on: January 13, 2009, 10:24:41 AM »

Here, I will sum up most peoples' timelines:

Started programming in language X when I was a kid or relatively young, or used game making tool Y. I have since moved on to a "real" programming language / environment.

Spent the next 5-20 years getting better. Along the way, I created tons of unfinished or half-finished projects. I began to wonder how people can manage to create exciting, polished projects in such a deep and difficult field. I started to get distracted by other non-gaming opportunities because I didn't feel like I could cut it.

Eventually I made something that's "complete". It may or may not be very impressive.

I still feel like I don't know anything. Wizard
Logged

Ivan
Owl Country
Level 10
*


alright, let's see what we can see


View Profile
« Reply #10 on: January 13, 2009, 12:24:34 PM »

I'm pretty much the same. Started programming in BASIC on a ZX Spectrum when I was 9 or 10 (My parents got it for me to play games, but speccys' main screen was a basic prompt and it was impossible not to start typing in commands to see what they do). Then I messed around with QBasic and TurboBasic on a friend's computer as I didn't get a PC till i was 14. When I got my own PC, it was briefly Visual Basic, then straight on to C++, which took me about 10 years to master. I learned Python, ActionScript, PHP and Java along the way because it's alot easier to find high paying work in web-related fields, which is what I do professionally. 
Logged

http://polycode.org/ - Free, cross-platform, open-source engine.
Mr. Yes
Level 5
*****



View Profile WWW
« Reply #11 on: January 13, 2009, 01:00:03 PM »

A lot of people seem to have started programming before even the age of 12. Am I the only one that was completely incapable of understanding anything at that age?
Logged

Ivan
Owl Country
Level 10
*


alright, let's see what we can see


View Profile
« Reply #12 on: January 13, 2009, 01:11:56 PM »

I wouldn't really call what I was doing before the age of 12 "programming". It was more like typing in stuff and seeing what happens.
Logged

http://polycode.org/ - Free, cross-platform, open-source engine.
Hideous
That's cool.
Level 10
*****


3D models are the best


View Profile WWW
« Reply #13 on: January 13, 2009, 01:14:48 PM »

I started programming one year ago, in Pascal. Started learning C++ last summer. Is now working on Cubicle, learning stuff along the way.
Logged

Problem Machine
Level 8
***

It's Not a Disaster


View Profile WWW
« Reply #14 on: January 13, 2009, 02:13:28 PM »

Quote
I wouldn't really call what I was doing before the age of 12 "programming". It was more like typing in stuff and seeing what happens.
Wait wait wait... there's ANOTHER way to program!?  Crazy
Logged

salade
Level 4
****



View Profile
« Reply #15 on: January 13, 2009, 03:39:23 PM »

heh, I'm in a unique position. I first programed lego mindstorms. just the drag and drop, that was it. that turned into NQC, which led to programming robots in basic (I hated it for some reason, and almost gave up actually.)

after taking a break, spending time on mostly mechanical studies,and washing basic out of my system I got around to deciding to learn how to program f'real, and went away to learn c++.

I guess it's funny how instead of how my programming journey led to expansion in programing abilities, it ended up leading in to a whole different field (although I haven't tried writing much in C++ yet, and now I'm working on another robot which I have to learn C for.)

anyway, if you want to learn programming, what worked for me was finding the drag- and drop type thing of mindstorms just to wrap my head around the core concepts of programming. then NQC was also great, since it prepared it prepares you for what real code looks like. If there is some sort of software equivalent to that, you should check it out. actually, it seems that it would be a good a good idea to dabble in game maker for a while, contrary to someone elses recommendation (prove me wrong! Wink). just so you could wrap your head around how you approach programming games(event driven programming, object oriented programming, etc.) and then even spend some time getting used to writing down code with GML. not really a serious thing to learn, but just something to get you started.
Logged
J.G. Martins
Level 2
**


AKA anvilfolk


View Profile WWW
« Reply #16 on: January 13, 2009, 04:48:17 PM »

Answering as most people have been answering: I only started to code in high-school, so at about 16, in high-level languages like PHP and Lingo. The classes were so bad I had to "invent" matrices by myself since we weren't taught anything like that, and I didn't know they existed. From there I spent a year in Hereford, UK as an apprentice blacksmith Kiss, and learnt python in my free time through www.diveintopython.org. The range of exercises and technologies really helps settle programming logic Smiley

Then, CS studies from basic programming courses to interpretation and compilation, artificial intelligence, logic programming, distributed systems, graphics programming, and other usual CS stuff. This is what really opened my eyes for what's out there, and the sheer immensity of what is "programming" or more generally, "computer science" Smiley


So, everyone is sharing how they learned how to program, but not how they think it is best to learn how to program in this day and age. So I have a suggestion... why don't we all work together and try to come up with what we think is a good timeline (or set of probably sequential tasks) that would give programming newbies good grasp on what programming is all about, with focus on game development?

There are few issues we'd have to discuss regarding this, like:

1) What paradigm?

We can probably rule out all but procedural and OOP, since these are the two most used. I was against teaching OOP as a first experience, but now I am for it. If properly introduced, it can make programming and software architecture a lot more intuitive. It is really important to establish as many analogies to the real world as possible, and purely procedural languages don't achieve that by nature.

I would personally go for an OOP language.

2) What language?

What follows from the first question is: what language is appropriate for a newbie. I would go for pretty high level languages. I started out with PHP and Lingo (from Macromedia Director). No type declarations, typical software constructs, but nothing too elaborate. Amazing features for regular programmers might only serve to obfuscate a newbie.

As far as I'm concerned, Python is pretty mainstream by now, and has bindings for a series of graphical libraries. It's efficient enough to power simple games, which is really all that should be needed at this level.

3) Graphical Feedback?

Should the language provide graphical feedback? Console output isn't the most exciting thing. Graphics are really important so that you have direct feedback - otherwise, you're either going to have to learn to debug, or you're going to have to liberally salt your program with print's, and you won't be able to see immediate results for what you are doing.

Both the languages I learnt with, in the context I learnt them, were graphical. PHP for websites, and Lingo in an authoring environment. However graphics libraries can really make things more complicated than they really are...

In my personal opinion, even if it's not native, some sort of graphical output should be easily integrated. Python has PyGame and bindings for the SFML library, for example. Java has Swing and others, etc. C and C++ are a little more complicated to get up & running.

4) Starting exercises

Aside from a list of helpful tutorials dedicated at total beginners (as opposed to people with prior programming experience in other languages), there should be simple exercises to try out. I'm thinking entry-level CS programming courses... some really basic stuff, and some stuff that makes you think on your own.

This, found at Cymon's games looks like a very good start. Simple, simple "games".

5) Going further

What else? After seriously tackling some more complicated problems, and probably doing a tetris clone or whatever with the newly acquired skills, there need to be suggestions on how to continue. You can either move on to a more low-level, faster language, or you can start learning more abstract concepts.

For example... I thought I knew how to code when I was in highschool. Then I went into first year at uni. When I finished the first programming course, I thought I knew how to program. Then I got into my second programming course. When I finished, I thought I knew how to program... well, you get the idea. My point is, people who have been through a degree know how much there is to learn: it basically goes as deep and as far as you want to go.

At some point, you realize programming is just a tool by itself, through which you can realize some amazing concepts like simulating the brain or species evolution in order to accomplish ellaborate tasks. These, in turn, can be used to make applications, games or implementations of novel ideas in a more efficient or interesting manner.

Besides advanced concepts, stuff as simple as understanding data structures can really impact speed on some games, and is good to know even if they don't. More experience, more knowledge, more comfort with the languages your using: better understanding.

So in this section, we should probably provide links to things like:
- Explanations of common datastructures and what they are good for
- Sites with articles about gamedev
- Specific articles about the architecture of computer programs (just the other day I learnt more about the Model-View-Controller architecture here)
- Design patterns
- AI
- Common optimizations

Agreements, disagreements, suggestions, public displays of violence?

Also, I admit, salade's approach is pretty awesome too Smiley
Logged

Gold is for the mistress -- silver for the maid --
Copper for the craftsman cunning at his trade.
"Good!" cried the Baron, sitting in his hall,
"But iron, cold iron, is the master of them all."
--- Rudyard Kipling
Mr. Yes
Level 5
*****



View Profile WWW
« Reply #17 on: January 13, 2009, 05:14:42 PM »

The language is a tough choice. I think that's probably just a personal taste thing, though it should be high level for sure. I agree that Python would be a great choice, if only because that was my first language.

I like programming languages that give graphical feedback, though I don't know if that would make for a good first language. My idea is that beginners play around with game making software while at the same time learning a high level programming language such as Python. That way, a beginner could be creating something in an easier environment while at the same time learning some useful programming concepts. (Which would be awfully convenient if this person is using, say, Game Maker, since this programming experience could be applied to GML. Or, better yet, Constuct, since that has that whole Python scripting thing going for it.)
Logged

nihilocrat
Level 10
*****


Full of stars.


View Profile WWW
« Reply #18 on: January 13, 2009, 05:19:37 PM »

Speaking of starting from square one in programming, you might want to check out hacketyhack. It doesn't seem game-oriented at all, but it's got the right idea behind it and _why is a very clever fellow. It teaches you Ruby in a very slick-looking package.

Alice is a little more game-oriented, and will teach you Java. I've always been meaning to check it out, and now that this post reminds me, I think I'll go ahead and do it.
Logged

J.G. Martins
Level 2
**


AKA anvilfolk


View Profile WWW
« Reply #19 on: January 14, 2009, 04:36:48 AM »

Mr. Yes, that idea seems pretty nice. I remember toying around the The Games Factory (where is that now? Nobody talks about it, but it's the same company that makes MMF, I think) a long, long time ago. Still have the CD, heh.

I've read Construct is rather buggy, but I reckon that for beginners there shouldn't a lot of problems, correct? It would be great to be able to use Python within the game-making software. I'm a little afraid that people will just ditch programming when they are able to start using GM or Construct to reach their goals, and that would defeat the purpose of this. Reckon this could happen?


Nihilocrat: those sites are pretty great! Can you give us some feedback on your experiences with them?
Logged

Gold is for the mistress -- silver for the maid --
Copper for the craftsman cunning at his trade.
"Good!" cried the Baron, sitting in his hall,
"But iron, cold iron, is the master of them all."
--- Rudyard Kipling
Pages: [1] 2
Print
Jump to:  

Theme orange-lt created by panic