Jump to content

Best way to learn programming?


Recommended Posts

My little cousin Andrew who is like a little me, told me he wants to make games when he's older.

I told him he should learn to programme as no matter what part of the industry he gets into programming knowledge is useful.

 

Now he wants to know where he can learn. He goes to the same high school I used to so I know its got no interest in teaching programming.

Their head of IT is the same pensionable alcoholic who taught when I went. He didn't think the internet would catch on.

 

I put game maker on his steam account for him, and he is intrigued.

 

However does anyone know of a good tool for teaching programming online? Only needed for entry level stuff to give him a good idea. Preferably free, I love the little guy but I'm skint.

 

Any good suggestions?

None of this is really happening. There is a man. With a typewriter. This is all part of his crazy imagination. 

Link to post
Share on other sites

Buy him an Arduino starter kit and tell him to Google ****. Arduino tutorials are EVERYWHERE (including YouTube), and they're damn fun.

 

The language is C. You can buy 3G cellular SMS and web surfing modules for Arduino, as well as WiFi, ZigBee, ethernet, touch screen, etc.

 

http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=2&products_id=185

 

You don't learn programming from a school - it's something you have to teach yourself, with encouragement and theory from others (e.g. IRC, forums. Google search). Sometimes the theory comes from school I guess, like Big O notation and whatnot.

Link to post
Share on other sites

One way to learn is codeacademy.com They have free tutorials and they are step-by-step with everything from loops to OOP. Plus Ruby, Javascript, and Python are free languages, they require no money just a computer. Pure Data is another free language, used to make sound effects. It does require an intricate knowledge of how sound actually works, but the book "Designing Sound" by Andy Farnell covers it pretty well. Finally, for visual effects, the language Processing has tons and tons of tutorials, free repositories, and teaches Java-style programming. Since it's designed for artists, it's one of the easiest programming languages to begin learning.

 

If he's really interested in game programming he should get Unity and go through the tutorials. Along with the tutorials, there are tons of free assets in the marketplace and more than enough to get him started. It's somewhat true most people don't learn programming at a school, but higher level concepts like Artificial Intelligence programming, physics calculations, and memory optimization will require understanding math, algorithms, and physics. So if he can't take programming, he's going to want to take strong science-based courses. If that's not an option, he should hit up Khan Academy and watch their really good free tutorials on those subjects.

Link to post
Share on other sites

These are all good suggestions but, I feel like these are all things someone should look at AFTER learning basic programming. The best place to learn is probably college nowadays but, using things like game maker can help with basic ideas such as using variables and logical execution (if this happens, then this should happen). If you are looking into having him use a specific language, then C++ is likely what he would eventually use if he ever became a programmer in the industry. It's hard to learn a language straight up without prior language knowledge but, much like NoMan2000 said, understanding logic and all that is key to programming.

 

So having him make little projects in game makers is probably a good start for framing his mind properly and learning some basic concepts that carry into programming.

  • Like 2

Twitter: @robyatadero

Link to post
Share on other sites

Read K&R and do the exercises to just learn basics - loops, control flow, etc. - then can move on to C++ or some other object oriented language. Do impress upon him the point that he should practice, practice, practice. I've not done that and I'm incredibly rusty. :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 post
Share on other sites

I do not agree with people saying that you don't learn programming from school. To some extent that is true that you can learn the language on your own, but your skills are definitely honed in school. Since there are a lot of ideas of computational efficiency and mathematical theory behind game development I would not be so quick to reject academic pursuits for developing your programming skills. Most of the people I've met that have been the really good programmers/problem solvers have all come from a good academic background and have a firm understanding of advanced topics in math, computer science and physics. Of course there are the odd ones out, but in general most people benefit from higher levels of education since it provides more than learning programming "facts" syntax and such, it develops their thinking and ability to solve problems as well as realize their ideas. You truly learn to master the art of programming. Rather than just becoming a C++-virtuoso, low level hackmaster or ray tracing graphics wiz. But of course, all paths increase your understanding of the logics that go behind development. But yeah. I would say it is a good way. :)

Edited by Khorde
  • Like 1
Link to post
Share on other sites

There are lots of mod groups on the internet. Join one. I did some PAWN scripting (very C-like scripting language) - when you goof around with how a server interacts with a game client, you pretty much get the basics of everything from bitshifting to recursion. And then you're pretty much set to teach yourself a major language.

 

Of course, the alternative is to take classes at a university in some capacity - but I personally don't recommend it. University courses are dry and boring, they'll make you lose interest in coding. They're supplemental at best - a means to get a degree and nothing more. You learn a lot more just experimenting and writing programs, after a certain point.

 

WC3 is an excellent place to start for a young kid I think. It has a friendly, only slightly unintuitive game editor. It supports JASS and GUI scripting, so there's a lot of room to grow. Games like DotA have become an international success and sprung from the editor. You can make a map and test it with random people on the internet on the fly. Lets you build up a theory of game design and a theory of coding/scripting. Granted, it's very old and probably less flexible than Game Maker, but I think it would be more inviting for somebody young, and the added bonus of testing your games with a live audience seems far greater.

 

And I'm not saying you shouldn't get an academic background, just that, you shouldn't /learn/ programming via an institution. Programming is academic, but it is very hands-on. The best way to learn to program is to program. But - programmers generally... are generalists. They can program, which is a useful skill, but the true purpose of a programmer is to solve problems that are highly logical or mathematical in nature. That requires a good education. Game design requires some of the most advanced technology and mathematics we have available to humankind. Of course you'll want to further your education - I don't think anyone is suggesting someone become a bum, to make video games.

 

Programming is the way to go though. Even if you eventually decide you don't like programming, if you do want to make video games, whether you're an artist, a writer, the sound guy, etc., working on something highly technological like a video game requires strong computer literacy. Really, the motivation of making a game is a great academic pursuit and it's something existing educational environments should utilize. All the skills you could learn in the pursuit of making a video game are so general and integral to a lot of other jobs in society, there's no reason not to get an education while pursuing such a career, even if that person decides they want to do something else, later on. But, it's important to emphasize that... generally, or at least, from the people I've met, programmers are industrious and pro-active - by the the time they finally get some piece of paper, they've programmed many things on their own initiative.

Edited by anubite

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 post
Share on other sites
University courses are dry and boring, they'll make you lose interest in coding. They're supplemental at best - a means to get a degree and nothing more.

 

Just to comment on this, this is purely a case to case situation and I wouldn't be so quick to generalize "university courses" in such a broad sense. Unis aren't perfect and of course I've had classes that were supposed to be fun (like a course in constraint programming) that turned out to be a pile of garbage, but then there are the courses that really taught me a lot of advanced theory as well as providing extremely fun programming challenges and tasks (like a course in cryptography. Which by the way is a field which is quite hard to enter on your own but extremely useful and rewarding.).

 

---

 

Considering that your cousin seems to be at a young age I agree with the previous post that starting with simpler, more instantly rewarding stuff like Game makers and map editors and what not is a good way to ignite his passion for the glorious arts (huzzah). Hopefully it will spark an interest that will last for ever and save mankind.

 

But to clarify, I do believe that academic education is most often necessary for a solid foundation as a programmer (in any field of programming) as after your years at college/uni are over you will realize that even though a lot of it is theoretical you will (hopefully) somehow have progressed leaps and bounds beyond what you'd imagined. At least in the sense that you can grasp most concepts and problems and evaluate them and approach them. Programming becomes your tool.

 

So simply neglecting academy might prove harmful in the long run. In fact, that is amongst the most important things we try to teach the first year students. We try to get rid of all the biased knowledge they might have gathered on their own. Just as a music teacher tries to make his student unlearn any bad habits he might have picked up during her/his three years of playing the violin self-taught (her/his parents hated the first six months of self practice). You try to break them out of their mould, and instead help them understand the concept of using the right language/tool for the right task. For instance, the people claiming that "this language sucks, this language is the R0cxx!@2!", you try to kick those kind of notions out of them and make them realize, when you eat soup you use a spoon and when you eat steak you use a knife. And a fork. Probably. That is the trick.

 

But it goes without saying that you can't learn the violin simply by understanding the sheet music and theory behind the compositions, so you have to practice and practice. And in those cases many of the links posted above and suggestions of modding, developing hacking and stuff are great ways of learning. It is simply a matter of acquiring necessary practical experience as well as necessary theoretical knowledge. They go hand in hand.

 

Now that I have brought both a food and music analogy to the table I am done.

Edited by Khorde
  • Like 1
Link to post
Share on other sites

Perhaps my distaste of programming courses stems from the fact I grew up during the transition. I mean, took HTML courses in high school when the curriculum was just developing. They instilled in me a contempt for educators of technology courses - because the curriculum was oversimplified in many cases, or irrelevant in others (I recall learning a bunch of networking nonsense, and useless vocabulary terms instead of the meat and potatoes of html).

 

I did concede you can't get away without education, but programming, unlike some fields it seems to me, requires that you be actively engaging with the material far before you even decide to go get a degree in it. Not that educators expect you to already know programming when you start courses, but the difficulty of said courses seem to expect it. I guess I shouldn't generalize my experiences, though I personally doubt they differ much across the globe.

Edited by anubite
  • 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 post
Share on other sites

Perhaps my distaste of programming courses stems from the fact I grew up during the transition. I mean, took HTML courses in high school when the curriculum was just developing. They instilled in me a contempt for educators of technology courses - because the curriculum was oversimplified in many cases, or irrelevant in others (I recall learning a bunch of networking nonsense, and useless vocabulary terms instead of the meat and potatoes of html).

 

I did concede you can't get away without education, but programming, unlike some fields it seems to me, requires that you be actively engaging with the material far before you even decide to go get a degree in it. Not that educators expect you to already know programming when you start courses, but the difficulty of said courses seem to expect it. I guess I shouldn't generalize my experiences, though I personally doubt they differ much across the globe.

 

My experiences mirror yours. I think it is fairly common. That said, university is absolutely invaluable. Everyone wanting to be a decent programmer really must attend university and study physics, maths, engineering, or computer science.

 

Python and PyGame (SDL + more) are a really good way to get the kid into real, genuine game programming in a simple, intuitive and industrially used programming lanauge. Python is object oriented, among other things. It reads like clean pseudocode.

 

But I tend to think that any (game) programmer is hopeless if they don't understand embedded programming and computer architecture (e.g. bit packing).

 

E.g.: http://inventwithpython.com/blog/2010/09/01/the-top-10-pygame-tutorials/

Link to post
Share on other sites

I have to agree with the people that say you really have to go to university to learn programming.

Outside of some very basic classes I did teach myself to program C and PHP and to design databases and I've that for several years.

Still, it wasn't until I had a beginner programming course at university that I actually learned proper programming techniques and algorithms that allow me to pick up nearly any programming language and work with it, be it C++/Java, designing integrated systems, or XSLT.

I also thought a bunch of database tasks were basically impossible until I learned discrete mathematics.

 

Still, trying some programming tutorials (I'd suggest starting with something simple like Java/C# which has less system specific weirdness and force you to think more object oriented) is not a bad idea at all, both to see if you cousin finds the actual programming interesting, and to get some basic programming skills under your belt, Just know that university is probably mandatory both for the reasons listed and to eventually get hired.

Link to post
Share on other sites

I have to agree with the people that say you really have to go to university to learn programming.

 

I hope you're not agreeing with me because I am saying the exact opposite: you don't need to go to university to learn programming. =p

 

You need to go to university to learn maths, computer science, and critical thinking.

 

Programming is something more primal and mechanical than those highly useful academic concepts things - and it is something which cannot be taught well institutionally without draining away the spirit of the profession.

 

You learn programming by programming. Repeatedly. Over a long period of time (years).

Link to post
Share on other sites

And if anything I've learned that most professors suck teaching programming. For instance, this is what I learned from my Discrete Math professor:

 

int somefunction (int i){

if (this) {

do this

return that

}

else {

do this2

return that2

}

}

 

This is a common mistake I think in programming - sure it looks elegant to have two return statements in a function sometimes, but in practice - this kind of thing compounds quickly into a nightmare to try and figure out (imagine 20 if else statements and thus 20 return statements). It's infinitely better to have one return per function and change a return value based on a conditional. It's stuff like this, crucial stuff that probably saves a company thousands of dollars per year, that is never mentioned or discussed by most professors. Instead, a professor might harp on the difference between two vocabulary words you never mention in passing to your peers 10 years later because technology has already changed anyway.

 

I guess the point I want to really make is that technology is the least timeless academic subject there is. It's always on the move. There's no point in talking too much theory, past a certain point, because it's absolutely invalidated in less than five or ten years. Or at least, if there's theory we need to talk about, it's the theory of design - or the theory of timeless architecture - stuff that won't change by the time you've graduated.

 

The best way to learn how to make games is simply to make games and program. To do so to a professional capacity, you will inevitably need a strong educational background (games are cutting edge - they need to be fast, responsive, almost like you're writing a program to calculate some quantum number), but... I mean, again, professors don't expect you to know things, but they kind of do. There are expectations that you can figure things out on your own. And it's true - one programming language is all you need to understand how to learn the rest on your own. A lot of the programming assignments I've received, had precious little to do with some expensive book they make you purchase, or some hour-long lecture, and were more about you just /doing it/ and figuring out how it all works, yourself.

Edited by anubite

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 post
Share on other sites

I think it comes down to that everybody is right in this thread. I think people are kinda discussing different topics regarding programming. You need to know academic stuff. You need to program a lot and often do more than uni makes you do. All courses in Uni are not good. All the thinks you can teach yourself are not going to be right or correct. And yes, professors often get out of touch with industry standard programming. But they sure do know their (pseudo) algorithms like the back of their hands.

 

To reach the industry standard of programming skillz you need to practice and practice - as well as know ****. And going to uni is like doing master level sudokus for five-something years. It's gonna make you sharp if anything. At a lot of thing. General trend is that people after a couple of years get better at the practical art of programming too.

 

get your pseudo on

Link to post
Share on other sites

I have to agree with the people that say you really have to go to university to learn programming.

 

I hope you're not agreeing with me because I am saying the exact opposite: you don't need to go to university to learn programming. =p

 

You need to go to university to learn maths, computer science, and critical thinking.

 

Programming is something more primal and mechanical than those highly useful academic concepts things - and it is something which cannot be taught well institutionally without draining away the spirit of the profession.

 

You learn programming by programming. Repeatedly. Over a long period of time (years).

You are absolutely right. You learn programming by programming.

 

You learn computer science theory, software engineer, software architecture, linear algebra (3D math), calculus, and physics in college. All of which will make you a more versatile programmer in the game industry. Some theory you learn in college is not directly applicable or useful in the professional world, but I was able to take something useful out of almost every class I took.

 

That being said, there are always exceptions. I do know of a few very talented programmers in the game industry that did not go to college at all. it is rare, but it happens.

  • Like 2

https://twitter.com/IridiumGameDev

Ex-Obsidian Senior Programmer

Link to post
Share on other sites

I'm of the mind that the maths, linear algebra, calculus, and especially computing science were pretty vital to me "learning how to program" but then I guess for myself I consider programming to be more than just typing in code.

Link to post
Share on other sites

I'm of the mind that the maths, linear algebra, calculus, and especially computing science were pretty vital to me "learning how to program" but then I guess for myself I consider programming to be more than just typing in code.

 

That's crazy talk, programming is just tapping keys! :p

 

In terms of learning how to program, calculus or linear algebra might not be vital - it can be depending on what you're going into. But both are interesting and a chance to work on problem solving - I found Calculus more fun, myself.

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 post
Share on other sites

Fair. Developing your logical skills will definitely help with programming, and problem solving is a great way to do that (computer programs are usually just problems that someone put forth to be solved).

Link to post
Share on other sites

I'm of the mind that the maths, linear algebra, calculus, and especially computing science were pretty vital to me "learning how to program" but then I guess for myself I consider programming to be more than just typing in code.

Entirely anecdotal, but I suck at math (a nice way of saying 'a complete disaster') and made modestly successful career out of development :)

 

Maybe my natural affinity for languages and transforming problems into something I can visualize (in my mind) and express with the tools at hand may have helped. It sure wasn't math.

“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 post
Share on other sites

Fair, I suppose Math is less essential depending on what you're doing with the programming. It's exceptionally handy around here though. Even if you aren't a game programmer (i.e. a tools programmer instead)

 

Either that or your programs were crap and unoptimized but your clients were so desperate they were willing to give anything!

Link to post
Share on other sites

Either that or your programs were crap and unoptimized but your clients were so desperate they were willing to give anything!

 

Never underestimate the sweet tears of despair! :p

 

I just deal in stuff that doesn't require much in the way of math. I've always had a knack for geometry and trigonometry (because I can mentally visualize it and model it in my mind), but stuff like trying to figure out the correct Fourier transformation of a function leaves me drooling and moaning :)

“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 post
Share on other sites

I'm of the mind that the maths, linear algebra, calculus, and especially computing science were pretty vital to me "learning how to program" but then I guess for myself I consider programming to be more than just typing in code.

Entirely anecdotal, but I suck at math (a nice way of saying 'a complete disaster') and made modestly successful career out of development :)

 

Maybe my natural affinity for languages and transforming problems into something I can visualize (in my mind) and express with the tools at hand may have helped. It sure wasn't math.

 

I don't know if you could get by like that these days. I mean, I already know plenty of people my age who do, and I suppose they're doing well for themselves - it'd be hard not to as a programmer. But the market is saturated with IT grads - and while yes, I admit the demand does tend to grow indefinitely as does the supply - it stands to reason that if you can programme and do linear algebra, you're going to get the job in place of the guy who can only programme, all other things being equal.

 

Personally I'm focusing on assembly languages and embedded programming, because I see a vital niche market with a core group of old developers who are retiring and not being replaced by anyone my age. It's nice - I can forget about all that software engineering and object orientation bull**** and JUST CODE. And I don't even have to pay for it by learning some incomprehensible bull**** like Fortran.

 

Besides, if you can't do linear algebra, how do you expect to be able to programme a quantum computer?! ;) The same way modern Javascript kiddies are able to code beautiful fractals in their web browser without knowing what a NAND gate is, I suspect.

Edited by Krezack
Link to post
Share on other sites

Personally I'm focusing on assembly languages and embedded programming, because I see a vital niche market with a core group of old developers who are retiring and not being replaced by anyone my age. It's nice - I can forget about all that software engineering and object orientation bull**** and JUST CODE. And I don't even have to pay for it by learning some incomprehensible bull**** like Fortran

One of the first things I ever built as a "self taught" C64 programmer (several years before I signed up for CS at the university) was a two-pass assembler, basic was just too slow ;)

 

Besides, if you can't do linear algebra, how do you expect to be able to programme a quantum computer?! ;) The same way modern Javascript kiddies are able to code beautiful fractals in their web browser without knowing what a NAND gate is, I suspect.

Does building your own DMA hardware using only 74xx series of chips count as qualification for handling boolean math? :grin:

 

I had no problems constructing my own neural networks and train them (when I was younger). It would be interesting to see how it perform on quantum computers. I once developed (as part of a team) a programming language for distributed processing on a network of Unix machines for calculating humongous arrays (wave simulation), but it didn't really involve any math, just logic and an understanding of grammar and processes. What people feed into the arrays and do with the results was less important for me :)

 

I guess the coding itself was never really what interested me as much as the analysis and design process. Implementation is just a tool to realize your ideas. Besides, you can get people to help you with the coding :sweat:

  • 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 post
Share on other sites

Personally I'm focusing on assembly languages and embedded programming, because I see a vital niche market with a core group of old developers who are retiring and not being replaced by anyone my age. It's nice - I can forget about all that software engineering and object orientation bull**** and JUST CODE. And I don't even have to pay for it by learning some incomprehensible bull**** like Fortran

One of the first things I ever built as a "self taught" C64 programmer (several years before I signed up for CS at the university) was a two-pass assembler, basic was just too slow ;)

 

Besides, if you can't do linear algebra, how do you expect to be able to programme a quantum computer?! ;) The same way modern Javascript kiddies are able to code beautiful fractals in their web browser without knowing what a NAND gate is, I suspect.

Does building your own DMA hardware using only 74xx series of chips count as qualification for handling boolean math? :grin:

 

I had no problems constructing my own neural networks and train them (when I was younger). It would be interesting to see how it perform on quantum computers. I once developed (as part of a team) a programming language for distributed processing on a network of Unix machines for calculating humongous arrays (wave simulation), but it didn't really involve any math, just logic and an understanding of grammar and processes. What people feed into the arrays and do with the results was less important for me :)

 

I guess the coding itself was never really what interested me as much as the analysis and design process. Implementation is just a tool to realize your ideas. Besides, you can get people to help you with the coding :sweat:

 

I'm impressed. It sounds like you've done a lot of the types of things I want to do. What did you do with neural networks?

 

And have you seen this natural-artificial neural network? http://spectrum.ieee.org/automaton/biomedical/bionics/rat-brain-robot-grows-up

 

My degree covers analogue and digital signal processing (good old Fourier), embedded systems, and telecommunications networks. It's fun, but a bit dry. So I focus on learning quantum computation, neural networks, and extra linear algebra in my spare time.

 

I used to love calculus. Now I find it a bit daunting, which is sad. On the other hand, I used to hate linear algebra, and now it seems mechanical and relaxing. What gives?

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...