Beta
×

Welcome to the Slashdot Beta site -- learn more here. Use the link in the footer or click here to return to the Classic version of Slashdot.

Thank you!

Before you choose to head back to the Classic look of the site, we'd appreciate it if you share your thoughts on the Beta; your feedback is what drives our ongoing development.

Beta is different and we value you taking the time to try it out. Please take a look at the changes we've made in Beta and  learn more about it. Thanks for reading, and for making the site better!

Ask Slashdot: "Real" Computer Scientists vs. Modern Curriculum?

timothy posted about 3 months ago | from the onions-in-those-days-were-called-zumboes dept.

Education 637

An anonymous reader writes At work yesterday, I overheard a programmer explaining his perception of the quality of the most recent CS grads. In his opinion, CS students who primarily learn Java are inferior because they don't have to deal with memory management as they would if they used C. As a current CS student who's pursing a degree after 10 years of experience in the IT field, I have two questions for my fellow Slashdoters: "Is this a common concern with new CS grads?" and, if so, "What can I do to supplement my Java-oriented studies?"

Sorry! There are no comments related to the filter you selected.

wow great (-1, Offtopic)

Tyrannicsupremacy (1354431) | about 3 months ago | (#47615661)

I just saved a bumble on carb insurance by winching to geiger.

Re:wow great (1, Offtopic)

Tyrannicsupremacy (1354431) | about 3 months ago | (#47615995)

Wow could you please not downvote me please thanks? That's really rude.

Beards and suspenders. (5, Funny)

Kenja (541830) | about 3 months ago | (#47615667)

Difference is the "real" ones have beards and wear suspenders.

Re:Beards and suspenders. (4, Funny)

ThatsDrDangerToYou (3480047) | about 3 months ago | (#47615729)

Difference is the "real" ones have beards and wear suspenders.

Kids these days with their "showers" and "grooming" and "social media" and whatnot... Where's the *science*?

Re:Beards and suspenders. (5, Interesting)

lgw (121541) | about 3 months ago | (#47615895)

Java schools are a menace, but since it's nearly impossible to find grads with a "real" programming curriculum any more, I think we've just sort of given up and accepted our fate as needing to teach new college hires everything.

If you can code - really write code beyond simple toy assignments - in any language, you're already doing above average. But if you want to be top tier, you really need to understand the crufty details of what compilers do and how they do it. While there are no lack of Java jobs, you're really missing something if you don't have a good mental model of computers at the machine language level, and if you've never done any "bit bashing" (working with unsigned ints as arrays of bits, not as numbers).

My suggestion for getting a rounded education is to go write some C code. Write code to count the '1' bits in an unsigned int -- no googling the answer! -- and then keep brainstorming for ways to optimize that (when you can snatch the bitcount with "n%63", you will be ready to leave the temple). Write code to do other bit-bashing - reverse the bits in a word, find the base-2 log of an int, and so on. Write your own "bignum" implantation from scratch, to have a larger problem to solve with lots of corner cases and ugly cruft.

These are toy problems, and they won't teach you all the stuff you can learn in Java about "software engineering", but they'll cover and important gap. Most importantly of all - debug through all your solutions and get comfortable with debugging. Debug through the generated object code, stepping through one instruction at a time until you understand what's happening. Debug through the object of non-optimized vs highly optimized code.

Don't stop until you're totally comfortable with bit-bashing, with pointers and pointer-array equivalency, and so on. Once you start debugging through C code, especially the object, natural geek curiosity will serve you well to cover the gaps in a Java-only background.

Collig! (0)

For a Free Internet (1594621) | about 3 months ago | (#47615671)

It is for pairing off and mating the bourgeoisie and the up and coming petty bourgeois wannabees. The other college system is for enslaving skilled workers to the bourgeoisie with debt. Collig is a scame.

Real Programmers don't use GC (4, Funny)

ehack (115197) | about 3 months ago | (#47615673)

"Real Programmers don't use GC" is a mantra that is responsible for 90% at least of production bugs, together with "=" being typed instead of "==".

Re:Real Programmers don't use GC (2)

kwiqsilver (585008) | about 3 months ago | (#47615737)

Outlandish, unsupported claims are responsible for 90% at least of the garbage on the internet.
shared_ptr can eliminate virtually all memory leaks while avoiding the two annoyances of GC languages: the GC overhead, and the lack of destructors (the thing that bothers me most about doing Java development).

Re:Real Programmers don't use GC (1)

Noughmad (1044096) | about 3 months ago | (#47615803)

The important word being "can". It only helps if people use it, and in my experience they don't.

Re: Real Programmers don't use GC (3, Funny)

samkass (174571) | about 3 months ago | (#47615881)

Fortunately JavaScript solved that. These days, programmers type == instead of ===! Progress!

Real programmers use assembly (2)

swschrad (312009) | about 3 months ago | (#47616045)

and the Godheads sling opcodes. THIS is memory management, making all of your 1K count.

Why do CS grads become lowly programmers? (4, Insightful)

Ichijo (607641) | about 3 months ago | (#47615689)

Shouldn't they be computer scientists? Software engineering, while related, is not the same thing [stevemcconnell.com] as computer science. Would you ask a scientist to build a bridge, or an engineer?

Re:Why do CS grads become lowly programmers? (4, Insightful)

HornWumpus (783565) | about 3 months ago | (#47615709)

95% of CS grads spend their carrier banging out boring code. Accept it.

Re:Why do CS grads become lowly programmers? (3, Funny)

ThatsDrDangerToYou (3480047) | about 3 months ago | (#47615749)

95% of CS grads spend their carrier banging out boring code. Accept it.

"no carrier"

Re:Why do CS grads become lowly programmers? (4, Funny)

idontgno (624372) | about 3 months ago | (#47615921)

I'll betcha a current CS grad wrote the auto-correct logic that did that.

Case... fucking...closed.

Re:Why do CS grads become lowly programmers? (0)

Anonymous Coward | about 3 months ago | (#47615779)

95% of CS grads spend their careers banging out intersting code that is only interesting because it is unnecessarily complicated (and buggy) for the task at hand.

Re:Why do CS grads become lowly programmers? (1)

shobadobs (264600) | about 3 months ago | (#47615719)

Software engineering programs suck, that's why. Nobody needs to spend time in college learning stuff they'd end up learning in industry anyway.

Re:Why do CS grads become lowly programmers? (3, Funny)

Joe Gillian (3683399) | about 3 months ago | (#47615785)

I definitely would not ask a scientist to build an engineer, especially a software engineer. That's how you get Frankenstein's monster.

Re:Why do CS grads become lowly programmers? (3, Insightful)

angel'o'sphere (80593) | about 3 months ago | (#47615801)

So why do you study computer science to become an software engineer then?
Or why do you study other sciences to become a relevant engineer (mechanics, electric etc.)?

Re:Why do CS grads become lowly programmers? (0)

Anonymous Coward | about 3 months ago | (#47615941)

The primary reason a software engineer studies CS is because that is what employers expect. Being a good software developer doesn't require you to understand advanced Computer Science concepts at all. Programming languages and techniques are tools in the pursuit of the greater science. This is like saying a doctor isn't well schooled in medicine because she is using advanced scalpels. It's a bit ridiculous.

Re:Why do CS grads become lowly programmers? (1)

TsuruchiBrian (2731979) | about 3 months ago | (#47615969)

For the same reason that engineers still learn science. If engineering is applied science, then you need to have a background in science in order to properly apply it.

Re:Why do CS grads become lowly programmers? (3, Insightful)

UnknownSoldier (67820) | about 3 months ago | (#47615893)

Programming = Application = FUN.
Computer Scientist = Research = Theory = mostly boring.

Lowly programmer? Now piss off, I have my degree.

Not this again. (5, Insightful)

HornWumpus (783565) | about 3 months ago | (#47615693)

Yes Java monkeys don't understand memory management.

But a CS student shouldn't be a simple Java monkey. C isn't good enough. They should all have at least a semester of Assembler.

There have always been a subset of CS students that didn't get anywhere close to the metal. They suck.

Re:Not this again. (5, Insightful)

Anonymous Coward | about 3 months ago | (#47615755)

This. Memory management isn't difficult in the brain power sense, it's difficult in the pain in the ass sense. We've decided years ago that there are much better things to be thinking about than releasing objects and reference counting and that sort of garbage, especially since it can be automated.

What you are reading is people who are trying to elevate themselves by referencing a new obscure technique. Hey, I know AT commands for a modem. Does anyone give a shit? I certainly hope not.

If the only thing that differentiates a great CS grad from a crappy one is memory management, that's a pretty shallow argument. Google it, read it, manage memory for a few hours and poof you're an expert.

Re:Not this again. (1)

quetwo (1203948) | about 3 months ago | (#47615909)

The trick is knowing what is happening under the hood -- whether you do it on a day-to-day basis or not. It's good to know why you wouldn't want to send a LONG into a function that requires a FLOAT. It's also good to know what the difference is between a MAP and having two Arrays or linked-lists. These things don't require doing memory management by hand, but being able to demonstrate what and why is the difference between a code monkey and somebody who is architecting code. Because a lot of the higher-level languages will obscure this from you, you can get along without ever learning them -- but you can get yourself into a hole quickly.

Re:Not this again. (4, Interesting)

Matheus (586080) | about 3 months ago | (#47615933)

Ya the OP is asking the wrong question really... Honestly a school that is cranking out pure Java monkeys is called a "Tech School". If your Bachelors isn't providing you with the breadth of experience/knowledge you need then sorry you picked the wrong school.

I was in school during the transition.. my Intro to Programming was in "C++" (in quotes because it was taught by a C dev who barely knew any of the ++ besides basic OOP). A had a couple other classes using C++ but that quickly transitioned to Java mid-sophomore year. Of course I also learned MAL/SAL, Various hardware languages, Lisp and a number of "scripting" languages.

The important part of all of that is that the language in question was the "tool" we used to learn what the class was teaching. The class was not teaching us the language (although plenty of off-hours support was given if you didn't know it going in). Honestly I learned WAY more about memory management in my Operating Systems class which used Java as its reference language than I ever did in the handful of C++ classes I had.

Side Comment: As someone who's spent a majority of his professional career writing Java code, a Java programmer who doesn't think about memory management is a terrible Java dev (and yeah I know there are a LOT of terrible Java devs out there). I have had not a single project where close attention to Objects' memory utilization and freeing wasn't required. The terms used are different as are the calls you make but just about any software that just "leaves it up to the GC" will have issues.

Re:Not this again. (1)

93 Escort Wagon (326346) | about 3 months ago | (#47616097)

What you are reading is people who are trying to elevate themselves by referencing a new obscure technique. Hey, I know AT commands for a modem. Does anyone give a shit? I certainly hope not.

Did you really mean to type "new"?

Re:Not this again. (2)

SirGeek (120712) | about 3 months ago | (#47615761)

I've been out olf college for *mumbles 26 years* - I had Pascal, C, 2 Different Assembly Languages (X86 And VAX). Not to mention classes in Data Structures and Compiler Design. I've also done Embedded Systems Programming (Aircraft Engine Controls and Fire Alarms as a couple of examples). Too many people get the attitude - 'Oh. My program needs more memory, Just add some to the server.' which is a bad. Why write optimum code ?

I'd LOVE to see the Code Monkeys code working in some of the systems that I had to work with - Entire Program space was 32K (thats right - 32,768 BYTES) of memory - and NO OS. I've also worked with custom cpus that had 2 registers and no stack

Re:Not this again. (2, Insightful)

Anonymous Coward | about 3 months ago | (#47615817)

>Too many people get the attitude - 'Oh. My program needs more memory, Just add some to the server.' which is a bad. Why write optimum code ?

Optimized for memory management? Why not optimize for speed? Caching and memory access beats disk access every day of the week and two times on Sunday.

"This app is slow."

"But it only requires 512k of your 64 gigs of memory!"

"This app is slow."

>I'd LOVE to see the Code Monkeys code working in some of the systems that I had to work with - Entire Program space was 32K (thats right - 32,768 BYTES) of memory - and NO OS. I've also worked with custom cpus that had 2 registers and no stack

That mattered briefly during the mobile revolution but was obsoleted after the second or third release. It's a neat skill, but like yodeling, doesn't really matter anymore.

Re:Not this again. (0)

Anonymous Coward | about 3 months ago | (#47615945)

Speed is bullshit. Don't optimize for speed, optimize for efficiency. Which means try to keep in mind that there are multiple things that can slow the performance down, but trying to focus on the symptoms is unlikely to be an effective method of getting at it.

If you're making wise use of RAM, HDD access and computational power, you'll have a program that's reasonably speedy. But, if you're optimizing for speed, there's no particular guarantee that you won't be causing problems in one or more of those areas.

As far as RAM goes, I don't have 16gb of RAM so that you can waste it all on bullshit. I have 16gb of RAM because I like to run VMs and occasionally games that require more RAM and preferably while doing other things in the backgroun. Programs don't need to keep to the absolute minimum amount of RAM anymore, but that's not an excuse to waste huge amounts of RAM on bullshit.

Re:Not this again. (0)

Anonymous Coward | about 3 months ago | (#47616057)

Sorry, caching is not bullshit.

Re:Not this again. (1)

Anonymous Coward | about 3 months ago | (#47616083)

While I don't support either extreme, saying these skills are irrelevant is pure ignorance. Embedded - SMALL - microprocessor systems outnumber desktops, servers, Google and Amazons could by hundreds if not thousands to one. NONE of these are programmed in java or C# or PHP they are programmed in native assembler or C or something related. Your car (even a cheap bottom of the line 2 door) has upwards of 32 microprocessors if it was made in the last decade. Most of these are 4 or 8 bit micros with a couple of "monster" 32 bit controllers for things like engine management. Cycle counting still matters in systems like these and there is just no way to do it in a system programmed whit modern convenience features like GC.
That said however, this is a small niche in the software/hardware engineering world ,often filled by hardware people. Most CS graduates (or software engineers, or computer engineers or whatever your university calls it) will work in some variation of Enterprise software. Then, indeed Java or C# or any of 3 or 4 modern scripting languages like PHP or Pearl rule the day. In that environment no one cares whether you can cycle count (it would be futile to try in a modern multi-core hyper-threaded system anyway) or what you did on VAX or IBM systems 25 years ago. While data structures and algorithms are still very important, so are modern higher level constructs such as patterns and yes even exposure to formal methodology like Agile. Schools teach these things because this is what most of industry wants and needs. While I too am old enough to have learned C and PASCAL in school and taken compiler writing and all the rest, the world has changed, and us old timers need to adapt, find a niche where we can still be relevant without adapting (see embedded controls) or die (be promoted to management). Computer Science and software engineering are indeed different things and I am often irritated that schools teaching software engineering refer to their programs as "computer science" but that is a completely different question.
In reply to the original poet - it is good to know how things work under the covers - it makes you better able to take maximum advantage of whatever language/framework/OS you are using, however it is NOT vital, and certainly not a requirement for 90+% of the available jobs. I encourage anyone whit interest to learn whatever they can in this area, but that is a personal choice and we should not belittle those who simply don't care and didn't have to learn these things because 25 years ago it's all we had.

Re:Not this again. (4, Interesting)

gstoddart (321705) | about 3 months ago | (#47615835)

I've also worked with custom cpus that had 2 registers and no stack

Luxury, we used to dream of two registers ... ;-)

But, seriously, having been through assembly, Pascal, C, Data Structures, Compiler Design, telecomms, and some bare-metal hardware programming ... I do lament that for a lot of people it's just "oh, well, we're gonna need an infinite supply of memory" instead of actually writing compact code which doesn't just keep getting bigger.

I once had a former co-worker who followed the mantra that optimization was a pointless exercise. He tended to include every library known to man, not give a damn about the efficiency of the library, and ended up with code which was slow but couldn't be optimized because he had no control over anything.

I never understood how someone could continue to claim that optimization was pointless, and then write slow code. You'd think some empirical evidence to the contrary would have helped sway him.

Re:Not this again. (1)

HornWumpus (783565) | about 3 months ago | (#47615889)

99% of code is better slow and simple. Because it simply doesn't matter.

That doesn't excuse slow and unnecessarily complicated. I've seen queries with 8 outer joins to various company IDs.

Re:Not this again. (4, Insightful)

gstoddart (321705) | about 3 months ago | (#47615989)

99% of code is better slow and simple. Because it simply doesn't matter.

Right up until it does.

And the people who think optimization is pointless because it doesn't matter are generally clueless about how to fix it when it does fall apart, because they're so reliant on their frameworks and libraries they haven't the slightest idea of where to begin.

I can't even tell you how many times I've seen code which was written to look pretty, but which in practice was bordering on unworkable.

I've seen more than a few OO developers who write what looks like clean, elegant code, but which actually has a huge amount more overhead and convolution which is masked by the library -- so much so that they're calling an n^2 algorithm n^2 times, instead of just writing something which didn't suck from the beginning.

Because, in their mind, the magic library and compiler would make it super efficient, when it did anything but.

Re:Not this again. (0)

Anonymous Coward | about 3 months ago | (#47616037)

I work for a company that has a big, internally developed monolithic central application which I have to support. Stepping back with a cynical and criticial eye the application should be able to run smoothly on IIS or NES install on a mid-range server from the early 2000s backed with an Oracle DB. Instead, it is a monster of a Java application (I don't blame Java specifically FWIW) with a huge team of developers and a monstrous, unweildy and huge DB. It's still sluggish so we're throwing a caching layer between the DB and application, adding more complexity and points of failure. I wish someone would just take a step back and ask "What the F are we doing here?". Unfortunately the leadership of the dev team seems to be dysfunctional and won't take advice. I wouldn't advise PHP for an app like this but the way things are, I think we'd actually be better off.

Re:Not this again. (5, Insightful)

roman_mir (125474) | about 3 months ago | (#47615823)

Nonsense, real CS people should have a year studying butterflies.

As to Java or Assembler, neither are computer science. CS is about algorithms, run time, data models, paradigms, approaches. BTW, without understanding memory management, you will have memory management problems regardless of the language used. It is just the degree of how bad the problems are, whether they cause program to terminate only or also may become attack vectors.

Re:Not this again. (2)

HornWumpus (783565) | about 3 months ago | (#47615927)

All the things you list are only approachable after the student has a couple of actual languages under their belt.

Undergraduate CS is about preparing students to take on those subjects, or get a job.

Re:Not this again. (1)

Richy_T (111409) | about 3 months ago | (#47616063)

A little generic assembler is probably good to know for a CS as it's getting down close to the metal. I wouldn't say more than a passing familiarity with it was needed in most cases though.

Re:Not this again. (1)

31415926535897 (702314) | about 3 months ago | (#47615925)

I would disagree that C isn't good enough, but I do agree that at least a semester of asm would be helpful.

Watch out for mips though--that's what they used at my uni, and while it taught the principles that are found in all architectures, I found it discouraging that our only interaction wound up being through a vm. There was an excellent electrical and computer engineering class that used x86 assembly, and that's the one I'd recommend any CS student take (assuming your school offers something like that).

Finally, I think there is a skill for "memory management" that must be learned in Java (not letting the garbage collector ruin your day), but I'm not sure it's something you can learn through class when you're happy enough to get the proper incantations of javac and java right.

Re:Not this again. (1)

bangular (736791) | about 3 months ago | (#47615961)

I had CS professors that really didn't know how to program (just basic pseudocode). Those professors would argue that the only thing important was the mathematics and logic. Everyone is always going to claim they know what's best for CS. It's usually what was important to their professors during the time they graduated.

FWIW, I went to an ABET accredited school and an assembler course was still required.

Re:Not this again. (0)

Anonymous Coward | about 3 months ago | (#47616033)

Just because you don't learn the low level doesn't mean you are not capable. Yes, the low level is interesting and useful to know to build on, but the reality is that computer science is expanding and it's simply not going to be possible to know the whole way down. Just as you can be a taxi driver without knowing the details of how your car works, you write high-level code without knowing the details of assembly.

But let me elaborate (2)

ZahrGnosis (66741) | about 3 months ago | (#47616053)

I agree with the parent (@HornWumpus -- good name), but I'd like to elaborate.

First, I agree that "There have always been a subset of CS students that didn't get anywhere close to the metal. They suck.", and I agree that "C isn't good enough." No language is good enough by itself. If you haven't played with Functional, Procedural, Object-Oriented, and hardware-level (Assembler) languages by the time you've graduated, you've missed something.

You can figure it out no matter what they teach you, you just have to be inquisitive and ask good questions. You should take compiler, operating systems, and a numeric computing class which will each teach you about overflow and precision and memory allocation, in different ways, regardless of programming language used. You should have a basic understanding of how to do everything from scratch, with bare hardware, short of soldering the chip to a board (unless that's your thing, then go learn that too).

But then you should also learn that many "higher" languages make this easier... they have garbage collection built-in and you should learn why and when that's a good thing and why and when it's a bad thing. Java is good for some things, bad for others. If you go through a CS degree and all that you come out with is knowing one language, get your money back. Ask "why" early and often.

You should learn concepts and hands-on. You should learn the ideas so that, when a new language comes up next year, you can understand the literature about the pros and cons. But you should also be able to sit down with a couple of languages and pound out some simple algorithms and I/O with no references.

I liked my CS degree, but there were things missing. I had to learn network programming (TCP/IP, etc.) on my own. We didn't do embedded systems, so I didn't have much experience with small hardware and the nuances that come with them. But the advice I'd give is to avoid too many classes that are "just" programming, and focus on the fundamentals. Use as many languages as possible. Take Artificial Intelligence, Compiler design, Operating systems, data structures, numerical computing. Take a comparative languages class if one is offered. Take a database class. And take these all realizing that they're teaching you exactly the same thing -- how to solve problems using computers.

It's all ones and zeroes in the end. Once you've mastered pushing them around for one thing, you should be able to push them around for another, it just takes practice. Practice as many things as possible.

Re:Not this again. (0)

Anonymous Coward | about 3 months ago | (#47616089)

Love assembler. No wtf's (minus errata of course)

memory management (2)

schlachter (862210) | about 3 months ago | (#47615697)

There are different tracts in CS degrees, with some focusing on C++ and low level coding (embedded systems, OS, robotics, etc.) and others focusing on Java and other more abstract languages (automated reasoning, AI, NLP, web programming)...so I think it really depends on what the student choose to focus on.

Re:memory management (4, Insightful)

ZeroPly (881915) | about 3 months ago | (#47615967)

CS should be different from programming. Back in the day when I did my undergrad, the programming was something you mostly figured out on your own time. When I took Operating Systems 1, we were studying memory management, Belady's anomaly, semaphores, etc, but we were also expected to become proficient in Unix scripting by the end of the semester. The exchange on the first day of class went something like this:

Prof: Homework for this week is to write a tcsh script that will set your environment variables when you log in based on a menu.
Student: What's tcsh?
Prof: It's one of the shells in Unix, you can write scripts using it.
Student: How do I learn to use it?
Prof: The manual command is "man" in Unix.
Student: How do I use the "man" command?
Prof: Use "man man" to find out how to use "man".
(whole class looks bewildered for about 10 seconds - not sure if he's joking or if Unix is really that insane)
Prof writes across the top of the board: THIS IS A UNIVERSITY, NOT A TRADE SCHOOL. RTFM.

If you can't figure out how to learn the mechanics of Java, Python, whatnot on your own time, you really don't have the brain needed to do computer science. The problem is that everyone and their plumber is getting a 4 year degree these days, so it's become the equivalent of a high school diploma in the 80's.

Not so important anymore (1)

Anonymous Coward | about 3 months ago | (#47615699)

Don't worry about it too much. Memory management is not that important for most people.

What you need to know is the process behind the memory management. You should be able to point to any line of code and understand exactly the process you are asking the computer to perform to execute it -- no matter how high level your language is. If you can do that, you'll be alright.

Re:Not so important anymore (1)

Richy_T (111409) | about 3 months ago | (#47616101)

Memory management is not that important for most people.

Exactly. When you become a dev, you simply call up a sysadmin on the phone, or preferably his boss or, better, the highest level exec you are on first-name terms with and complain that your app isn't being given enough memory.

Yes (3, Insightful)

kwiqsilver (585008) | about 3 months ago | (#47615701)

1. Yes.
2. Learn some lower level languages like assembler, C, or C++. Even if you don't use the techniques, understanding them will give you a better understanding of what's going on in your Java programs.

Re:Yes (1)

angel'o'sphere (80593) | about 3 months ago | (#47615983)

Certainly not.
Give one single example of ten lines of C or Assembler that have any relation to a Java Program.
Your claim is simply monsense.

More important things than memory management exist (0)

Anonymous Coward | about 3 months ago | (#47615707)

Although I would feel ashamed if I didn't know how to manually manage memory (or how computers encode things, for another shocking example of something that not all CS graduates know), but computer science is not a programming course. The hard problems are not solved by knowing a particular language, be it low or high level. You can manage memory flawlessly and "crash" with an out of memory error if you don't develop your algorithms with memory complexity in mind.

Re:More important things than memory management ex (1)

HornWumpus (783565) | about 3 months ago | (#47615949)

CS is not a programming course. But a programming course or three is part of CS.

Re:More important things than memory management ex (0)

Anonymous Coward | about 3 months ago | (#47616039)

Yes, and nowadays that is a Java course, which doesn't teach you manual memory management (but if it doesn't totally suck explains how garbage collection works). The point is that CS isn't vocational training for code monkeys. The important problems need to be solved at a higher level.

Real computer science (0)

Anonymous Coward | about 3 months ago | (#47615715)

Take heart: real computer science has nothing whatsoever to do with programming in any language.

The old you kids don't know jack rant (0)

Anonymous Coward | about 3 months ago | (#47615725)

It's the old and recursive old-young thing. Really, if you learned programming with C, you never had to take care of finding a room and high voltage for the computer, or repairing the paper slip feeder.

Now that computer pervade everything, I guess the remaining constant in CS is "understand problems in a way that lets you find a technical solution".

Cheers

ASM (5, Insightful)

just_another_sean (919159) | about 3 months ago | (#47615727)

Learn some assembly. Not because you will use it every day (or ever) but because it helps remind you that all the code we typically write is just layers of abstraction on top of a machine (which even assembly is, albeit very low level abstractions).

An old boss from years ago (a mentor for me really) watched me troubleshooting a network issue in an application. He said to me "you seem to be having trouble spotting the problem. Have you tried going lower down the stack?". So I tried ping by name, nothing, ping by number, nothing, etc. Finally after reviewing ip configurations, arp and routing tables and probably a few other things I forget I figured out I had a bad cable.

That taught me a lesson that I've applied to many areas of computers, including programming, over the years. If something seems like it should work but does not maybe something underneath it is the problem. If you want to be able to debug code at the library level or interfaces to lower level languages it helps to understand things like memory layout, registers, the call stack, etc.

My $.02.

Re:ASM (0)

Anonymous Coward | about 3 months ago | (#47615767)

Damn right. I haven't touched assembly once in my professional career, but using assembly as a hobby and in university has been an invaluable experience. It teaches you to think the way your computer works and what compilers generate. Even if all you use are virtual-machine languages, your knowledge of assembly will put you far far ahead.

Then learn some type theory and functional programming concepts to complete the circle :)

Re:ASM (2)

Connie_Lingus (317691) | about 3 months ago | (#47615971)

lol...and even the machine is abstracted away with VMs and such.

turtles all the way down.

Re:ASM (0)

Anonymous Coward | about 3 months ago | (#47616087)

understanding ASM can even sometimes actually turn out to help. I work on a c++ program with wrappers in languages like java. Customer reports a crash that's (of course) critical and threatening a big sale. Application was crashing after a few weeks of running. Obviously, if it takes weeks to crash in release, debug build is out of the question. Logging could help, but with weeks between crashes there isn't time to zero in on the issue that way. But java includes the bytecodes being run during a crash. Carefully translated that to ASM, read out what was going on, got to the bottom of the problem (turned out to be a pointer getting truncated to 32 bits while being passed around the jni layer, only crashing once a 64 bit address was needed in a particular section).

It wasn't rocket science, the resources for translating byte code to asm and what the commands mean are all online. But I did need to have know what byte codes were, that I could turn them into ASM and read it as logic, etc.

That guy's a tool (1)

Anonymous Coward | about 3 months ago | (#47615735)

> CS students who primarily learn Java are inferior because they don't have to deal with memory management as they would if they used C

This is not "real" computer science. This is an implementation detail.

"Real" computer science is algorithms and data structures. Systems, networks, and software engineering. Languages and computational theory. AI and machine learning. Graphics and rendering.

Memory management is accidental complexity. We now have tools that manage it for us so that we can concentrate on the heart of the matter. He might as well be saying that CS grads aren't "real" because they use a compiler rather than writing machine code.

Young whippersnappers (1)

gurps_npc (621217) | about 3 months ago | (#47615745)

Not learning memory management? Bah.

If you haven't learned how to minimize the size of your program to fit on an out-dated Apollo era mainframe, then you are not a computer scientist.

And don't get me started on those fools letting people drive a car without knowing how to drive a manual transmission.

Honey, where's my complain' pants? I got me some letters to write!

Times change. Not everyone uses the same systems. An education should be more about ways of thinking than about specific skills. Otherwise it it worthless.

Re:Young whippersnappers (0)

Anonymous Coward | about 3 months ago | (#47615825)

Seems applicable.

http://dilbert.com/strips/comic/1992-09-08/

Re:Young whippersnappers (1)

jwegman (228147) | about 3 months ago | (#47615981)

Just for the record, it would be most unsettling if the person who built or maintained my car didn't know how to drive a manual transmission. In the same vain, I'm not terribly upset that my admin assistant isn't well versed in computer memory management.

Oh (0)

Anonymous Coward | about 3 months ago | (#47615751)

Was this programmer by any chance an old fart? Because C is a good fit for computers and applications from 30 years ago.

Oh, for... (4, Funny)

jeffb (2.718) (1189693) | about 3 months ago | (#47615765)

Well, in MY opinion, CS students who learned in C or C++ or Pascal or PL/1 are inferior because they use the stack as a crutch, instead of manually keeping track of callback history. If you don't have to write explicit code to keep track of every call, or allocate every local variable, your code will... well, actually, it'll likely be easier to read, easier to maintain, and easier to optimize. But it won't be as good as the code we had to write back in my day.

Not 'inferior', but ... (3, Insightful)

gstoddart (321705) | about 3 months ago | (#47615771)

CS students who primarily learn Java are inferior because they don't have to deal with memory management as they would if they used C

You know, I wouldn't want to specifically use the word 'inferior', but you do learn a hell of a lot from having to deal with your own memory management.

When I was in school, lo these many years ago, I and a fellow student wrote the same basic assignment for a course.

He was one of the sysadmins on the VAX and could set his process to use a vast array which was mostly empty, and rely purely on virtual memory. I had a tiny little 80286, and had to implement the same thing in a sparse array which took up a fraction of the space.

We both got the expected results and got good grades, but the prof basically said since I'd done so much more thought on memory management and the other guy didn't, I'd get the A+ and he got the A.

The Prof also stole my code to use in his own project, because by the time you accounted for architecture mine was about 4x faster and 100x smaller, and he'd basically given us an assignment which overlapped with his own research.

Would I want to do bare metal memory management in C every day? Probably not. Do I think it was valuable to have had to learn how to shoehorn something into a small amount of memory and explicitly be the one to make sure my memory wasn't leaking? Absolutely.

I think more modern software would suck less if developers didn't just assume there were massive gobs of memory sitting around, and implement everything in the easiest way possible without having to factor in resources. Most modern browsers seem to grow their memory usage at a pretty linear rate, even if you're not using the browser.

Because, really, pretty much every piece of software seems to double in it resource requirements every few years.

And understanding pointer arithmetic and semantics in C is valuable, even if most people will never directly see anything resembling a pointer these days.

Or even lower... (1)

bunyip (17018) | about 3 months ago | (#47615773)

It really depends on what you want to do. If you're trying to wring the last iota of performance out of an algorithm, then understanding TLB misses and cache protocols can be useful. Even accessing RAM can be an order of magnitude faster or slower, depending on what you do. So, maybe a class on microprocessor design?

OTOH, I find that an ability to understand functional programming, recursion and data structures is very useful. They're the sort of things I quiz people on when I'm looking for really strong developers.

Alan

real CS people don't use C (0)

Anonymous Coward | about 3 months ago | (#47615777)

we code with assembly, fortran and cobol

C is for these lazy kids

The Difference is... (0)

Anonymous Coward | about 3 months ago | (#47615783)

A real CS degree involves a lot of math and learning how to design algorithms. They learn how computers work and what rules and laws they follow. They are *computer* *scientists*, not programmers, not IT specialists, not hardware engineers (though the last one helps a lot).

That said, most CS programs now-a-days suck, even as code-monkey schools. They do not teach you how to code, they teach you how to use tools A, B, and C to accomplish a given set of tasks. If they are faced with a problem outside of that range, or that requires a different tool, then they are lost. Because they have not learned how to program in general. (Many grads these days never learned how to learn, which is a superset of this problem.)

Tell me, have you ever written a web-app from scratch? Even something as simple as a hit counter.

How does what you write connect to what happens? (2)

mgoheen (244365) | about 3 months ago | (#47615805)

In my totally completely unbiased opinion, I think that everyone should have a basic understanding of how computers actually work, from the ground up. A little bit of basic logic (and how that is implemented in hardware), introduction to low level programming (assembler) and using C to make hardware DO something. From there just keep moving on up until you get to Java. Learning operating system functions and why they are important (handling I/O devices, memory management, process and thread management, etc.). All that stuff helps you understand what you are doing, and potentially give you insight into how to debug it.

Nothing is more frustrating than arguing with someone about some computer bug/problem when their argument/explanation is provably impossible, based on how things actually WORK.

Computer Science (2)

DevCybiko (694026) | about 3 months ago | (#47615809)

Computer Scientists understand the theory of computing. Software Engineers understand how to build software. Information Managmentstudent know how to apply computers to business problems. IMHO CS students are not prepared for real world coding applications. If you're going to program you don't need a CS degree, you just need a background in the programming language du jour. If you're going to solve difficult problems with a computer, you need a CS degree (theory, algorithms, heuristics). But to build a web site, ECPI is good enough. I don't think current CS curricula creates a solid programmer. However, many enterprising young CS students are already involved in external activities (open source projects, web site construction) and are learning the key skills on their own.

Re:Computer Science (1)

rujasu (3450319) | about 3 months ago | (#47616115)

In my experience, successful CS students are typically solid programmers before starting the curriculum, or become solid programmers early in their studies. (If they don't, they change majors.) Good CS programs go beyond just programming to teach theory, but taking courses in programming language design and analysis of algorithms is what turns decent programmers into great programmers. That's why, while a degree in CS isn't a degree in programming per se, CS students do tend to be better programmers and are well-prepared for real-world coding.

An issue of engineering, not computer science (0)

Anonymous Coward | about 3 months ago | (#47615811)

Extensive experience in C (and to a lesser extent C++) is generally indicative of a much more solid understanding of how low-level software systems work. Most of the real theoretical computer scientists I know, incidentally, aren't particularly strong in this area. Computer engineers usually have a lot more experience with it.

Old Fart Hipster programmer here (2)

idontgno (624372) | about 3 months ago | (#47615813)

Feh. C. "Memory Management".

CS students taught in high-order language are completely deficient in their education. They haven't learned about opcode timing and instruction placement and hardware stack management.

If you aren't working exclusively in machine code, you're just a poser.

Yes, but no (5, Insightful)

Unordained (262962) | about 3 months ago | (#47615819)

I've recently watched my wife (C++ environment) deal with a new-grad (Java-based education.) It's true that pointers are a sticking point -- in the process of being taught Java, they get taught that pointers are bad and dangerous (all hail Java for solving the problem,) and can be made only barely tolerable by using auto_ptr, but really should just be avoided. Yeah, it's a problem, sure.

But the bigger problem we have with new-grads and junior-devs, in general, is the same problem you'd have in any field: they're green. They don't test well, or at all. They don't think designs through. They don't communicate well. They ask too many questions, or maybe worse, they ask too few. They try to fix things that aren't broken. They're bad at estimating task sizes (admittedly, people rarely get much better at that even after decades.) In an attempt to not suck, they reach out for best-practices and apply them zealously and inappropriately. They can't imagine how things will fail, or be abused. They spend too much time fixing small problems, and not enough time fixing big ones. And maybe worst of all, they're under the illusion that what they learned in school ought to prepare them for the workforce, when really it just gets their foot in the door.

We, as their seniors, are the ones that should be spending the time fixing their misconceptions, fleshing our their education, filling their minds with the horrors we've seen, and setting up their work habits. When they fail, it's because we fail to do these things, usually because we brought them in too late in a project, gave them too much responsibility, and are fighting a deadline. So we "just fix it" for them, and they don't learn from the experience, while we gain nothing in terms of productivity from having them.

But if I were to nitpick their education? Databases. Recent grads have little or no understanding of relational databases. Their thinking on organizing data, in general, is fuzzy at best, which impacts more than just database code, it impacts class and API designs, often crippling whole features with incorrect cardinality. It deserves more attention in school. The rest, we can fix in production. =)

Re:Yes, but no (0)

Anonymous Coward | about 3 months ago | (#47615901)

Wow that was a great post. You hit every nail on the head, including relational databases.

Real computer scientists (0)

Anonymous Coward | about 3 months ago | (#47615837)

know--or at least familiar with the concept of--what is even COMPUTATIONALLY POSSIBLE. THAT is computer science, as in the science of computing or what is computable. It progresses to things like how actual computers work, leading into things like memory management, assembly, building a compiler. Also, real computer scientists know who the fucking founding father of the discipline is.

Why web monkey body shops these days demand a strong CS background is beyond me. Sure they're smart and do real, hard work, but the idea that you should have a computer science background to work for them is preposterously offensive.

Learn fundamentals, and a hot button (1)

mrflash818 (226638) | about 3 months ago | (#47615847)

One of my favorite Computer Science instructors said to us: Learn the fundamentals, and a hot button.

A hot button is the 'new cool thing' that everyone is asking for.

The fundamentals are, well, the fundamentals.

So, when I went to school to work on my Bachelor's, we used ADA, c, c++, x86 assembly. ADA was for the "intro to computer science", clang was for many, I chose to use c++ for compiler class. x86 assembly was for assembly language programming.

Back then Java was the new thing, so I made sure to take Java as an elective.

So for YOU, figure out what is hot, learn it, but also learn your fundamentals. Knowing how to allocate, use, and return system resources is a fundamental. That fundamental is used for working with Files, Memory, Databases. I would dare day that also learning to work with exception handling (c++/java) is a good fundamental. If you think 'old school' programming is an interest, then being comfortable with clang pointers would be good as well.

Speaking from the interviewer side (1)

c++ (25427) | about 3 months ago | (#47615857)

The primary thing I notice about fresh Java school grads is that there's nothing in their resume that tells me they can tackle hard problems. No pointers. No lambda functions. No backtracking. No first-class continuations. All the stuff that used to weed out people in CS programs is gone; that means I have to do the weeding. At least Javascript has brought some of that back.

Re:Speaking from the interviewer side (1)

CastrTroy (595695) | about 3 months ago | (#47616071)

If somebody just goes to university and gets their computer science degree, odds are that they actually are very bad programmers. Anybody who has actual programming skills has most likely had paid internship, or has their own github account or open source project commits where they can demonstrate that they can product actual code. There isn't even required programming in CS courses to make somebody a good programmer by just doing the required assignments for their degree.

Is your CS degree program really that narrow? (2)

presidenteloco (659168) | about 3 months ago | (#47615865)

I remember learning a couple of assembly languages, 3 procedural languages, sql, lisp, and prolog during my undergrad CS degree, while learning three more languages including Forth, Basic, and SmallTalk in summer jobs around that time.

But in my recollection, particular programming language (details of) was not the main point of the majority of my CS (or EE elective) courses, especially not after first year. Quickly learning any programming language was just the price of admission to learning and practicing other CS knowledge. Computing general concepts, algorithm and database general concepts, intro to and practice with different styles of programming such as functional, declarative, procedural, particular types of applications as examples, cool AI'ish stuff, and a few things about software engineering practice, were much of the point.

So if your degree program is "about Java" and "experience with Java and an N-tier JEE stack", then RUN and take some MIT or Stanford online courses in more interesting and useful stuff!

Lisp macros (0)

Anonymous Coward | about 3 months ago | (#47615871)

Every so often I macro-expand Lisp macros (loops are very entertaining). While it's not bare metal, it reminds one that at root there's always a goto statement somewhere.

Three Divisions of Computer Science (4, Insightful)

brian.stinar (1104135) | about 3 months ago | (#47615873)

The department I go my masters in computer science from divided the discipline into three chunks:
      systems
      languages
      theory

I think this is a good way to divide computer science.

It sounds like your Java / C question involves mostly languages, and a little bit about systems (since Java programmers do not need to have a fundamental understanding of memory works at a system's level.)

I don't think this question really addresses the underlying issue - what is computer science? To me, I tell people that my formal education is closer to applied mathematics than what I do on a day to day basis. I also like to humorously use the derogatory term "code monkey" to people that have learned everything through the "languages" chunk above. A lot of times when I've worked with these people, they haven't even really studied languages (Why did the language designers make the choice that they did? What does the formal language specification say the language should do in this case? How is this language related to earlier languages?)

Again, about 90% of what I do on a daily basis could be considered "code monkey" level. It's when a customer has a REALLY difficult math problem that my formal education comes into play, and for giving people confidence in me.

For your direct question, I'd study the book Computer Architecture, Fifth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design) [amazon.com]

That's what I used, and it helped me understand a ton of memory management. Then again, my undergrad curriculum was based on C....

Exposure to multiple environments and languages (1)

Troy Roberts (4682) | about 3 months ago | (#47615875)

Many of the modern CS students spend all there time in a single environment and a single language (Java on Windows). If this is the case for your school they are doing you a disservice. I was exposed to the at least 5 operating systems and 7 or 8 programming languages and wrote assembly that ran on bare metal in school. If you experience a variety of environments and languages you will have a much better base to judge what is good and bad when developing solutions.

"Real programming" is BS (0)

Anonymous Coward | about 3 months ago | (#47615883)

There's no such thing as "Real Programming"
http://www.eggwall.com/2014/05/theres-no-such-thing-as-real-programming.html

Posting anonymous to avoid Karma whoring.

Re:"Real programming" is BS (1)

UnknownSoldier (67820) | about 3 months ago | (#47616055)

That's a bogus argument.

Real should be replaced with "Good". Are there "good" Javascript, Java, Visual Basic, etc., programmers? Yes there are always exceptionally gifted people -- however that is not the norm as those language encourages sloppy design principles. If programmers come from a C background they tend to be "better" programmers:

ALL good programmers understand TINSTAAFL. Namely,

* Floating Point [oracle.com]
* Memory [akkadia.org]
* Pointers
* Budgets: CPU budgets, Memory budgets, Disk budgets, Network budgets, People budgets (such as programmer time vs machine time)
* Macro-optimization = Algorithm
* Micro-optimization = Assembly language
* GOOD programmers understand both the strengths and weakness of high level programming languages and low level programming languages. They are not married to the dogma of "one size fits all" -- they are aware that each language was designed to solve certain types of problems. They use the right tool for the right job.

I would also add unless you can read assembly language you're probably not as good as a programmer as you think you are.

I still maintain the "last good programmers" were those that could read 6502 assembly. Later generations are mostly clueless about the implementation costs.

Bias (1)

whitedsepdivine (1491991) | about 3 months ago | (#47615887)

Everyone has a bias on what a true developer should be. You will not have the same interview for the same job title no matter what industry. Some managers will worry about how long it takes you to complete your work; Some managers will worry about the quality of work; If an architect interviews you they may care only about the design patterns you know; There is a Bias for everything. If your want to know a very low level language you need to know about memory management. If you want to use an abstracted language you should at least know it exists.

Build stuff (2)

Bamfarooni (147312) | about 3 months ago | (#47615897)

Yes, the concern is real and common. The antidote is building stuff. A bunch of stuff. The more stuff you build, the more likely it is you'll have to get "dirty" with the underlying guts of it, the more you'll know, and the more valuable you'll be.

For instance:
Of the many garbage collectors Java offers, have you ever used anything but the default? Do you have any idea what the trade-offs are and when you might want to use another one?
Have you ever profiled any Java code?
What do you know about Java byte code?
Ever SWIG wrap anything into Java?
Ever used Java serialization? Do you know what's wrong with it and why you wouldn't want to use it?
Custom class loaders?

My adivce: go learn everything there is to know about "something", it doesn't really matter what (maybe you want be the worlds foremost expert on malloc). In the process of gaining a very, very deep understanding of that 1 specific sliver; you're going to also learn about a ton of other stuff on the way.

Advice (2)

Shortguy881 (2883333) | about 3 months ago | (#47615913)

C does offer the ability for explicit memory management and if thats what you want to learn I suggest picking up C. In programming the lessons are transferable and always useful when looking at another language. What you learn in C can be applied to what you do in Java.

That being said, Java does a lot of the heavy lifting in memory management, but it isn't fool proof. If its java you want to learn about, try running your jvm with less and less memory. This will make you conscious of the size of large objects and ways of getting around memory barriers. In java this really starts to apply when you are using huge data sets and repetitive tasks. Poorly written code will start to see oom and stack overflow errors. There are plenty of tools out there that will analyze memory usage of your code. I'd suggest getting some and trying to decrease your programs memory footprint without a loss in speed.

This, of course is all computer science, and has little to do with most software engineering done today. Knowing these things, though, will definitely put you leaps and bounds in front of other software engineers.

memory management circa 2014 (1)

Connie_Lingus (317691) | about 3 months ago | (#47615931)

go out and buy another gig or two of ram for a few bucks.

seriously...its hard enough to find professionals to build software without getting bogged down with mallocs and leaks for god's sake.

when java first hit in the 90's, prettty much the #1 feature was its automated garbage collection...why now are we debating this now?

oh...i know why...its same group of old folks who live in the past and think anything not invented or produced 20 years ago is shit.

Neither (0)

Anonymous Coward | about 3 months ago | (#47615937)

Please allow me to be very snobby and arrogant.

I think to focus on either camp is to miss the whole point of "Computer Science", and focus on "Computer Programming" instead. With my CS degree, we had to focus on math, combinations, algorithm analysis, language theory, parsing, OS design, complexity theory, etc...

I think the difference between one language and other is a scalar difference, while the difference between "just programming" and all the theory is an exponential difference. The latter stretches the mind and gives us more mental tools (macros) when attacking a problem in real life many years after the degree. Furthermore, it's perhaps easier to learn a new language on your own, but it's much more difficult to learn (or to motivate yourself to go and learn) about language theory, for example.

On a separate note, the C vs Java comparison can be flipped, one could criticize C/ASM/Binary programmers as not having enough experience with OOP design. Again, same poop, different pile.

What do you plan to DO with your degree? (2)

rujasu (3450319) | about 3 months ago | (#47615963)

Web development? Keep learning Java. You will rarely ever have to worry about memory management. Learning C won't make you a better Java programmer, and there are plenty of jobs for people with Java backgrounds. Of course, you should also know HTML/CSS etc. if you're going this route.

Video games? Learn C and C++, probably in that order. Java isn't going to cut it, you'll need to learn things like memory management and graphics programming. However, the object-oriented programming stuff you learn in a Java-centric curriculum will still be very helpful in C++ (or C# if you go in that direction), so you have a solid base to work with.

Embedded systems? You're in either the wrong school or the wrong major for that, you need to focus on C and Assembler for that. Completely different world from Java.

You get the idea. Figure out what you plan to do with your career if you don't already know (in a broad sense, you don't have to nail down a specific job), and steer your studies that way. If you want to keep your options open, teach yourself some basic C or C++ and see if it's right for you. If you can't figure out how to manage pointers, then you know what type of programming not to get into.

McDonalds is hiring (0)

Anonymous Coward | about 3 months ago | (#47615975)

When I was in college, Java did not exist. Take your script kiddie language and make Flappy Bird clones with it. Real programmers learn Assembly and C.

Experience (1)

dentin (2175) | about 3 months ago | (#47615987)

The problem isn't so much that new grads are missing some specific piece of technology or some specific piece of information. It's that new grads are typically missing, quite frankly, everything.

Programming and software engineering are -hard-. If you're a couple standard deviations above the average IQ, you can become barely passable in four years and reasonably good after ten. 'Reasonably good' is ideally the minimum standard that most companies would prefer to hire at, and the percentage of new grads which meet that standard is quite low.

Your best bets are two-fold: maintain one large personal/open source project for many years to demonstrate that you understand software engineering, and work on many smaller projects to gain diversity of experience. Optionally, you can pour your effort into the large project if it supports sufficiently diverse requirements. As an example, my large project was a mud server, which exposed me to everything from web server management, volunteer team building, and customer support to memory management, unix sockets, reference counting and coroutines.

In short, nothing substitutes for experience and breadth.

Data Structures and Algorithyms (1)

QuietLagoon (813062) | about 3 months ago | (#47616011)

If the CS grad did not take a course in Data Structures and Algorithms, or have verifiable knowledge on the topic, then the candidate wouldn't get past the first couple hours of interviewing.

It is not which languages you know, languages are merely the means to express your computer science knowledge.

Ask yourself what you want to do. (1)

kelemvor4 (1980226) | about 3 months ago | (#47616041)

Do you want to go work somewhere and write Java programs for a living? Maybe you'd like to go write games or work on an office suite? Then learning high level languages like Java will serve you well. Do you want to write low level stuff and do "real" computer science? Maybe you want to develop a new high level language, or do hardware development or other significant development. If that's what you want to do, then you're right. High level Java and other languages should just be a footnote. Focus on Math, assembler, maybe some C/C++. Other low level work that provides a good foundation would also be wise.

Both of those are "Computer Science" disciplines in the modern sense. Obviously they are significantly different from each other in both required study and expected results.

Deeper experience (1)

c (8461) | about 3 months ago | (#47616065)

I'd trust a programmer who's never dealt with the sorts of problems caused by manual memory allocation (or, even nastier, compiler bugs) about as much as I'd trust a plumber who's never gotten shit on his hands.

It's not that I think garbage collection is bad, but the sorts of bugs caused by memory stomping tend to be some weird non-deterministic stuff which makes you question your sanity and your tools. You have to learn to narrow things down as deep as possible, to trust nothing, question everything, abuse your tools, and occasionally go on some very strange side-trips.

Now, Java can lead you down some strange alleyways (concurrency, for example), but it doesn't even come close.

Major in Math (0)

Anonymous Coward | about 3 months ago | (#47616103)

Picking up programming if it still interests you.

Load More Comments
Slashdot Login

Need an Account?

Forgot your password?