4 ms·
Python is great, but I recommend that schools should start programming classes with Unity3D. Within the first class you can have objects with physics bouncing o
by GavinB 14y ago
Python is great, but I recommend that schools should start programming classes with Unity3D. Within the first class you can have objects with physics bouncing off of each other, and by the end of the course you can have a legitimate game to play (that can even be sent to your phone or tablet).
The "javascript" variant is fairly straightforward and if you take it far enough can be quite powerful. At first the students can just hack things together, but as they go on they'll learn real programming.
Also, the basic IDE is free.
- mickeyben 14y agoAgree, I don't know a lot about Unity3D but having an asset-centered workflow should be easier to approach and will sound more logical to students.
- reitzensteinm 14y agoI'm a full time Unity developer now (see http://www.underthegarden.com http://www.underthegarden.com), and while it's a really powerful toolkit, some of the bugs and problems I've encountered through no fault of my own have been pull-your-hair-out territory for me; they would literally be impossible for a beginner to overcome. While getting something running quickly is great, I'm not so sure having your instructor fix stuff up in your project every couple of days is the best way to start a programming for beginners course. It sets up the wrong mentality; that programming is complicated, stuff breaks even when you didn't touch it, or when you touch something completely unrelated, the best way to solve problems is to Google them or ask your instructor instead of think, and that learning the API more is the best way to get better at problem solving. This is nothing against Unity in particular; it's amongst the best of its competitors, and I don't regret choosing it for my work; it's just the nature of the beast when dealing with massive existing code bases. That said, I think getting started with graphics and sounds is a great idea; I'd just use something a lot closer to the metal and less complicated. Blitz2D would have been my choice 5 years ago; I'm not so sure now (how is PyGame?).
- vitno 14y agoI don't like that at all. I understand you are trying to make CS more "fun", but I would hate it. I'm a CS major because I enjoy thinking about the problems and programming solutions. Unity3D is not what real programming is about, and you shouldn't sugar coat it. A student might have a blast with Unity3D then despise learning about heapsort.
- Jach 14y agoTo be fair, heapsort isn't what real programming is about either. (In fact I'd argue full-stack game programming combines more of technology principles than almost any other sub-field, not to mention non-tech principles in the art and design and story.) The GP's general point however is if you're trying to attract people into the field in the first place, dangling shiny objects isn't a bad way to go. I started with web sites with PHP and I liked the interactive nature of the browser. It wasn't until quite some time after that I stumbled upon Project Euler and had fun with those sorts of problems that I probably would have avoided prior. I still don't like heapsort, but that's more of a general dislike with the "let's teach everything with sorting algorithms!" culture of CS curricula. I like other more-hardcore-than-sorting CS things much more. Edit: and I also have fun with them. Programming should definitely be fun.
- vitno 14y agoSorting algorithms are useful for teaching though. Not only do they help the student with writing code, the introduce important parts of programming as well as Big-O notation. Maybe you are right, but if someone was dangling a "Lets learn Unity3D" course in front of me, I would never ever attend that university.
- Jach 14y ago> Not only do they help the student with writing code, the introduce important parts of programming as well as Big-O notation. Are sorting algos the best methods for helping students write code and learning about Big-O? I don't think so. Learning the fundamental data structures are a lot more useful for that purpose, I think. Of the standard crop, I think the binary search is a good algorithm to teach (though one must note its historical implementation problems in languages with fixed int sizes), and if you're going to do sorting then quicksort + insertion sort when N < 16 wouldn't be awful. At least mention the language's built-in sort so that open source projects like gnu flex don't inherit a DIY sorting function in the code (in their case, the evil bubble sort which should never be taught). Instead of the cast of characters for sorting algos, I'd rather see something like this cast of maze generation algos: http://weblog.jamisbuck.org/2011/2/7/maze-generation-algorithm-recap http://weblog.jamisbuck.org/2011/2/7/maze-generation-algorit... I think they would accomplish your goals better, plus they have shininess built-in. >…"Lets learn Unity3D" course in front of me, I would never ever attend that university. But you would probably still be doing programming and CS elsewhere. You're already set. This post is about trying to attract people into programming at the HS or college level who otherwise wouldn't be. But from the other comments it seems like I might agree with you specifically on Unity3D; I haven't used it myself but it doesn't sound all that rad as a teaching tool. I fully support mixing PyGame into a Python course, though.
- gravitronic 14y agono no no no no no no no no I cannot stress this strongly enough, _NO_. You need to walk before you can run and it is of NO BENEFIT to the student to hide programming behind a fancy UI with fun results before they know what is going on. Let's be clear here, I am not against Unity. But I'm definitely against Unity for teaching how to program. The "strength" you exemplify about having unity doing physics in the first lesson is precisely why it's a terrible choice. Students without prior programming knowledge will not understand that this is javascript (a language) connected to a physics library (3rd party module) being represented by the UI (unity). You will introduce them to this mess of interconnected parts and they will have no idea who is responsible for what. Plus you will spend so much time teaching them Unity-specific concepts and fundamentals they will walk away with a crippled ability to program. I know this because at my university they taught first year programming with java and used a book written by the instructor that showed you how to load an image with swing before teaching conditionals. The boilerplate code that allowed the students to load images did nothing but completely confuse them and negate the teaching aspects as he slowly introduced programming fundamentals. It was a complete disservice to try to "fancify" basic programming and all it did was confuse anyone who hadn't previously learnt to program. Python on the other hand is a fast, interactive, forgiving interface that boils programming down to the basic nuts and bolts that you need to understand before interfacing with fancy UIs and physics.
- GavinB 14y agoFrankly, I think that getting people excited about programming and learning that they can create something actually cool is the most important part of their first introduction. I took a course in high school that started with the nuts and bolts. I did fine because I already knew some basics, but most of my classmates struggled. They learned that programming is hard and no fun and in the end you've pushed some lines of text around. Most of them barely passed and will never touch code again. For a serious university level CS course? Sure, start with Python and explain how the basic nuts and bolts work. Trying to get young people excited? I think it's worth considering other options. How many of us really started out programming learning the basic concepts in a structured environment? I understand your point, but I think that to be so dismissive of the enjoyment and excitement factor is inappropriate.
- Impossible 14y agoI think Unity is perfect for an introduction to game development or game programming class, but not so great for a general purpose programming course. The issue with Unity is that it is a complex, fully featured 3D game engine. A lot of what you do and learn, as a beginner, has nothing to do with writing code and is more about how game engines work. Like what a mesh is, what a rigid body is, how to set up a particle system, etc. I can see students getting hung up on these details to the point where learning how to script is a secondary goal. This comes from experience. I've worked with a game designer whose only real programming experience was inside of Unity and he was difficult to work with because he didn't have the ability to separate game engine (Unity) features\concepts from programming language concepts. So I'd get weird questions like "why doesn't Lua have 3D object parenting". The same thing can happen in any complex environment where scripting can be secondary to the idiosyncrasies of the environment (Unity, Flash, web browser, etc.)