Jump to content

Best way to learn programming?


JayDGee

Recommended Posts

To be honest, I mostly used it to do some sandbox experiments with 'A's and 'B's existing in a little world (my screen) and teach them different behavior. Aggressive, evasive, that kind of thing. Stimulus was stuff like food and survival versus pain and extinction. It was trying to take rules based (with memory) AI based logic in a different direction (or rather a different approach). I ran out of time though. Work. Work always gets in the way of fun :)

  • Like 1

“He who joyfully marches to music in rank and file has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would surely suffice.” - Albert Einstein

Link to comment
Share on other sites

I really should spend more time keeping my programming sharp (just for my own amusement) in off times. Gets tough to find motivation though :\

 

If you're into building your own computer from scratch from NAND, then writing a compiler for a language to use on the computer, then writing a small OS to run it and the version of Tetris you coded on it, then try this (click 'Course' on the left-hand menu):

 

http://www.nand2tetris.org/

 

It's nice because it's a general brush-up on almost all aspects of computer engineering, computer science, and software engineering. Plus, you get to build your own computer.

 

I think I've grown on hardware projects like this and Arduino these days because it's so much easier to get the motivation for a project this way. Thinking of interesting things to programme on the PC is actually kind of hard for me because they get too complex way too fast, then I get sidetracked on minutae and lose interest. But building a device that waters each of my pot plants when the moisture level in the soil falls too low? That captures my imagination in easily manageable chunks.

Link to comment
Share on other sites

I really should spend more time keeping my programming sharp (just for my own amusement) in off times. Gets tough to find motivation though :\

 

Pretty much the same situation I'm in, well that and I'm lazy to start with. :p

Why has elegance found so little following? Elegance has the disadvantage that hard work is needed to achieve it and a good education to appreciate it. - Edsger Wybe Dijkstra

Link to comment
Share on other sites

Tempted to make a joke at Obsidian's expense with that advice :p

Why has elegance found so little following? Elegance has the disadvantage that hard work is needed to achieve it and a good education to appreciate it. - Edsger Wybe Dijkstra

Link to comment
Share on other sites

Also, sad panda. :shrugz:

 

Tis all in good fun. Also I suspect the original comment was a joke :)

  • Like 1

Why has elegance found so little following? Elegance has the disadvantage that hard work is needed to achieve it and a good education to appreciate it. - Edsger Wybe Dijkstra

Link to comment
Share on other sites

If you're new to coding, here is some very helpful advice that won't ever steer you wrong:

 

If it compiles, it works.

 

There is an entire field called 'concurrent programming' which disagrees with you and wants to violently punch you in the face.

 

Any buggy software that fails to run properly or crashes still "compiles". Sometimes, the scariest thing a programmer can have happen is that you work for a long time on a large new system and it compiles on the first try. You just know it's not going to work right at that point. :p

 

On a side note though, probably 80% of what you do as a professional software developer is done before you write any code. Like someone mentioned earlier, code is just a tool to achieve a means. The way you decide to approach a problem or solution is really the more challenging and important part when it comes to engineering software. Anyone can make something "work". But can they make it work such that it is easy to extend to do other things, change to work a different way, easy to maintain so other programmers can work with it, is efficient and mindful of memory constraints, is easy for designers to work with and debug, etc. Once you have discussed and figured out a blueprint that addresses as much of those issues as possible, then you go and actually code.

 

If you engineer something that is inefficient, hard to maintain, a pain to extend or change, or is a hassle for designers to work with...then there will likely be time wasted in the future when it comes to dealing with your code.

  • Like 1

Twitter: @robyatadero

Link to comment
Share on other sites

 

Any buggy software that fails to run properly or crashes still "compiles". Sometimes, the scariest thing a programmer can have happen is that you work for a long time on a large new system and it compiles on the first try. You just know it's not going to work right at that point. :p

 

On a side note though, probably 80% of what you do as a professional software developer is done before you write any code. Like someone mentioned earlier, code is just a tool to achieve a means. The way you decide to approach a problem or solution is really the more challenging and important part when it comes to engineering software. Anyone can make something "work". But can they make it work such that it is easy to extend to do other things, change to work a different way, easy to maintain so other programmers can work with it, is efficient and mindful of memory constraints, is easy for designers to work with and debug, etc. Once you have discussed and figured out a blueprint that addresses as much of those issues as possible, then you go and actually code.

 

If you engineer something that is inefficient, hard to maintain, a pain to extend or change, or is a hassle for designers to work with...then there will likely be time wasted in the future when it comes to dealing with your code.

 

And that is why kids must stay in school and drink their milk!

Edited by Khorde
Link to comment
Share on other sites

I see these threads pop up from time to time, and they tend to quickly devolve into language wars or some other irrelevant discussion when the question we should really be asking is whether programming is the right choice to begin with. What does he enjoy, and is he already good at something?

 

Before I even go into the programming bit, let me ask you this: Does Andrew want to make games, or does he want to play them? This may seem like a weird question, but I've seen way too many people go for a game development education/career thinking that because they play a lot of games, game development should be super easy and fun!™ Most of the time, these people have no idea what game development is actually about, and quickly drop out once they realise what they've gotten themselves into, either because it wasn't what they expected, or because they picked the wrong discipline.

 

Furthermore, while it's true that most game developers are gamers, gamers may not be very good game developers; when you go into game development, you have to enjoy the process, not just the product. It's the difference between playing in a sandbox, and creating sandboxes for people to play in.

 

My point is, I wouldn't recommend jumping into programming if that's not something he fundamentally enjoys. A good rule of thumb is to find a discipline you enjoy, even when it's applied outside of the games industry. It could be programming, it could be concept drawing, 3D modeling, composing music, writing, creating visual effects, etc...

 

Programming is not required to make games, although knowing it certainly doesn't hurt. There are plenty of solutions out there which allows you to make games with very little programming knowledge, though if you don't have any preferences and have to pick one discipline, programming is probably the best one.

 

That said, it's hard to give advice without knowing what his goals are, and what he already knows. If he eventually wants to become a professional game programmer, then he will have to learn C++ (probably C++11 by the time he's done). Although depending on who you ask, it may not be the best starter language.

 

In general, there are four languages commonly used in the industry: C++, C#, Python and Lua. The latter three are mostly used for scripting and/or tools development though... For mobile platforms, there's Java (Android) and Objective C (iOS).

 

I'm a bit reluctant to give advice on any particular starter language. Python and Java are generally used as introductory languages at universities over here, because you don't have to know that much about memory management and such. Python is fairly easy to read and is great if you want results quick, which is an important aspect for beginners. It's also easy to set up, and everything needed to run it is free. However, it's more suited for prototyping and may give you some bad habits.

 

Java or C# may be a good middle ground as they are syntactically similar to C++. However, they are a bit harder to set up, and C# pretty much requires Visual Studio (there's a free Express version, but I don't know what the exact limitations are).

 

Maybe start with Python for the basics, and then move on to C# or Java once that is done. C# + XNA may be a good choice, since there's quite a bit of documentation and tutorials for it, and it's been used by quite a few indie studios. Again, not sure how far you can get with the free version of the development environment, but it's worth looking into.

 

Here's a collection of links which may prove useful now or later on, although some may contain outdated knowledge:

Link to comment
Share on other sites

I see these threads pop up from time to time, and they tend to quickly devolve into language wars or some other irrelevant discussion

 

Well that hasn't happened in this thread, so why did you bring it up? ;)

 

the question we should really be asking is whether programming is the right choice to begin with. What does he enjoy, and is he already good at something?

 

I strongly disagree. Regardless of whether a kid falls in love with coding or intends to pursue it as a career, I think that given society of 2012 and the unstoppable direction of technology, those kids who don't understand basic parts of computer science - especially the notion of programming (and all the tech savvy it builds up) and being able to do the simplest stuff like hello world and a factorial function - are at a huge disadvantage for their future.

 

Programming should be taught to children regardless of their desired career path - but it should be done in as a fun and visceral a way as possible, which I would argue is via the Arduino ecosystem, partly because of the very strong feedback that exists between coding and real-life outcomes (oh! so if I change the delay number in the main loop, this LED blinks on and off more quickly or more slowly! cool! and if I change this frequency value in this buzz code, this piezoelectric buzzer emits a different note!).

 

Now, I personally don't think this kid is going to end up a game programmer. Maybe a physicist. Maybe an economist. Maybe a musician. But who cares? He's interested in it for now, and the OP is and should use this opportunity to teach him or her programming. Programming is a life skill.

  • Like 1
Link to comment
Share on other sites

My other suggestion is - although it is perhaps not immediately useful, you could probably interest someone in programming by introducing them to Linux/Unix. Showing them they can customize their own operating system or see the inner-workings of one, I think will be a strong appeal... given how terrible Windows 8 is. Definitely a good skill to have no matter your profession - knowing operating systems well.

  • Like 1

I made a 2 hour rant video about dragon age 2. It's not the greatest... but if you want to watch it, here ya go:

Link to comment
Share on other sites

I see these threads pop up from time to time, and they tend to quickly devolve into language wars or some other irrelevant discussion

 

Well that hasn't happened in this thread, so why did you bring it up? ;)

The topic did seem to turn into a discussion about how programming in higher education is taught and rants about college/university education experiences. The guy's in high school. I'm not sure it's all that relevant just yet.

 

the question we should really be asking is whether programming is the right choice to begin with. What does he enjoy, and is he already good at something?

 

I strongly disagree. Regardless of whether a kid falls in love with coding or intends to pursue it as a career, I think that given society of 2012 and the unstoppable direction of technology, those kids who don't understand basic parts of computer science - especially the notion of programming (and all the tech savvy it builds up) and being able to do the simplest stuff like hello world and a factorial function - are at a huge disadvantage for their future.

 

I think it's natural to view your area of expertise as important—even vital—but it's often not. While it's becoming increasingly necessary to understand technology and related concepts in today's society, it's not the same as knowing how to program. It's a bit like saying you need to know how to build an engine in order to drive a car, or have an in depth knowledge of chemistry/physics in order to cook food; knowing programming is a useful skill, if only because it boosts your problem solving skills. However, it's by no means vital, or even needed to survive. Knowing your way around common user interfaces is enough. In fact, UIs have been specifically designed so that you can use them with very little knowledge about the underlying system (ideally none).

 

In game development, an artist needs to be aware of technical limitations, what a polygon is, and why it's a bad idea to use a million of them to render a chair. Programming is not really necessary, although an artist with some programming skills could aim for a position as a technical artist.

 

Programming should be taught to children regardless of their desired career path - but it should be done in as a fun and visceral a way as possible, which I would argue is via the Arduino ecosystem, partly because of the very strong feedback that exists between coding and real-life outcomes (oh! so if I change the delay number in the main loop, this LED blinks on and off more quickly or more slowly! cool! and if I change this frequency value in this buzz code, this piezoelectric buzzer emits a different note!).

 

Now, I personally don't think this kid is going to end up a game programmer. Maybe a physicist. Maybe an economist. Maybe a musician. But who cares? He's interested in it for now, and the OP is and should use this opportunity to teach him or her programming. Programming is a life skill.

While I agree that there should be better education with regards to technology in schools, and definitely agree that learning should be made as fun as possible, I feel that you are projecting your own desires here. Not everyone has an affinity for technology. In my experience, most don't. However, a short introduction to programming, together with some hands on demonstration as part of a general technology class, may be a good idea to find out who is interested in the topic. You could then allow kids to take an optional course, if they want to. I would actually argue that this should be done for every subject.

 

Going on an off topic rant about education for a bit here, but I feel that the ideal system should carter to an individual's natural talents and area of interest whenever possible (balanced against usefulness, of course). The current system in most (all?) countries tend to suppress creativity and shoehorn everyone into roles they may not be very good at, or even enjoy. This is why I asked what Andrew was really interested in. Remember, OP said he wanted to "make games". That does not necessarily translate to programming. Maybe that's his thing, maybe it's something else. Maybe he enjoys solving problems, but find the concept of hardware optimisation incredibly boring (or worse, downright scary). He could still be a great scripter though... Maybe he's a good artist too. If so, the role of technical artist may suit him better.

 

I'm not saying he should stay away from programming. I'm saying it shouldn't be forced upon him, and that there are plenty of other disciplines that goes into creating a game. The problem of forcing knowledge on someone is that it may have the opposite effect: They may come to hate it, and actively shun it.

 

An alternative to pure programming would be to let him play with various game engines. Unity, Unreal Engine, CryEngine... Nearly every big game engine has a free version you can use today. Most come with fully functional examples you can play with and tweak. This may expose him to visual programming (graph nodes), scripting, and all the other things related to game development. It's a great way to find out what you're really interested in.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...