View this PageEdit this PageAttachments to this PageHistory of this PageHomeRecent ChangesSearch the SwikiHelp Guide
Hotspots: Admin Pages | Turn-in Site |
Current Links: Cases Final Project Summer 2007

Fall 2004 Final Exam Review: Language Choices

A. I would choose Java. The reasoning is straight-forward. First, the system must be deployed on any unknown set of various systems, in both Hardware and Operating System. While Squeak might be a good choice here, the system must also scale well. The JIT compiler lets Java perform "as fast as C" which enables it to meet that requirement. Finally, the internet communication libraries for Java are quite prevalent making it the ideal choice using today's technologies. C++ would be a terrible choice due to the system dependence of the code while C and other natively compiled languages would be the worst possible choices for a plethora of reasons.

B. .NET using C++ and C#. Using C++ gives the developers full access to DirectX, and the 3D Hardware Acceleration capabilities therin. Using C#, it would be possible to quickly build the backend of the system. C++ could then be used for the CPU intensive tasks (that are not written any faster in C# anyhow) such as the graphics engine. This would allow for optimal performance while spending as little time as possible doing code monkey work (thanks to the .NET libraries, time is greatly reduced in making back-end/communication modules). Assuming, however, that the programmers can only use a single language, C# would probably be the best choice. C# DirectX accelerated code can run with a fairly negligible performance hit in most cases (since it's GPU bound, not CPU bound). Writing the C++ backbone would waste too much time.

C. Ada, hands down. Ada was designed for building reliable software systems that would be in use for prolonged amounts of time. Time is not an issue, so there's no reason to use Ada .NET. Java MIGHT be considered here, if it weren't for the unreliable VM, however that would be a longshot.

Java WOULD NOT BE USED HERE, the java liscence explicitly forbids using it to control a nuclear reactor.–Summers Pittman–

D. C, Assembly, and (maybe) C++. Kernel in C. Loader, paging, etc and other system specific code in Assembly (though more likely just inlined Assembly in C). C++ for Windowing and Graphics (assuming a Windows NT -esque implementation with Kernel mode Windowing code).

E. Hopefully the self-taught guy knows Smalltalk or Java, as both would be suited for the task. Smalltalk, with .NET, would fit quite nicely, allowing vast amounts of documentation for the .NET libraries (letting Mr. self taught figure things out) and the building of which would take very little time while leaving very expressive code (in the case of Smalltalk). In the case of Java, the use of a small and simple GUI using Swing with a simple backbone would work just as well. It would really depend on what the self-taught guy knows (and he most likely doesn't know Smalltalk or .NET, so it would have to be Java).

F. SQUEAK! The reasoning should be fairly obvious ;)


E. I think VB would be more suitalble. The language is simple to learn, easy to program and create pretty UI. Obviously it is not fast but for small application it is good enough.

these answers look pretty good. but since i got some questions by email about it, here's some more info:

if we ask a question like this, it's most important that you provide a good explanation. things will be flexible, but we won't accept something wild. e.g. we would not accept c for c because its prone to things like seg faulting - doesn't have good error handling OR good testing. ada is probably best, its designed just for this. java or squeak you could make an argument for because vms provide an extra layer of security and both of these also have good testing suites: junit and sunit. you could probably argue java as better than squeak for stability.

so my choices would be:

A: java (or squeak)
B: c (or c++)
C: ada (maybe java, maybe squeak)
D: c
E: vb (maybe also squeak or java) - i'd probably go with vb first, but ifyou gave a good explanation for squeak or java, that would be ok too
F: squeak

if you want more info, check out previous exam reviews for thissame question over many times with lots of good justifications:
http://coweb.cc.gatech.edu/cs2340/1854
http://coweb.cc.gatech.edu/cs2340/2157
http://coweb.cc.gatech.edu/cs2340/2553
http://coweb.cc.gatech.edu/cs2340/2798
http://coweb.cc.gatech.edu/cs2340/3118
http://coweb.cc.gatech.edu/cs2340/3570
-ellie

C. It seems to me like ML could be a good choice here, as well. The language itself is defined such that it is guaranteed to not crash if the program compiles. The compiler performs elaborate exhaustive analysis of the source code, and so if even a remote possibility of a fault occuring exists, the program will not compile (or at least will compile with warnings). That is why things like null pointers, division by zero, etc, simply can never happen in a cleanly compiling ML program. (Which means that producing a cleanly compiling program in the first place is a major pain in the ass, but in this case, that is much better than crashing the program.) About the only fault of ML when it comes to a system like controlling a Nuclear Power plant is that it is not technically object-oriented, which means that designing the backend system might be somewhat tricky. It does provide a module mechanism however, which allows one to cleanly separate logical chunks of functionality into different structures and modules.

Link to this Page