Sign in to follow this  
Moonwalka

help make a course curriculum

Recommended Posts

I've been programming now for about 8 months - and I *love* it. The problem is, all the time, I come across new terms and concepts, and even worse - new terms/concepts to terms and concepts I already thought I understood! I'd like to go back to the beginning. Allow me to elaborate with a crummy metaphor: Say I wanted to build a car from scratch. No, not just order the pieces and assemble them in my shop, but actually go out and extract all the iron ore from the mountainside, do whatever is the process of obtaining the paints used in the exterior, etc.....and then literally, piece by piece, fashion and weld the car from the ground on up. I'd manufacture everything from the driving column down to the smallest screw. In order to do this, I'd have to have a most-comprehensive knowledge in automotive technology. Well, high-level programming is a bit like ordering the car parts and assembling them in my shop. I want to spend the time (and it will take years) to learn whatever it takes to have a comprehensive knowledge in software theory. I guess I just feel like there's so many holes in my knowledge base, it almost takes away from my satisfaction of writing even simple console programs. Learning how different compilers/assemblers build and link, the difference between imperative and procedural languages (I have no clue), how assembly language translates to different processors, or the technical difference between a script and an application....these are all basic things that I've never been able to find from one single, sole-authority, comprehensive source..... So I ask you, the Good Citizens of GameDev, to help prepare for me, and for all future clueless programmers to come, a self-study syllabus of books and/or articles, that will progressively teach me what software programming is all about. Everything from compiler theory, to how low-level languages communicate with hardware, to data structures, to optimization and encryption. The whole lot. Not a Computer Science curriculum - a 'Science of Software Programming' route. Think of all the kids out there, firing up their parents' compilers for the first time and seeing the wide world of programming. Imagine how overwhelmed they must feel. Imagine how excited and overwhelmed you first felt when you began to grasp the awesomeness and totality of computer programming. It's for the kids, guys, it's for the kids. -Moon

Share this post


Link to post
Share on other sites
Save your braincells instead, and don't even bother. Assembly looks cool, people who know it act cool, just for the fact that they don't want to admit they wasted precious time learning it.

You don't NEED Assembly for programming. You get engineers for that.

Share this post


Link to post
Share on other sites
Quote:
Original post by Pipo DeClown
Save your braincells instead, and don't even bother. Assembly looks cool, people who know it act cool, just for the fact that they don't want to admit they wasted precious time learning it.

You don't NEED Assembly for programming. You get engineers for that.


Well... [smile] I know assembly [cool]. So I may tell you, I'm cool [smile].

I don't think it was waste of time... It didn't take me too long to learn it - the last attemp... (5th attemp was finally successful [smile]). Then you need some practise, but the only thing you can practise is to use
xor eax, eax
instead of
mov eax, 0
and simillars, since you're actively using only about 10 instruction classes most the time...

It's good to understand disasembly of your own program (debugging). But generally speaking - it's, indeed, useless [smile]. It would take ages to write something serious in it [rolleyes]

Oxyd

Share this post


Link to post
Share on other sites
Hey guys,

I'm seeing a lot of water treading going on here, so I'm preparing a dummy syllabus to better communicate what I'm looking for. I do appreciate your interest...just give me some more time to explain myself. :-) I'll be right back, don't touch that dial.

Share this post


Link to post
Share on other sites
Okay here is a mock description of what the syllabus would be if it were presented in a book (the book would be like 10,000 pages). Based on my extremely limited knowledge this is how I would organize the information. Please feel free to rip it apart and take it out back to shoot it.

Remember the overall goal here: to take someone who has absolutely no knowledge as to how software is made (but who is 'computer literate') and comprehensively teach them, step by step, all about the complex nature of programming from the ground on up. Like taking someone who is good at math, but has never even heard of Newton, and teaching them the intracacies of physics all the way out to Special Relativity and Superstrings all within the same learning syllabus. Here goes nothing....

Moon's Science of Software Programming Syllabus

The goal of this syllabus is to understand Software Theory and furthermore to comprehensively understand the technical nature of how computer programs are broken down into machine instructions, and all the processes involved in the matter.

PART 1 : HARDWARE
1. System Components & Functionality
Here we examine all the different parts of a computer, and how they interact with each other to create a functioning system.

2. Central Processing Units
The CPU is the most important part of the computer to a program, because it is the medium through which all a program’s instructions must pass and be executed from. Here we take formidable time to examine exactly how different CPUs process and act upon different machine instructions, and how this effects the rest of the system.

3. Peripheral Software Systems
Other PC components, such as the video, sound and network cards, and input/output devices, also work indirectly with programs via the CPU. This chapter explores how communication with these peripheral devices can be achieved through low-level programming.

4. Operating Systems & Firmware
Having a fundamental understanding of hardware as it pertains to software programming, we now turn to the two lowest-level types of software as a case study: Operating Systems and Firmware. These two software systems actually communicate electronically with your physical machine devices, and learning how they function prepares us for Part 2, where we learn to make our own low-level software.

PART 2 : COMPILATION MECHANICS
5. Introduction to Assembly Language
Here we touch on the basics of how the lowest-level programming language, Assembly, is converted into machine language. We already know from previous chapters in Part 1 how the CPU and periphery systems then process and execute these machine instructions, however here we learn where they come from.

6. Compiler Theory
The compiler is the software that converts higher-level programming languages into assembled and executable machine instructions that the CPU can then run. It essentially is software used for making other software. This chapter is where we tie theory into practicality, and learn the entire process of making software at a data level.

7. Genealogy & User’s Guide to Common Compilers and IDEs
Taking a break from hardcore theory, we visit the plethora of options in choosing the right compiler/IDE for different software development tasks. How to use each compiler properly, and taking advantage of all their powerful features is explained.

8. Writing Assembly
This chapter is optional, and is by far the most technically-complex in the volume. It is a programmer’s guide to writing assembly language for common processors, such as Intel and AMD. Knowledge of writing assembly is not necessary for completion of this syllabus, though may be hugely beneficial to anyone actively pursuing a comprehensive knowledge in computer programming.

PART III : COMPUTER PROGRAMMING LANGUAGES
9. Introduction to Programming Languages
In this chapter we finally arrive at the concept of medium- to high-level programming languages; the languages that 99% of all programmers use to develop software. We examine the different types of languages, how the system and compilers interpret them differently at the data/electronic level, and how each of their pros/cons can be used to satisfy different programming solutions. The use of APIs is explored in detail as well.

10. Analysis of Common Languages
Putting what we learned in Chapter 9 to use, here we itemize over 80 common high-level languages and provide comprehensive analysis to how they are traditionally used in software solutions.

PART IV : COMPREHENSIVE OVERVIEW
11. Titan: A case Study
Tying everything we’ve covered so far into the last part of this book, we now provide a case study where we will cover the entire process of writing one’s own programming language from scratch, and then using that language to develop software. We begin by presenting an overview of the language, ‘Titan’, and its semantics, and what type of language it qualifies as based on the way it will be intended to be used. We then give analysis of writing a compiler/assembler for the language, as well as a proprietary API. We will then explain the process of developing software in Titan on different operating systems, such as Windows XP or SCO Unix, and even on different platforms, such as laptops and cell phones.

Share this post


Link to post
Share on other sites
Hi all,

Some time ago, when I was writing my 8bpp blitting library, I tried many tricks with C but no use. It was slow... at least for my standard. So I decompiled the code and saw my C compiler (VC6) had a very inneficient way to compile the loops (for and whiles). So I used some inline assembler and replaced only the loop code so I managed to improve my speed up to 200%. The blitting functions were faster than their directdraw equivalents and way more useful (even had alphablending).

So, you dont have to program all your game in assembly (that would be nuts) but you can use some assembly in order to improve many critical tasks. Studying at least the basics of assembly should be part of any good programmer curriculum (more important for a game programmr as it has something of real-time programming) but not the central part.

Luck!
Guimo

Share this post


Link to post
Share on other sites
Hey Moonwalka,

It sounds like you have a very good idea of what you want to learn, so I would suggest going section for section through that mock-syllabus section by section and checking back here if you're having trouble grasping/finding info on a particular section.

Best of luck! It'd be nice to see this all put together in a PDF when your done!

Matt Hughson

Share this post


Link to post
Share on other sites
If you want to know all of this theory and the programming knowledge. THEN STAY IN SCHOOL, GO TO COLLEGE, AND GET A COMPUTER SCIENCE DEGREE! You have just made the longest description ever, of what a computer science major is. I would like to introduce you to your three new best friends, google, the closest bookstore, and your computer. See you in about 4years.

Share this post


Link to post
Share on other sites
I completely understand that you want to learn all of this stuff right now and that you want to get a head start on it. But, you are going to really going to run into a number of problems.

The way you want to learn things won't really work, because for instance you want to learn how each CPU processes and things like that. Well if you want to do that your are going to have to do math based logic, which at my university is two courses. Next semester I'm starting a course called Data Structures which uses a text book called 68000 microprocessors. In this course we look at microprocessors and the Assembly language, but only on a very low level basis.

I know a guy who tried to do what you want to do. He was one of the best programmers in my high school and he started reading all these university text books and trying all of the examples. He was doing fairly well but he didn't understand a lot of what the text book was saying. He finally got to a point where he didn't understand anything and couldn't continue. This got him extremely discouraged because he didn't know anyone who could explain what he needed to do. So he stopped programming because, like you, he felt that he needed to know exactly what his programs did from the ground up and since he couldn't understand what his programs were doing he felt as though it wasn't worth it anymore.

I don't mean to say it can't be done (because it can). I am just trying to warn you that you probably won't be able to understand what you are trying to learn. Plus you've only been programming for 8 months. I semi-agree with JDev in that you probably should go through the comp sci program if you want to learn all of this. Its structured so that you will learn effectively and properly. Plus if you want to get into the industry most people want you to have B.Sc. in Computer Science (or equivilent).

Share this post


Link to post
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

Sign in to follow this