I am in an industry-leading company. There is no reason to use assembly.
Here's what I do for a living: * XML * Database * Multi-threading * Web-site design * Real-time processing * Data mapping * Minor calculations * Web services (straight XML or SOAP) Assembly isn't worth anything in this environment. I also expect that the bulk of developers are very similar. Remember that the bulk of business code used to be written in COBOL? That's the type of software I'm talking about. We happen to be a J2EE shop, so we're working in Java. Our code is deployed to multiple architectures (x86/W2K, x86/Linux, SunOS, AIX).
I would be interested to hear how knowing assembly helps you with advanced algorithms and data structures. It seems to me that a higher-level language will help a lot more! Not to mention good OO design and component-based architectures.
Now, a bit of back-tracking. I'm not saying that assembly is worthless. There will be areas that it makes sense - but I really doubt that the majority of software developers have any use for those skills. Most developers are not: * Writing low-level device drivers (graphic, network, etc) * OS Kernel hackers * Microcoders (I expect this to be the largest congingent in the list)
Face the facts, most developers must concentrate on a business problem at hand and efficiency at the chip level isn't a concern. In general, if you're worried about the computer's efficiency you better check your algorithm and/or design - there is probably one with a better fit!
In 14+ years of professional development, I haven't had to worry about assembly. In 20+ years of software development, the only place I worried about assembly language was on the trusty Apple IIe, my ONE class in assembly (not sure it helped), and now my hobbies with microcontrollers. That's it!
Sticking in the off-topic arena, I'd suggest posting the question on 6502.org. I've never heard of it - although there have been discussions regarding how to do multi-processor 6502's.
I must disagree. Without having any resources, I would suggest the bulk of software developers are building business applications. You know - the non-computer science stuff. Not compilers, not operating systems, not the latest whiz-bang game, etc.
A number of us are true computer science students, and we cut our teeth in assembly, so-to-speak. That being said, I disagree that it is necessary (or even good) to understand the machine at the low-level. I have never done x86 development (instruction set and memory models never made sense to me) and I have never seen the JVM byte-code that I use daily. Nor do I care to.
If you're writing code that is supposed to be optimized for the machine, you've missed close to a decade of compiler development. Dealing with multiple pipelines, delayed branching, etc is best left to a machine. I have more pressing issues to solve - like delivering good software.
The compiler optimizations are pretty astounding today. The JVM run-time optimizations are amazing. My knowledge of hardware architecture is 20+ years old. I'll trust the compiler writers as well as the JVM designers.
The focus for the bulk of us is on maintainable applications that can be delivered "on time, within budget, blah blah blah." Illogical algorithms and/or writing code for the computer and not for the human don't help anybody. In fact, I'd probably just throw it out and start again - it's the fastest and least stressful way to deal with it.
The most important tool to hone and keep tuned is your mind. Those with good logical reasoning and critical thinking are going to do well. They are the ones *I* look up to.
I would suggest teaching unit testing (ie, JUnit) - including what to test and how to test correctly (both difficult topics) - and debugging skills (which I wished I had more of when I started) instead.
If you want to cover hardware, use a book like CODE (by Charles Petzold) to give people an idea of computer structure. Nothing more than that - and even that isn't required.
That's interesting. Linus is "in" because he's our poster-child. Why not someone like Ken Thompson? If he and Dennis Ritchie hadn't done their thing, Linus wouldn't have been inspired to do his.
Linus is at the beginning of his career - he's warming up, in essence. Give him a chance to really get going before voting him in!
We've been using Visual Age for Java (VAJ) at work for nearly two years now -- and it's really awesome. I hate to say it, but I'd prefer to stay within Visual Age instead of the command line. I was/still am a command-line jockey, obviously in Unix, but also in Windows.
From my quick skimming of the responses, people miss an important point: most tools (visual or otherwise) seem to require a compile to identify and fix errors - just general typos. VAJ not only does incremental compile of whatever method you are working on, but it also keeps all classes in synch. Huh? As I code, I'll code a method I know won't be correct. It'll show a funky red 'X' next to the method. As the methods and attributes get finished off, the 'X's go away. Not too much of a big deal, since that is within one.java file. However, that is working across all classes that are loaded in the workspace. Realtime. As you type it. Wanna rename a class? Not a big deal - I save, look at the errors tab, and I can edit right there, change the name. Actually, the tool will do the rename also. But, anytime a class is restructured (renamed, moved, split, combined, removed, etc) you just pop to the errors pane and fix. Not a big deal. You know the impact immediately.
Every piece of code is versioned. Down to the method - really cool if you've messed up a method and need retrieve a prior edition. You can compare different classes, different editions of the same class or method. Locate all references of a method or of a class or all implementations of an interface.
This tool was originally developed for Smalltalk, so it's geared for those of us doing OO. But, it's extremely useful. There are versions for C++, Java, Smalltalk,... even RPG (ug). Unfortunately, the only trial edition available is for Java -- I use it at home I love the tool so much. It's also available for Linux, but unfortunately, that version is behind the Windows tool. The Entry edition (aka trial edition) is not time-bombed or anything - just limited to 750 classes that you add. That's quite a few, to be honest. And, as projects complete, I think you can just drop them off of the workspace and that resets the 750... although the basic edition costs less than $200.
Oh yeah, I'm not doing GUI development. Web development - a lot of it is framework (persistence, control, etc). Other developers are building messaging components (MQSeries). Just as an FYI that I'm not doing GUI drag and drop development. Not at all!
For those of you doing Java - bounce to IBM's site and try it! Give yourself some time to adjust... the big difference is that all code is housed in the repository. It doesn't sit in the filesystem. This is not a bad thing -- it enables all the cool features that make VAJ unique. You can export or import Java code - JAR or file system - when you need the Java source. You can connect to many types of version control software if you want or need to (I use CS-RCS).
The next version of VAJ will be called WebSphere Studio Application Developer. This will work from the filesystem - this will probably be good for the general acceptance of the tool (IBM kept getting clobbered in reviews because of the repository). However, I have a slight fear that this may end up removing a lot of the features that make Visual Age for Java such a strong development tool.
IIRC, Visual Age for Java won the Jolt award in 2000 and WebSphere Studio won it in 2001.
"Mob Software - The Erotic Life of Code"
on
Mob Software
·
· Score: 1
Don't forget the title!
For those at OOPSLA 2000, what were your thougts?
I will say that the presentation was rather interesting.
I am in an industry-leading company. There is no reason to use assembly.
Here's what I do for a living:
* XML
* Database
* Multi-threading
* Web-site design
* Real-time processing
* Data mapping
* Minor calculations
* Web services (straight XML or SOAP)
Assembly isn't worth anything in this environment. I also expect that the bulk of developers are very similar. Remember that the bulk of business code used to be written in COBOL? That's the type of software I'm talking about. We happen to be a J2EE shop, so we're working in Java. Our code is deployed to multiple architectures (x86/W2K, x86/Linux, SunOS, AIX).
I would be interested to hear how knowing assembly helps you with advanced algorithms and data structures. It seems to me that a higher-level language will help a lot more! Not to mention good OO design and component-based architectures.
Now, a bit of back-tracking. I'm not saying that assembly is worthless. There will be areas that it makes sense - but I really doubt that the majority of software developers have any use for those skills. Most developers are not:
* Writing low-level device drivers (graphic, network, etc)
* OS Kernel hackers
* Microcoders (I expect this to be the largest congingent in the list)
Face the facts, most developers must concentrate on a business problem at hand and efficiency at the chip level isn't a concern. In general, if you're worried about the computer's efficiency you better check your algorithm and/or design - there is probably one with a better fit!
In 14+ years of professional development, I haven't had to worry about assembly. In 20+ years of software development, the only place I worried about assembly language was on the trusty Apple IIe, my ONE class in assembly (not sure it helped), and now my hobbies with microcontrollers. That's it!
Sticking in the off-topic arena, I'd suggest posting the question on 6502.org. I've never heard of it - although there have been discussions regarding how to do multi-processor 6502's.
I must disagree. Without having any resources, I would suggest the bulk of software developers are building business applications. You know - the non-computer science stuff. Not compilers, not operating systems, not the latest whiz-bang game, etc.
A number of us are true computer science students, and we cut our teeth in assembly, so-to-speak. That being said, I disagree that it is necessary (or even good) to understand the machine at the low-level. I have never done x86 development (instruction set and memory models never made sense to me) and I have never seen the JVM byte-code that I use daily. Nor do I care to.
If you're writing code that is supposed to be optimized for the machine, you've missed close to a decade of compiler development. Dealing with multiple pipelines, delayed branching, etc is best left to a machine. I have more pressing issues to solve - like delivering good software.
The compiler optimizations are pretty astounding today. The JVM run-time optimizations are amazing. My knowledge of hardware architecture is 20+ years old. I'll trust the compiler writers as well as the JVM designers.
The focus for the bulk of us is on maintainable applications that can be delivered "on time, within budget, blah blah blah." Illogical algorithms and/or writing code for the computer and not for the human don't help anybody. In fact, I'd probably just throw it out and start again - it's the fastest and least stressful way to deal with it.
The most important tool to hone and keep tuned is your mind. Those with good logical reasoning and critical thinking are going to do well. They are the ones *I* look up to.
I would suggest teaching unit testing (ie, JUnit) - including what to test and how to test correctly (both difficult topics) - and debugging skills (which I wished I had more of when I started) instead.
If you want to cover hardware, use a book like CODE (by Charles Petzold) to give people an idea of computer structure. Nothing more than that - and even that isn't required.
Not only do we USE these things, we design and build our own computer with them!!
By the way, there are a number of true wizards at 6502.org. If you need the resource, they are the ones to talk to.
That's interesting. Linus is "in" because he's our poster-child. Why not someone like Ken Thompson? If he and Dennis Ritchie hadn't done their thing, Linus wouldn't have been inspired to do his.
Linus is at the beginning of his career - he's warming up, in essence. Give him a chance to really get going before voting him in!
We've been using Visual Age for Java (VAJ) at work for nearly two years now -- and it's really awesome. I hate to say it, but I'd prefer to stay within Visual Age instead of the command line. I was/still am a command-line jockey, obviously in Unix, but also in Windows.
From my quick skimming of the responses, people miss an important point: most tools (visual or otherwise) seem to require a compile to identify and fix errors - just general typos. VAJ not only does incremental compile of whatever method you are working on, but it also keeps all classes in synch. Huh? As I code, I'll code a method I know won't be correct. It'll show a funky red 'X' next to the method. As the methods and attributes get finished off, the 'X's go away. Not too much of a big deal, since that is within one .java file. However, that is working across all classes that are loaded in the workspace. Realtime. As you type it. Wanna rename a class? Not a big deal - I save, look at the errors tab, and I can edit right there, change the name. Actually, the tool will do the rename also. But, anytime a class is restructured (renamed, moved, split, combined, removed, etc) you just pop to the errors pane and fix. Not a big deal. You know the impact immediately.
Every piece of code is versioned. Down to the method - really cool if you've messed up a method and need retrieve a prior edition. You can compare different classes, different editions of the same class or method. Locate all references of a method or of a class or all implementations of an interface.
This tool was originally developed for Smalltalk, so it's geared for those of us doing OO. But, it's extremely useful. There are versions for C++, Java, Smalltalk, ... even RPG (ug). Unfortunately, the only trial edition available is for Java -- I use it at home I love the tool so much. It's also available for Linux, but unfortunately, that version is behind the Windows tool. The Entry edition (aka trial edition) is not time-bombed or anything - just limited to 750 classes that you add. That's quite a few, to be honest. And, as projects complete, I think you can just drop them off of the workspace and that resets the 750... although the basic edition costs less than $200.
Oh yeah, I'm not doing GUI development. Web development - a lot of it is framework (persistence, control, etc). Other developers are building messaging components (MQSeries). Just as an FYI that I'm not doing GUI drag and drop development. Not at all!
For those of you doing Java - bounce to IBM's site and try it! Give yourself some time to adjust... the big difference is that all code is housed in the repository. It doesn't sit in the filesystem. This is not a bad thing -- it enables all the cool features that make VAJ unique. You can export or import Java code - JAR or file system - when you need the Java source. You can connect to many types of version control software if you want or need to (I use CS-RCS).
The next version of VAJ will be called WebSphere Studio Application Developer. This will work from the filesystem - this will probably be good for the general acceptance of the tool (IBM kept getting clobbered in reviews because of the repository). However, I have a slight fear that this may end up removing a lot of the features that make Visual Age for Java such a strong development tool.
IIRC, Visual Age for Java won the Jolt award in 2000 and WebSphere Studio won it in 2001.
Don't forget the title!
For those at OOPSLA 2000, what were your thougts?
I will say that the presentation was rather interesting.