Chad Clark's Open Journal : 2008-04-23

Historical Entries   Recent Entries   About The Author   RSS  

April 23, 2008 :
1) Skype introduces a flat monthly fee for unlimited long distance calls.

The tmcnet.com post reads:

  As per the first option, users in the U.S and Canada can choose to make
  unlimited calls to landline and cell phones across Canada and the United
  States for just $2.95 per month.

2) On this day in 1984 : discovery of HIV is announced.

It may not have actually been on April 23rd.  Regardless the BBC notes:

  The discovery of a virus which may cause Aids, the fatal disease sweeping
  through America, has been hailed as a "monumental breakthrough" in
  medical research
  
  The development was announced in Washington by US Health Secretary
  Margaret Heckler.
  
  She said the virus was a variant of a known human cancer virus called
  HTLV-3. A blood test has also been developed, which, she said, would be
  available within six months, preventing the tragedy of transfusion
  patients contracting the disease through tainted blood products.
  
  ...
  
  The HTLV-3 virus was discovered to be the same as the LAV virus
  discovered in France. To avoid confusion, it was re-named HIV in 1987.

3) Advice for one potential programmer.

Someone asked if I thought he could get an entry-level programming job if
he took a programming course.  Here are my thoughts about it.

To answer your question directly I would not be likely to hire someone with
one course as a programmer and put him on a team with experienced
programmers.  I might if I wanted the team to train him but that would be
expensive.

Some people might hire inexperienced students because it is cheaper in terms
of wages (but not necessarily productivity).

If you could market yourself as someone with programming knowledge that
relates to a field I would be more inclined to hire you over other people.
If I were looking for someone to do photoshop work and someone knew how to
script photoshop they would be valuable because (1) they know photoshop and
(2) they know how to automate the tedious, time consuming work.

As I recall the first comp-sci course teaches how to write and run programs.
It teaches basics like reading files, looping over a list of numbers,
performing arithmetic, etc.

The second course teaches some intermediate stuff like using using an
abstraction called an "object" and data structures.

After that there are courses about data structures and how to figure out
which design is faster than the other or which uses less memory.  These
courses go over a lot of stuff that I expect an experienced programmer to
know.

These later courses are (I feel) what make a comp-sci graduate appealing.
You don't need these later courses to write a lot of programs and making
something work but having them will help.

The following comments are more general.

I find new programmers stick out.  I mean that when they are new out of
school, when they are new to a language or other tool (like a database),
when they are new to an existing project, etc.

My guess is that nearly all people with only one programming course for
experience (ie no experience professionally or working on a project on
their own) are not going to be very productive programmers.

This is of course a generalization.  I don't doubt a few people have a very
good knack for programming.

For example many people new to programming do not check return values.
They write code that opens a file but not code to check that it worked.
Later the code displays a blank value.  The programmer doesn't know why and
spends time tracking the problem down.

I don't know how many problems new programmers have asked for help on.  I
don't know how many times I asked "what is the return value?" followed by
"always always always check the return value."  Many old guys learn it will
save them time in the long run if they write error checking.

I mentioned productivity.  Note that from a company point of view the above
bug costs the time of both the newer guy and the older guy.

New programmers are not as likely to be familiar with the available
libraries and language features.  (That is not to say there are no old
programmers who never bothered to learn more than a base set of features.)

A big thing is as programmers get experience they gain knowledge and a sort
of feeling for what they work on.  After they have that feeling ideas that
were once complicated are single concepts.  Having these large but seemingly
small concepts allows them to think about and solve problems faster.

When a child learns to count s/he has to memorize ten symbols, the order
they come in, and how to spell and pronounce their names.  If I had to do
that for ten new symbols now it would take a while.

Once the child knows the symbols s/he gets to learn the pattern where we use
the "one" symbol and then loop over all the rest.  Now the child can count
up to nineteen.  (Of course the names don't have a pattern so this step is a
bit confusing but the symbol part is a pattern.)

The child learns that the looping pattern happens with the symbol on the
left.  At this point the child can extrapolate how to count up to 99.  The
child learns to add another symbol loop to the end and can count from 100
to 999.  It becomes clear how to extrapolate further and the child can
count forever.

Years later that child is a programmer and the idea of counting seems a
very simple concept.  Someone new to counting is seeing more complexity.

I do not mean new counters or new programmers are dumb.  Experienced
counters and experienced programmers think in terms of single ideas that
are really ideas built on a bunch of other ideas.

Some people tried to document some patterns programmers use often.  They
called the collection "design patterns".  Someone listed a few patterns
that reduce productivity and called them "anti-patterns".

I am not sure how much the design pattern movement helped programmers find
solutions to problems by looking for a pattern in a book.  One positive
thing design patterns did do was give names to patterns so programmers can
describe systems to each other more efficiently.

This is not meant to make you think I am an old programmer who longs for
his day when we really had to know how the machine worked inside to write
code.  This is meant to make you understand experience has some value.
Some value but experience is not everything.

Old programmers have a reputation for becoming obsolete and/or managers. We
need the new programmers.  They are often happier to learn to use new tools
than the older crowd.

I see similarity between the adoption of new programming tools and how
Thomas Kuhn mentioned in "The Structure of Scientific Revolutions" that new
theories become adopted in part because old scientists die off.



Historical Entries   Recent Entries   About The Author   RSS