The Army is making Duke Nukem Forever! that's right...63 million lines of code, all dedicated to the best game ever. 3D Realms is simply waiting for the army to finish its code.
The code includes interfacing will all the systems used in the battlefield by a special forces soldier, like mr Duke. This code will be used by 3dRealms to drive the on-screen action, for ultra realistic gameplay!
Since traveling to the moon or Mars presents such a challenge, it would be better if a big space carrier ship was built; a ship that could allow for a bunch of people to travel to other bodies of the solar system.
This ship would be built in space, since it would be big and lifting it would be impossible.
Gravity would be simulated by rotating decks.
The ship could employ a variety of energy schemes, but nuclear energy seems the miscellaneous form of energy for this ship.
The ship would be big and comfortable, with enough spaces so as that people can live on it for a long time.
The ship would have docking stations for capsules that could travel on planetary surfaces.
Once such a ship is built, planetary missions would be trivial. It would not matter if the ship to Mars was 6 months or 3 years, because scientists and other personnel could live on it. Visiting other planets would be as simple as creating the appropriate capsule for landing and takeoff from the planet.
Creating a Mars base would also be much easier...since people would have actually landed on Mars, within one year's time it would be possible to know the requirements for the Martian base. It could then take 10 or 20 years to transport all materials and equipment to Mars using this carrier ship. But it would be much easier.
With such a ship, there would be no question on if we should build a Moon base before going to Mars.
Such a ship could also travel to other solar system bodies.
I think the rocket approach is wrong. We need a stepping stone for space exploration, and that can only be offered by a carrier spaceship. The rocket is a single one-use device from transporting us from point A to point B. It's not reusable.
The cost for building and maintaining a carrier ship is much less than building, maintaining and using rockets over a certain period of time. Once you build the carrier ship, all you need is small rockets to deliver payload and people to it. A single rocket for a Martian mission would cost less, but you can't reuse it...you have to build another rocket. In a few decades, the total cost of using rockets for exploring Mars would be much greater than maintaining the carrier ship.
Other types of waves (e.g. sound waves, energy waves etc) are composed of particles. What is a gravitational wave composed of? of gravitons? gravitons are not proven to exist. If a gravitational wave has energy (as well as momentum and angular momentum) then what kind of energy is contained in the wave? where does this energy come from?
"That's pretty much the extent of pointers in Java. If knowing pointers is equivalent to knowing the name of an exception, then yeah -- it's impossible to know Java without pointers."
Not really. You have to know that a pointer is not the object itself, it only contains the address of the object, whereas in value-type variables the variable and the object are one and the same.
"Garbage collectors were created specifically so you don't have to nullify objects for the memory to be reclaimed. You may need to free other resources in a timely manner, but nullification is a very bad way to handle that."
If you don't nullify pointers, how is the collector going to clear unwanted objects? suppose you have a linked list of client requests; when you receive a message on a socket from a client, you put the request in the list, then you wake up a thread from a thread pool to process the list. If the request is not removed from the list, it will stay there for ever. By removing the request from the list, what you essentially do is to nullify the pointers of the nodes of the list that point to the garbage data.
"So the STL has no standards, and Java compilers/runtimes enforce style guidelines to the point where people can't just "make anything in any way." I learn something new every day."
The STL has few standards that are useful in the real world. The functional part of STL is minimal and not very good, so it's better to use Boost or something else. Every GUI library has its own callback mechanism, making it impossible to connect two objects from different libraries. At least Sun writes some standards (bloated, I can say), so everybody has to write code in a specific way.
"Event handlers handle events -- er, implement the listener pattern -- stop the presses!"
But in the Java world, event handlers are more consistent in design than in the C++ world.
"You're a troll, right? Exceptions aren't used in C++? I guess this was modded interesting, and not insightful."
C++ does not use exceptions. In STL, operators like [] do not throw exceptions. STL streams does not throw exceptions. MFC does not throw exceptions. WxWidgets does not throw exceptions. Qt does not throw exceptions. GTK-- does not throw exceptions. And there are tons of other C++ toolkits out there, and they don't use exceptions.
"Interfaces are not dynamic in any way whatsoever. They are entirely static."
Interfaces in Java are manifestations of dynamic typing. The virtual machine searches the method table of an object for an implementation of an interface each time a method of an interface is invoked. The underlying object may be anything.
"The lack of multiple inheritance automatically precludes it from being the best environment to teach OO. You need that in order to learn about the problems things like interfaces are meant to solve in the first place."
Interfaces are about typing, e.g. about making objects behaving like a duck, a dog, a cat, whatever. Multiple inheritance does that, but it also allows merging of behavior, which is not necessary in 99% of cases, and when it is, it can be handled by aggregation.
"Swing is single threaded. If you knew about interrupt driven programming from a low level class, you would understand that events can be handled without context switching between threads. "
No, Swing is not single-threaded. When you write a 'main' function in Java that opens a GUI, the GUI event loop is in another thread.
"In conclusion, I think Java is a language designed to solve many problems that programmers have traditionally faced. However, the abstractions that it makes take away from the foundation that a beginning programmer should have to build upon. It should be easy for any programmer with good fundamentals to pick up Java on their own, if they so choose"
In conclusion, Java abstractions is what makes teaching CS easy.
I think the problem is more on the material taught at colleges rather than the language itself. Java programmers should learn resource management, because the language demands it. But they shouldn't have to deal with the ugly bits of C, because those bits are not about resource management but specific C problems.
There is nothing that makes Java unsuitable for learning algorithms and data structures. The fact that Java comes with a set of prefabricated components does not mean that it can not be used for such a task. C++ and Java have exactly the same algorithmic issues, because Java, despite what others may have said, is essentially C++ with a garbage collector and all objects allocatable on the heap. Java also has pointers; it's not possible to say "I know Java but not pointers", because even the language itself admits it has pointers: it throws a null pointer exception when a pointer is null. There is also a little bit of memory management thrown in, in the sense that pointers must be nullified as soon as possible so as that the collector clears unused objects.
Java has some advantages over C++ that are important for teaching programming: it has an established set of patterns that all libraries use, whereas in C++ there is no discipline, anyone can make anything in any way possible. For example, many Java libraries use the listener pattern.
Java treats exceptions correctly (despite of being boring to having to program around them), where is in C++ exceptions are not used, although they are available a long time now.
Another advantage of Java is its typing system, which covers a great spectrum of typing systems: it is strong, it is static, but it is also a little bit of dynamic when one uses interfaces. It's very important, and since OO is dominant these years and for the future, it's a very important aspect and Java is the best environment to teach and experiment on these issues.
Java is also suitable for teaching concurrent programming, due to its support for threads. In fact, a Swing programmer must already know threads, because a Swing application is already threaded right from the start.
So what is left? low-level system calls and system libraries are operating system-specific tasks, and have no place in the programming course, unless the course is about kernel programming. Manual memory management is a C/C++ specific task, so unless someone is required to program in those languages, it's not a requirement for today's majority of applications.
So, in conclusion, I believe that there is nothing wrong with teaching Java. I think the core of the problem is that they don't teach the fundamentals of programming (algorithms and data structures), not the language itself.
What's the Amiga have to do with raytracing? well, let me explain:
When the Amiga was released, it was a quantum leap in graphics, sound, user interface and operating system design. It could run full screen dual-playfield displays in 60 frames per second with a multitude of sprites, it had 4 hardware channels of sound (and some of the best filters ever put on a sound board), its user interface was intuitive and allowed even different video modes, and its operating system supported preemptive multithreading, registries per executable (.info files), making installation of programs a non-issue, and a scripting language that all programs could use to talk to each other.
20 years later, PCs have adopted quite a few trends from the Amiga (the average multimedia PC is now filled with custom chips), and added lots more in terms of hardware (hardware rendering, hardware transformation and lighting). It seems that the problems we had 20 years ago (how to render 2d and 3d graphics quickly) are solved.
But today's computing has some more challenges for us: concurrency (how to increase the performance of a program through parallelism) and, when it comes to 3d graphics, raytracing! Indicentally, raytracing is a computational problem that is naturally parallelizable.
So, what type of computer shall we have that solves the new challenges?
It's simple: a computer with many many cores!
That's right...the era of custom chips has to be ended here. Amiga started it for personal computers, and a new "Amiga" (be it a new console or new type of computer) should end it.
A machine with many cores (let's say, a few thousand cores), will open the door for many things not possible today, including raytracing, better A.I., natural language processing and many other difficult to solve things.
I just wish there are some new RJ Micals out there that are thinking of how to bring concurrency to the masses...
Indeed. And there is a scene, I think in Next Generation, or in DS9, in which Miles O'Brian rearranges some blocks on a screen using both hands in order to make some adjustments to the engine.
Don't fool yourself. Science did not come from monks in monasteries. Science started in ancient Greece, around 500 BC, where there was no strong religion and people were liberal. This allowed people like Aristotelis to start forming questions and searching for rules and models of reality.
Science and religion do not mix together well, because science requires proof, religion does not.
On a side note, the Catholic Church recently recognized Scopjia as Macedonia.
No academic beyond those of this little new country will ever recognize Yugoslavians as the inheritor of Greek culture. But the Catholic Church did it.
You know why? because they are in politics and not in science. They want to have good relationships with the United States of America that did the same thing. In short, they want a piece of power in the New World Order.
Does "a few caveats" include "The Church's stance is that any such gradual appearance must have been guided in some way by God, but the Church has thus far declined to define in what way that may be. Commentators tend to interpret the Church's position in the way most favorable to their own arguments"?
Come on, let's be honest for a while. No Church supports evolution.
GTA SA could have been a hell of a movie; it's practically a movie by itself. So is Half Life 1 and 2. And Zelda games.
It all depends on the game; if the game has a good storyline, it may become a good movie. If it is a repetitive thing like a strategy game or Tetris or Pacman, then it's not easy to do a game on it.
No, because Qt's additions to the language are invisible and harmless (just a few empty preprocessor #defines), and the MOC is invisible as well (it is invoked automatically if Q_OBJECT is added to a file). MFC's macros in message maps are dangerous.
Buddy, only God (or Stroustrup) can write good c++ code. If you have the guts, read this. There are humongous flaws with the language (and I say this with 10 years of c++ experience).
The concept of c++ is good: a language close to the bare metal that has the capability to abstract details so as that it reaches higher level language status. But in practice, it has incredible flaws; the implementation is *bad*. It could have been so much better...
MFC - we are working on a huge update to MFC that should knock your socks off. I can't tell you too much right now, but this is closer than you might [think]
What do they mean?
Do they mean, perhaps, that widgets are now normal objects? no double-creation (first new Object, then object->CreateWindow).
Could they mean that all widgets are destroyed in the same way? no object->DestroyWindow for some widgets, delete object for some other widgets?
How about some serious memory management using shared pointers? no temp CBrush objects etc.
How about layout management? all serious widget toolkits have that. It's 2008, we should not have to position widgets manually.
What about the tab widget? in MFC, the tab widget is not a real widget: you have to manually hide and show controls upon tab click.
What about the model-view-controller pattern? this is 2008, should I still manually copy edited data from widgets to the data model of my application? most other toolkits support the MVC pattern. Dialog Data eXchange is a joke, of course.
How about the issue of message maps? Qt proves you don't need stinkin' message maps, which are hard to maintain, difficult to understand, and dangerous because casting is untyped and done through macros.
How about MIME type support?
These, and a lot more, are the issues that have driven developers away from MFC to Qt or WxWidgets. I have been maintaining a line of products based on MFC for the last 10 years, but this year I've decided I had enough: all the products are to be rewritten with Qt/WxWidgets. I will only approach MFC if it will approach Qt/WxWidgets quality.
Totally agreed! creating a software product is 10% about the programming language and 90% all the rest: understanding the requirements, communicating with the client, knowing how to test things, knowing how to analyze and synthesize problems...most programs can be done in a variety of languages anyway.
The Army is making Duke Nukem Forever! that's right...63 million lines of code, all dedicated to the best game ever. 3D Realms is simply waiting for the army to finish its code.
The code includes interfacing will all the systems used in the battlefield by a special forces soldier, like mr Duke. This code will be used by 3dRealms to drive the on-screen action, for ultra realistic gameplay!
Since traveling to the moon or Mars presents such a challenge, it would be better if a big space carrier ship was built; a ship that could allow for a bunch of people to travel to other bodies of the solar system.
This ship would be built in space, since it would be big and lifting it would be impossible.
Gravity would be simulated by rotating decks.
The ship could employ a variety of energy schemes, but nuclear energy seems the miscellaneous form of energy for this ship.
The ship would be big and comfortable, with enough spaces so as that people can live on it for a long time.
The ship would have docking stations for capsules that could travel on planetary surfaces.
Once such a ship is built, planetary missions would be trivial. It would not matter if the ship to Mars was 6 months or 3 years, because scientists and other personnel could live on it. Visiting other planets would be as simple as creating the appropriate capsule for landing and takeoff from the planet.
Creating a Mars base would also be much easier...since people would have actually landed on Mars, within one year's time it would be possible to know the requirements for the Martian base. It could then take 10 or 20 years to transport all materials and equipment to Mars using this carrier ship. But it would be much easier.
With such a ship, there would be no question on if we should build a Moon base before going to Mars.
Such a ship could also travel to other solar system bodies.
I think the rocket approach is wrong. We need a stepping stone for space exploration, and that can only be offered by a carrier spaceship. The rocket is a single one-use device from transporting us from point A to point B. It's not reusable.
The cost for building and maintaining a carrier ship is much less than building, maintaining and using rockets over a certain period of time. Once you build the carrier ship, all you need is small rockets to deliver payload and people to it. A single rocket for a Martian mission would cost less, but you can't reuse it...you have to build another rocket. In a few decades, the total cost of using rockets for exploring Mars would be much greater than maintaining the carrier ship.
For example:
http://memory-alpha.org/en/wiki/Television
Other types of waves (e.g. sound waves, energy waves etc) are composed of particles. What is a gravitational wave composed of? of gravitons? gravitons are not proven to exist. If a gravitational wave has energy (as well as momentum and angular momentum) then what kind of energy is contained in the wave? where does this energy come from?
"That's pretty much the extent of pointers in Java. If knowing pointers is equivalent to knowing the name of an exception, then yeah -- it's impossible to know Java without pointers."
Not really. You have to know that a pointer is not the object itself, it only contains the address of the object, whereas in value-type variables the variable and the object are one and the same.
"Garbage collectors were created specifically so you don't have to nullify objects for the memory to be reclaimed. You may need to free other resources in a timely manner, but nullification is a very bad way to handle that."
If you don't nullify pointers, how is the collector going to clear unwanted objects? suppose you have a linked list of client requests; when you receive a message on a socket from a client, you put the request in the list, then you wake up a thread from a thread pool to process the list. If the request is not removed from the list, it will stay there for ever. By removing the request from the list, what you essentially do is to nullify the pointers of the nodes of the list that point to the garbage data.
"So the STL has no standards, and Java compilers/runtimes enforce style guidelines to the point where people can't just "make anything in any way." I learn something new every day."
The STL has few standards that are useful in the real world. The functional part of STL is minimal and not very good, so it's better to use Boost or something else. Every GUI library has its own callback mechanism, making it impossible to connect two objects from different libraries. At least Sun writes some standards (bloated, I can say), so everybody has to write code in a specific way.
"Event handlers handle events -- er, implement the listener pattern -- stop the presses!"
But in the Java world, event handlers are more consistent in design than in the C++ world.
"You're a troll, right? Exceptions aren't used in C++? I guess this was modded interesting, and not insightful."
C++ does not use exceptions. In STL, operators like [] do not throw exceptions. STL streams does not throw exceptions. MFC does not throw exceptions. WxWidgets does not throw exceptions. Qt does not throw exceptions. GTK-- does not throw exceptions. And there are tons of other C++ toolkits out there, and they don't use exceptions.
"Interfaces are not dynamic in any way whatsoever. They are entirely static."
Interfaces in Java are manifestations of dynamic typing. The virtual machine searches the method table of an object for an implementation of an interface each time a method of an interface is invoked. The underlying object may be anything.
"The lack of multiple inheritance automatically precludes it from being the best environment to teach OO. You need that in order to learn about the problems things like interfaces are meant to solve in the first place."
Interfaces are about typing, e.g. about making objects behaving like a duck, a dog, a cat, whatever. Multiple inheritance does that, but it also allows merging of behavior, which is not necessary in 99% of cases, and when it is, it can be handled by aggregation.
"Swing is single threaded. If you knew about interrupt driven programming from a low level class, you would understand that events can be handled without context switching between threads. "
No, Swing is not single-threaded. When you write a 'main' function in Java that opens a GUI, the GUI event loop is in another thread.
"In conclusion, I think Java is a language designed to solve many problems that programmers have traditionally faced. However, the abstractions that it makes take away from the foundation that a beginning programmer should have to build upon. It should be easy for any programmer with good fundamentals to pick up Java on their own, if they so choose"
In conclusion, Java abstractions is what makes teaching CS easy.
I think the problem is more on the material taught at colleges rather than the language itself. Java programmers should learn resource management, because the language demands it. But they shouldn't have to deal with the ugly bits of C, because those bits are not about resource management but specific C problems.
There is nothing that makes Java unsuitable for learning algorithms and data structures. The fact that Java comes with a set of prefabricated components does not mean that it can not be used for such a task. C++ and Java have exactly the same algorithmic issues, because Java, despite what others may have said, is essentially C++ with a garbage collector and all objects allocatable on the heap. Java also has pointers; it's not possible to say "I know Java but not pointers", because even the language itself admits it has pointers: it throws a null pointer exception when a pointer is null. There is also a little bit of memory management thrown in, in the sense that pointers must be nullified as soon as possible so as that the collector clears unused objects.
Java has some advantages over C++ that are important for teaching programming: it has an established set of patterns that all libraries use, whereas in C++ there is no discipline, anyone can make anything in any way possible. For example, many Java libraries use the listener pattern.
Java treats exceptions correctly (despite of being boring to having to program around them), where is in C++ exceptions are not used, although they are available a long time now.
Another advantage of Java is its typing system, which covers a great spectrum of typing systems: it is strong, it is static, but it is also a little bit of dynamic when one uses interfaces. It's very important, and since OO is dominant these years and for the future, it's a very important aspect and Java is the best environment to teach and experiment on these issues.
Java is also suitable for teaching concurrent programming, due to its support for threads. In fact, a Swing programmer must already know threads, because a Swing application is already threaded right from the start.
So what is left? low-level system calls and system libraries are operating system-specific tasks, and have no place in the programming course, unless the course is about kernel programming. Manual memory management is a C/C++ specific task, so unless someone is required to program in those languages, it's not a requirement for today's majority of applications.
So, in conclusion, I believe that there is nothing wrong with teaching Java. I think the core of the problem is that they don't teach the fundamentals of programming (algorithms and data structures), not the language itself.
10000? I consistently score over 100000, and I have seen players reaching 700000 and more.
Also check out this video:
http://www.youtube.com/watch?v=cVH1mCc5EvU
What's the Amiga have to do with raytracing? well, let me explain:
When the Amiga was released, it was a quantum leap in graphics, sound, user interface and operating system design. It could run full screen dual-playfield displays in 60 frames per second with a multitude of sprites, it had 4 hardware channels of sound (and some of the best filters ever put on a sound board), its user interface was intuitive and allowed even different video modes, and its operating system supported preemptive multithreading, registries per executable (.info files), making installation of programs a non-issue, and a scripting language that all programs could use to talk to each other.
20 years later, PCs have adopted quite a few trends from the Amiga (the average multimedia PC is now filled with custom chips), and added lots more in terms of hardware (hardware rendering, hardware transformation and lighting). It seems that the problems we had 20 years ago (how to render 2d and 3d graphics quickly) are solved.
But today's computing has some more challenges for us: concurrency (how to increase the performance of a program through parallelism) and, when it comes to 3d graphics, raytracing! Indicentally, raytracing is a computational problem that is naturally parallelizable.
So, what type of computer shall we have that solves the new challenges?
It's simple: a computer with many many cores!
That's right...the era of custom chips has to be ended here. Amiga started it for personal computers, and a new "Amiga" (be it a new console or new type of computer) should end it.
A machine with many cores (let's say, a few thousand cores), will open the door for many things not possible today, including raytracing, better A.I., natural language processing and many other difficult to solve things.
I just wish there are some new RJ Micals out there that are thinking of how to bring concurrency to the masses...
You may be joking, but it's true...google is your friend.
Indeed. And there is a scene, I think in Next Generation, or in DS9, in which Miles O'Brian rearranges some blocks on a screen using both hands in order to make some adjustments to the engine.
Where does the energy go?
Don't fool yourself. Science did not come from monks in monasteries. Science started in ancient Greece, around 500 BC, where there was no strong religion and people were liberal. This allowed people like Aristotelis to start forming questions and searching for rules and models of reality.
Science and religion do not mix together well, because science requires proof, religion does not.
On a side note, the Catholic Church recently recognized Scopjia as Macedonia.
No academic beyond those of this little new country will ever recognize Yugoslavians as the inheritor of Greek culture. But the Catholic Church did it.
You know why? because they are in politics and not in science. They want to have good relationships with the United States of America that did the same thing. In short, they want a piece of power in the New World Order.
Does "a few caveats" include "The Church's stance is that any such gradual appearance must have been guided in some way by God, but the Church has thus far declined to define in what way that may be. Commentators tend to interpret the Church's position in the way most favorable to their own arguments"?
Come on, let's be honest for a while. No Church supports evolution.
The gold chains popes, archbishops and other high ranking church officials wear remind me of gangsta rappers.
Now that I say 'gangsta', I remember that the Vatican sided with the Nazis in WWII...
I was dazzled by the colors, the sounds and the cuteness of that game. I still play it in MAME, but without the arcade console, it's not the same.
GTA SA could have been a hell of a movie; it's practically a movie by itself. So is Half Life 1 and 2. And Zelda games.
It all depends on the game; if the game has a good storyline, it may become a good movie. If it is a repetitive thing like a strategy game or Tetris or Pacman, then it's not easy to do a game on it.
Cutting the price of a product from 300$ to 150$ means that when the price was 300$, profit was over 60% of the price.
It's not fair, and not atypical of CEOs wanting to get ultra rich and exploiting the consumer market with technology.
...a post that proposes to demolish everything organized society stands for would be modded '4, interesting'...
No, because Qt's additions to the language are invisible and harmless (just a few empty preprocessor #defines), and the MOC is invisible as well (it is invoked automatically if Q_OBJECT is added to a file). MFC's macros in message maps are dangerous.
and what will happen if a normal matter object flies into the antimatter cloud? will it explode?
Buddy, only God (or Stroustrup) can write good c++ code. If you have the guts, read this. There are humongous flaws with the language (and I say this with 10 years of c++ experience).
The concept of c++ is good: a language close to the bare metal that has the capability to abstract details so as that it reaches higher level language status. But in practice, it has incredible flaws; the implementation is *bad*. It could have been so much better...
What do they mean?
Do they mean, perhaps, that widgets are now normal objects? no double-creation (first new Object, then object->CreateWindow).
Could they mean that all widgets are destroyed in the same way? no object->DestroyWindow for some widgets, delete object for some other widgets?
How about some serious memory management using shared pointers? no temp CBrush objects etc.
How about layout management? all serious widget toolkits have that. It's 2008, we should not have to position widgets manually.
What about the tab widget? in MFC, the tab widget is not a real widget: you have to manually hide and show controls upon tab click.
What about the model-view-controller pattern? this is 2008, should I still manually copy edited data from widgets to the data model of my application? most other toolkits support the MVC pattern. Dialog Data eXchange is a joke, of course.
How about the issue of message maps? Qt proves you don't need stinkin' message maps, which are hard to maintain, difficult to understand, and dangerous because casting is untyped and done through macros.
How about MIME type support?
These, and a lot more, are the issues that have driven developers away from MFC to Qt or WxWidgets. I have been maintaining a line of products based on MFC for the last 10 years, but this year I've decided I had enough: all the products are to be rewritten with Qt/WxWidgets. I will only approach MFC if it will approach Qt/WxWidgets quality.
Totally agreed! creating a software product is 10% about the programming language and 90% all the rest: understanding the requirements, communicating with the client, knowing how to test things, knowing how to analyze and synthesize problems...most programs can be done in a variety of languages anyway.