Subject: Image Processing Course - End of Story (?)

From: Shlomi Fish <[email-masked]>
Date: Fri, 7 Dec 2001 22:26:09 +0200 (IST)

After I submitted a second appeal (in which I wrote the entire test in
Heb-LaTeX so it would be more readable) I got 5 extra raw points in the
test, which raised my grade to 58, which is enough to pass the course.

As I may have said earlier, I consider any grade of 55 or above as
satisfactory, and I never tried to improve such a low grade. However, I
still think that this grade does not reflect my grasp and mastery of the
material much less the amount of time I invested in it. But, then again,
nobody said that the correlation between Technion grades and those
factors is entirely linear. (or at least monotonically increasing - :-)).

The lecturer E-mailed a very nice "printed" responce to my 2nd appeal
which may prove interesting in some respects. ( I believe I am allowed to
send verbatim copies of it to individuals). His final paragraph is
interesting (translated from Hebrew):

<<<
Since the Technion employs a system of tests in order to grade with it the
abilities of the students, then the performance in the test is what
determines the grade. While the test determines the grade of the course,
the course's team does not presume to determine your personal ability or
"how much you are worth in Image Processing" (as you wrote in your
E-mail).

The problem is that in a perfect world, the grade would reflect just that.
The only way I can think of to determine a student's precise worth is by
an oral (or otherwise interactive) examination. I suppose having oral
examinations for every student is non-practical, but I don't doubt it is a
better method, grading-wise. But a more practical method would be to ask
the students to prepare treatises on the subject, which may or may not be
applicable for every subject.

I'm still waiting to hear Nadav's responce for my original letter as he
said he had a lot of things to say.

Regards,

	Shlomi Fish

	(I got 58 in Image Processing. And I'm damn proud of it!)

----------------------------------------------------------------------
Shlomi Fish        [email-masked]
Home Page:         http://t2.technion.ac.il/~shlomif/
Home E-mail:       [email-masked]

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: Omer Zak <[email-masked]>
Date: Sat, 8 Dec 2001 01:30:45 +0200 (EET)

> applicable for every subject.

In a perfect world, a student's grade would reflect his ability to apply
the material he learned in his work and/or his research and/or as basis
which he can use to learn and understand more advanced topics.

Apparently Shlomi's lecturer recognized the sad fact that the correlation
between a student's grades and his future accomplishment has much left to
be desired.

My suggestion to Shlomi is (as he already indicated by his acceptance of
the grade) to go on, and when he finishes his studies and starts actual
work, to prove his real worth there.
                                             --- Omer
There is no IGLU Cabal.  The main organizer got 99% in the course about
starting and managing Linux Cabals, which he took in the Industrial
Engineering Faculty.  However this grade did not reflect his
organizational abilities in the real world, and this was the
understatement of the century.
WARNING TO SPAMMERS:  at http://www.zak.co.il/spamwarning.html

---

From: Shlomi Fish <[email-masked]>
Date: Sat, 8 Dec 2001 14:37:14 +0200 (IST)

> which he can use to learn and understand more advanced topics.

I'm not sure that the Technion (or any other university) presume or should
presume to accomplish that. If one has worked hard on a given subject, and
fully integrated it, he should receive a good grade on it, even if he has
no idea about how to implement it in real-life.

I'm not sure how much of the material learned in the Technion can prove
useful in real-life. Those who prove to be good engineers usually can fill
the gaps by themselves. Most of the EE real-life work (much more
programming) is about finding heuristics that work. If the current's too
large in the simulation - you put a capacitor. If there's a bug in the
software, you discover what it is and fix it.

I doubt if a lot of the commercial software employed today was re-factored
as much as Freecell Solver, or employed such a large number of interesting
algorithms or techniques as I implemented in them. Guy Keren, at least,
who was an Atuday, and now is an IT worker, told me it's been years since
he looked at real algorithms, after I told him about one of the things I
implemented in FCS. That was before he and Muli started working on the
System Call Tracker. (Guy, please correct me if I mis-quoted you).

> work, to prove his real worth there.

The question is whether I get to work in image processing (or any other
course for which I was negatively misgraded) or not. I would like to find
a job in something EE-related, at least for a couple of years after I
graduate. But there's more to EE than Image processing. At the moment, I'd
be glad to find any job whatsoever, assuming it has reasonable pay,
concerning the situation of the market.

Regards,

	Shlomi Fish

> To unsubscribe from this group, send an email to:
> [email-masked]
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: Omer Zak <[email-masked]>
Date: Sat, 8 Dec 2001 15:08:59 +0200 (IST)

> On Sat, 8 Dec 2001, Omer Zak wrote:
[... snipped ...]
> no idea about how to implement it in real-life.

I beg to differ about this point.

If the only reason to learn was to work hard on a subject, integrate it
fully, and enjoy the academic marvels and philosophical aspects of a
subject, then there would have been no need for grades.

Where people learn for their pleasure, there is indeed no real need for
grades.

Grades are needed once someone learns for a purpose - to get a degree, get
a job, get a license to practice.  It is here that a correlation between
grades and one's real ability to apply his knowledge - is necessary.

> software, you discover what it is and fix it.

From my experience, most of the material indeed does not get applied. 
What you really learn is a language - framework of concepts for thinking
about problems which you encounter during your work (or advanced studies).

In the specific example - how do you know that a capacitor is the solution
to the problem you saw in that simulation.  Without the conceptual
background, you'd have to stumble in darkness, or perform tedious
computations.  With concepts, you can figure out (in a qualitative way) 
that a capacitor is needed here or there.  (By the way, in several cases,
the solution to excessive current is a resistor connected in series. 
Capacitors are usually good for eliminating high frequency noise.) 

About software bugs - sometimes the bug is very subtle, and you need all
theoretical knowledge you have to solve it.  For example, bugs related to
interprocess synchronization.  Here too, solid background in theory helps
at emergencies.

> concerning the situation of the market.

Even if your work emphasizes something else, it may happen that you'll
need some image processing background for a special problem, or to
evaluate an image processing software package which your boss wants to try
to integrate with your project.  In general, about 99% of what we know -
is used only rarely.  But without those 99%, we'd live very short lives.

                                             --- Omer
There is no IGLU Cabal.  People know that this was due to legal,
organizational and political problems.  They do not know that this was
also due to }"4$#)&)H [line noise]
WARNING TO SPAMMERS:  see at http://www.zak.co.il/spamwarning.html

---

From: Oleg Goldshmidt <[email-masked]>
Date: 08 Dec 2001 15:43:35 -0500

Shlomi Fish <[email-masked]> writes:

> The only way I can think of to determine a student's precise worth
> is by an oral (or otherwise interactive) examination. I suppose
> having oral examinations for every student is non-practical, but I
> don't doubt it is a better method, grading-wise.

All my university exams were oral (disclosure: MSc equivalent in
physics and electronics in Russia, PhD in physics from TAU). It is
practical, or at least quite feasible. 

While I do prefer oral exams for myself, I can easily imagine that
there are people who prefer written tests. There are too many aspects
to both methods to keep any discussion interesting outside a
professional forum, I think. Oral exams tend to be quite
"personalized" and less detached (or more intimate, whatever formula
you prefer) than written ones that at least have the same or at least
equivalent tasks for everyone. Someone is bound to complain about
personal bias or some sort of lack of affinity, rapport, or
incompatibility between the examiner and the student.

> But a more practical method would be to ask the students to prepare
> treatises on the subject, which may or may not be applicable for
> every subject.

Actually, in my experience this was always a big part of my oral
exams, which always contained a sort of a one-on-one "lecture" given
by a student to the examiner. On quite a few occasions written essays
were taken into account alongside the exam for the overall
grade. Nearly every oral exam (in technical subjects such as physics
and math) included a quasi-written part where one had to solve a
problem or two, write down the solution, and go over it with the
examiner once done.

Again, a treatise is less standardized than a written test, thus
(potentially) less objective.

Once more, I prefer oral discussions for myself. I realize there are
tradeoffs though, and I realize others may think written tests are
better. E.g. a person might be very good at solving problems and
presenting solutions in a written form, but not good at oral
communications. In an oral exam, just like in a public presentation or
a lecture (and I've done my modest share of those), a lot depends on
the overall impression. Besides, consider the idea that presenting
your solutions in a final, written form may be considered a part of
the skills gathered from the course (cf. the quasi-written part of
oral exams described above, or lab reports, etc)...

I wouldn't make a firm statement regarding which system is better in
absolute terms.

-- 
Oleg Goldshmidt | [email-masked] 
If it aint't broken it hasn't got enough features yet.

---

From: Oleg Goldshmidt <[email-masked]>
Date: 08 Dec 2001 16:24:19 -0500

<Omer's words kept for context - OG>

> presume to accomplish that. 

That's almost the only thing a university should presume to
accomplish. I don't think it is feasible for a university to give a
graduate the full some of knowledge and skills that should enable the
graduate to start practicing the chosen profession. Universities
should provide a basis for further advancement and education is more
specialized and advanced areas.

> If one has worked hard on a given subject, and fully integrated it,

What's "integrated"?

> he should receive a good grade on it, even if he has no idea about
> how to implement it in real-life.

My remark above should not be misconstrued as to mean that
universities provide "abstract", "theoretical" knowledge
only. Especially not in such practical subjects as EE, CS, physics,
etc. I do believe your statement is false and dangerous. I pity you if
your professors do not explain how their subjects are used in real
life.

> useful in real-life. 

I recall students who neglected hydrodynamics in the second year
because they came to study electronics and thought hydrodynamics was
irrelevant. In their fourth year, when they were deep into their
subjects of choice, the smarter ones realized that they had to juggle
their busy schedules to attend those lectures with the then
second-year students to fill the gaps.

Wait till you get some real-life experience (a few years worth of it)
in your chosen field to judge what was and what wasn't useful, and
then think really hard. At least that's my advice.

> Those who prove to be good engineers usually can fill the gaps by
> themselves.

Those who prove to be good engineers will realize early on that the
whole point of getting an education is to enable oneself to go about
filling the gaps in an intelligent, efficient, and purposeful way, and
to save one much time, effort, and frustration down that road.

> Most of the EE real-life work (much more programming) is about
> finding heuristics that work.

Generally wrong. Normally, you first ask if there is an algorithm that
works. Only when you are sure there isn't, you start considering
heuristics. In the cases when it is right, how are you going to search
for the right heuristics? Determining whether on not you need
heuristics and if you do, how to find the right one efficiently, is
where education (and experience) helps. A lot.

> If the current's too large in the simulation - you put a capacitor.

That's not heuristics. At least it doesn't sound like one... It
doesn't even sound like a correct statement outside of the problem
context. Please do not describe the particular context you had in mind
here - it's not relevant.

> If there's a bug in the software, you discover what it is and fix
> it.

You do realize this statement is devoid of real meaning, do you?

> I doubt if a lot of the commercial software employed today was
> re-factored as much as Freecell Solver, or employed such a large
> number of interesting algorithms or techniques as I implemented in
> them.

That's a very strong statement. Sounds like you should drop out from
studies and start a company called MegaHard Ltd - your success is
virtually guaranteed. ;-)

Anyway, did you learn those algorithms at the Technion, or did you
invent them yourself? Assuming the former, did you implement them or
did you use libraries that do that for you? Assuming the library path,
how did you chose among the different approaches and implementations?
See my drift?

There is a difference between a talented autodidact and an experienced
and educated professional. A talented autodidact can become an
experienced and educated professional with time and effort. An
experienced and educated professional (I assume a certain degree of
talent is absolutely necessary to become one) can go a long way down
the autodidactic road in a new, advanced field with ease and
fun. Assuming comparable amount of talent, there will still be a
difference.

Why do you sound frustrated enough with Techion as to wonder whether
finishing your degree is worth it? [No, you never said that, but you
keep wondering what good it is, in so many ways.] Have you decided
that the diploma roll is the only thing you need from the Technion?

I am not a Technion graduate, but on the basis of the institution's
reputation I doubt it's that bad... ;-)

> course for which I was negatively misgraded) or not. 

The question is whether you become intelligent and educated enough to
learn the principles used in Image Processing and other disciplines
well enough to recognize and apply them in whatever field you found
yourself working in 10 years down the road. The hydrodynamics example
I described briefly above keeps returning to my head. I am still happy
I never neglected it as many of my coursemates. And a year-long course
in linear algebra is useful in just about everything I did
professionally (covering a few distinct fields) since my freshman
year... I am not sure many of my fellow students could foresee this
back then, bright as they were (and they _were_ bright).

---

From: Oleg Goldshmidt <[email-masked]>
Date: 08 Dec 2001 16:30:16 -0500

> grades and one's real ability to apply his knowledge - is necessary.

While there is much sense to it, I'd like to add another wrinkle: most
experienced teachers would probably say, on empirical basis, that the
difference between a student who attended a course and passed a
well-designed exam and a student who attended a course without an exam
is greater than the difference between someone who attended a course
and someone who read a good book or two on the subject at home. That
has implications for "learning for pleasure" as well as for "learning
for purpose".

> about problems which you encounter during your work (or advanced studies).

And thus the framework, which is indeed the subject of the university
education, does get applied.

---

From: Omer Zak <[email-masked]>
Date: Sat, 8 Dec 2001 17:14:11 +0200 (IST)

[... snipped ...]
> has implications for "learning for pleasure" as well as for "learning

Can you tell us what difference do you (or do experienced teachers) see
between the those three kinds of students (student-for-a-grade,
student-for-a-pleasure and autodidect)?

I consider courses with grades as (maybe necessary) evil.  People study,
cram before exams, just to pass the exam.  Not for knowledge.

I myself have been mixture of student-for-a-grade and autodidect.  It has
was more pleasant to learn things on my own.  I did consult syllabuses,
however, to get an estimate of the "official" body of knowledge in a
field.  (I formally studied EE in the Technion, and I learned what I know
in software development on my own.)

I wonder if other autodidects apply the following rules:
1. When you read a book, read all of it.
2. Look at syllabuses and get an idea what does official education cover.

                                             --- Omer
There is no IGLU Cabal.  It is not known yet which group of Cabal
candidates failed the effort - the autodidects or the degreed ones.
WARNING TO SPAMMERS:  see at http://www.zak.co.il/spamwarning.html

---

From: "Nadav Har'El" <[email-masked]>
Date: Sat, 8 Dec 2001 19:28:10 +0200

> "how much you are worth in Image Processing" (as you wrote in your

Interesting. A (wise) professor once told me exactly the same thing, when
I "complained" to him that he took points off my test just because I
misunderstood the question, not because I didn't know the material.

It feels lousy when such misunderstandings happen. I even had a friend once,
a really smart one with a very high GPA, who simply didn't see a whole
page of the test, so he obviously got a lousy grade :) But luckily these
things usually average out in the big scheme of things after you take a few
dozen courses. Of course, a failing grade is very hard to "average out", so
you might consider taking this test (or the course) again if you care about
the grade (and you seem to do, otherwise you wouldn't continue to talk about
this issue...).

> The problem is that in a perfect world, the grade would reflect just that.

Right. And don't you agree that tests are a relatively good refelections
of that? Sometimes you get fluke results: You told us of a case where you
knew the material and got a 58. I can tell you of a case that I admit I
didn't understand a course, and somehow managed to squeeze a 94.

But overall, wouldn't you agree that a person with a 90 GPA knew the
material better than a person who has a 80 GPA?
Of course, it doesn't mean the 90-person is smarter than the 80-person,
or that he will be more successful in real life. I does mean, however,
that during their studies, the 90-person *was* more succesful, and
understood the material (as the professors understand it) better than
the 80-person.

> an oral (or otherwise interactive) examination.

I'm not sure I agree. By definition, oral exams are short - I never saw a
3 hour oral exam. In an oral exam you can't have a question that will take
the student 30 minutes, or even an hour, to think about until he can solve
it, which limits what you can test in such a test. In an oral exam you usually
conclude a question when you see that the student is "onto the right idea",
and you don't wait for the student to complete it till the end - and
students *should* learn how to finish their work to the end, not just know
how to start it.

Have you had oral exams? From the ones I had, I found them much less reliable
and "scientific" than regular tests, and the grades much more "arbitrary",
and less fair. Regular tests usually have strict and predetermined set of
rules by which the grader grades the test.

> treatises on the subject, which may or may not be applicable for every
> subject.

I've taken many many courses in the Technion that didn't grade with an exam.
Moreover, during my masters study, only a minority of the courses had an
exam at all!

In fact, contrary to the popular "bitching" about the Technion and its
professors, I found most of the professors in the Math department to be
excellent teachers, who care a lot about their students and about the
fairness of their grading. Maybe it has something to do with the small
classes we had...

Here are a few alternatives grading methods, all of which I've personally
encountered:

1. Student giving a lecture:
   The student has to prepare a lecture showing his understand in the
   course's material. This is of course what you do in "seminars" (where
   only the students, not the professor, give lectures based on material
   assigned from papers and books), but I also took courses where at the
   end of the normal course each student had to prepare a lecture about
   one example application of the course materials, and we were graded on
   how much understanding of the material we displayed during our lecture.

   There are two problems, though: first, it suits only very small classes
   (about 5 people is probably the maximum). Second, again the grades are
   rather arbitrary and unfair - since your charisma and speaking skills can
   effect your grade.

2. Written treatise:
   Similar to #1, but prepare a written treatise instead of a spoken
   lecture. Again, your writing skills and choice of subject has an effect
   here, not just your knowledge of the subject. Such grading can be fair,
   however, because of the "written evidence" left behind regarding the
   grading.

3. Exercises:
   lazy teachers with huge classes don't bother to look at the exercises
   student hand in. But I had several courses where exercises accounted for
   100% (or sometimes a different but big percentage) of the grade.
   For this to be fair, and not an "easy way to get a 100", there usually
   has to be a large number of hard, long, excercises, and good ethics in the
   class (so people not simply copy exercises). Such courses tend to be very
   interesting, but also very hard - sometimes to the point where it's nearly
   impossible to finish all these exercises in time.
   
4. Pool of known questions:
   This is one of the most interesting grading approaches I've ever seen,
   and resulted in one of the most interesting courses I ever took. It also
   takes a very large amount of very hard work from the professor, so it's
   very hard to repeat more than one semester.

   The professor (in the second-semester "introduction to topology") gave us
   a few pages with about 50 questions, each meant to take a student about
   an hour to solve, and each at the level of a final exam question. He then
   said to us: You can just ignore this list of questions, and come to the
   test and do it. But if you want, you can use this list: the final exam
   will contain only questions from this list. If you come to the test knowing
   the solution to all these questions, you'll probably get a very good grade.

   Of course, this led me to spend over a week (in the last week of the
   semester and in whatever time I had between tests) in solving *all* those
   questions. It was *very* hard, but also very interesting, and I really
   learned a lot from this process. After much hard work, I was able to
   solve all the questions, and obviously I got a 100 on the test. Other
   people who didn't solve all the questions themselves (because of lazyness
   or because they failed to solve some of them) could (and did) ask others
   for the answers. But it's almost impossible to remember answers to 50
   questions you don't understand, so these people didn't get a very good
   grade.

5. Class participation.
   On the other hand, this is the most rediculous grading method I saw.
   In one course, when in the last lecture the teacher didn't tell us
   how he's going to grade us (we had no exercises, bchanim, or anything),
   we asked him and he bluntly said: "I don't want to have to compose a
   test or grade it, so I'll just give each of you a grade based on how
   you participated in class".
   Needless to say, this wasn't fair in many aspects. First, people weren't
   made aware from the start that they should participate because that is
   what their grades will be based on. Second, how do you appeal such a
   grade?
   Because of the appeal problem, he was forced to give all course participants
   very high grades...

6. Aural, interactive, exam. Usually quite short, say 30 minutes - but
   even at that length quite time-consuming for the professor.

7. Normal test, or several tests (e.g., smaller tests being "magen" for
   a larger test). This is the method you seem not to like too much :)

> said he had a lot of things to say.

I don't remember what I had to say then, but I sure said a lot of things
now... ;)

-- 
Nadav Har'El                        |    Saturday, Dec  8 2001, 24 Kislev 5762
[email-masked]             |-----------------------------------------
Phone: +972-53-245868, ICQ 13349191 |A Nobel Peace Prize? I would KILL for one
http://nadav.harel.org.il           |of those.

---

From: "shlomif3" <[email-masked]>
Date: Sat, 08 Dec 2001 19:38:47 -0000

--- In hackers-il@y..., Oleg Goldshmidt <ogoldshmidt@c...> wrote:
> Shlomi Fish <shlomif@t...> writes:
> 

The fact is that while working on let's say image processing and
analysis, I'll use completely different things than what the Technion
 teaches me. OK - it teaches me the basics. But, if I need to find the
value of particular spots on a scan of a comb (my father encountered
exactly such an incident during his work), there will be a lot of
trial and error. I can tell someone that he can detect an edge using a
Laplacian (filtering with [-1 1 ; 1 -1] matrix or something similar -
sorry I don't remember exactly without looking at the material) or
something similar - he'll say that it makes perfect sense, and from
then on, he can get along on his own. 

Most of his work from then on would be to play with the algorithm and
get everything to work. 

The Technion does give his studnets "wet" assignments, but they cannot
be compared to a real test case.

> > If one has worked hard on a given subject, and fully integrated
it,

Integrated is "le'abed" in Hebrew. It means to analyze the material
and thoroughly understand it and be able to implement it on demand.

> your professors do not explain how their subjects are used in real

I'd like to take back this particular sentence. Like I said there were
wet assignments and all. However, I do believe that they do not
compare to a real test-case. Projects are much closer to that, but
they are still not The Real Thing<tm>.

> then think really hard. At least that's my advice.

To be honest, some of the material I learned proved to be useful. For
instance, I implemented a better state collection mechanism in
Freecell Solver after I learned that Quick-Sort had a complexity of
O(n*log(n)).

But most of it is just the basics and concepts. By itself, you won't
be able to become a good engineer. I'm not saying you are better off
without it. However, I think I could have made a much better use of my
time, had I not studied in the Technion, and still know as much as I
do today. Maybe not on Electrical Engineering, but an equal amount
nonetheless.

> to save one much time, effort, and frustration down that road.

I personally don't think I needed the Technion to know how to fill
such gaps. But that's just me.

> where education (and experience) helps. A lot.

I may have misused the word heuristic. By heuristic I mean an
algorithm that works and looks right. 

> You do realize this statement is devoid of real meaning, do you?

What I meant is that you don't start trying to build a model of the
program, looking in the literature for references. You just see where
it occurs, and correct it.

Or - if you discover that you made a wrong design decision - you
correct the design.

> invent them yourself? 

Some of them I learned or heard about in the Technion (e.g: a hash,
merging arrays, a balanced binary tree, etc.). But the vast majority I
came up by my own. I welcome you to take a look at the source, and at
the changes file to see what I did. Or you can read the lecture whose
overview I posted here. 

In any case, my philosophy of a programmer is to invent algorithms
where I need them. While research may takes less time, coming up with
algorithms is more rewarding intellectually.

> Assuming the former, did you implement them or
> did you use libraries that do that for you? 

The only thing I did not implement myself was the balanced binary
tree. I found libredblack and libavl and glib, and Freecell Solver has
an option to use either one. At the moment the choice of the state
collections is abstracted using #ifdefs.

Note that the state collection can also use a hash which I implemented
myself. This hash uses several optimizations which I came up by my own
(as well as rehashing which I learned about in the Technion). The last
time I ran a benchmark it was slightly better in overall performance
than the best binary tree implementation I found. And I added some
optimizations since then. ;-)

In any case, I implemented this hash in the first place, accidently,
because I used a very bad hash function. When I switched to MD5
everything worked well either in it or in GLib's hash (which was still
slower than my own). And the ironic thing is, that I implemented a
very similar function (also very bad) in a Technion assignment for
which I got a perfect grade.

> Assuming the library path,

According to Google (e.g: libavl or libredblack), mainly, or what I
already knew (e.g: glib). Other factors were license, and raw speed.
But like I said, I abstracted the 3rd party dependencies and the code
can be adapted to work with any other one.

> fun. Assuming comparable amount of talent, there will still be a

I was much more enjoying myself (and having learned much more in
knowledge/time ratio) working in the industry, than I did studying in
the Technion. (I worked for two years before I started studying in the
Technion). I'm always exerting time and effort into improving my
skills, but I don't like the Technion way of talking me into doing
this.

> that the diploma roll is the only thing you need from the Technion?

I have reached this conclusion a long time ago - %-). No seriously,
right now I'm trying to finish my degree with as little obstacles and
unexpected things as possible. I'm having some fun in the process, but
I had much more when I worked.

> reputation I doubt it's that bad... ;-)

IMO, even the best schools are literally bad. I'll wager a million
dollars that most of the students of MIT, Harvard, Princeton,
Berkeley, Standford, etc. hate the guts of their respective
universities. And no - they are _not_ better than the Technion in this
respect or in most other respects (except maybe the wider selection of
courses as I've heard).

> back then, bright as they were (and they _were_ bright).

Linear Algebra is very useful. At the moment I'm struggling with
Thermodynamics (among other subjects), which is also a pre-requisite
for nothing in EE studies. While I understand the motivation to teach
such courses which are not directly related to the material at hand, I
think students will never be motivated enough to study them well for
the same reason. The same argument can be made against humanist
courses , so it's a rather dangerous direction, but I was just
mentioning a fact.

Regards,

       Shlomi Fish

> -- 
> Oleg Goldshmidt | ogoldshmidt@N...

---

From: "Nadav Har'El" <[email-masked]>
Date: Sun, 9 Dec 2001 01:21:52 +0200

Isn't this about the 10th time we're having this studying-CS-in-an-university-
good-or-bad discussion on this list?

Before I go any further, I must remind you that I'm not a typical Technion
CS graduate. That is because I'm not a CS graduate at all - I graduated from
the Technion's Math department (BA in Mathematics, and MSc in Applied
Mathematics).

Before I entered the Technion, I considered two departments: CS and Math (I
liked two other subjects, Physics and Chemistry, but these were even further
down my priority list). Before entering the Technion, I already had a rather
broad experience with computers. I knew several programming languages (C,
Pascal, C++, etc), programmed on several operating systems (Unix, MS-DOS,
Commodore-64), knew some theory (data structures, algorithms, compiler theory),
and so on. I learned all this stuff myself. But not the stupid trial-and-
error way, but rather by reading good, advanced, books on these subjects
(remember the saying: "Learn from other people's mistakes: you won't live
long enough to make them all yourself"), and had 7 years of (non-commercial)
experience.

So I decided that doing a BA in CS would bore me. I knew well (I thought)
at least half of the material taught in such a degree, and I couldn't care
less about a diploma or how much money I would make later (I was young...) -
I only cared about having fun studying things that interested me.

So I decided to study math. I really likes the math studies, even though it
was quite hard, and managed to do well. But all during my math studies I
continued to read CS books, work with computers (I was a system administrator
and had a summer job programming a GUI with Tcl/Tk), and took optional
CS courses (I skipped the usual "boring" introductory courses, and took more
advanced courses I wanted to study).

I think I got from the Technion at least two things:
1. An extensive background in Mathematics. This is something which is very
   hard to learn alone from books. This background came in very useful in
   everything I later worked in, from Physics to computers.
2. Learn how to think scientifically and methodically. There is no way to
   underestimate this - sometimes I just want to cry out when I see someone
   programming (or any other engineering work) as if this is some sort of
   trial-and-error work, rather then something that needs to be thought out
   first.

Later, when I had to make the same decision again for my masters studies,
I again chose Math, and again continued to take advanced CS courses "on the
side" (as well as reading books on my own). Now I'm considering doing a
PhD in CS (it's the end of the line in math for me, I believe).

>  teaches me. OK - it teaches me the basics. But, if I need to find the

There's something you need to get out of your mind - the Technion (like
other good universities) is not a vocational school. If you're only there
to "learn a trade" or "learn useful stuff", you're in the wrong place. If
you're only there for a good diploma or to make money in the future, then
perhaps you're in the right place, but you're not going to enjoy your
studies very much.

You should walk out of the technion with common terminology (so if your
boss tells you "use a hash table" you'll know what he meant), and knowing
basic theory. You don't have to go out of the Technion (especially if you
do a 3 year degree) knowing or remembering the details of every possible
algorithm, or knowing every programming language in existence. But after
3 years in the Technion (CS or EE department), when your boss tells you
"You! Write a compiler! Now!" you'll be able to pick up a book on compiler
theory and a manual of YACC, sit and read for a few days - and *understand*
what you're reading, and then be able to implement what you just read.
Without a good background in CS, you simply will not be able to pick up
the (say) dragon book (a good book about compiler theory) and understand
it. You don't need to formally study to get such a background, but you can't
"invent it as you go along" either - you'll need to learn it from somebody
who knows the common terminology and half a century's worth of knowledge -
either a professor or a good book.
Believe it or not, learning from a professor is in the long run quicker than
learning from a book! I estimate that it took me 7 years to learn what I
could have learned in the Technion in just 2 years.

> be compared to a real test case.

Nor should they. I think we had a long discussion about how, and why,
civil engineers don't typically get to design a suspension bridge during
the studies, and by the same token CS or EE students don't usually get to
play a major role in a big, real-life, project.

> Freecell Solver after I learned that Quick-Sort had a complexity of

See? You can't expect to utilize everything you learned in the same year.
I bet that if you work programming for 10 years after your graduation,
you'll find yourself utilizing something from at least half of the courses
you took.

But it's also important to remember, that you never know what kind of area
you'll want to focus on later in life. This is why getting a broad base
and then not using half of it is better than getting half that base, and
then finding out you learned the wrong half...

> do today. Maybe not on Electrical Engineering, but an equal amount

About the "better use of my time" part - I agree. This is why I studied
math (see the whole story above) - I thought that studying CS for 3 years
would be a waste of my time, and studying math would at least teach me
something new (and interesting).

> such gaps. But that's just me.

Tell me the truth: Before you entered the Technion, if you wanted to
write a compiler (just to continue using this example), would you even
know how to go about doing that? If you picked up the Dragon Book (if
you know it), would you have understood what it was talking about - automata,
graphs, data structures, and so on?

If the answer is no, then don't kid yourself - you weren't able to fill such
gaps yourself before you entered the Technion!

If the answer is yes, then you're probably right - you may not need to
study CS in the technion. Maybe you should have studied another subject,
or even EE while focusing more on (say) physics than CS.

> it occurs, and correct it.

I don't understand why you're saying this... A lot of time when your program
doesn't do what you hoped (and it's not a silly typo bug) or when it's not
doing it efficiently enough, you *DO* go looking in the literature, and
thinking about things like proofs (even if not watertight proofs), complexity,
and so on.
Again, I bring up the saying "learn from other people's mistakes: you won't
live long enough to make them all yourself". Finding ideas and algorithm in
literature (or in your notes from the Technion) is just that - being able
to learn from trial-and-error work people did in months or years, in mere
minutes.

> Or - if you discover that you made a wrong design decision - you

And how do you recognize something as a "wrong" design if you don't know
the theory about what makes something "right"?

As you admitted above, before you learned about O(n logn) sorting algorithms,
you might have thought that a simple O(n^2) algorithm you devise was just
dandy. When you would go around optimizing it, you'd probably manage to save
10% running times somehow - never realizing that this problem had been
solved decades ago, and that you could save (say) 90% time if you just
switched to a different algorithm.

> > > number of interesting algorithms or techniques as I implemented in

Guess again. 
Maybe "Microsoft Word" doesn't have many interesting algorithms in it, but
many pieces of software sure do. The Linux kernel probably have a lot of
interesting and very efficient data structures, Gimp has a lot of interesting
image-processing algorithms, Gcc has a lot of interesting compiler theory,
and the list just goes on and on.

Most programs I ever wrote included a lot of interesting algorithms -
some straight "text-book" algorithms, and some my variations on them or
(in rare cases) completely new inventions.

> the changes file to see what I did. Or you can read the lecture whose

After you learn many known existing algorithms, you can start inventing
new algorithms, without fearing you'll be "reinventing the wheel, but
badly". But if someone is arrogant enough to invent an algorithm without
first knowing the existing ones, he's bound to do just that - reinvent the
wheel, but badly. Like coming up with an "ingenuous new O(n^2) sorting
algorithm that is twice as fast as bubble sort!".

> algorithms is more rewarding intellectually.

Yes, but unless you're a genius, you'd come up with less-than-optimal
algorithms many times. Most times it won't matter, but sometimes it will.

> which I got a perfect grade.

So why reinvent the wheel and invent crappy hash functions when you can
open Knuth's book, or find something on the web, and find a good hash
function that people worked for weeks or months to perfect?

Besides, if you had really known your theory, you'd know that MD5 is a
strange choice of hash function for a hash table. MD5 is a cryptographically-
secure hash, and you don't need this feature AT ALL in a hash table.
You could find a great hash function that is much faster than MD5.

> skills, but I don't like the Technion way of talking me into doing

If you studied on your own for two years during your work and you thought
it was a great way to learn quickly, then how come you came into the
Technion not knowing what quicksort was? Maybe your studying-on-the-job
wasn't as effective as you think?
Remember that in 2 years you'd be half-way (or two-thirds-way) through your
degree, and learned a lot of stuff (even if you don't think all of it is
useful), including that quicksort algorithm.

> I had much more when I worked.

It's hard to think you're having "fun" in the technion, when you're
buckling under the load of exercises and tests. Try to think about it
in perspective, e.g., in the summer think about your previous semester.

> respect or in most other respects (except maybe the wider selection of

Maybe it's because many students come to study a subject they feel "forced"
to study (to get ahead in the job market, etc.) and not people who really
chose what they study. Luckily, in the math department this wasn't a big
issue - nobody goes to study math for the "big bucks" or for being envied
by his friends :)

I went about an year ago to an open day in HaifaU (but the situation is
similar in other universities, probably). Each department had a booth to tell
you about it, and why you should study this subject. The CS department's
booth was filled with huge "$" signs, pictures of bill gates, and slogans
of that sort. It was disgusting. No wonder these greedy drones will be
shocked when they find out that in the university they'd actually have
to learn something which is hard, and (god forbid) looks like some sort of
(eeek!) science!

> courses , so it's a rather dangerous direction, but I was just

It's not a fact. I did a whole degree(!) in math, even though I knew I
was probably going to work in computers. When you're not only after making
more money in less time, learning something interesting can be a goal
on its own - it doesn't need to be directly applicable to your job.
And who knows, maybe in 30 years you will want to change your career
path? Maybe your knowledge in thermodynamics will come in handy if
the matter-copying-machine industry picks up? :)

Ooof, this email was long.... :)

-- 
Nadav Har'El                        |    Saturday, Dec  8 2001, 24 Kislev 5762
[email-masked]             |-----------------------------------------
Phone: +972-53-245868, ICQ 13349191 |Open your arms to change, but don't let
http://nadav.harel.org.il           |go of your values.

---

From: Shlomi Fish <[email-masked]>
Date: Sun, 9 Dec 2001 09:50:43 +0200 (IST)

On Sun, 9 Dec 2001, Nadav Har'El wrote:

> Background snipped...

Very well. Part of the reason I decided to study EE instead of CS was to
learn Something I don't Know<tm>. In a way, I have reached this goal, but
I have the feeling that given the valid resources (i.e: references to
books, homework assignments with solutions and lecturers who would answer
my questions) I could have learned everything on my own faster. And enjoy
myself more.

> perhaps you're in the right place, but you're not going to enjoy your

I was not saying the Technion should be a vocational school. I just said,
that a graduate still has a lot to learn before he can implement what he
learned. And so far, my situation is descrived by the second option: I
don't like the Technion; I've already been there too long to quite, and
now I'm there to get a diploma.

> graphs, data structures, and so on?

I knew about automata, graphs and data structures before I came to the
Technion. At least I knew what they were. OK, I believed a hash was the
same thing as an associative array (perl man pages damage), but I would
have understand a description of it (if for instance I read it in Cormen
et al.)

> or even EE while focusing more on (say) physics than CS.

The EE Faculty's courses are split into 4 broad categories: Electronics,
CS, Math and Physics. This is also the broad category of our
external pre-requisites. Of these, I liked the math and CS courses I took
the best. And hated physics the most (mainly due to the lecturers). So,
for the while, I'm staying a clear 5 yards away of physical EE.

> thinking about things like proofs (even if not watertight proofs), complexity,

That's not what I do. What I try to do is to use a debugger to find
exactly when it happens, then realize why it happened, and then fix it or
figure out a better algorithm for the program.

> switched to a different algorithm.

Actually, in this particular case I was told by my friend that Quick-Sort
had a smaller complexity than Bubble-Sort (after I came up with insertion
sort once).

> algorithms many times. Most times it won't matter, but sometimes it will.

Most of the things I invent are not algorithms as such but rather
techniques. For instance, in Freecell Solver, I decided to sort the
internal order of the heaps to avoid permutations of the same state with a
different heap order. Eventually, I realized the user or the 3rd party who
uses it as a library, would want to know the original positions of the
heaps. So, I kept the original indexes of them outside the main
data-structure, so I'll still be able to compare it with memcmp(). The
beauty of the thing was that when I sorted the heaps I could also sort the
indices, and maintain consistency.

It's probable that someone documented such a technique somewhere. But it
did not take me too long to think of it.

By heaps I meant the heaps of cards of the game.

> You could find a great hash function that is much faster than MD5.

At the moment, calculating the hash takes a very small percentage of the
time in running Freecell Solver. Thus, changin it to something else, is
not a major concern.

Besides, I believe Ron Rivest proved that MD5 (or any subset of bits from
it) is a perfect hash function for arbitrarily-sized data.

> useful), including that quicksort algorithm.

I knew what quick-sort was. I just did not realize it had O(n*log(n))
complexity. And strangely enough, my lecturer believed my original method
of using qsort() to merge a sort margin into the sorted array was OK. I
had to explain here why using a merge was better.

BTW, I used my own variation on merge, which used excessive binary
searches to deduce the place to skip. I used it to reduce comparisons
concerning the fact that the sort margin was substantially smaller that
the main array.

> in perspective, e.g., in the summer think about your previous semester.

I'd like to think of the present day as an enjoying day. That what
happened when I worked.

> issue - nobody goes to study math for the "big bucks" or for being envied

In that case, maybe I came to the Technion, partially, for the wrong
reason. I believed I would eventually be hampered if I did not have a
degree - a fact that is relatively true. I also believed studying could be
fun.

> the matter-copying-machine industry picks up? :)

I'd rather cross the Thermodynamics bridge when and if I needs it. My
situation is a bit more complex than someone who is in the Technion just
for the money. I have some fantasies about me joining the academe at least
for a brief time. However, at the moment I don't want to let the previous
4 1/2 years to go to waste, so I'm just going to finish the degree.

There are a lot of things which I want to do and just don't have time to:
work on lectures (the FCS one and various other Haifux ones), work on a
Freecell Solver book (he he), work on my writings, on intersting OSS, etc.
One of the good things about having a job is that you have a free weekend.
Academic studies on the other hand, occupies your time 24*7. Well, almost,
but you still don't have a free weekend.

BTW, my friend noticed that students who graduated from the Technion and
worked in the industry, eventually speak of the Technion much more
fondly, that those undergrad students who are actually in it. I suppose
there is a similar situation in other universities.

Regards,

	Shlomi Fish

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: Shlomi Fish <[email-masked]>
Date: Sun, 9 Dec 2001 12:44:32 +0200 (IST)

If you wish I can send you (in person) the reply of the lecturer. It may
give some context to my quote and may prove intersting otherwise.

He claimed that part of the reason that I received a low grade was due to
incomplete and not well-formed questions that I gave. My feeling during
the test was that I did not have enough time to answer everything
thoroughly, so I tried to answer as much as the test as possible, while
purposely neglecting the quality. I think that if I had thought about
everything longer, I would not have been able to fare much better.

This is yet another reason why I hate such exams.

Regards,

	Shlomi Fish

If:
1. A is A
2. A is not not-A
does it imply that
1. B is B
2. B is not not-B

---

From: guy keren <[email-masked]>
Date: Sun, 9 Dec 2001 17:42:15 +0200 (EET)

On Sat, 8 Dec 2001, Shlomi Fish wrote:

> the gaps by themselves.

the technion does not teach 'material'. it exercisez one mind, and teaches
(or doesn't) methodology. if one person already has a good, working
methodology - one can skip the technion. if one doesn't have this
methodology - one benefits from studying there.

i learned mthodology in the technion - and learned most material on my own
(including my 'reinvent the wheel period' items) - thus, i have to either
think i'm not a good programmer, or to refute your claim - i needed the
technion to learn how to think. if you already have the methodology, then
you've got a head start, and the technion is not for you.

> he looked at real algorithms, after I told him aboutone of the things I

the quote is more or less true. on the other hand - it seems that i do use
and device various algorithms - i just don't think of them as algorithms.
i think of them as 'systems', and i am more into 'system design'. i do use
my knowledge of data structures and algorithms when i _use_ existing data
structures, to use them in a more optimized manner, and know what to
expect and what not to expect of them.

but from the 'graph algorithms' course i got something more important then
material (i.e. a list of algorithms) - i learned, in that specific course,
how to think and design. and the specific alogrithms i learned there are
not as important, as the methodology i learned there (and i've no idea how
i learned this - most students didn't - and for me, it wasn't a process -
it was an enlightenment that was explained to me in a single moment
down the corridor from mayer to fishbach.

--
guy

"For world domination - press 1,
 or dial 0, and please hold, for the creator." -- nob o. dy

---

From: guy keren <[email-masked]>
Date: Sun, 9 Dec 2001 19:00:54 +0200 (EET)

> figure out a better algorithm for the program.

i'm not sure how large are the programs (read: systems) you programmed so
far, or how hard to debug they were - but i've ran into quite a few cases
where a debugger will not show you where the bug is - unless you
single-step through the entire program, in varius different routes.

just a few examples:

when you use multiple threads or processes, some bugs got to do with
timings - if you run it via the debugger, the timing changes , often
hiding the bug.

in the case of the bug discussed on linux-il a week or so ago - the bug
was revealed in a real run, but did not occur under the debugger, due to
differences in memory allocation.

when you debug a large multi-process (possibly multi-host) system -
setting up the debuggers to attach to all processes, and keeping a window
for each, makes using a debugger hard - often harder then re-reading the
code.

when the program is large and does a lot of things - you have a long path
to single-step with the debugger. thus - you use 'binary search'
algorithms to isolate the location of the bug.

my imagination stops here. i hope its now clear that sometimes a debugger
is not good enough, and thus one should practice other forms of debugging
- debugging by reading the code and 'proving' it to be correct. debugging
by doing dry-runs (when its hard to simulate the run's input with a
debugger). debugging by thinking about the algorithm (useful to find
end-cases you've missed, logical race conditions, etc) and there is
debugging by sleeping it over - if you think about the problem in your
head while lying in bed, jut before falling asleep, there is a good chance
you'll come up with either the solution, or an idea of 1-2 more things to
check for, when you wake up. i guess there are other debugging techniques.
there is no course about debugging software - time we set up one, or at
least a debugging tutorial.

> had a smaller complexity than Bubble-Sort (after I came up with insertion

as i remember, this is a false assesment. q-sort is actually O(N*N),
because of the complexity of the 'split' function (i.e. deciding which
item to split around). however, on real-life inputs, it was shown to work
better then many O(N*log(N)) algorithms, because in real-life cases, the
data is not fully un-ordered.

> but you still don't have a free weekend.

then make up your mind of not letting it consume that much of your time.
in most cases, the effort requried to get a given grade is not linearly
proportional to the grade. reducing your efforts by 10% won't reduce your
grade by 10%. actually, i demonstrated that there is often no correlation
at all between the ammount of effort invested and the grade - it quite
depends on the person involved. hmm. so, perhaps this is not applicable to
you.

> there is a similar situation in other universities.

its the same as people who leave the army, and when they talk about their
crappy service, they speak of it fondly. we just learn to repress the bad
experiences we had, and isolate the good parts. look at the people who
didn't do that (yes, they exist all around us) - they become bitter, and
that affects their lives, often (but not always) in bad ways.

--
guy

---

From: guy keren <[email-masked]>
Date: Sun, 9 Dec 2001 19:05:00 +0200 (EET)

On 8 Dec 2001, Oleg Goldshmidt wrote:

> difference between a student who attended a courseand passed a

please don't directly associate "learning for purpose" with "having an
exam at the end of the tunnel" ;)  an exam is but one possible purpose,
and for some people, its does not even serve as a purpose. one can have
other purposes (read: chose other purposes): i learn something in
programming in order to write a program i wanted to write. i learn about
car engines, so i could build my mini-model car. i learn about deseases
and then practice that info while having a trip in a not-so-higienic land.
i learn how to use posix threads in roder to write a posix threads
tutorial. etc.

--
guy

p.s. only one of the exmples shown above is real. the rest might be real
for other people.

---

From: Oleg Goldshmidt <[email-masked]>
Date: 10 Dec 2001 10:17:38 +0200

> On 8 Dec 2001, Oleg Goldshmidt wrote:

<left for context>

> exam at the end of the tunnel" 

I didn't. My point was that that one learns better if one passes
exams in addition to attending lectures and reading books. "Learning
for purpose" was used by Shlomi, I believe, to indicate learning a
profession in order to earn a living later, or similar. I adopted the
term to follow the thread. Never was passing an exam construed as the
purpose of learning - not in my mind, surely.

-- 
Oleg Goldshmidt | [email-masked] 
"If it ain't broken, it has not got enough features yet."

---

From: Oleg Goldshmidt <[email-masked]>
Date: 10 Dec 2001 10:39:04 +0200

> student-for-a-pleasure and autodidect)?

That was not the distinction. I meant that from the point of view of
learning a subject successfully it is considered (and I think there is
a lot of truth to it, based on my own experience) important for a
student to study for an exam systematically and in a disciplined and
focused manner in addition to listening to lectures and reading books
on the subject.

Note that obviously one can be very systematic, disciplined, and
focused outside of a context of an exam. Especially if one tries to
learn something directly applicable to one's work etc. However, first,
I think it's fair to say that most people will find a formal framework
such as an exam, where one's achievements are judged independently,
very helpful in terms of focus and discipline. Secondly, students
(that's the context here) rarely are in a situation where they study
something that is immediately applicable outside of the curriculum
itself. Thirdly, the note above about direct applicability to one's
work often has elements of examination in it, in forms of the next
salary review, promotion, etc - just somewhat more abstracted than the
straightforward lectures/books/exercises/labs -> exam of a university.

In terms of student-for-a-grade vs. student-for-a-pleasure I do think
that normally a grade (at least a good one) is perceived - justifiably
- as value added, because it is assumed that to prepare well for an
exam a "normal" student applies extra time and effort to "integrate"
(using Shlomi's term) the material of the course. Regardless of what
one thinks of one's ability to do just that without an exam looming,
this works for most people. It's a matter of a) formal responsibility,
b) verification.

Can you write excellent code without the need to satisfy a customer or
testing with an independent QA department? I am sure you can. Does the
thought of going out of business if the customer is not satisfied help
produce good products? Normally, it does. Does independent testing
help quality? Please don't argue - I won't believe you are serious,
anyway.

Do you have enough discipline to jog and ride your very own exercise
bike every morning? Yes? Great. Most people who exercise do find the
discipline involved in going to a gym - and the feedback from a
trainer (that feedback is not so different from a grade) - helpful in
maintaining fitness.

Same stories, different contexts.