Mark commented on Masters Degrees in computer science:
> ... I've looked at the master's programs for ... nearby schools
> and I see the same thing: the courses I finished taking as an
> undergraduate fifteen years ago. Everything I've needed to learn
> to do my job and explore beyond it I've learned on my own, whether
> it be C++, 3D graphics, CORBA, Ada 95, distributed processing,
> and I've done it far more efficiently and cheaply than I would
> have by getting a Master's degree.
The purpose of a Master's Degree (or Bachelor's degree) is not to
prepare people for a job. Why are there job-related courses
at the Master's degree level? The purpose of Academia is to do
research, both basic research and applied research.
The computer science field is rapidly approaching this ideal where
the job market is looking for skills instead of degrees.
And when degrees are required, they are domain degrees.
These domain degrees are likely to be finance, electrical engineering,
chemical engineering, biological engineering, communications
engineering, control systems, nanosystems, robotics, and for the rare
compiler company even computer science.
Of course a math degree is substitutable for all of the domains,
since math is the queen of the sciences and the empress of all
domains. No smiley: seriously, mathematicians can not only substitute
for any engineer, but they can actually explain the domains to
those engineers, once those domains are modelled mathematically.
Between a mathematician and a domain expert, the domain expert is
laid off, because that mathematician: she can really do more jobs.
However, to get a job, a degree is often no needed. Most companies
will now hire someone with the exact skill they need with no
interview, no degree, and guaranteed no layoffs for 6 months.
The catch: you must demonstrate on the spot that you can make
their two broken systems work (and work together with each other).
For example, two systems like SAP and CORBA.
For example, ODBC and Silicon Graphics.
For example, Ada and DOS.
For example, Java and opening files for output.
For example, pl/sql subprograms and calling from PRO-C.
For example, how to replace a $1000000 satellite ground station with a PC.
For example, how to use a tool to reduce by 20% the time it takes to do guis.
For example, how to use web technology to read files on user machines.
For example, how to put a database on line using web technology.
For example, how to find hanging pointers in C programs (convert to Ada :).
> If I can get a Master's by being given the book list, and doing
> the tests and the project(s), okay, maybe I'll think about it.
> But I'm not going to waste a semester sitting in a classroom
> going over material I've long since mastered as part of my job or
> could pick up on my own in a few weeks at most.
Agreed. Many believe that we should not measure student progress by
the number of hours spent sitting in classes. Instead we could measure
their progress by tests (reading, writing, arithmetic) and
experiments (fine arts, sciences, and politics).
Luckilly there is a way to do exactly that, for today's computer
Skip the masters and go directly to the PhD. If you can pass the
comprehensive test, then you can also skip all the classes, whose
only purpose is to prepare you for the comprehensive test!
Earn credits by doing research projects and writing up the results.
Culminate in a slightly bigger research paper called a dissertation.
Stand in front of reviewing committees; dont sit in back of classrooms.
Mark's comments have the right attitude towards both education and
career. We must break out of the mould of stale opinion. That is, when
opinions get mouldy, you should leave them behind.
When you have memory leaks and hanging pointers, temporarily convert
to Ada to fix them, then convert back to more dangerous languages.
When you wish degrees, get them through research instead of through
listening to lecturers.
And the Ada language has instigated a lot of realtime problems that
have not yet been solved.
Did you know rate monotonic is well known only on single-CPU systems?
We are only beginning to study it for multiple-CPU systems.
Did you know that people measure the difficulty
of maintaining code by counting lines of code instead of by the
coupling and cohesion, because no one has researched the exact
effect cohesion has on (a) analyzing the impact of change,
(b) configuration management, and (c) difficulty of testing?
Did you know that we do not know exactly how hard it is to untie
a knot, and that efficient algorithms for many types of robotic
paths and other simple geometrical things have never been researched?
There is a lot of stuff out there that can be done, and a lot of it
was kicked off by Ada's building parallel tasking right into the
language. It will take 200 years of research to really understand
the full application of tasking to computer applications. And each
of us should participate in this research, to the extent that we