Wednesday, January 7, 2009

Re: [BLUG] Looking to study further in computer science

On Wed, Jan 7, 2009 at 11:54 AM, Steven Black <blacks@indiana.edu> wrote:
> You clearly needed some more focused projects.

Yeap, I pretty much worked on something until I got distracted.

I really need to be interested to pay attention, and I usually need a
*reason* to be interested; like a project I'm working on.

I'd probably be medicated for this sort of behavior in most modern
American schools. ;-)

> I learned Borland's Turbo Basic to make it easier to modify the saved
> games for Moria. (At the time these were uncompressed and 90k.) The file
> format was reverse engineered -- things would've been much easier had I
> realized the file format was clearly documented in the C source. (But
> then, I was 9 and playing with it on my own.) My last BASIC program let
> me wander around the full map and hack on objects, monsters, and the
> player.

*lol* I remember running a hex editor on the binary of Moria and
seeing the "super god mode" code sticking out as an odd legible plain
text word in the middle of unrecognizable binary goop, so I wrote it
down out of curiosity.

It took me a few days to actually use it and figure out what it was, though.

> I have a friend who, IIRC, always writes an implimentation of Conway's
> Game of Life in any language he is learning. It is short enough it is
> doable, but complex enough that it gives him enough exposure to the
> language.

*lol* I'll have to do that with my latest "language", Alice
<http://www.alice.org>.

Alice is a java-equivalent "language" which is constructed via a drag
and drop interface with drop down menus and such. This makes it
literally impossible to make syntax errors, so students can focus more
on understanding programming concepts and fundamentals than on the
mechanics of how to "write" the language.

We're beginning to use it for teaching programming in our Middle School.

BTW, I've found teaching someone how to use a language is a pretty
effective "focused project" to get me to get a basic understanding of
the language and then while I'm teaching it, to get my understanding
tested and hammered on by questions and such so I usually end up
pretty well versed in the basic fundamentals.

I rarely get into anything too advanced, though, when I'm teaching an
introductory course; I have to find my own reasons to explore more
advanced topics.

> It also provides him with an immediate comparison of any two languages
> he had previously used.

Indeed. I've done Life in Java and Python, and I *probably* have
copies of that stuff around somewhere...

> Cheers,
>
> --
> Steven Black

Cheers,

--
Simón Ruiz

_______________________________________________
BLUG mailing list
BLUG@linuxfan.com
http://mailman.cs.indiana.edu/mailman/listinfo/blug

Re: [BLUG] Looking to study further in computer science

On Wed, Jan 07, 2009 at 12:33:52AM -0500, Simón Ruiz wrote:
> I just gotta say that was an incredibly thoughtful and useful post by
> Steven.

Thank you.

> An observation: I've only ever learned a language because I needed to
> or wanted to do something specific and using that programming language
> was a means to that end.

It is important to note that "needing to know it for work" can, in fact,
include learning a language (or other tool with a specific syntax)
because it seems important for a job you are interested in *getting*.

If you're interested in actual paying jobs in the field, it is important
to know the skills actually in demand. If you're in doubt as to which
of any two languages to use in a personal project, an easy answer is
to check out the job listings and favor the language with the most job
opportunities available in it.

People like to see examples of your work, yes, but people like it best
if your example clearly relates to their problem area. Since there are
so many problem areas, the easiest way to hit the mark here is to be
in the preferred language.

> I learned BASH because I needed to administer a few hundred Linux boxes.

Wait a minute... I think I don't remember why I learned BASH.

It might have been straight-up because prior to that I had been heavy in
to BAT and BTM files. (BTM being a 4DOS/NDOS thing with more features.)
I knew the power inherant in a good shell script, even though I didn't
know a good shell language. I'd run in to examples and shell snippets
in my initial Linux investigations, and I'd want to know more because I
liked what I saw.

It might have been back when I was using Make and M4 to create my
webpages. (I learned M4 specifically as a macro language for making
web pages. I've never really liked writing web pages in HTML... and
I've always loved consistent style.) For those unfamiliar with Make, it
leverages the shell to run the commands, which means that in order to
become good with Make, you also need to be good with BASH.

I might have learned it to create better one-liners on the command-line.
I had heard from my father that it not only had FOR and WHILE loops, but
you could use them on the command-line. These are incredible time-savers
when you need them. So, I may have needed them once, started reading the
Info documentation, and sort of gotten distracted with how yummy it was
compared to what I had been using.

More than likely all three of these reasons are actually true, and even
though I can't remember which one came first, I kept going back to the
documentation each time, and each time I not only remembered something
better, I also remembered enough about some other feature I didn't
immediately need, but which later provided a seed to solve a different
problem.

> I've never learned a language because I wanted to learn it.

There are people who learn languages because they want to learn it. They
tend to be the hard-core computer science types who favor theory over
practicality.

When the same phenomena is witnessed with spoken languages you get
people learning Klingon (because they think it is cool, and with no
intention of, say, attending a Star Trek convention in a Klingon
outfit), Esperanto, and the like. (There's another language, too, newer
than Esperanto with similar goals, but with patent problems to the point
that there's a "patent-free" version as well. Unfortunately, I forgot
the names.) Totally impracticle things to know, with little real benefit
in the long term.

Ultimately, my goal has always been to make cool stuff.

> I played a lot with GWBASIC and MBASIC as a child, my dad even got me
> some tutorials to run through, but I never used it and it faded away.
> I played through several JavaScript tutorials and books, but I was
> having more fun with the cool stuff that I could make it do than
> anything really web-related and forgot it all after I moved on.
> Same goes for Visual C++ when I decided to learn "real" programming
> after the short stint with JavaScript.

You clearly needed some more focused projects.

I learned Borland's Turbo Basic to make it easier to modify the saved
games for Moria. (At the time these were uncompressed and 90k.) The file
format was reverse engineered -- things would've been much easier had I
realized the file format was clearly documented in the C source. (But
then, I was 9 and playing with it on my own.) My last BASIC program let
me wander around the full map and hack on objects, monsters, and the
player.

I learned C because I wanted more power. I wanted to do things that you
couldn't easily do in BASIC. I also wanted to write my own games.

I ended up writing more tools than games, though. I like things to be
easy and fast. It eventually led me to system administration with a
heavy bend toward automation.

> Sitting and working my way through tutorials because I wanted to "be
> able to use X language" never really stuck

I have a friend who, IIRC, always writes an implimentation of Conway's
Game of Life in any language he is learning. It is short enough it is
doable, but complex enough that it gives him enough exposure to the
language.

It also provides him with an immediate comparison of any two languages
he had previously used.

Truthfully, if you're going to add languages like notches in your belt,
an approach like that is probably a good one to have. Of course, I have
no idea how much of any of the languages he learned this way actually
stuck...

Cheers,

--
Steven Black <blacks@indiana.edu> / KeyID: 8596FA8E
Fingerprint: 108C 089C EFA4 832C BF07 78C2 DE71 5433 8596 FA8E

_______________________________________________
BLUG mailing list
BLUG@linuxfan.com
http://mailman.cs.indiana.edu/mailman/listinfo/blug