OT: Value of CS Degree

K

Kevin Spencer

I agree. "Condescending" is a word that implies an attitude of superiority,
and I've never sensed that in Jon's posts. He doesn't belittle people; he
sometimes corrects them. He has corrected me from time to time, and I've
benefitted from the experience. Occasionally I've felt that he was being a
bit nit-picky, but that's hardly condescension, and he was correct, so I
certainly can't attribute my subjective impression to Jon. AFAIK it may have
been my own bruised ego at work. At any rate, he's a very helpful fellow.

--
HTH,

Kevin Spencer
Microsoft MVP
Professional Numbskull

Show me your certification without works,
and I'll show my certification
*by* my works.
 
F

Frans Bouma [C# MVP]

Verde said:
Great response Kevin ... and just like you to go the extra mile and
give a thorough and insightful response (truly the stuff of a real
MVP):

whoa, are there fake MVPs as well?
RE:
<< The information needed is more along the lines of: 1. How can I
get a good-paying job as a programmer? 2. Should I become a
programmer? >>

Those are valid and likely inferences from the somewhat vague (and
intentionally so) OP. I can add a #3 to your list (which is also the
one I was "really" thinking when I wrote the OP): And that is, "how
would having a degree in computer science make me write better code
today." This #3 assumes or requires that the "real world" in the OP
is narrowly defined as "me working on a real-world software project."

well, it doesn't guarantee anything, like NOT having a degree also
doesn't guarantee you anything. What it DOES guarantee you is that IF
you make it to the end of a CS course, you have studied a lot of the
different areas which form CS and have specialized in some of them.
Above that, you have learned how to learn things and what software
engineering is all about: (hint: it's not about typing in code).
I left the question intentionally vague (as opposed to combining it
with #3) because there are guys like Jon Skeet floating around (not
to pick on him or flame him in any way) with degrees in computer
science who seem to place a lot of value on it and tend to give those
of us without that "why" knowledge a hard time or address our "dumb"
questions in a condescending way.

I think you now owe Jon an appology. Everyone who answers questions
here does that in his/her OWN FREE TIME and takes the time to answer
someone. If the question is too dumb or too silly, I can assure you the
question simply isn't getting a reply. So because questions do get a
reply, they're not dumb or silly.

Yes I think there are a lot of dumb questions. That doesn't mean the
people asking them are dumb or stupid. I sometimes ask dumb questions
too. Because the 'dumb' categorization comes from the fact that the
people who do know a lot about the field the question is about will
likely say/think: "that's easily found with google, msdn or by pressing
F1 and do some 3-second thinking!" and often they're right.

As I can't speak for anyone else but myself, I also find it sad that
CS as a science has been, how can I put it nicely, with self-proclaimed
'specialists' who don't have any degree in CS but claim to be a 'senior
software engineer' or other well educated person with a lot of
top-knowledge. If we project that situation on medical science (and why
not, it's also a science!) you easily see how silly the CS situation is
at the moment. You won't be allowed to practise medicine when you read
4 books from Wrox and have a little experience in the field, though you
are fully entitled to write software for medical systems for example. I
find that a little disturbing. Not for the value of a title like B.sc.
in CS, but for the acceptance of CS as a true science which requires
knowledge AND wisdom from the people doing things in the fields of that
science.

Software engineering isn't as easy as tic tac toe like it isn't easy
to do brainsurgery. It might look like it is, but it isn't. If it was
as easy as tic tac toe, we wouldn't have things like bugs and design
flaws.
I just wanted some more insight
into their thinking so I can deal more effectively with that mindset
when I roll into future interviews. I posted the OP and made it
somewhat vague because I wanted to get opinions on the value of CS
degrees beyond simply writing better code or designing better
architectures. Plus, if that was the overwhelming perceived value,
then I'd expect a bunch of "geeze dude, CS obviously helps you to
write better code..." kinds of responses.

Getting a drivers license doesn't guarantee you that you won't have a
car accident or make mistakes. You're human so you WILL make mistakes.
A degree in CS doesnt mean you'll write software which will always work
and won't have errors.

The chances are HIGHER that you will write software which is of a
higher quality, because you have studied the research results(!) of
studies how to improve the process of software engineering.

Want an example? On my bookshelve I have a book, Algorithms in C by
Sedgewick. It contains a myriad of nice algorithms, most of them are
pretty old, think 70-ies. We had to study the algorithms in the book
during an algorithm course at the uni. It's not that I know all the
algorithms in the book in detail, not at all. What I do know is that
algorithms are one of the cornerstones of software quality, and that
there are a lot of documented algorithms out there ready for you to
use. People with a degree LIKELY (but it's not guaranteed, nothing is
guaranteed in life except the end of it) have studied some of the well
known algorithms, why they work, how they work and know that there's a
ton of research results out there ready to be used. So these people
often dig into these results, refresh their memory and apply them in
their modern software. Yes, that's perfectly possible, because CS isn't
about C# or Java or other time-bound element.

A person without a degree LIKELY (but it's not guaranteed) hasn't
studied these algorithms and starts from scratch, and along the way
picks up a trick here and there, but never gets to the point where the
deep theory behind all the algorithms is learned, simply because that
takes reading a book about that theory, and when will that happen?

Take an object graph: Customer has Orders, Order has OrderDetails and
Employee, OrderDetails has Product, Employee has department. If I want
to process this graph in the right order (if A depends on B, I first
process B, then A), how would I determine what to process first? (you
can also think of this as workitems with an order)

The answer is to sort the graph as a directed graph using topological
sorting of a directed graph. It's 20, 30 lines of code. However if
you've never studied graph theory, you will never think of solving it
that way.

THATs what CS tries to teach you: that level of theory so you can
apply it everywhere, for example in the situation I described above.

People who don't study that theory will never get that theory through
other ways because they never study the theory on its own, also
applications of the theory in practise. That leads to 'solutions' which
might work but fall apart when something changes. For example, the sort
result of my little graph above is a list of items in a right order.
However if I want to process them in reverse order, can I simply start
at the back of that list? No! However if you don't grasp the theory
behind it, you won't understand why that's the case.

Now, it's perfectly acceptable if you don't understand this. However
it's ESSENTIAL that you KNOW you don't know this theory if you don't
understand my example. This thus means that IF you want to be able to
apply the theory, you also have to understand that you will only be
able to do so if you study the theory, not the application of the
theory in practise.
Finally, 12 years ago when I was considering getting a degree in CS
(I was already working as a programmer at the time - although junior
level stuff), I talked to department chairs at two universities plus
a tenured CS professor. All of them independently give me the same
advice - do NOT come back to school for a degree in CS. The reason
was consistent as well: "We don't offer the type of knowledge you
need to be successful in today's marketplace." I was quite surprised
and when pressed for further explanation the department chair
(University of California) told me that in order to be successful in
the workplace one must understand and be proficient with the current
technologies of the day.

I disagree. No matter what you do in practise, you will never learn
the real theory behind what you're doing if you don't study the theory
on its own. It MIGHT BE (but it's not guaranteed) that by doing solely
practical work, you pick up a trick here and there and be able to
create working software for a lot of situations, but if the focus
changes of the tools you're working with, will you still be able to
perform on the level you were working on right before the focus change?
I doubt it.

But don't feel sad or offended. Last week, Maurice de Beijer (VB.NET
MVP) and I held a C# vs. VB.NET presentation at the dutch .NET user
group. In the audience a teacher of a technical college for informatics
(if I translate it correctly ;)) asked me which language I'd pick for
his students. I found that a weird question from a teacher who teaches
his students programming. I told him that it doesn't matter which
language you pick, because programming isn't about a language, it's
about writing algorithms in an executable form, using a translation to
a language, which can be any language. The chosen language is just the
tool to teach programming, it's not about teachning the language.

He didn't understand what I meant. :/
He proceeded with the example that it takes
him at least a year and a half to get a new course through the
curriculum committee. So if he wanted to teach classes on current
technologies, it would be nearly impossible. Say one day the world
doesn't know about C++ - then MS unveils it for the first time. It
would be about 2 years before he could teach any C++ courses. This
coming from the department chair himself.

Why would a university spoil resources on the hype of the day? If
that's necessary, it would prove that Dijkstra was wrong: "CS has as
much to do with computers as Astronomy has to do with telescopes" (If I
quoted it correctly) and that everyone (like myself) who was on the
university when Unix and C were still great and OO was not common, can
throw away his/her title/diploma because they actually don't know
anything!

It's about the theory behind all that. C++ isn't important, OO is
important. For compiler theory, you probably can study the mechanics of
generics / templates and the like and use C++ as an example, but it's
not the other way around.

THAT's what's such a big misconception about going to a university to
study CS: it's not about learning Java which you can also learn from a
book yourself. it's about the theory behind it. It's about answering
the WHY questions popping up with everything you do related to CS, not
the HOW.

FB

--
------------------------------------------------------------------------
Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
LLBLGen Pro website: http://www.llblgen.com
My .NET blog: http://weblogs.asp.net/fbouma
Microsoft MVP (C#)
------------------------------------------------------------------------
 
K

Kevin Spencer

You make some good points, Frans, but I sense a hint of assumption in some
of your statements.
well, it doesn't guarantee anything, like NOT having a degree also
doesn't guarantee you anything. What it DOES guarantee you is that IF
you make it to the end of a CS course, you have studied a lot of the
different areas which form CS and have specialized in some of them.
Above that, you have learned how to learn things and what software
engineering is all about: (hint: it's not about typing in code).

The assumption here is that the student has thoroughly comprehended the
course. That is not something which can be taken for granted. In fact,
having a degree guarantees nothing. What a student gets out of a course is
largely dependent upon the student. In other words, you are not taking
enough credit for yourself here, attributing the benefit you received from
your course of study to the course itself, rather than your own diligence in
taking advantage of what the course had to offer. At best, it gurantees that
the student has been given ample opportunity to avail him/herself of the
information presented.

The factors which affect whether or not a student passes a course and
receives a degree are many. Some people are good at taking tests. Some
teachers are easy graders, or succumb to some political pressure to pass
more students. Some people have a great capacity to retain information; some
do not. There are good teachers and bad teachers, and we can certainly
expect that there are as many hacks in the teaching profession as in any
other. It is important to remember that in every individual aspect, half of
the people in the world are below average.

Note also what I am *not* saying. I'm not saying that taking a course and/or
receiving a degree is a bad thing, or that no benefit is derived from it.
What I am saying is that the benefit received is likely to differ greatly in
kind and quality from one person to another, and that very little can be
guaranteed as a result.
CS as a science has been, how can I put it nicely, with self-proclaimed
'specialists' who don't have any degree in CS but claim to be a 'senior
software engineer' or other well educated person with a lot of
top-knowledge. If we project that situation on medical science (and why
not, it's also a science!) you easily see how silly the CS situation is
at the moment.
You won't be allowed to practise medicine when you read
4 books from Wrox and have a little experience in the field, though you
are fully entitled to write software for medical systems for example. I
find that a little disturbing.

Comparing CS to medical science in terms of who is qualified to practice it
is a bit of a stretch. In places, the analogy holds fairly well; it others,
it becomes ridiculous. A medical practitioner is occasionally solely
responsible for the life or death of an individual, for example. This is
hardly something which can be said of a programmer. Surely, the requirements
must differ. However, in some respects, there is a great deal of similarity.
For example, a medical student does not practice medicine without
supervision when he/she graduates from medical school, as there is no
guarantee that the schooling has made a competent practicioner of him/her.
It is experience, combined with study, which determines that.

In addition, as in programming, there are diverse types of medical
occupations, some of which require more education and/or certification than
others.

Finally, medicine as a science has been in existence for thousands of years,
while computer science has been a science for a matter of decades. IOW,
computer science is in its infancy. When medical science was in its infancy,
the requirements for a person to practice medicine were about as stringent
as the requirements for programmers today.

Don't ever forget Albert Einstein.
Not for the value of a title like B.sc.
in CS, but for the acceptance of CS as a true science which requires
knowledge AND wisdom from the people doing things in the fields of that
science.

I'm not sure what benefit may be derived from "the acceptance of CS as a
true science."
Software engineering isn't as easy as tic tac toe like it isn't easy
to do brainsurgery. It might look like it is, but it isn't. If it was
as easy as tic tac toe, we wouldn't have things like bugs and design
flaws.

We have things like bugs and design flaws for the same reason that medicine
has medical malpractice suits. As long as humans are involved in the
process, so will errors result from the process. This argument does not
strengthen a position advocating the acquisition of a CS degree.
The chances are HIGHER that you will write software which is of a
higher quality, because you have studied the research results(!) of
studies how to improve the process of software engineering.

The chances are higher that any individual who applies for a job is
qualified for the job. This is useful for the interviewer, not for the
interviewee. As for whether a CS degree increases the chances of the
individual seeking one, that is mostly up to the individual.

And, while it is certainly true that a CS degree may indicate an increased
probability that an individual is more qualified for a job, that statement
does not logically imply that a CS degree is the sole measure of competency,
nor that it is the most important qualification, or that it is very
important at all. For example, if I were to play the lottery, I would double
my chances of winning if I bought 2 lottery tickets instead of 1. However,
if the odds are 7 million to one, I have now increased my chances by a
statistically insignificant amount.

IOW, the question here is not whether a CS degree is a good thing. The
question here should be, what are the factors which are most likely to
influence the ability of the individual in the programming field, and which
factors are the most important, and therefore should be given special
consideration?

So far, the arguments presented have not indicated any relative merit of
having a CS degree compared to any other factor which may influence the
outcome. Everything is relative. When I was a kid, I had jobs which paid
$1.50/ hour. As time went by, the U.S. government gradually raised the
minimum wage, and my salary in dollars increased. But my relative income did
not. As long as I made minimum wage, my actual wealth never changed,
regardless of the dollar amount. Similarly, the value of a CS degree cannot
be determined in a vacuum. It must be compared with the other factors which
increase or decrease the likelihood of the individual to prosper as a
programmer. Only then can it be said to have any meaningful value
whatsoever.

Want an example? On my bookshelve I have a book, Algorithms in C by
Sedgewick. It contains a myriad of nice algorithms, most of them are
pretty old, think 70-ies. We had to study the algorithms in the book
during an algorithm course at the uni. It's not that I know all the
algorithms in the book in detail, not at all. What I do know is that
algorithms are one of the cornerstones of software quality, and that
there are a lot of documented algorithms out there ready for you to
use. People with a degree LIKELY (but it's not guaranteed, nothing is
guaranteed in life except the end of it) have studied some of the well
known algorithms, why they work, how they work and know that there's a
ton of research results out there ready to be used. So these people
often dig into these results, refresh their memory and apply them in
their modern software. Yes, that's perfectly possible, because CS isn't
about C# or Java or other time-bound element.

Again, here is an argument for which you attribute your own virtue to the
value of having a CS degree. The fact that you have kept these books, that
you have studied them, and that you make use of them, are all attributes of
your own virtue.
A person without a degree LIKELY (but it's not guaranteed) hasn't
studied these algorithms and starts from scratch, and along the way
picks up a trick here and there, but never gets to the point where the
deep theory behind all the algorithms is learned, simply because that
takes reading a book about that theory, and when will that happen?

This is making a lot of assumptions. While the benefit of getting a CS
degree are quantifiable, I am not aware of any similar statistics regarding
the practices and/or professional and educational history of individuals who
have *not* obtained such degrees. As an example, I can tell you that this
certainly does not apply to myself. I have about 30 or so books on
programming currently on my shelf, comprising a wide range of topics,
including advanced math and computer science. This hardly accounts for all
the books I have owned; I periodically throw away ones I no longer need. I
read for at least 2 hours a day. And when I am not working, I *think* about
programming, math, and science, as well as philosophy. How many people
holding CS degrees can say the same? Of course, my individual experience
does not disprove your assertion, but it certainly proves that your
assertion is not at all certain.
The answer is to sort the graph as a directed graph using topological
sorting of a directed graph. It's 20, 30 lines of code. However if
you've never studied graph theory, you will never think of solving it
that way. ....
People who don't study that theory will never get that theory through
other ways because they never study the theory on its own, also
applications of the theory in practise.

The implication here is that if you have not taken a course in CS, you have
not studied graph theory. No need to comment on that assumption. In
addition, the idea that people who haven't studied the theory will never get
it through other ways is disproved by the fact that those who developed the
theory in the first place necessarily got it through other ways.

In other words, one doesn't have to read about gravity to know it exists,
and be familiar with how it behaves. Mathematics is a discipline which seeks
to discover things which *already exist* without anyone even having to be
aware of them, as is science in general.
This thus means that IF you want to be able to
apply the theory, you also have to understand that you will only be
able to do so if you study the theory, not the application of the
theory in practise.

Again, there is no implication in this statement that taking a CS class, or
getting a degree in CS is the only or the best way to learn about such
things.
I disagree. No matter what you do in practise, you will never learn
the real theory behind what you're doing if you don't study the theory
on its own. It MIGHT BE (but it's not guaranteed) that by doing solely
practical work, you pick up a trick here and there and be able to
create working software for a lot of situations, but if the focus
changes of the tools you're working with, will you still be able to
perform on the level you were working on right before the focus change?
I doubt it.

The implication here is that there are 2 possible alternatives: Taking a
course in CS, or "doing solely practical work." In fact, the opening
statement of the paragraph is correct, but the conclusion is not.
I told him that it doesn't matter which
language you pick, because programming isn't about a language, it's
about writing algorithms in an executable form, using a translation to
a language, which can be any language. The chosen language is just the
tool to teach programming, it's not about teachning the language.

He didn't understand what I meant. :/

Perhaps you didn't understand what *he* meant. A programming language is an
interface. Some interfaces are better than others. And one can learn about
the principles of programming better from languages which have a "syntax
interface" which intuitively appears to be more like what it represents.
Therefore, the conclusion that "it doesn't matter which language you pick"
is far from certain.

Note that I have *not* stated that it *does* matter what language you
choose. I have merely stated that you have not proven that idea, and that
there are strong arguments which can be made to refute the idea.

In fact, programming is *not* simply about "writing algorithms in an
executable form." It is largely comprised of logic. Logic is a discipline
which is very difficult to master, and must be practiced over many years.
While the principles of Logic can be taught, the application of it is a
discipline, which requires a lot of work in terms of changing one's habitual
ways of thinking. And that cannot be obtained from a university.
Why would a university spoil resources on the hype of the day? If
that's necessary, it would prove that Dijkstra was wrong: "CS has as
much to do with computers as Astronomy has to do with telescopes" (If I
quoted it correctly) and that everyone (like myself) who was on the
university when Unix and C were still great and OO was not common, can
throw away his/her title/diploma because they actually don't know
anything!

Albert Einstein was a genius, and moved theoretical physics forward
termendously. He was not God, however, and he certainly was wrong about a
few things. I'm sure the same can be said about Dijkstra, without
necessarily expecting to be stoned to death.
It's about the theory behind all that. C++ isn't important, OO is
important. For compiler theory, you probably can study the mechanics of
generics / templates and the like and use C++ as an example, but it's
not the other way around.

And I suppose that telescopes aren't important to astronomy? I'd like to see
how astronomers would formulate their theories without the data that they
collect from their telescopes. Again, we're looking at a flaw in your logic:

Premise: OO is important.
Premise: For compiler theory, you can ... study the mechanics of
generics/templates... and use C++ as an example, but it's not the other way
around.
Conclusion: C++ isn't important.
THAT's what's such a big misconception about going to a university to
study CS: it's not about learning Java which you can also learn from a
book yourself. it's about the theory behind it. It's about answering
the WHY questions popping up with everything you do related to CS, not
the HOW.

The "whys" of things are admittedly more important than the "hows" of
things. But the "whys" of things are in fact much more elusive than the
"hows" of things. It is easy to fall into the trap that because one has been
given a certain level of "whys" that one has achieved enlightenment. But
there are "whys" behind the "whys," and one must be wise to make that
discrimination. Issac Newton observed mathematical principles which could be
applied to things like motion and gravity. Using those mathematical
principles enables us to do things which we could never do before. But
Newton only discoverd a certain level of principles. Even today, theoretical
physicists are struggling with the "whys" *behind* those principles. We know
that gravity exists. We know how it behaves. We have mathematics which can
predict its effects. But we still do not know *why* it has the effects that
it does. In its day, Newtonian physics was considered to be the "whys" of
physical behavior. But we know better now. It is still used for its benefit
as a "how" of physical behavior. It is useful. But it is not causal.

Similarly, OOP is a level of theory about computer science which represents
a point in the development of computer science while still in its infancy.
Why does OOP exist? What are the principles behind it? What greater power
might we obtain by such knowledge? In the long run, it may turn out that OOP
is an over-simplification of the principles from which it was created. In
fact, OOP is *not* a "why" at all, but a lower-level "how" than what came
before.

The point I'm making here is that what can be taught in schools, and
achieved through the acquisition of a degree or diploma is of highly-limited
benefit, in and of itself. I never went to school for computer science. It
wasn't until my 40s that I realized that the chief reason I did not do so,
and should not have done so, is that my individual strength is in teaching
myself, studying for myself, and that I always learn more and perform better
when I do. And the only point that I am making by this illustration is that
what is useful to some is not useful for all. The world is much more
complex, and not nearly so easy to categorize as we would like to think.

In conclusion, it isn't necessary for us to argue that one point of view is
correct, and therefore, a differing point of view is incorrect. Differing
points of view are not necessarily exclusive. Is there merit in going to
school and obtaining certifications and/or degrees? For many, the answer is
yes. For many, the answer is no. Therefore, for all, the answer is no. On
the other hand, does the second negative imply that going to schools and
obtaining certifications is unnecessary? It does not. Again, the answer is,
for some, yes. For some, no.

One thing is certain: We have a lazy nature. We are always striving to make
things easier for ourselves, inventing "labor-saving" technologies, etc. But
none of these efforts are of any avail. Things never really get any easier.
We still have to work, to strive, even if our striving is only to make
things easier for ourselves. This also applies to our thinking. We are
always hoping for "the" answer to a question, or the simplest solution to a
problem. But in fact, these things do not exist. At best, we may find the
*more* simple solution to a problem or *the best* answer available within
present limits.

My effort here is to simply point out that the question posed is not one
which can be answered, but only debated, and that, in such matters, the fact
that I am aware of a certain truth about something does not necessarily
contradict the assertion of someone else who may be aware of a different
truth about something. Logic is a two-edged sword, and one must be careful
about using it in a battle of the minds. There are certainly things which
are true, and things which are false, but they are often not the things we
think they are. We are all aware of something, and we are certain of that
which we are aware of, but knowing what it *is* that we are aware of is much
more elusive.

--
HTH,

Kevin Spencer
Microsoft MVP
Professional Numbskull

Show me your certification without works,
and I'll show my certification
*by* my works.
 
F

Frans Bouma [C# MVP]

Kevin said:
The assumption here is that the student has thoroughly comprehended
the course. That is not something which can be taken for granted. In
fact, having a degree guarantees nothing. What a student gets out of
a course is largely dependent upon the student. In other words, you
are not taking enough credit for yourself here, attributing the
benefit you received from your course of study to the course itself,
rather than your own diligence in taking advantage of what the course
had to offer. At best, it gurantees that the student has been given
ample opportunity to avail him/herself of the information presented.

The factors which affect whether or not a student passes a course and
receives a degree are many. Some people are good at taking tests.
Some teachers are easy graders, or succumb to some political pressure
to pass more students. Some people have a great capacity to retain
information; some do not. There are good teachers and bad teachers,
and we can certainly expect that there are as many hacks in the
teaching profession as in any other. It is important to remember that
in every individual aspect, half of the people in the world are below
average.

Well, to graduate from a uni, it takes effort, you have to study the
material, to practical exams, write a lot of papers etc. Unless the
tests are really silly, it's HIGHLY unlikely that if someone graduates
from a university and gets a CS degree s/he has no clue what's been
taught to him/her.
Comparing CS to medical science in terms of who is qualified to
practice it is a bit of a stretch. In places, the analogy holds
fairly well; it others, it becomes ridiculous. A medical practitioner
is occasionally solely responsible for the life or death of an
individual, for example. This is hardly something which can be said
of a programmer. Surely, the requirements must differ. However, in
some respects, there is a great deal of similarity. For example, a
medical student does not practice medicine without supervision when
he/she graduates from medical school, as there is no guarantee that
the schooling has made a competent practicioner of him/her. It is
experience, combined with study, which determines that.

true, though I meant after that: when the person is actually
practising the profession s/he specialized in. Make no mistake: a lot
of software is involved in hospitals. And it's key that that software
works and is written by professionals, don't you think? That was my
point.

(it was an example, I could also project the situation on another
science)
The chances are higher that any individual who applies for a job is
qualified for the job. This is useful for the interviewer, not for
the interviewee. As for whether a CS degree increases the chances of
the individual seeking one, that is mostly up to the individual.

I wasnt talking about interviews. I couldn't care less for interviews.
I was talking about the quality of software produced by a person.
So far, the arguments presented have not indicated any relative merit
of having a CS degree compared to any other factor which may
influence the outcome. Everything is relative.

Here I already have the big urge not to read any further. It's not
relative. If it was, it apparently doesn't make a difference to get
educated and learn THEORY.

IMHO you try to state that getting a high level education isn't
learning you any theory which is worth having.
When I was a kid, I
had jobs which paid $1.50/ hour. As time went by, the U.S. government
gradually raised the minimum wage, and my salary in dollars
increased. But my relative income did not. As long as I made minimum
wage, my actual wealth never changed, regardless of the dollar
amount. Similarly, the value of a CS degree cannot be determined in a
vacuum. It must be compared with the other factors which increase or
decrease the likelihood of the individual to prosper as a programmer.
Only then can it be said to have any meaningful value whatsoever.

Well, a good education teaches you theory and knowledge you can use
later on. I don't see how the value of that can't be determined. I gave
an example with the graph theory, and there are many more.

Don't confuse a bag of tricks with theory. Any clever kid can write a
3D renderer, though that doesn't make the kid a 3D engine expert, he
just understood the tricks required to write the 3D renderer.
Again, here is an argument for which you attribute your own virtue to
the value of having a CS degree. The fact that you have kept these
books, that you have studied them, and that you make use of them, are
all attributes of your own virtue.

It's an example, e.g. an illustration of the point. It's not the point
itself, it's an illustration of it. What was the point, you might ask?
Well, the point was that if you get taught a given piece of theory, you
can apply that theory later on in ANY situation it might apply to.
That's teh value of theory. And a CS course teaches you theory.

I fail to see why on earth it's not valuable to study theory related
to the profession a person works in.
This is making a lot of assumptions. While the benefit of getting a
CS degree are quantifiable, I am not aware of any similar statistics
regarding the practices and/or professional and educational history
of individuals who have not obtained such degrees.

I'm not making assumptions, I'm stating a fact and I can proof it to
you if you want to.

If a person works 8 hours a day, and doesn't read any theory books
about CS (books about C# or .NET for example don't count), when will
that person ever run into the theory? Never.

Sure if the person studies the theory in his own free time, then he
studies the theory, though that takes a lot of time and dicipline.
The implication here is that if you have not taken a course in CS,
you have not studied graph theory. No need to comment on that
assumption. In addition, the idea that people who haven't studied the
theory will never get it through other ways is disproved by the fact
that those who developed the theory in the first place necessarily
got it through other ways.

Your last remark precisely proofs my point. Of course those people
didn't know the theory, but spend perhaps 30 years on it. The person
who doesn't know the theory but is confronted with a problem in the
area of the theory (can be parser theory, relational algebra etc.) he
starts with the same set of knowledge as the people who worked for
perhaps 20-30 years on the theory. So they thus have to proof every
theorem they DISCOVER again, however unluckily for them, their
discovery is a waste of time, as someone else already spend a great
deal of time on that same solution.
In other words, one doesn't have to read about gravity to know it
exists, and be familiar with how it behaves. Mathematics is a
discipline which seeks to discover things which *already exist*
without anyone even having to be aware of them, as is science in
general.

discover and describe them with provable theorems. It's that last part
you omitted in your remark which is very important.
Again, there is no implication in this statement that taking a CS
class, or getting a degree in CS is the only or the best way to learn
about such things.

It's not the ONLY way to get that info, I never said that. However if
you don't take the course, you HAVE TO spend the time and energy by
your self to get the theory. And before someone steps forward and says
that that's a piece of cake, it's not.
Perhaps you didn't understand what he meant.

Oh yes I did understand what he meant.
A programming language
is an interface. Some interfaces are better than others. And one can
learn about the principles of programming better from languages which
have a "syntax interface" which intuitively appears to be more like
what it represents. Therefore, the conclusion that "it doesn't
matter which language you pick" is far from certain.

a language isn't an interface, it's a tool. Some languages are better
suited to learn programming than others, fully agreed. Though the point
I wanted to make was that he didn't understand that the real theory to
teach was programming, not the language. It doesn't matter if you take
pascal, Lisp or C to teach programming.
Albert Einstein was a genius, and moved theoretical physics forward
termendously. He was not God, however, and he certainly was wrong
about a few things. I'm sure the same can be said about Dijkstra,
without necessarily expecting to be stoned to death.

You didn't get the point.
And I suppose that telescopes aren't important to astronomy?

no they're not, not in the sense that they're essential for the
science that's called astronomy. Computers are great things, but CS can
exist without computers.
I'd like
to see how astronomers would formulate their theories without the
data that they collect from their telescopes. Again, we're looking at
a flaw in your logic:

I was quoting Dijkstra, it's not my remark. Now, please don't make a
fool out of yourself by questioning this quote from Dijkstra because
the quote is spot on, it precisely describes what CS is and the
diffrence between tools used IN the science and the science itself.
The "whys" of things are admittedly more important than the "hows" of
things. But the "whys" of things are in fact much more elusive than
the "hows" of things. It is easy to fall into the trap that because
one has been given a certain level of "whys" that one has achieved
enlightenment. But there are "whys" behind the "whys," and one must
be wise to make that discrimination.

I didn't imply that if you have a CS degree, you know all the why's of
CS, that would be a foolish thing to do.

But I stop now explaining what my point was. If I'm not understood, so
be it.

If someone wants to be clever and outsmart everyone by NOT taking a CS
course and later on claiming it indeed wasn't worth the effort because
s/he knows everything a CS degree holder (has to) know, please go ahead
and do so, if you want to do that.

Every once in a while this discussion pops up and you get two groups
of people: the ones who don't have a degree are saying it's not worth
it, and the people who do have a degree are saying it is worth it.

What I always wonder is: how can someone who doesn't have a degree
make ANY judgement about if it is worth it to have a degree in general?
Isn't what a non-degreeholder (if I may call a member of that 'group'
that name for the sake of the argument) is doing at that moment solely
projecting his own history onto the rest of the software engineers out
there? However a degreeholder can say if it's worth it or not, because
s/he can argue that the GENERAL theory taught at the uni is applicable
in a very large group of scenarios, and if not directly applicable can
be used to create new knowledge or be a base for understanding new
theory discovered after the person left the uni.

But I digress. These kind of discussions get old. The OP should google
about this topic, it will reveal a lot of similar discussions with the
same ending: none.

FB

--
------------------------------------------------------------------------
Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
LLBLGen Pro website: http://www.llblgen.com
My .NET blog: http://weblogs.asp.net/fbouma
Microsoft MVP (C#)
------------------------------------------------------------------------
 
K

Kevin Spencer

Just a song before I go, a few examples of what I was trying to communicate,
without being too obnoxious about it:
a language isn't an interface, it's a tool.

This is an example of how a formal education can limit one's ability to
think. You were taught what the teachers wanted you to think. They gave you
a definition for "interface," but failed to teach you the underlying
principle behind the term. Apparently, you never figured it out for
yourself. Or maybe you didn't figure it out because English is not your
primary language (I can't say). The world "interface" is derived from the
Latin "inter" (between) and the Vulgar Latin "facia" (face, countenance, and
related words, such as confront). The word has multiple meanings, all of
which define something that provides a "face between" 2 differing entities.
The only language a computer understands is binary arithmetic. Programming
languages were developed to provide an "interface" between humans and
computers which enable humans to communicate with computers. And as I
mentioned previously, some interfaces are better than others. No need to
repeat the rest of it.
Here I already have the big urge not to read any further. It's not
relative. If it was, it apparently doesn't make a difference to get
educated and learn THEORY.

Okay, give me an example of a quantitative and meaningful statement that
does not include relativity. Quantities are always stated as relative terms.
How much do you weigh? If you tell me that you weigh 50 Kilograms, you mean
that your mass is comparable to the mass of 50 Kilograms. but how much does
a Kilogram weigh? It is impossible to measure anything, or to state the
quantity of anything without relativity. Was that not part of the theory you
were taught in the university?
What I always wonder is: how can someone who doesn't have a degree
make ANY judgement about if it is worth it to have a degree in general?
Isn't what a non-degreeholder (if I may call a member of that 'group'
that name for the sake of the argument) is doing at that moment solely
projecting his own history onto the rest of the software engineers out
there?

The logical converse of that argument would indicate that anyone having a
degree could not make any judgment about the value of *not* having a degree.
And of course, if we take that to its logical conclusion, nobody can make
any judgment about the value of either having or not having a degree, since
everyone falls into one category or the other.

As I said before, most of programming is logic. Even mathematics and
computer science theory is based on logic. And logic is something one can
study, but not something one can consistently practice without a great deal
of self-effort and time, to break illogical thinking habits. No amount of
book-learning can teach it to you. But without it, no amount of book
learning can help you.

--
HTH,

Kevin Spencer
Microsoft MVP
Professional Numbskull

Show me your certification without works,
and I'll show my certification
*by* my works.
 
V

Verde

Wow! I really hit a nerve there with you. I guess I was more correct about
"guys with CS degrees" than I thought. Had I known it was so sensitive I
would have been much more careful to not start the big flame job that's
apparently evolved. My somewhat sincere apologies to everyone for that.

Having said that, your attitude and mindset is exactly what I was wanting to
more clearly understand. Thanks for being so verbose. Now when I go into my
next job interviews I will better understand what I'm up against if they try
to penalize me for not having a CS degree.

Now let me briefly rebut your all of your points - but rather indirectly
(you'll have to read between the lines):
I write kick-ass code; reliable, efficient, maintainable, and extensible
(and, of course, self-documenting). I do not have a degree in CS. I'm 99%
self-taught (couple of extension courses here and there). The teams I have
lead have been comprised 100% of people *without* degrees in CS. I've seen
many large and successful systems with 20-50 or so developers; most of them
didn't have degrees in CS. Some of the worst applicants for applications
programming positions were guys with PhDs in CS (they were really out of
their element when not within the safe confines of the Ivory Tower; the real
programming world was so messy for them). So my points aren't necessarily
about me - but about lots and lots of great architects and programmers I've
met over the years - who have no formal CS education, much less a CS degree.
While I haven't worked with Kevin Spencer, I believe he fits the bill quite
nicely as an example of the kinds of people I've seen who are most valuable
in the real programming world (wonderful developer with no CS degree AFAIK).
The most noteworthy system on which I was the technical lead for over 5
years (and personally wrote over 80% of the code) processes millions of
dollars worth of business transactions for one of the largest banks in the
USA. It's been in production for over 6 years now (I left a few years ago).
I also have no freaking clue as to what's going on with the heap... can't
talk to you intelligently about the difference between L1 and L2 cache...
nor alternatives to some of the algorighms we implemented. Oh, and I've
never designed my own file system (had a CS guy brag about that to me a few
months ago; he was quite proud of himself). My view is that MS has done a
great job with FAT, FAT32, NTFS, and whatever is coming next. I don't think
I'll ever need to roll out my own alternative to any of those - ever. Nor
will understanding "how file systems work in general " (which is something
they apparently cover in at least one CS program) help me to make better use
of anything in the System.IO namespace (or FSO in the COM world).

To get a bit more indirect (you'll *really* have to read between the lines
on this one): It's kind of like me getting in my new BMW 330ci; I can sure
drive the heck out of it. I sure know how to get around town and avoid the
traffic at quittin' time. But cannot talk to you *intelligently* about how
the fuel injection actually works... nor can I talk to you in any sensible
terms about how the computer governs the throttle so that I cannot exceed
135MPH (I've tried a few times and it cuts out right at 135 even though
there are plenty of RPMs left). I don't even know what algorighm they used
in the anti-lock breaks or in the computer thingie that transfers power and
applies breaks a bit when the car starts to slide while accellerating. But I
sure have fun driving the car... only one speeding ticket (after being
pulled over 4 times; I'm always so respectful to the police) and zero
accidents. You just aren't going to convince me that I would become a safer
or somehow "better" driver if I were to go to auto mechanics school (or
whatever they call it) or get some mechanical or electrical engineering
degree that would enable me to wax eloquently about the algorighms in the
anti-lock breaking system. But to be totally honest I have to admit that I'd
like to know how that darned governer works so that I could disable it and
exceed 135 MPH once or twice (on a closed course with a professional driver,
of course).

Oh, and about apologizing to anyone - I'm more inclined to THANK them for
revealing their technical-superiority complex... and for giving me more
insight into it. So a big and hearty THANK YOU to you and others with
degrees in CS for giving me and the group some great insight into your
assumptions, beliefs, and rules. Very helpful.

-"Verde"
 
R

Rick Lones

Verde said:
Now let me briefly rebut your all of your points - but rather indirectly
(you'll have to read between the lines):
I write kick-ass code; reliable, efficient, maintainable, and extensible
(and, of course, self-documenting). I do not have a degree in CS. I'm 99%
self-taught

To get a bit more indirect (you'll *really* have to read between the lines
on this one): It's kind of like me getting in my new BMW 330ci;

< ... >

LOL! So then your post was entirely a troll whose purpose was to get the thread
to a place where you could pull the plug with a gigantic brag about your overall
level of ignorance, your BMW and what a big shot you've become without ever
having had to learn much of anything on the theoretical side.

Let me be the first to give you a great big "Isn't that special" . . . which no
doubt looks pretty pale next to your toys and evident extreme self-esteem.

Nice going, gotta love it!,
-rick-
 
R

Rick Lones

Kevin said:
Just a song before I go,

How about this one:

"At midnight all the agents
And the superhuman crew
Come out and round up everyone
Who knows more than they do . . ."
- Zimmerman

HTH,
-rick-
 
V

Verde

You got me! LOL!
I actually ripped off that car analogy thing from one of the MVPs here. I
couldn't talk about my 13 year old Toyota because it doesn't have all that
computerized behaviour (with all those cool algorithms).

RE:
<<...your post was entirely a troll whose purpose was to get the thread to a
place where you could pull the plug...>>

I certainly can see why it appears that way... a totally reasonable
conclusion given how things went. But the truth is that at the time of the
OP I was honestly wondering the value - especially after seeing that poor
sap in a separate and earlier thread asking about the [Stack vs Heap]
question he got in a recent interview. Based on my experience and
observations over 12 years "in the trenches" at large and demanding
companies I see the value of both 'how' and 'why' knowledge - and - I've
also seen a subset of successful programmers who are those with a degree in
CS. But because they have been a small minority I had previously dismissed
the whole CS degree emphasis (that plus my experience when I went to CS
programs and they told me to NOT come back to school because they don't
offer the kind of knowledge required to be successful in the current
marketplace...). So I decided to try to be open-minded and submit the OP to
get other's feedback and clue me in on what I was missing about the
*real-world* value of a CS degree.. Unfortunately, and to attempt some
objectivity here, I'm missing some tack... something of a priority to fix
before I learn more CS theory : ) Where I went wrong here is when I named
someone. That was the turning point in the thread. Sorry for that. I know, I
get a zero for style points.

-"Verde"
 
K

Kevin Spencer

"At midnight all the agents
And the superhuman crew
Come out and round up everyone
Who knows more than they do . . ."
- Zimmerman


"I know noTHING!'
- Sgt. Schultz

--
;-),

Kevin Spencer
Microsoft MVP
Professional Numbskull

Show me your certification without works,
and I'll show my certification
*by* my works.

news:[email protected]...
 
K

Kevin Spencer

Based on my experience and observations over 12 years "in the trenches" at
large and demanding companies I see the value of both 'how' and 'why'
knowledge - and - I've also seen a subset of successful programmers who
are those with a degree in CS. But because they have been a small minority
I had previously dismissed the whole CS degree emphasis (that plus my
experience when I went to CS programs and they told me to NOT come back to
school because they don't offer the kind of knowledge required to be
successful in the current marketplace...).

To be fair, there is a small subset of programmers in general that I would
call "successful" in terms of the quality of work they produce, and I
honestly don't think that it has much to do with whether or not they have
studied or have a degree in CS. It appears that in most professions, this is
the case. I tend to put it down to human nature, but that is a cop-out, of
course. All I have done is given it a name, without describing it in any
real way, other than to recognize that it is common among humans.

I hope Jon sees your apology. That was a decent thing to do, and I believe
he would be encouraged if he saw it.

--
HTH,

Kevin Spencer
Microsoft MVP
Professional Numbskull

Show me your certification without works,
and I'll show my certification
*by* my works.
 
V

Verde

RE:
<< I hope Jon sees your apology. That was a decent thing to do, and I
believe he would be encouraged if he saw it>>

Fair enough. Not only because it may be "fair enough" but also because I was
certainly wrong to use his name.

Sorry Jon. I had no business calling you out in this forum. It's guys like
you who I should probably spend a lot more time *listening to* if I'm going
to take my programming to a higher level.

-"Verde"
 
J

Jon Skeet [C# MVP]

Verde said:
Sorry Jon. I had no business calling you out in this forum. It's guys like
you who I should probably spend a lot more time *listening to* if I'm going
to take my programming to a higher level.

Thank you - I appreciate it. I meant what I said though - if you have a
particular example in mind, I'd like to know. I may not agree with you,
but if nothing else I could probably learn to express myself better in
some situations.
 
F

Frans Bouma [C# MVP]

Kevin said:
To be fair, there is a small subset of programmers in general that I
would call "successful" in terms of the quality of work they produce,
and I honestly don't think that it has much to do with whether or not
they have studied or have a degree in CS. It appears that in most
professions, this is the case. I tend to put it down to human nature,
but that is a cop-out, of course. All I have done is given it a name,
without describing it in any real way, other than to recognize that
it is common among humans.

I think it comes down to what 'succesful' means semantically to the
reader. I can only speak for myself in this, as I don't know hte exact
definition you had in mind when you wrote it, but I personally don't
consider someone succesful in the software engineering department if
the software sucks but it sells well.

Those are the examples which give software engineering a bad name,
just focussed on money and not on software engineering in general. They
don't want to deliver a great product, they just want to make money.
That's their choice of course, but it shouldn't be filed under
'succesful' when it comes to software engineering.

Of course, a CS degree doesn't teach you anything about business
affairs and how to become a great businessman.

FB

--
------------------------------------------------------------------------
Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
LLBLGen Pro website: http://www.llblgen.com
My .NET blog: http://weblogs.asp.net/fbouma
Microsoft MVP (C#)
------------------------------------------------------------------------
 
V

Verde

RE:
<< I meant what I said though - if you have a
particular example in mind, I'd like to know. I may not agree with you,
but if nothing else I could probably learn to express myself better in
some situations.

Okay then..
But first I'm only pointing this out because you specifically asked; I
really have no interest in enumerating such things for the sake of being
punative or vindictive. Also, if you disagree then fine - let's not keep
this thread going. I doubt we're going to change each others minds on this:
So here goes..
There was a thread on 03/28 - subject: Fast Searches of a Thread Safe
Collection of Structs
In the OP (which was by myself), I specifically wrote that I was looking for
high-level direction. This was not me asking for you or anyone else to do my
work. I just wanted pointers so I could go and do my research - dive into
uncharted territory and become more knowledgeable. My request was simply
intended to narrow the scope of [possible topics to study] down to a handful
that would be relevant to my project.

You somehow got off on the idea that I have no clue about value types and
reference types and suggested that I go back to the basics and even stop
working on the project until I learn the fundamentals. Now to quote you << I
*could* give you examples of implementing predicates using anonymous methods
etc, but the chances of you properly understanding those examples without a
sound knowledge of the basics are very slim. >>
My thoughts on that are that I was never asking for examples. I even stated
that explicitly earlier in the thread! Also you are more or less saying
"your are too dumb to be helped." At a minimum you are literally saying "I
could help you, but I'm not going to because I don't think you would
understand it." Well that's fine for you to think that - but it begs the
question - why would you even bother to respond to that extent? Why not just
simply [not respond at all]? Better yet - why not just offer a good and
reasonable response - and let it be my problem if I don't "get it".
Apparently William Stacey had no problem giving me reasonable feedback
without losing any sleep over the possibility that I might not be up to
speed to fully comprehend it. Now I understand you MVPs each have your own
unique styles; some tend to give short or terse responses that place the
responsibility of learning on the OP (which can be great for the OP's
learning process); while others tend to give more thorough or in-depth
responses that present both a specific answer to the OP as well as a
discussion of the context of the problem (Kevin Spencer is great at this).
But it is never, IMO, a "MVP-class response" to basically say, "I know the
answer but I'm not going to tell you because you wouldn't understand."

You'll notice that I checked out of that thread once you got off track like
that (hopefully my checking out of that thread is some evidence that I'm not
looking to pick fights here). It was John Parrish who pointed out that you
were possibly "berating" and needed to "Be careful on [your] attitude." So
apparently I'm not the only person who saw your responses in a
less-than-helpful light.

Also, I took this project on specifically so I could get some "hands-on"
experience with some of the advanced techniques that were really not
necessary in my day-to-day programming. None of what I've been doing
professonally lately has required me to do any background threading. While I
could get a fat reference book and read about it all day, I think we'll all
agree that there's nothing quite like a real project to help grasp the
concepts. In your CS courses I'm sure you had a project to do from time to
time, and for similar reasons (help you grasp/see/experience what you've
been reading about). So I'm actually taking this project on for didactic
purposes. So your advice to stop working on it isn't really helpful at all.
If/when I "hit a wall" on the project I'll go and do a bunch of research
(back to the relevant basics if necessary). That metaphorical wall could be
(has been) a response to a question in a NG in which I don't understand the
advice. Leave it to the OP to determine if/when they need to discontinue
work on a project.

-"Verde"
 
N

Nick Malik [Microsoft]

Hello Verde,

I couldn't resist a juicy flame war. I guess I'm a sucker for punishment.

There on one aspect of this debate that I haven't seen anyone remark upon,
yet it will probably be the biggest influence on software development over
the course of the next two decades... The emergence of India and China in
software.

I have hired, over the last quarter century, about fifty software
developers. Most in the USA. In the past five years, I have met quite a
few software developers from India. They are not better than American
developers with degrees and a similar amount of experience. By this, I mean
that, on average, if I meet ten Indian developers, each with a B.S. in
CompSci and five years of experience, they will be at about the same level
of knowledge and sophistication as an American or British software developer
with a B.S. in CompSci and five years of experience.

That said, the universities in India and China are pumping out trained
degree-holding software developers faster than you can possibly imagine.

If you were a new developer, starting today, and you came in for a job
interview, you would immediately be judged negatively for not having a
degree, because there would be ten other applicants that have degrees. If
you aren't already in the door, with experience under your belt, and you
want to start up without a degree... forget it. I would not hire you. No
one I know would. What would be the point?

As for someone /with/ experience... realize that the day is fast approaching
when I can find someone with proven skills and a CS degree just as easily as
I can find someone with proven skills without a CS degree. Then it becomes
a choice for the interviewer. That choice is going to become a lot easier
if everyone you are competing against has the degree.

Note: I'm not a CS bigot. In my experience, folks with degrees (of any
kind) tend to do better than folks without, but I have hired folks with all
kinds of degrees... not just CompSci. One of the most pragmatic and
talented developers I had under me had his degree in Anthropology. I've had
attorneys, english majors, theatre majors, physicists, chemists, and
mechanical engineers writing code for me at various times.

So if you have a degree in something, you are more valuable than someone
without a degree. Period. All you prove by forgoing a degree is that you
have no patience for learning how to think. Someone who is that
short-sighted is rarely a good LONG TERM employee. Contractor? Sure. Keep
in mind... most of the contractors I know are working in Bangalore or
Hydrabad, not Redmond or Silicon Valley.

As for the value of a degree in Computer Science: I would consider it
roughly equivalent to about five years of software development, but with a
better ability to grasp new ideas and concepts as they emerge. Therefore,
if you have a degree in English, and have been working in code for five
years, you are likely to be trumped by a fresh graduate in Computer Science
with one year under his belt. If you have a degree in Literature, and have
been working in code for ten years, and I am looking for a full time
employee, you are likely to be trumped by a CS grad with only three years of
experience because there's a better long-term potential.

So what is the value of having a CS degree? If you are making a car and you
want to sell it... you have to decide what features are a "must have." Can
you sell a car in the US that doesn't have a stereo in it? Sure... but not
many. In today's competitve marketplace, a CS degree is fast becoming the
price of admission.

If you are an existing developer without a CS degree, but you have another
degree, AND you are talented and proven, you should do just fine. If you
are an existing developer, but you don't have a degree of any kind, I
suggest getting employed full time at a company that is likely to be around
for a while... because your mobility is about to be eaten up by the
competition. (Try working for government...)

I'm not saying anything about you personally. I do not know you. You may
be a very good developer. If I were hiring someone today, I may even hire
you. No, I'm not talking about you or your skills. However, in general, if
I were to advice a high school graduate who was interested in writing
software if they should go straight into coding, in today's environment, or
stay for the degree... I'd advise the degree.

--
--- Nick Malik [Microsoft]
MCSD, CFPS, Certified Scrummaster
http://blogs.msdn.com/nickmalik

Disclaimer: Opinions expressed in this forum are my own, and not
representative of my employer.
I do not answer questions on behalf of my employer. I'm just a
programmer helping programmers.
--
 
F

Frans Bouma [C# MVP]

Verde said:
Wow! I really hit a nerve there with you. I guess I was more correct
about "guys with CS degrees" than I thought. Had I known it was so
sensitive I would have been much more careful to not start the big
flame job that's apparently evolved. My somewhat sincere apologies to
everyone for that.

You didn't hit a nerve, you just asked for an answer and I gave it to
you. If you then don't like the answer you got, that's your problem,
you shouldn't have asked the question then.

I also don't understand why an honest answer from me about what I
learned on the uni is a bad thing. I explained my experiences of doing
software engineering 12+ years after I left the uni and how it still
affects my work. If you think that's a sad story, I feel sorry for you.
Having said that, your attitude and mindset is exactly what I was
wanting to more clearly understand. Thanks for being so verbose. Now
when I go into my next job interviews I will better understand what
I'm up against if they try to penalize me for not having a CS degree.

'up against' ?
Now let me briefly rebut your all of your points - but rather
indirectly (you'll have to read between the lines):
I write kick-ass code; reliable, efficient, maintainable, and
extensible (and, of course, self-documenting).

Every person who claims s/he can write a working program thinks s/he
writes top of the line code which is of a very high quality. I thought
so to BEFORE I went to the uni, even during the uni course. However
what I thought wasn't true. What I knew was a bag of tricks withough
deeper theoretical background which was showing in the code.
I do not have a degree
in CS. I'm 99% self-taught (couple of extension courses here and
there). The teams I have lead have been comprised 100% of people
without degrees in CS. I've seen many large and successful systems
with 20-50 or so developers; most of them didn't have degrees in CS.
Some of the worst applicants for applications programming positions
were guys with PhDs in CS (they were really out of their element when
not within the safe confines of the Ivory Tower; the real programming
world was so messy for them).

Oh dear, so a CS degree is only good for crackpot nuttcases who can't
really code their way out of a wet paper bag, right?
So my points aren't necessarily about
me - but about lots and lots of great architects and programmers I've
met over the years - who have no formal CS education, much less a CS
degree. While I haven't worked with Kevin Spencer, I believe he fits
the bill quite nicely as an example of the kinds of people I've seen
who are most valuable in the real programming world (wonderful
developer with no CS degree AFAIK).

yeah, well, and because your start of the post reads between teh lines
as if I belong in the other group, I take that as a personal insult,
but at the same time, I don't have to proof myself anymore, so telling
me indirectly I don't know how to code is only making YOU look more
silly.
To get a bit more indirect (you'll really have to read between the
lines on this one): It's kind of like me getting in my new BMW 330ci;
I can sure drive the heck out of it. I sure know how to get around
town and avoid the traffic at quittin' time. But cannot talk to you
intelligently about how the fuel injection actually works... nor can
I talk to you in any sensible terms about how the computer governs
the throttle so that I cannot exceed 135MPH (I've tried a few times
and it cuts out right at 135 even though there are plenty of RPMs
left). I don't even know what algorighm they used in the anti-lock
breaks or in the computer thingie that transfers power and applies
breaks a bit when the car starts to slide while accellerating. But I
sure have fun driving the car... only one speeding ticket (after
being pulled over 4 times; I'm always so respectful to the police)
and zero accidents. You just aren't going to convince me that I would
become a safer or somehow "better" driver if I were to go to auto
mechanics school (or whatever they call it) or get some mechanical or
electrical engineering degree that would enable me to wax eloquently
about the algorighms in the anti-lock breaking system. But to be
totally honest I have to admit that I'd like to know how that darned
governer works so that I could disable it and exceed 135 MPH once or
twice (on a closed course with a professional driver, of course).

So you see yourself more as a user than as a creator of software?
Because I definitely want a mechanic of my car to know how it works
under the hood.

You probably didn't get the point, so let me re-state it here for you
in different text: it's important that a person who claims to be a
software engineer, knows how to engineer software, based on theory and
not based on a bag of tricks. How that engineer gets the theory
mastered, that's up to the engineer, however claiming the engineer
doesn't need the theory to produce proper code is, sorry, stupid.

The software engineering business has had and still has a bad name,
because of all the bad projects and buggy code that has been written in
the past years. Add to that the high number of selfproclaimed
specialists (I'm not meaning you, I mean the group of people who think
they can write hello world but need a manual to do that) who call
themselves software engineers, and you have a profession which isn't
healthy, however modern society needs a healty software engineering
profession to survive, as more and more relies on software. For
example, in hospitals where it's very important patient info is
accurate and up to date, you can't make mistakes as a programmer.
However these systems are very complex, often they have over 1500
tables in the underlying database. If you then still think you can
handle such a high complexity without consulting what's been researched
in the last couple of years, you're either asking for trouble or think
too high of yourself. A CS degree doesn't give you the info here as
well, but has already taught you that research results are there and
ready to be used.
Oh, and about apologizing to anyone - I'm more inclined to THANK them
for revealing their technical-superiority complex... and for giving
me more insight into it. So a big and hearty THANK YOU to you and
others with degrees in CS for giving me and the group some great
insight into your assumptions, beliefs, and rules. Very helpful.

Yeah. postings like these often make me re-think why I even bother
answering a question which looked like an honest question at first. You
might think you are such a hot-shot, I don't care, you forget one
thing: there are thousands of people out there how are just out of
highschool and think: "should I get a job or go to college" ? If they
then read this discussion, and read your bragging, they might think:
"Oh, a job will also educate me!", while that's far from the truth.

Furthermore, I fail to see why having spend 4+ years on a uni and
countless hours after that reading technical documentation and research
papers is a bad thing. 'technical superiority complex'... it's sad.
Yesterday I read that neutrino's apparently have mass. I thought "what
are neutrino's?", went to wikipedia and read (tried to) the article.
After 4 lines, I was completely lost and didn't have a clue whatsoever
because it was full of jargon. Should I now call the writer of the
article a person with a technical-superiority complex that he refused
to use laymen terms? No of course not.

If you can't stand it that someone has educated him/herself (which
took a lot of time and thus sacrifices), and by that have to fall back
to stuff like calling 'guys with a cs-degree' to have a
'technical-superiority complex', ask yourself: why is it BAD to learn
things about the profession you're in?

FB

--
------------------------------------------------------------------------
Lead developer of LLBLGen Pro, the productive O/R mapper for .NET
LLBLGen Pro website: http://www.llblgen.com
My .NET blog: http://weblogs.asp.net/fbouma
Microsoft MVP (C#)
------------------------------------------------------------------------
 
C

Cor Ligthert [MVP]

Nick,

Now I have read your reply I understand why William Shakespeare is such a
lousy author and Van Gogh such a lousy painter.

They should have had a degree to do better than they did.

I assume that you understand what I want to say.

Cor
 
K

Kevin Spencer

Hi Nick,
I couldn't resist a juicy flame war. I guess I'm a sucker for punishment.

I've been kind of hoping that this could remain *above* the level of a flame
war. So far, it has skirted that level a few times, and I'm about done with
it. But, I did want to clarify a couple of issues you brought up:
So if you have a degree in something, you are more valuable than someone
without a degree. Period. All you prove by forgoing a degree is that you
have no patience for learning how to think. Someone who is that
short-sighted is rarely a good LONG TERM employee. Contractor? Sure.
Keep in mind... most of the contractors I know are working in Bangalore or
Hydrabad, not Redmond or Silicon Valley.

First, I am hoping that what you meant by the first statement was purely
subjective. In other words "you are more valuable than someone without a
degree" * as far as I'm concerned*. Otherwise, the statement does not hold
logically. There is no guarantee that someone without a degree will not be
as good or better than someone with a degreee. Take Artistotle, for example.
Or Bill Gates. Yes, these are statistical anomalies, but they indicate that
the predictability is not certain, but only probable.

As for the statement "All you prove by forgoing a degree is that you have no
patience for learning how to think," again, that may be a less probable
probability, but it is far from certain. There are many reasons why people
may not have attended a university or obtained a degree. For example, in my
case, by the time I realized what it was that I was designed for, I did not
have the time or money to attend a university or obtain a degree, and of
necessity taught myself. But I certainly had the self-discipline and
will-power to teach myself and to find mentors who could help me. Is that
the way I'd recommend anyone to follow? No. But again, it addresses the
rather demeaning statement regarding the personality flaws of anyone who
does not have a degree, for any reason.
As for the value of a degree in Computer Science: I would consider it
roughly equivalent to about five years of software development, but with a
better ability to grasp new ideas and concepts as they emerge.

In fact, the value is not in the degree itself. The value is in the
knowledge that has been obtained by means of getting the degree. The degree
is only evidence, of use to the employer considering a candidate, but not
necessary for the developer. For example, you might say the same thing about
having a car being essential to getting to work. But if one works at home,
the car is not necessary. What *is* necessary is having the means to get to
work, whatever means they might be.
However, in general, if I were to advice a high school graduate who was
interested in writing software if they should go straight into coding, in
today's environment, or stay for the degree... I'd advise the degree.

Agreed. All I've been saying is that it is necessary to discern between what
is valuable and what seems to be valuable. Knowledge, creativity,
self-discipline, motivation, these are valuable. A degree may or may not be.
And, in some cases, it is of no use whatsoever. Still, in general terms, it
usually is. But statistics are something completely different from the
individual cases that comprise them. A dependence upon statistics *alone* is
unwise. It is important to understand the underlying causes of the
statistical outcomes in order to be as successful as possible, and when
possible, to apply that understanding.

Only so much can be measured. Only a portion of that can be ascertained as
accurate. And nothing is certain. Everything is a trade-off. A university
can provide one with knowledge, but it can also have the effect of limiting
one's ability to think in certain ways, as it is often demanded of the
students that they change the way they think in order to succeed in the
university. In fact, any teacher/student relationship can have that effect.
This can have the effect of destroying creativity. It may have the effect of
encouraging creativity as well, depending upon the teacher. Creativity is
what gives us the ability to derive new information from existing
information. It is how we move forward.

--
HTH,

Kevin Spencer
Microsoft MVP
Professional Numbskull

Show me your certification without works,
and I'll show my certification
*by* my works.
 
J

Jon Skeet [C# MVP]

Verde said:
<< I meant what I said though - if you have a

Okay then..
But first I'm only pointing this out because you specifically asked; I
really have no interest in enumerating such things for the sake of being
punative or vindictive. Also, if you disagree then fine - let's not keep
this thread going. I doubt we're going to change each others minds on this:
So here goes..

<snip>

I'll answer this when I have time, but it will need careful attention,
so it'll be in a couple of days or so. Just thought I ought to reply
now to let you know I wasn't ignoring the post.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top