[Beowulf] What can a HS student do with a small Beowulf?
Robert G. Brown
rgb at phy.duke.edu
Wed May 24 06:57:41 PDT 2006
On Wed, 24 May 2006, John Hearns wrote:
> On Tue, 2006-05-23 at 15:52 -0400, Todd Patton wrote:
>> Is it the norm for the list that the cluster manager,
>> administrator, builder, programmer, and user roles are played by the
>> same person(s)? Should a high chool student that really wants to pursue
>> a career in computational clusters follow a programming path in computer
>> science or major in engineering or science, - with a minor in computer
> Heck no. Go to college (university) and do something that INTERESTS you.
> If Kyle wants to do comp sci, and it interests him, go ahead.
> Make sure to keep up with the maths and physics courses, and take any
> options you can related to scientific applications of computers.
> If you get the chance to do a summer placement (etc.) try to get one in
> a relevant lab or industry which is using computers to do simulations.
> Then fresh out of college you can aim for an interesting job.
> Remember than most of us these days change career track over our
> lifetimes. You may find some unexpected field which takes your interest
> while at college (and that's partly why we go there).
As a premajor advisor at Duke who regularly advises entering freshmen
and sophomores, let me heartily concur with John -- his advice is dead
on the money and if he ever gets bored with computers there is a second
career waiting for him in academic advising (only it doesn't pay so
> And as regards 'majors', one of the best programmers I know originally
> started in linguistics. He now works for Redhat - and was actively
> recruited by them.
> So I'll reiterate - follow your heart at college. Your enthusiasm for
> computing will show through.
> I agree though - most of the people on this list, and people I work
> with, are physical science types who converted to being computer
> acolytes after graduation. Pure comp sci types get too involved with
> programming Haskell (whatever the heck that is).
> So yes Kyle, take Comp Sci if you must, but resist the snake oil of
> the Pascal programmers. Go over and hang out with the engineering geeks.
> Remember, real programmers don't eat quiche.
Two other useful, nay, critical links:
(The Tao of Programming) and:
(C++: Is it Really a Cruel Joke?). In addition it is critical to not
listen to the siren song of the C++ fiends, who will pull you into the
doom of structured programming every bit as much as Pascal.
Note that C wasn't as well known back when the real.programmers article
was written, but that it also has all the characteristics of a proper
language, especially the ability to either work unbelievable magic
manipulating pointers in complex and even arcane ways without the tedium
of Fortran EQUIVALENCE statements and to break the holy hell out of your
code without so much as a whimper from any sort of compiler-based type
checking system. It also makes it easy to inline assembler and hence
render your program absolutely unintelligible to the vast majority of
quiche-eating coders that might otherwise be viewed by management as fit
candidates for your job (and they might be looking after your desk is
condemned as a health hazard due to the large number of twinkie-eating
cockroaches it harbors).
C therefore has the essential earmark of a good language for identifying
Real Programmers -- it is easy to write completely obfuscated code that
will never be understood by another human on the planet but which
nevertheless actually works. C programmers are hence a valuable
resource and are often considered "irreplaceable" by management in spite
of their generally poor hygiene and "bad attitude towards superiors".
More seriously, my personal experience both learning to code and
teaching a number of students programming and systems administration
over the decades closely mirrors the sort of process John describes and
recommends. I took precisely three computer science courses as an
undergraduate -- basic/introductory programming (assembler and PLC on
cards/IBM mainframes), microarchitecture (writing a machine emulator, an
assembler emulator on top of the machine emulator, and a compiler
emulator IN our assembler emulator, all PL/1 with cards on IBM
mainframe), and numerical programming (in Fortran).
Now I am (in all humility:-) an uberprogrammer, pro-grade
systems/network administrator/engineer, writer about same in many
venues, and even teach computing at various levels all without any
further courses or professional certification. I love to code,
therefore I code. If I need to learn something to code, I learn it.
To my direct experience, MOST serious computer geeks are born that way,
not created by formal educational experience. As in the important thing
for them to do is to take at least ONE serious course in programming,
ideally in a non-quiche eating language (seriously!). The ones born to
it immediately think that it is the coolest thing that they've ever done
in their whole lives and develop an overnight tendency to stay UP all
night drinking Jolt cola (specially imported from California by the
case) and writing code, let their hair grow all lanky and unwashed and
just pull it back into a pony tail because barbershops are all closed
during the hours that they are awake, and exhibit a strange tendency
toward carrying many pens in their shirt pockets and ending up with
inkstains thereupon until they finally buy plastic protectors and --
their transformation is complete. (Just kidding, about at least part of
this, but >>which<< part? Hmmmm:-)
Seriously, among my many colleagues who are professional systems people,
cluster people, coders, and so on, CPS majors per se are nearly the
exception rather than the rule. Physics, chemistry, math, history and
english majors are all represented, the first three probably MORE so
than CPS majors. Computing is fun when you have cool stuff to do with
the skill, if you have nifty programs you want to write, and these days
moreso than ever before in history you can learn on your own.
Linux is the world's premier program development platform, providing you
with world-class code development tools absolutely for free. Even more
important, it provides you with the world's biggest code sandbox -- the
entire shebang available in source, with many projects crying out for
participation. The Internet is the world's largest and most complete
coding textbook at this point, with dozens of COMPLETE reference manuals
and online textbooks on programming and general computing in all sorts
of languages and styles. I have at least three complete books on C
programming on my laptop (all free, all obtained directly from the
internet, for example, the biggest and best of them over 1000 pages long
and absolutely amazingly complete).
So my own personal advice to somebody that likes this sort of thing (and
is hence self-selected as a possible/probable future coder/geek, be it
in cluster computing or in some form of computing yet to be invented) is
-- install linux on two or more boxes at home, on a local network.
Now chant: "TCP, let it be, a cluster, a cluster, 1-2-3" and poof, it is
a cluster. [Seriously -- this is a little known fact -- that all modern
network-based clusters are in actually created by means of this secret
magic ritual, first developed by Dongarra et. al. and passed down from
guru to chela in a ritual involving, for some little-understood reason,
a horned goat, a raw egg, and a bottle of very dry vermouth.]
Then sit down at said cluster and LEARN. Learning in computing these
days basically involves Reading The F***ing Manual (RTFM), and linux
provides ALL the manuals and documentation, available right there either
on-system, available online, or both. Read man pages, HOWTOs, online
texts. Join mailing lists. Buy a few books on (linux/unix) systems
administration, on systems programming, on parallel programming, on
numerical methods (I'd be happy to make recommendations -- again -- or
you can find them in a search of the list archives). GIYF (Google Is
Your Friend) -- with it you can find just about ANYTHING with a bit of
effort. Wikipedia too -- it is well on its way to becoming the
Universal Textbook on Everything.
Pick a project or create one of your own and start writing code.
glade-2 makes writing pretty GUI programs pretty simple, and GTK+ is
thoroughly documented online and in a variety of books. Write a program
to tally the frequency of occurrences of all the letters in input prose
documents or the online dictionary. Write a program to compute the days
Easter will fall on for the next 500 years or so. Write a program to
play tic-tac-toe in a simple GUI with you. Write a web-application in
PHP that accesses a mysql or postgres DB to track your personal OGG
collection and deliver them to YOUR player from anywhere you happen to
be on the network, securely (bidirectionally encrypted traffic, sound
personal authentication). Write a program to crack and decrypt this
traffic -- heh heh -- and steal your own music in transit.
Learn RIGHT AWAY how to use version control and use it to track
EVERYTHING YOU EVER WRITE -- CVS is OK but I'm in the process of
converting to Subversion and it is probably a slightly better choice for
somebody just starting with version control to get started with.
Do all of this for the fun of it, not as part of a course. Actually
TAKE courses (and end up majoring) in whatever you LIKE in college,
subject to the distributional requirements of the school. Sure, maybe
that will turn out to be CPS. Maybe it will turn out to be Mandarin
Chinese, or political science, or physics, or art history, or
philosophy. Geek or not, go to a liberal arts school, not engineering
school as the best geeks are not narrow intellectually, they are broad,
and (sorry to any engineers on list:-) engineering school actively
discourages the electives required to produce a well-rounded education
by basically leaving you with almost no time to indulge in them.
Believe me, a physics or math major (or double major in both) can match
any engineer in technical skills BUT they are also REQUIRED (at Duke, at
least) to take courses in history, philosophy, english, foreign
languages, sociology, psychology, drama -- subjects that teach one to
communicate, to relate to other humans and understand the human
condition, to work well in social groups -- all things that IMPROVE
one's prospects for a satisfying life and associated career(s).
As I said, John's advice is dead on the money. The happiest people in
the world are those for whom every day of going to work is really going
to play -- they love to do what they do to make a living. Coders who
love to code. Cooks who love to cook. Teachers who love to teach.
Politicians who love to lie, cheat, accept bribes, and control the lives
of others while basking in the warm glow of the public eye. [Just
kidding about at least part of that, but again, which part -- or which
politicians?;-)] So decide what you LIKE in college and then MAJOR in it
so you can have FUN going to class, doing homework and all that.
Remember too that learning is all about learning to learn on your own --
you don't have to take courses in something to learn it, and the earlier
you learn THIS the more successful you'll be.
Ultimately ubercoding is something that can be learned on your own, or
with only a bit of a push-start from some judiciously selected classes.
There are many other subjects like this as well and it has never been
easier to do deep learning of nearly anything on your own. Along the
way SOME subject, though, will attract your interest and really REQUIRE
a lot of classes -- with great teachers -- to get you well underway. It
may be complex and engrossing enough to keep you in school through
graduate school and beyond. Might be CPS, might not -- only way to find
out is to take a few courses and try it out.
> Beowulf mailing list, Beowulf at beowulf.org
> To change your subscription (digest mode or unsubscribe) visit http://www.beowulf.org/mailman/listinfo/beowulf
Robert G. Brown http://www.phy.duke.edu/~rgb/
Duke University Dept. of Physics, Box 90305
Durham, N.C. 27708-0305
Phone: 1-919-660-2567 Fax: 919-660-2525 email:rgb at phy.duke.edu
More information about the Beowulf