Fog Creek Software
Discussion Board




Are my teachers just glorifying assembler?

I'm currently finishing up a CS degree at Northern Illinois University, which emphasizes mainframe programming, and assembler language as the most used language in my course plan.  All of my teachers are always saying things like "if you can learn this language, there is no computer language you cannot learn"  and statements like that.  I know that anyone can learn anything given the time and motivation are there, but do you guys agree with them?  Part of me is optimistic and hoping what they say is true, but the other half of me thinks these guys are full of shit....Anyone here have any input on this one?

grover
Saturday, June 21, 2003

I would say they are sort of full of shit, but it's worth learning.  Learning assembly language will not help you learn other languages better.  Learning a language like C or Lisp would, because many other languages are based on the ideas from those languages.

I think it's worth learning, but I wouldn't say it's the "foundation of programming", even that at first may seem to be obvious.  It teaches you a limited skill, basically how to make a subroutine fast.  This doesn't teach you how to do large scale design, how to design correctness and efficiency into your programs, or deal with real-world software development.  There are companies which still use assembly language, but it's declining even in the embedded software market.

Besides, every CPU has its own quirks.  Until you have something real to build, I wouldn't say it's of much use to learn the ins and outs of one instruction set.  Definitely it is important to know the concept of assembly language and what your code gets compiled down to, roughly, but it takes time to master any individual instruction set.  There are many other things that I think are more worthy of the time.

Andy
Saturday, June 21, 2003

Assembly language will not be all that usefull to you in the world of business programming.  If you choose a game or embedded systems programming career then it will definitely help, but is still not at the top of list.

"I know assembly language.", doesn't carry any weight when the company is looking for a C/C++, VB, .NET programmer.  Chances are that they aren't going to give you time to learn a new language either.  You'd be better off saving assembly language for extra credit.

If you are going the mainframe route then it would make sense to learn things like COBOL, RPG, Java, C++ and C along with JCL and ISAM, VSAM, SAM, KSAM, TSO etc etc...

Use a little common sense and ask yourself, what do I want to do when I get out of school and what classes will help me to achieve that goal. 

Take everything your teachers and your peers throw at you, even what I'm telling you here, with a grain of salt.  Think for yourself first.  This is what (the best) employers want.  People that think. At least that's who I'd want to work for.

Dave B.
Saturday, June 21, 2003

>> All of my teachers are always saying things like "if you can learn this language, there is no computer language you cannot learn"  and statements like that.

Uhhhh... in some respects, yes.

Skill at developing correctly functioning assembler demonstrates your ability to use VERY low level operations to achieve a desired result. It's probably almost the most challenging (hardest) tool you could use to achieve a result. So, yes, in theory, if you can use assembler, you can probably mastet anything else in the computer world.


However, grokking assembler is next to useless when you're trying to master the higher level concepts inherent in applied object oriented programming, database design, system design, etc.


Assembler skills do help in gaining insight into the behavior of software at the bare metal level. From time to time it is helpful to have that degree of insight when you're debugging C or C++. But it's not a must have by any means.

Bored Bystander
Saturday, June 21, 2003

>>>"I know assembly language.", doesn't carry any weight when the company is looking for a C/C++, VB, .NET programmer. 

Au contraire, assembly language is still a positive from my perspective.  Someone who knows assembler is more likely to be the type who understands lower layers in the abstraction pile.  That's a Good Thing (tm).

Eric W. Sink
Saturday, June 21, 2003

The statement, "If you can master X then you will be able master Y", is a generic statement and implies that knowing the abstraction/theory/process beneath the one you are currently learning will help you to learn the ones above it faster.  The problem with this statement in the real world is that it takes two separate time frames to learn two separate abstractions/theories/processes, which are really different paths in and of themselves.

Dave B.
Saturday, June 21, 2003

>> "Au contraire, assembly language is still a positive from my perspective.  Someone who knows assembler is more likely to be the type who understands lower layers in the abstraction pile."

That's true Eric, but if they don't understand or know the higher level abstraction to begin with it does them no good.

Dave B.
Saturday, June 21, 2003

I should say the higher level abstraction you are looking to hire for (.NET) etc.

Dave B.
Saturday, June 21, 2003

I think their comment has some merit.  I wouldn't think of it as a useful marketable skill, but more as a means of giving you a deeper understanding of how things work, which will stand you in good stead with other languages.

kaching
Saturday, June 21, 2003

For example, If I know C++ and 8086 assembly, that's good, but If I just know 8086 assembly and don't know C++ and you want a C++ programmer, which would you hire?

Dave B.
Saturday, June 21, 2003

In other words you can change my, "I know assembly language." to "I only know assembly language."

Dave B.
Saturday, June 21, 2003

Anyone want to chime in on a professionalism aspect?

As in, being a professional implies that you understand the underlying technology to some extent, so if you don't you're an unprofessional hack?

Nose Tweaker
Saturday, June 21, 2003

Can you be a professional driver without knowing how to change the oil in your car?

www.MarkTAW.com
Saturday, June 21, 2003

Understanding an assembly language means having some understanding of how computers work. Otherwise, I don't see how you could have any idea of what goes on.
Becoming an expert in one of them would probably take a long time and would not help in finding work. But I think curiousity alone would make every programmer want to know something about it.

The Real PC
Saturday, June 21, 2003

I think it's necessary to learn assembly language for at least one processor -- not because you will ever need to know how to program straight assembly at any time during your professional life -- but simply because in knowing it, you become a better, more knowledgable programmer.  Should you ever need to debug or optimize a program at the lowest level, knowing the basic theory will do a world of good.

Alyosha`
Saturday, June 21, 2003

Of those who are advocating knowledge of Assembler, how many understand circuit design, electronics, and the physics of P-N junctions?

After all, let's get to the REAL basics of how computers work.

I know silicon design, I know electronics, I know Assembler, and I know Pascal. And I think the last on the list has contributed the most towards my abilities as a programmer.

And I personally believe the Assembler advocates are engaging in "*I* know [insert arcane art], and if you don't know [arcane art] then you're not as good a programmer as me"

I still wanna learn C++, tho. Someday. :-)

Philo

Philo
Saturday, June 21, 2003

I donno, Philo ... I'd say I've got quite a bit of knowledge in each of those, and yet ... the only one that really ever aided my knowledge of high-level programming was ... low-level programming.

I'm not trying to be smarter-than-thou here ... I'm just arguing on the side that learning assembler isn't useless and isn't a waste of time and I recommend learning it to anyone who's interested in bettering their programming skills ...

Alyosha`
Saturday, June 21, 2003

[how many understand circuit design, electronics, and the physics of P-N junctions?]

I think programmers should have at least some vague idea about those things. Just like a psychologist should know something about neuroscience.
And if you have absolutely no interest in what happens inside the computer, you probably are working for no other reason than money.

The Real PC
Saturday, June 21, 2003

> Of those who are advocating knowledge of Assembler, how
> many understand circuit design, electronics, and the physics
> of P-N junctions?

> After all, let's get to the REAL basics of how computers work.

The electronics or the physical implementation how computers work is mostly irrelevant. Computers could be implemented by some other means, like Babbage's mechanical computer, or optically maybe one day.

Computers are symbolic machines, so knowing how semiconductors work really doesn't help you in the same way that knowing assembler would.

Matthew Lock
Saturday, June 21, 2003

Nah I would say knowing how a P-N junction works is pretty much useless for programming.  It is interesting in its own right, but doesn't have anything to do with programming.

As far as programming goes, the abstraction pretty much stops at the computer architecture.  You can learn about how many cycles particular instructions take, instruction latency, cost of instruction cache and data cache misses, etc., cost of interrupts, cost of paging, etc.  That all can affect your programming, even though most people ignore it (which is of course correct when you're writing for many machines).  But I don't think anyone has ever based a programming decision on the physics of the P-N junction in whatever piece of silicon their working on.  It simply doesn't affect what you're doing.  It's as relevant as what material the PC case is made out of.

Andy
Saturday, June 21, 2003

But how many programming decisions are based on how register shifts or jumps work?

Assuming basic programming knowledge, would one's time be better spent learning Assembler, or learning a new area of higher-level programming? There is so much to know, I'm not sure I could justify that someone spend their time on it.

Things I'd recommend before Assembler (in no particular order):
-Basic CS theory (sorts, pointers, lists, etc)
-SQL
-C and/or C++
-Hardware architecture (the *why* of why memory is faster than a hard drive)
-TCP/IP and other communications protocols
-The "other" OS (Linux if they know Windows, or vice versa)

And if they have higher aspirations:
-Some corporate history of MS, Oracle, Sun
-Economics
-Marketing
-Sales
-Why the movie "Hackers" is so engrossing when it's so atrociously *wrong*

Maybe if someone's tackled all that and has nothing better to do, I'd say "hey, check out assembler", but I simply don't see it as that essential.

HOWEVER, this is from the standpoint of *having* a background in assembler, so maybe I can't dissociate it like I think I can, and it *has* helped me. I don't think so, but I can't be sure.

As usual, solely my opinion. YMMV.

Philo

Philo
Saturday, June 21, 2003

Just make sure when you put it on your resume you know the difference between assembly and assembler. It makes you look silly to use the words incorrectly, and there's a whole lot of that going on in this thread.

Troy King
Saturday, June 21, 2003

I noticed that too.

www.MarkTAW.com
Saturday, June 21, 2003

maybe you teacher's main research interest is in Assemblers ?

Prakash S
Saturday, June 21, 2003

Okay, Troy - I reread the thread and did some wandering around online to see if I was missing something.

What, in your mind, makes
"I have to learn assembly language"
and
"I have to learn Assembler"

so significantly different in casual discussion that it's worth pointing out?

Philo

Philo
Saturday, June 21, 2003

I doubt that using "assembly" and "assembler" interchangeably is going to bother anyone with a life.  Pretty much everyone uses these terms interchangeably (as evidenced by this thread), regardless of whether they know the difference or not (I certainly do), probably as the natural result of assemblers of the past adding their own syntactic constructs to the underlying assembly language.  Only a pedant with the desire to artificially assert their superiority would care to point out the misuse of one or the other. 

SomeBody
Sunday, June 22, 2003

I agree with everyone here. There are reasons to learn it (I sure wish I had) but it isn't going to teach how to write Java.

Everyone says that learning piano makes it easier to learn other instruments. This is true to some extent. But knowing the piano doesn't mean you can play the guitar. And more importantly, it doesn't necessarily make you a better guitar player than someone who never touched a piano.

The same goes for programming. All else being equal, knowing it will make you a better developer. Of course, I've never seen "all else" ever be equal. :-)

Marc
Sunday, June 22, 2003

Somebody,

These are the same people who ran around time square on New Years Eve 1999 shouting that the millennium doesn't *really* start until 2001. :)

Marc
Sunday, June 22, 2003

Assembly tends to be the lowest level in a hierarchy of an abstraction.  While there are lower levels like microcode or even electronics.  I think it is extremely rare you go below assembly in terms of purely programming (as opposed to something which is truly a mix of programming and hardware). Even for programming/hardware combined projects, the hardware is one dimension and the programming is often an entirely orthogonal dimension, as you are far more likely to be interfacing to hardware rather than designing a new CPU or something.

In the other direction in this hierachy of abstract are many branches and layers, such as higher level programming languages, RDBMS, OO, etc. 

These higher levels add fundamentally new concepts and methods, so understanding assembly, does not necessarily help at all in understanding these new concepts.  To make a (not perfect, but reasonable) analogy, imagine a laser printed copy of Shakespeare's works... assembly might be the layout of pixels on the pages, higher concepts such as a literary criticism of the work, can be not be fully explained (or fully understood by any one person even if it could be explained), in terms of the layout of the individual pixels on the pages.

That said, abstractions in the computer world are imperfect and there are leaks where you can see (or helps to know about) the lower levels, and more specifically assembly. Most programmers these days seem to be writing business/database apps, and for this type of application, with the right tools, it is usually totally unnecessary, and possibly unhelpful, to worry about the lower levels.  I think however for certain kinds of programming, even though they are usually/often largely done in higher level languages these days - knowledge of assembly is particularly helpful (either for programming, writing optimal higher level code, or debugging) - this includes but not limited to: hardware interfacing, embedded systems, system programming (writing your own OS etc), some games, some graphics applications,

I am sure there are some people who program 100% assembly, but I think it's far more common to mix C (etc) with assembly.  So I'd say if you want to be employable, learn a higher level language or two, too - especially since different assemblies are often wildly different.

Slight Off-topic:
The best hardware interfacing programmer, I ever knew, by far, was totally into assembler.  When we tried to get him to write C (which he already knew) it was a struggle for him and us, he found it very difficult to adjust to not writing assembly (and in C he preferred _asm blocks, but we didn't let him).

Slightly Off-topic2:
The best low-level graphics programmer, I ever knew, again by far, was totally anti-assembler, and would never touch the stuff. However he came up with C algorithms that blew you away with their speed, unbelievable.  The algorithms that he came up with were often stunning - but what's more even though in C, they usually sort of "naturally" (in quotes because I'm sure it was  a lot of work or brilliant insight) fell into super efficient assembly. I don't think he could actually write assembly - but I think, he probably knew enough assembly, to know what "styles" of C would produce the best code... 

S. Tanna
Sunday, June 22, 2003

Assembler is not hard, but is tedious. We have to distinguish between difficult and tedious.

I can go out can cut my lawn with a pair scissors. That is going to take a long time, and is real hard. However, just like assembler, it is not particularly difficult.

I will say that Assembler does however give one a few insights into computers and how they function. It also forces one to have to write algorithms for almost everything. So, while in a high level language I can easily raise a number to the 3rd power, in assembler I will probably just multiply the result 3 times. And, to double a number, we just use a register shift. So, there is very little abstracting in assembler. This lack of abstracting forces one to have to abstract everything in your mind. Thus, we code in the most basic means possible. In this regards, assembler does have some merit..but not much!

So, assembler does show one can distill an problem down to the most basic algorithm, but we don’t do that anymore!

So, knowing assembler is not the ticket to using higher level languages. This reason is simple:

Assembler is missing a good deal of the modern concepts we use.

Assembler is by nature not object oriented at all. So, coding in assembler does not help your OO skills one bit. (pun intended...or should I say helps one byte?). OO is probably one of the largest skills you don’t learn from assembler at all.

Assembler variables do not have scope. (I have to concur whoever commented that they learned more in Pascal about programming then assembler). So, you learning nothing about scope, and the concept of local variables etc.

Assembler does not have pointers. For sure you have indirect reference via registers (or even memory locations) that direct your reference to other memory locations. However, you don’t learn to deal with using pointer types in real solutions. Using a variable to reference another variable does not give one skills to use pointer types.

Due to no local vars, then assembler is not very recursive, so once again you don’t learn some modern programming techniques.

No if/then/else stuff.

Sure, popping a stack can certainly change where the return statement now will go.  This kind of stack popping stuff is worse then teaching people about goto. And, while we are at this, assembler is totally goto city anyway. Not exactly a great introduction into good coding practices...is it?

You also don’t get exposed to any of the higher level data types like collections etc.

You don’t learn about concepts like library references, late binding, early bind etc. I will not repeat the other comments about stuff like sql etc..

It certainly might be true that if you can learn assembler, you can learn the rest of the stuff...but if you have not learned the rest of the stuff, then it means nothing. Hum, if you learned to ride a bicycle, then I guess you can learn to ride a motor cycle.....

So, while I think there is a bit of merit to learning assembler, it pretty well misses the whole boat on the modem programming concepts that ones needs today to develop software.


Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn

Albert D. Kallal
Sunday, June 22, 2003

You guys are a bunch of lightweights.

I'm personally not going to stop with knowledge of P-N junctions. That level of knowledge is way too trivial and surface level. Almost like only knowing about application software when you're planning to develop bit sliced microcode.

I am planning to enhance my professionalism by smelting sand into silicon ingots, slicing my own wafers, and developing my own photolithography line in our basement so that I can do my own 8" wafers at .25 micron feature density.

Oh, yah, and I will write my own VHDL interpreter and VLSI CAD system. In assembler.
And my line of private brand microprocessors, developed under the same constraints as fine craft beers, will execute the user's choice of CLR or Java bytecode, selected by software flag.

Twerp
Sunday, June 22, 2003

Silicon! Real programmers use valves, and none of those new fangled Von Neumann machines.

Modern day programmers don't know they are born.

Matthew Lock
Sunday, June 22, 2003

>Assuming basic programming knowledge, would one's time be better spent
>learning Assembler, or learning a new area of higher-level programming?
>There is so much to know, I'm not sure I could justify that someone spend their
>time on it.


higher level languages do change a lot. It sometimes looks like a fashion.
In order to understand the pattern of change it is beneficial to understand the lowe levels.

including assembly, if you want to deeper understaning about performace related issues ...

Michael Moser
Sunday, June 22, 2003

an example: if you want to undertstand java, then it is good to know some things about the class file format, and how an interpreter works.

Knowing a bit of assembly it is possible to understand why java will always be slow.

Michael Moser
Sunday, June 22, 2003

> Everyone says that learning piano makes it easier to learn other instruments. This is true to some extent. But knowing the piano doesn't mean you can play the guitar. And more importantly, it doesn't necessarily make you a better guitar player than someone who never touched a piano. <

Absolutely true. Piano is the mother of all instruments, so to speak, but some of the greatest guitar players in the world don't know how to play piano.

Learning Piano is great for things like sight reading, general theory and composition. You can learn Guitar by ear and never learn any of these things and still be great.

Though there will be some situations where sight reading and composition are important and you won't do so well. That's not to say you can't learn them on guitar, and you can probably learn some of the concepts that assembly teaches you while learning a higher level language.

Let me tell you a little secret. Everyone I know that learned assembly enjoyed it.

www.MarkTAW.com
Sunday, June 22, 2003

Anywho it's not like you have a choice of studying at while doing a CS degree.

A spin-off of doing assembly language is that you can program those cool little PIC chips.

Matthew Lock
Sunday, June 22, 2003

Here's one very good reason for being able to read assembly -- debugging optimized code.  If you program in a compiled language, there will come a time when your app works in a debug built, but fails when optimized.  When that happens, being able to understand the compiler's mapping of your code to assembly and being able to step through the assembly code will help you tremendously, as you'll be able to understand the optimization, and perhaps know why your code wasn't valid when optimized, or, less frequently, why the compiler did the wrong thing and generated bad code.

Ben Combee
Sunday, June 22, 2003

There are great guitar players who never learned piano and who can't read music. Analogously, there are probably many great programmers who know nothing about assembly language, or computer hardware, or the history of computers. I think it depends on what kind of person you are.
I feel I have to understand the things I spend time with. In order to be a guitar player I have to know something about the history and theory of music, and of course be able to read it. I am not a great guitar player, but the only reason I'm any good at all is that I have some intellectual understanding of music. That's how my mind works -- intellectual understanding first, everything else after.

For some people, this would probably be a boring waste of time. All educated people used to be taught Latin, Greek and Hebrew and of course this is now considered a waste of time.
But so much of Western civilization is not accessible to us, since most of us don't learn the ancient languages. When I was in high school Latin was available but my parents said don't bother you'll never need it.

But where do you draw the line? There is too much to learn and we are not all aristocrats with leisure time to spend reading ancient texts. (Not that most Americans would spend their leisure time on anything requiring intellectual effort anyway.)

I could not work at computer programming day after day and not be curious about how the darn thing works. I am very glad I learned assembly language. I hardly ever used it for anything, so I can't say I know it well. But I more or less know what goes on in a CPU, how registers work, etc. You don't use this knowledge directly in high level programming, of course, but it does make up part of your mental model.

But I suppose many people don't need a complete mental model of whatever it is they're involved with. Maybe most don't need it.


The Real PC
Sunday, June 22, 2003

Grover, i think it depends on what you want to become in the near future.

I learned Motorola Assembler in College and i actually work doing Web Programming. I don't think i'm using all that knowledge nowadays...

But I think it's really interesting and revealling to get to know the machine in such a low level way.

HTH,
Regards

Martin Cabrera Diaubalick
Sunday, June 22, 2003

There is a difference between working toward a degree in Computer Science and just learning to be a competent programmer. While university CS departments are certainly interested in having their students develop useful and practical job skills, that is not their only focus.

To say that learning assembly language is a waste of time because one will never have to progam in assembly is analogous to saying that learning computer architecture is a waste of time because one will never have the opportunity to architect a microprocessor.

I also agree with the earlier comment that knowing one's way around assembly language is helpful because sometimes a compiler's optimizations do unexpected things to one's code. These unexpected transformations are not necessarily bugs, though. Some people, including me at times, think they're writing in standard C/C++ and they're really not. (Full disclosure: I work for a company that makes compilers.)

Larry Prince
Sunday, June 22, 2003

To those of you saying I'm nitpicking to point out that Assembly and Assembler are not the same thing, then put it on a resume incorrectly. Would you say "I know compiler?" To whoever pointed out most people use them interchangeably, I would point out those are typically the people that don't know assembly.

I’m not one of the people that nitpicked the millennium. I say those zeroes rolling over is a good enough reason to party. But if someone can’t be bothered to get the name of a language correct on a resume, it would make me think either they don’t know the correct name, which means they probably don’t really know the language, or that their attention to detail, even on an important document like a resume, isn’t up to snuff.

It’s about correctness in the correct places. I don’t mind relaxed speech. A resume is the wrong place to blow that off, and to me it’s a flag the person is probably padding, or counting on the interviewer to be intimidated by the presumed difficulty.

Troy King
Sunday, June 22, 2003

assembly language is actually kind of fun. however,  the real question you should be asking is "why am i getting a degree that emphasizes mainframe programming in assembly?"

old School
Sunday, June 22, 2003

No, IMHO "I know Assembler" is analogous to "I know C++" - and I don't recall anyone ever stepping in to say "when you say you know C++ you look like an idiot if you don't specify which flavor"

This is a casual discussion, and it seems that most people (including yourself) understood what was meant, which means the term suffices for communication purposes.

Nitpicking terms foolishly and inconsistently just makes one look like a pedantic prick. IMHO, of course.

Philo

Philo
Sunday, June 22, 2003

Philo -- do you understand that assembler is not a "flavor" of assembly? Saying "I know assembler" is equivalent to "I know compiler," not "I know C++." I could care less what it's called in any conversation, formal or informal, if the meaning is clear. On a resume, though, I think the slight incorrectness could be detrimental, depending on the interviewer.

When listed on a resume, the language should be clear, i.e. 80x86 Assembly, or 68000 Assembly.

Troy King
Sunday, June 22, 2003

"I could care less what it's called in any conversation, formal or informal, if the meaning is clear."

Then why did you bring it up?

Philo

Philo
Sunday, June 22, 2003

On a resume, it should be correct. Since he was using it incorrectly here, when the correct way is less typing, it stood to reason he didn't know they didn't mean the same thing.

Troy King
Sunday, June 22, 2003

This isn't a resume. 

Strangely, I can't recall ever being asked "what's the difference between assembly language and assembler?" in an interview. 

SomeBody
Sunday, June 22, 2003

You must know Assembly (and Microcode concepts) if you are getting a CS degree. What kind of degree would it be if you don’t know how to handle yourself with basic computer architecture, registers and processors? Besides all this is quite useful in the embedded world. To write software using (macro) assembly is kind of a complex task, so in terms of complexity, if you are used to assembly, other higher level languages will seem easy to pick up. Object oriented languages are a separate Babel tower, it is a different paradigm, but it’s no more complex than programming directly on top of the iron or a microkernel.

Pablo
Sunday, June 22, 2003

"You must know Assembly (and Microcode concepts) if you are getting a CS degree."

Why? Other than "it's in the course requirements" I mean.

"What kind of degree would it be if you don’t know how to handle yourself with basic computer architecture, registers and processors?"

A computer science degree where you didn't waste time with things that don't necessarily contribute to productivity as a programmer? One where you had more time to spend on macro level concepts you *will* use?

"Besides all this is quite useful in the embedded world."

And relative motion analysis and missile & gun trajectories are quite useful in the ADA world. Does that make them essential for a CS degree? Not everyone does embedded programming.

"To write software using (macro) assembly is kind of a complex task, so in terms of complexity, if you are used to assembly, other higher level languages will seem easy to pick up."

By that justification, CS majors should be taught quantum mechanics and silicon design. After that *anything* is easy!

"Object oriented languages are a separate Babel tower, it is a different paradigm, but it’s no more complex than programming directly on top of the iron or a microkernel."

Neither is one required for the other.

This still sounds to me suspiciously like "hey, *I* had to suffer through it, so you have to too!" Fundamentals are important, but how far down do you have to go? Transmission line theory in TCP/IP classes?

I believe we all agree there's a point of diminishing returns, and I'm getting the feeling that we can agree that assembly language is on the cusp of that point - are we nitpicking about which side it's on? Or do people feel that it's truly indispensible to a CS education?

Philo

Philo
Monday, June 23, 2003

Absolutely you should learn assembly. Probably something 'nice' like 68k. You may never write it again, but you'll probably need to read something. More importantly, it is the basis on which everything else is built. Similarly, you should probably take at least some discrete electronics courses. And some math courses.

It's the underlying theory which sets apart the 'university degree' people from the 'tech school' people. Self-taught people can of course fit anywhere in the spectrum.

But the key point here is that assembly and discrete electronics are just small building blocks, not the major part of a CS degree, unless you're focusing on hardware or something like it.

mb
Monday, June 23, 2003

Well, I think it all depends on the field of work. For example, I have been involved in various pure assembly projects, like comms base-stations and similar. Applications like this are pervasive and in some way invisible. One interesting aspect is the highly specialized curriculum in some US universities. From my point of view, higher education (ideally) gives you abstract tools, structure and exposure. I believe the model in where you were trained to do a narrow, specific job, ala “trade” was left behind after WW2.

You can be highly productive using the right tools and the right model, and that is desirable and OK, but if a CS degree is going to become a C# or Java workshop, then I think there is something to review.

It is not a mystery in the industry that quantum physicists and electrical/electronic engineers write quite good code.

Pablo
Monday, June 23, 2003

Somebody, and Philo, you're both right, and I'm wrong. You should definitely put "I know Assembler" on your resume. My mistake -- please forgive me.

Troy King
Monday, June 23, 2003

This is "leaky abstractions" all over again, right?
If the abstractions leaks, you better know a bit about the sink beneath.
For most of the types of apps we write, the "logical processor" model of the computer is a pretty good complete abstraction from the electrons and silicon stuff beneath. This is no coincidence. It is what makes computers so special and different from the rest of the "analog" world.

Just me (Sir to you)
Monday, June 23, 2003

I always thought that "assembler" is a program that compiles assembly language.

;)

YF
Monday, June 23, 2003

One assembler course in a CS curriculum, would make
a lot of sense.

But "most used" language in the curriculum?  They
are f*g nuts.

mp
Tuesday, June 24, 2003

Don't you guys think this place more and more like slashdot :(

Assembly is where hardware meet software. I believe a good university should include it in its core cirriculum.

I love the comments from mp and 'old school'!

Rick Tang
Tuesday, June 24, 2003

*  Recent Topics

*  Fog Creek Home