April 23, 2007
When I went to university, my first year offered an extensive and exhaustive examination of what an array is, and where the sign bit can be located.  In Pascal, and the second course in Java.

Can you see why I didn't continue?

I had been programming since I was 12, and explained the course well enough to have a friend actually pass after a 20 minute crash course by showing him a language reference after explaining memory in terms of a giant row of boxes.

That said, if I didn't have to subject myself to that again, I would love to someday actually learn something.  Until an institution offers learning, rather than edumacation, I'll stick with reinventing the wheel and asking if someone's discovered that yet.

I learned D, jump tables, level-order binary search arrays, as well as geodesic binary search arrays in the past six months that way.

Sincerely,
Dan
April 23, 2007
Dan wrote:
> 
> That said, if I didn't have to subject myself to that again, I would love to someday actually learn something.  Until an institution offers learning, rather than edumacation, I'll stick with reinventing the wheel and asking if someone's discovered that yet.

I'm uncertain of which technical knowledge I truly gained during my studies, and which I also find useful in my work. There were a couple of reasons for this though, not the least the post dotcom jobmarket, leading me to work quite far from my specialization. I _do_ think that the diversity of the studies helped in going for different jobs, and I know that the team and social skills learned are invaluable where I'm now.

-- 
Lars Ivar Igesund
blog at http://larsivi.net
DSource, #d.tango & #D: larsivi
Dancing the Tango
April 23, 2007
Dan wrote:
> 
> Apart from women, it's software and physics that interest me the most; and I'm not much for small talk.
> 
> : )

"Science is like sex: sometimes something useful comes out, but that is not the reason we are doing it"
-- Richard Feynman
April 23, 2007
> You really don't need a CS degree to do most IT jobs

100% agreed

i'll have to stand up for the CS majors here, though... ;)
i think, these (fairly typical) statements about CS majors are highly
dependent on the university. i attended exactly one lecture during the
first semester of my CS major that was supposed to teach you something
about programming. it was actually more an overview of programming
paradigms and languages types. that's it. no more programming taught for
the rest of the at least 4.5 years.
therefore, argumenting that you can learn programming on your own and
don't need to have a CS major doesn't make much sense to me, since you
have to learn it on your own even if you do have a CS major.

what i've learned instead:
- calculus (incl. numerical and differential)
- mathematical logic, knowledge representation
- designing, analysing and proving correctness of algorithms
- loads of algorithms and data structures
- linear algebra, 3d geometry (incl. curves and surfaces), rendering,
lighting simulation
- image analysis, compression, etc. (incl. fourier analysis, btw)
- some machine vision, pattern recognition
- language theory, compiler construction and optimization
- processor and operating system concepts
- analog and digital electronics basics

i don't regret having spent time with any of this.
what i regret not having taken classes in is cryptography. i hope i'll
find the time to make up for that...

Bill Baxter wrote:
> Walter Bright wrote:
>> Chris Nicholson-Sauls wrote:
>>> I tend to tell people that all forms of art seemingly arise from some form of science. Programming just happens to be an artform still closely linked to its base science.  And our own Walter -- if I recall right -- is a prime example of a major developer whose background is in something else.  I'm pretty sure those airplanes didn't require new compilers.
>>
>> My training is as a mechanical engineer, with an emphasis on jet engines. I was fortunate enough to attend a university (Caltech) that thoroughly believed that all their sci/eng majors should be well grounded in a broad range of fields, and as I've gotten older and wiser I see the value in it now.
>>
>> Caltech requires of all its graduates:
>>
>> o    3 years of calculus
>> o    2 years physics
>> o    1 year chemistry
>>
>> among other courses.
> 
> If all you know is CS, then I think you're restricting the kind of work you can do.  It's not too tough to figure out how to be a competent programmer coming from a hard science or engineering discipline.  But going the other way is pretty much impossible.  My tack was to take a lot of CS courses, because they were fun and relatively easy, but go with EE as the major.  It was much more difficult, but I'm glad I did it that way.  The decent grounding in calculus, linear algebra, Fourier analysis etc that I got from that has allowed me to do things I never would have been able to consider had I just gotten the CS education.
> 
> I've heard that CS departments at schools these days are suffering from a big drop in the number of majors.  But that seems to me to be as it should be.  The IT boom brought on a lot of silliness.  You really don't need a CS degree to do most IT jobs.  Yes, *everybody* needs to know how work with computers these days to varying degrees.  Just like everyone needs math to varying degrees.  But that doesn't mean there need to be a lot of math majors, or CS majors.   Almost everyone takes a class or two from the math department, but very few major in it.  Likewise, pretty much everyone these days should have a class or two from the CS dept, but we don't really need that many majors.
> 
> --bb
April 23, 2007
Bill Baxter wrote:
> 
> Yeh, I'm not saying there's anything inherently wrong with a CS degree. But you may be better off with something else, unless what you really want to do is take fundamental concepts of computing to the next level.  Just like you don't major in math just to learn how to use math.  You major in math if you're interested in creating *new* math.  Or discovering it.  Whatever you want to call it.
> 
> If what you want to do is create advanced new compilers or new languages, or new algorithms, then yeh, the CS degree is a good thing, provided it's done right.

If nothing else, a CS background should provide someone with the tools necessary to solve complex problems and prevent too many wheels from being reinvented in the process.  An ignorance of basic algorithms and data structures is inexcusable for someone creating software.


Sean
April 23, 2007
Chris Nicholson-Sauls wrote:
> Dave wrote:
> 
> I tend to tell people that all forms of art seemingly arise from some form of science. Programming just happens to be an artform still closely linked to its base science.  And our own Walter -- if I recall right -- is a prime example of a major developer whose background is in something else.  I'm pretty sure those airplanes didn't require new compilers.
> 
> -- Chris Nicholson-Sauls

I tend to see it the other way, or maybe more often the other way

My continuum of understanding

chaos:
  No understanding

magic:
  you know how to get a finite set of result by rote execution.

art:
  a skilled practitioner can get what they want some/most of the time, and can teach it to some people but can't really say how they do it.

engineering:
  for most useful cases a solution can be derived from the desired result. (for a span of not more than X and a load of not more than Y use a Z type beam)

science:
  for all cases within lax bounds, an exact description of what is happening can be described.

Ironically I think Computer "Science" is generally somewhere between magic (for the "bad" programmers) and engineering (for the stuff Boeing, NASA and the NSA do) most of the hobby stuff is art.
April 23, 2007
Jeff Nowakowski wrote:
> 
> I have a Computer Science degree, and I have never needed calculus, physics, chemistry, etc. in any of my programming jobs.  I resent all the time I was forced to waste taking these courses, instead of learning about my trade.

But many people do.  That aside, science and math courses are invaluable for teaching problem solving skills, which are useful regardless of the problem domain.

> Sure, these topics would have been useful if I wanted to get a programming job in a field that made use of it, but I don't want these kinds of jobs, and there are plenty of programming jobs that don't need them.

I think that's likely true for entry level jobs, but over time I've been surprised at just how useful math and science knowledge has been.  Even seemingly straightforward topics like economics and accounting involve a decent bit of calculus.

> I even wouldn't have minded being exposed to the topics, but I
> was forced to take the same physics and calculus courses as mechanical engineers.  I wasted so much time memorizing formulas and learning how to solve problems that I never touched again.

That's more specific to the school than anything.  One thing I've found is that the larger state schools seem to favor testing information retention rather than problem solving.  One mathematics professor I talked to recently lamented this, saying he had to teach this way because it was what students expected at the school, and not doing so would have generated a lot of complaints.  Interestingly, he has also seen a steady decline in his students performance over the years.  I would guess this is because students are busier today than in the past, but it's interesting nevertheless.

> My understanding is that there is a greater emphasis on Software Engineering as a degree for those who want to actually code instead of doing academic research.  This is a good thing.  Too many programmers graduate from college woefully unprepared for working in the industry.

Personally, I'm more interested in finding people with solid problem solving skills, good communication skills, and an ability to write clear, maintainable code than a knowledge of UML, a facility with specific tools, etc.  The last bit is more related to job-specific knowledge anyway.


Sean
April 23, 2007
Jascha Wetzel <[firstname]@mainia.de> Wrote:

> > You really don't need a CS degree to do most IT jobs
> 
> 100% agreed

I agree too.  I'm not saying "anyone can do it"; I'm saying that a degree doesn't provide as much as it ought in this particular field.  I found my experience almost debilitating and I think there are a few reasons why:

1) By the time you're done 4th year, the exactly implementation you were taught starting 2nd year is already obsolete.

2) Professors were taught by their professors were taught by their professors.  The teacher typically has never been in the industry, and doesn't really understand programming beyond trivial examples on a theoretical capacity.  They're also typically still stuck in the same paradigms and with the same tools as their professor's professor (the 70's).

3) First year professors are really there to study a master's, not to teach.  They typically suck at teaching, not being able to frame the paradigm with the right analogies, but merely having acceptable technical knowledge.

> 
> i'll have to stand up for the CS majors here, though... ;)
> i think, these (fairly typical) statements about CS majors are highly
> dependent on the university. i attended exactly one lecture during

For anyone interested, don't go to University of Calgary for CPSC.

the
> first semester of my CS major that was supposed to teach you something
> about programming. it was actually more an overview of programming
> paradigms and languages types. that's it. no more programming taught for
> the rest of the at least 4.5 years.
> therefore, argumenting that you can learn programming on your own and
> don't need to have a CS major doesn't make much sense to me, since you
> have to learn it on your own even if you do have a CS major.
> 
> what i've learned instead:
> - calculus (incl. numerical and differential)
> - mathematical logic, knowledge representation
> - designing, analysing and proving correctness of algorithms
> - loads of algorithms and data structures
> - linear algebra, 3d geometry (incl. curves and surfaces), rendering,
> lighting simulation
> - image analysis, compression, etc. (incl. fourier analysis, btw)
> - some machine vision, pattern recognition
> - language theory, compiler construction and optimization
> - processor and operating system concepts
> - analog and digital electronics basics
> 
> i don't regret having spent time with any of this.
> what i regret not having taken classes in is cryptography. i hope i'll
> find the time to make up for that...

I wanted to fill the gaps in my skillset, such as learning x86-64 assembler, networking and cryptography, and advanced data structures and algorithms (geodesics, graph theory, neural net algorithms, min-max trees etc.)

No dice, but I've since learned a couple of those points. I also wanted a piece of paper.  No dice.

> >> Chris Nicholson-Sauls wrote:
> >>> I tend to tell people that all forms of art seemingly arise from some form of science. Programming just happens to be an artform still

It really is a trivial science, if you can see through it.  We've built such an abstraction over it that it's hard to see that underneath a kindergartener is learning to use all of the same concepts as a first year university student.

> >>> closely linked to its base science.  And our own Walter -- if I recall right -- is a prime example of a major developer whose background is in something else.  I'm pretty sure those airplanes didn't require new compilers.
> >>
> >> My training is as a mechanical engineer, with an emphasis on jet engines. I was fortunate enough to attend a university (Caltech) that thoroughly believed that all their sci/eng majors should be well grounded in a broad range of fields, and as I've gotten older and wiser I see the value in it now.
> >>
> >> Caltech requires of all its graduates:
> >>
> >> o    3 years of calculus
> >> o    2 years physics
> >> o    1 year chemistry
> >>
> >> among other courses.
> > 
> > If all you know is CS, then I think you're restricting the kind of work you can do.  It's not too tough to figure out how to be a competent programmer coming from a hard science or engineering discipline.  But going the other way is pretty much impossible.  My tack was to take a lot of CS courses, because they were fun and relatively easy, but go with EE as the major.  It was much more difficult, but I'm glad I did it that way.  The decent grounding in calculus, linear algebra, Fourier analysis etc that I got from that has allowed me to do things I never would have been able to consider had I just gotten the CS education.

Good stuff.  We can't just "program", we need to have a field in which we are good at programming.  For me, I'm particularly good with regular expressions and data mining, and I like refactoring code.

> > 
> > I've heard that CS departments at schools these days are suffering from a big drop in the number of majors.  But that seems to me to be as it should be.  The IT boom brought on a lot of silliness.  You really don't need a CS degree to do most IT jobs.  Yes, *everybody* needs to know how work with computers these days to varying degrees.  Just like everyone needs math to varying degrees.  But that doesn't mean there need to be a lot of math majors, or CS majors.   Almost everyone takes a class or two from the math department, but very few major in it.  Likewise, pretty much everyone these days should have a class or two from the CS dept, but we don't really need that many majors.
> > 
> > --bb

We actually do need those few people who are exceptional at CS.  Desperately.  A genius in CS who implements, say, bittorrent or linux or google.com can change how the world works and save us all billions and billions of dollars.

The unfortunate fact is, that unless you're in the top 1% at it, you really shouldn't call yourself a programmer; or rather it should be distinguished that you can hack your way into making a computer do something versus actually understanding the machine and breathing it.

Sincerely,
Dan
April 23, 2007
Sean Kelly Wrote:
> being reinvented in the process.  An ignorance of basic algorithms and data structures is inexcusable for someone creating software.

Heh.  : D

I agree.  In fact I was arguing the same point last week and someone was coming down on me for it.

That said, I'm guilty of a few cases of ignorance and I learn by reinventing the wheel - I also occassionally invent things that haven't been invented yet... interestingly the process of learning that way has let me become good at (re)invention.

I think to myself "self, what would be a really effective way to do this" and then I answer, "well, if I did this it would work" and then two weeks later go "eureka!  It really should be this way!  I wonder if anyone has done that yet..."

: D

Well, at least I ask if it's been done before instead of just assuming I invented it.

Sincerely,
Dan
April 23, 2007
Sean Kelly wrote:
> But many people do.  That aside, science and math courses are invaluable for teaching problem solving skills, which are useful regardless of the problem domain.

I see this idea mentioned over and over.  "you won't need all this baroque knowledge we're feeding you, yet it will help your problem solving skills".  Guess what I do when I write programs?  Yep, I solve problems.  I learned this skill while learning to program, and every time I program it is reinforced.

> I think that's likely true for entry level jobs, but over time I've been surprised at just how useful math and science knowledge has been.

I've been programming in the industry since 1993.  Most people just don't need the math, and if you do, find a converted math major or mechanical engineer to help you out (unless they have forgotten all their math skills, as many of them do since they never use this stuff!).

> Personally, I'm more interested in finding people with solid problem solving skills, good communication skills, and an ability to write clear, maintainable code than a knowledge of UML, a facility with specific tools, etc.  The last bit is more related to job-specific knowledge anyway.

You can learn good problem solving skills, communication, etc. while actually learning valuable software engineering techniques.  I'm not talking about learning Java or UML.  I'm talking about learning how to handle errors (this topic was completely ignored during my education), distributed programming, concurrency, keeping a service up 24/7, testing, source control, project management, etc.  Solving physics problems is a waste of time, unless that is something that appeals to you.

-Jeff