Advertisement

Do software engineers really need to know low level stuff anymore?

Started by March 25, 2011 03:11 PM
22 comments, last by Antheus 13 years, 7 months ago
As high level programming languages such as C#, Java... developing, many people claim that they will be alternative to language such as Assembly, C/C++, which gives you access and control to computer hardware, because programmers should focus on creating the program and solve problem, not wasting time dealing with the computer to make it work. With the hardware keeps improving, the performance between C/C++ and Java will not be significant, and big game might be able to be programmed in language such Java.

That's the general idea I briefly summarise after looking at this topic on the internet. Do you think such thing will become real in the near future? Does that means everything we learn about low level stuffs is not practical for the software industry anymore? Does that means, Assembly and C/C++ will become relevant to electrical engineers only, since they would be the only ones who needs to program for their electrical components?

Talking about this make me think about the similar topic: Many people debate that math has gone the way too far from using it to apply in real life. Even though I believe Math has its use and usually it goes beyond the current applicability, and the current advancement of math will be relevant to our daily life in decades or centuries more. What do you think about this? Is math as much as useful it used to be?


Maths is useful if you need it... If you only want to eat/shit/drink/pee/watch TV, you won't need it. If you want to be an engineer for example, you'll probably need it.
Advertisement
These days, doctors can perform heart surgeries and even insert cameras into the body so that they can see what's going on. So do they really need to know about DNA?

It depends on what area of expertise you want to work in.
Should they know low level stuff? Absolutely YES.

Should they bother working in real world application with low level stuff? Hell no. (There are some exceptions, i.e. if you're making an OS)


As high level programming languages such as C#, Java... developing, many people claim that they will be alternative to language such as Assembly, C/C++, which gives you access and control to computer hardware, because programmers should focus on creating the program and solve problem, not wasting time dealing with the computer to make it work. With the hardware keeps improving, the performance between C/C++ and Java will not be significant, and big game might be able to be programmed in language such Java.


Umm, that applies to x86 PCs only. State of the art for a given platform influences a lot too. The newer they are, the more basic they become. Have you seen SPU code for the PS3? Basically assembler with C syntax. It's awful. But amazingly fast.


Talking about this make me think about the similar topic: Many people debate that math has gone the way too far from using it to apply in real life. Even though I believe Math has its use and usually it goes beyond the current applicability, and the current advancement of math will be relevant to our daily life in decades or centuries more. What do you think about this? Is math as much as useful it used to be?

Is that a joke? Have you played a 3D game lately? It's pure math!!! Lot's of it! Matrix multiplication, Matrix determinant, quaternions, vectors, dot product, cross product, fractals, derivatives, integrals. I work with it all the time. 3 weeks ago I calculated the integral of the Gaussian function just to get some weight values for my gaussian blur filter.
Have you ever traveled on a plane? Lot's of math going on.


Do you have any kind of insurance? Lots of statistical analysis makes it profitable.

Do you care about TV ratings? Again, statistics.

Have you take a loan? Again, statistics.

Do you see medium to big sized corporations? Well, they keep their books to date to 1) Because of legal requirements 2) To know their profits, costs, inventory, etc. Basic math is applied there, but it's required. Ever heard of "Economic order quantity" (EOQ)? It's math again.

The list could go on, including medical instruments and political decisions based on macroeconomical analysis (i.e. IS/LM model) from expert advisors.


Math is being applied all the time, you just don't see it. Or they're called "cool gadgets". But it's just applied math. Oh God! I'm writing this post because I'm using a computer, thanks to math again.
Minecraft is an incredibly popular game... written in Java.

It depends. Knowing the hardware can give you an edge, but it is up to you to create something cool with your edge. A company with a better art style, a new gameplay trick can easily beat a company with technical excellence which produces bland games. Look at it bore me 200% faster!


Do software engineers really need to know low level stuff anymore?[/quote]
Certainly not. But you'll be a better all round software engineer if you do know it, and know when to apply it.

For games programmers the utility of such knowledge increases, but you can still write many amazing games without going near the hardware. To compete for the top spot you'll probably need to get close to the hardware, or rather you'll need a team with some member who can get close to the hardware when it matters.


Is math as much as useful it used to be?[/quote]
Maths is almost always applicable. There are few fields of human endeavour where creative use of Math cannot tell you something worth knowing, something that might not be obvious otherwise.

I think if anything Math is more useful now. People use it everyday, hidden behind conveniences such that they don't need to worry about it.
When I started uni in 2001 people were saying "C/C++ is dying and there's no point learning that stuff , with faster machines java will make up the difference". Now I'm in my 8th year of professional game dev work and I can safely say triple A games used pretty much exactly the same amount of c/c++ code as they did when I first started uni. There's definitely been a rise in more casual games made with C# and the like, but best sellers like Sims, Battle Field and Crysis certainly haven't made a leap for the "easier" languages. And as was pointed out consoles mostly can't even run those types of languages.

To me the argument "Java and C# will become more viable as PC's gets faster" is mostly based on the assumption that your trying to do the same amount of work with a faster PC. I'm sure you can now make a game that looks better than Quake3 did in Java on a current machine but do you want to? God no, people want Crysis 2 looking games not Quake3. For that you need to eak out all the speed you can get and for that asm/c/c++are the best ways to achieve that. In 10 years time I expect it'll be much the same. C# and Java will carve out a slightly larger chunk of casual/indie games, however c/c++ will still totally dominate the triple A shelves.

But even if they don't, and everyones moves to C# and flash - knowing c/c++ and some ASM will certainly make you a superior programmer. I even believe its worth learning a bit of lisp and haskel, not because they're useful to day to day activities, but they broaden your skill set and knowledge. So even if you stick to 2D indie casual games build with Flash ... knowing that hardcore stuff definitely gives you an edge.
Advertisement

Should they know low level stuff? Absolutely YES.

Should they bother working in real world application with low level stuff? Hell no. (There are some exceptions, i.e. if you're making an OS)

[quote name='Rickert' timestamp='1301065867' post='4790373']
As high level programming languages such as C#, Java... developing, many people claim that they will be alternative to language such as Assembly, C/C++, which gives you access and control to computer hardware, because programmers should focus on creating the program and solve problem, not wasting time dealing with the computer to make it work. With the hardware keeps improving, the performance between C/C++ and Java will not be significant, and big game might be able to be programmed in language such Java.


Umm, that applies to x86 PCs only. State of the art for a given platform influences a lot too. The newer they are, the more basic they become. Have you seen SPU code for the PS3? Basically assembler with C syntax. It's awful. But amazingly fast.


Talking about this make me think about the similar topic: Many people debate that math has gone the way too far from using it to apply in real life. Even though I believe Math has its use and usually it goes beyond the current applicability, and the current advancement of math will be relevant to our daily life in decades or centuries more. What do you think about this? Is math as much as useful it used to be?

Is that a joke? Have you played a 3D game lately? It's pure math!!! Lot's of it! Matrix multiplication, Matrix determinant, quaternions, vectors, dot product, cross product, fractals, derivatives, integrals. I work with it all the time. 3 weeks ago I calculated the integral of the Gaussian function just to get some weight values for my gaussian blur filter.
Have you ever traveled on a plane? Lot's of math going on.


Do you have any kind of insurance? Lots of statistical analysis makes it profitable.

Do you care about TV ratings? Again, statistics.

Have you take a loan? Again, statistics.

Do you see medium to big sized corporations? Well, they keep their books to date to 1) Because of legal requirements 2) To know their profits, costs, inventory, etc. Basic math is applied there, but it's required. Ever heard of "Economic order quantity" (EOQ)? It's math again.

The list could go on, including medical instruments and political decisions based on macroeconomical analysis (i.e. IS/LM model) from expert advisors.


Math is being applied all the time, you just don't see it. Or they're called "cool gadgets". But it's just applied math. Oh God! I'm writing this post because I'm using a computer, thanks to math again.
[/quote]
Yea I'm conscious of Math applied to various fields, just not as in detail as you did. The math is you mentioned is applied Math and people in different disciplines learn a bit from a very huge set called math, and most of the time people learn to apply it, not to do mathematics like mathematicians (like developing math theory). In the IT industry, Math is good to have, but not all programming jobs require Math.

And, how much learning is enough? If we learn too much low level stuffs, we would eventually become more oriented in electrical engineering or if we learn too much math, we could be learning to become mathematicians, not programmers. I just want to know if the Math stuffs I learned (I took a Math course which covers the material similar to this book (they used different text book): Discrete Mathematics and its application) is actually as useful as our programming skill set. Many math exercises can took most of us hours to do it, and if you're serious with it, you will have less time to study programing. In our gamedev forum, even Math and Physics only have one section for it compares to programming ones.

Right now I have just started reading "The Art of Computer Programming". Math is only covered in about quarter of the book, but the exercise is hard for us non-mathematicians. Even such "elementary" math, did we use it as much in our career? Some people would probably tell me reading the book TACOP is a waste of time and should probably spend time on something else more practical, even though the book is all about programming (a bit more academic compare to book explain similar things). But I think the author put in great time and effort to produce it. He can even write the full set of 5 books, while we - the audience - only have the mission to read it. Why not?
I figure math is not any more or less important than it used to be. It depends on what you working on.

Making a big website with ecommerce would probably only require basic math. Writing a video game requires lots of math - vector math is used constantly, matrix math for in-game stuff, rendering and (a subset of rendering) shader transforms. Math is needed for lighting, LOD, collision detection, phyics...you name it. Games need lots of math.
If you work with image, video or audio compression then math is everything - can't compress a jpeg or an mpeg2 video without the Forier transform, which is hardcore math...

To me the argument "Java and C# will become more viable as PC's gets faster" is mostly based on the assumption that your trying to do the same amount of work with a faster PC.

The larger problem is that with non-C++ languages is that they are not compatible with decades of legacy code, not that they have bad performance.

Of course to get their best performance you still need a good amount of low level knowledge.
This is an interesting topic to read: http://stackoverflow.com/questions/137550/is-programming-a-subset-of-math

This topic is closed to new replies.

Advertisement