Category: Sci/Tech

Computer Science (by )

Is a Computer Science degree useful for people who want to have a career in software development? Many who work in the field come from physics, maths, or electrical engineering degrees, and do perfectly well. There's a widespread feeling that the concepts taught on computer science degrees, such as formal logic, proving the correctness of algorithms, functional programming, compiler theory, and so on are, at best, only vaguely useful in "real-world" software engineering, There's a sort of warm fuzzy feeling that knowing these things makes you a Better Programmer, even if you never use the knowledge directly, because you're more aware of the underpinnings of the tools you use. But I don't think anyone has ever shown a real benefit. With the obvious exception of people who go into niches such as compiler development, or writing tools for mathematicians...

Software development, in practice, is mainly engineering; often just following simple plans in obvious ways, like bricklaying. It takes skill to do it neatly and well, but not imagination or theoretical background. Familiarity with tools such as off-the-shelf libraries and standard system interfaces like POSIX are probably more useful than Prolog programming to most programmers. Debugging is, in practice, more valuable as a skill than using natural deduction to prove the correctness of algorithms.

But that's not to say that computer science is useless. Many modules in my computer science degree were engineering based, looking at practical topics such as building reliable distributed systems, dealing with concurrent access to resources, databases, networks, and operating systems. Those courses covered how things like TCP stacks are built, but that's necessary information to properly use them; information required by anyone who has to do a good job of writing network software. And the theoretical modules, on semantics, functional programming, logic, Prolog, and formal methods were useful to me as a special case of somebody interested in building new programming languages; a small minority of us nerds-among-nerds bury our heads in topics like continuation-based models of concurrency, and then emerge at the end with practical tools such as programming languages, threading libraries and distributed agreement protocols that the rest of the nerds can use to build applications with.

However, an electrical engineer will be taught programming, aimed at writing embedded software. It will be approached as an engineering activity, goal-oriented and pragmatic, emphasising requirements capture and verification of the result, and debugging. Issues such as working with the constraints of the hardware will be covered. It's no surprise that electrical engineers are widespread and successful in the software industry. But the electrical engineers who make it in software have had to do a lot of learning in their own time, and as such, it's harder to select them; they need to be individually interviewed in depth, rather than being rolled off the University assembly line pre-tested to a known standard.

So perhaps computer science degrees need to diversify further. Mathematics is often split into Applied and Theoretical sects; the distinction is sometimes arbitrary, with most topics straddling the divide in some way, but they are taught with different emphases. Theoretical mathematicians are better trained to go into mathematical research in academia or the more abstract R&D teams, while applied mathematicians are primed to dive into practical problems in statistics, simulation and optimisation. Perhaps we need something similar in computer science; I know that most degrees are modular, and mine let one end up with a degree title reflecting the specialisations one took, but I'm not talking about modules - I'm talking about a fundamental shift in emphasis in the degree, from day one. Everyone should start off with a year of practical software engineering, because even the most abstract theoretician needs to know how their work will be applied (and have the skills to build implementations of their theories, so they can be tested and then applied by others). Teach enough about compilers and computer architecture to give the student a head-start in optimising their code, without going into the detail required to build compilers or design CPUs. Give a nod to formal methods in showing how to design correct algorithms by informally argument.

Then in the second year and beyond, let it be down to modules; the software engineers can go into things like networking, databases, graphics, operating systems, high performance computing, distributed systems, and so on, depending on their desired specialisation. The theoreticians can go into abstract topics. And by all means, at the end, give them a Software Engineering degree if they did mainly software engineering modules, Computer Science if they did mainly theoretical modules, and something like "Applied Computer Science" if they did a mixture. Don't restrict student's choices, unless modules have an actual dependency on the knowledge from previous modules; but at the same time, give them guidance by explaining which modules will help them for different career paths. And don't force software engineers to spend their time learning abstract stuff they'll resent, in the vague hope that it will make them better programmers; it's no more useful than the electrical engineers working in software who had to sit through courses on filter design!

No Wage Slave (by )

I have been seeing some highly disturbing news reports lately about people being forced to work or having their benefits cut - the issue being that they are not actually being offered jobs but are being put on work experience in places like Tesco and Poundland. Then it turns out that the changes currently being made to things means that disabled people including the terminally ill could be forced to work and not just the eight weeks of unpaid work 'normal' job seekers are given.

Neither of these situations is good - they are basically slavery. I could have probably swallowed the job seekers working on community projects and charity shops as I don't think gaps in CV's or in the pattern of doing a job is a good thing unless absolutely needed but big chain stores? Come on!

Worse this will be reducing the amount of people they are actually paying to do the work! Anyway this along with a few other things has inspired another angry political poem by me which I am now going to inflict on you.

No Wage Slave
Bayed go down the commercial drain
Human rights u-bend
Send wraith of pain
Terminally ill aint catching
Government snatching
Chiold's under the poverty line
Finned for not being on time
Crime swine on the rise
Cries in the night of destitution
Prostitution of limb and maw
Leaving lives stretched and raw
Time sinking backwards
Reeling
Hear the keening
Ghosts that fought for freedom
In and out of this United Kingdom
Sever hand that feeds jowled
Gluttonous banker
Ignored by Political

But who steps to the fore
Who gives the ROAR!
Stop think!
This policy stinks

Don't blame the other
For running for cover
Your hand's are stained no better
And suicide teens don't get much deader
Youth terror
Masked error
As this economic storm is weathered

Sink swim
desperation cling
Shame filled
Pill killed

Work for no wage
The government say

I say
Stand up and be counted
Attrition is mounting

Write that damn letter to your MP
Do it electronically
Again I remind you of
They Work For You and My Society

Cos the word be mightier than the turd
Scream and rant
21st C slavery should be banned
Think you can't change that with words
At least try
Please tell me you didn't just ask why?

There will be audio versions at some point on Monday - baby currently keeps churping over any I attempt at the moment.

I feel this disgusting and is putting those most vulnerable members of our society at risk of being used. It is a highly dangerous step backwards.

Alaric’s projects for this year (by )

This year's going to be pretty busy with settling into the new home, but I have a few projects.

  1. Finish the ring casting I nearly finished before the move. That's a priority.
  2. Resurrect my aluminium foundry. In particular, it's our bronze wedding anniversary, so Sarah's going to design a pattern for a sundial, which I will cast in Aluminium bronze, a nice alloy that I can make myself from my scrap aluminium and bits of old plumbing...
  3. Continue with minor stuff on Ugarit, but as a milestone, build the distributed storage backend, which will rock.
  4. Work on my wearable computer project. No specific milestone for this, as it's currently a long drawn out research/prototyping phase as I sort out many details.

Wish me luck... I usually suffer from "all my weekends getting eaten up", but as my New Year's Resolution has been to spend at least one day every two weeks doing something fun with my children, I'm going to be booking weekend days in my calendar in advance through the year for that and my own projects. Before they get filled up!

Ring casting (by )

A friend has asked me to cast her some silver wedding rings. So I am adapting my aluminium casting experience to silver...

The thing to use for silver moulds is cuttlefish bone, which is soft enough to easily carve into shapes, but can withstand the heat of molten silver. For a single pour, at any rate.

In order to get a repeatably round shape of the correct diameters for the two rings, and so I can quickly carve new moulds if my pouring fails so I can try again, I decided to make boring tools that carve ring shapes of the correct diameters.

The boring tools

As you can see, they're made from nails, hard soldered together, and ground to a cutting tooth at the end. The central spike goes down a guide hole I drill in the cuttlefish in advance.

The tool needs to come down exactly perpendicular to the flat surface of the cuttlefish (made by sawing one side off and then sanding it flat), so I made a special jig to hold them:

Cuttlefish bone in the jig ready to be bored

Then it's just a matter of fitting the tool in a chuck and bringing it down. I first tried rotating the tool by hand, but the result was a bit rubbish, so I bit the bullet and just turned the Dremel motor on, which produce a quite perfect circle.

Cuttlefish bone in the jig ready to be bored

The cutting jig

Pour two mould in the cutting jig

I made a couple of moulds, each with a matched flat cuttlefish to go on the other side. I had to carve channels for the silver to flow in by hand, using a screwdriver for rough gouging and a craft knife for the finer parts.

The silver was heated by blowtorch, in a refactory cup called a scorifier:

Preparing for pour one

But first I had to prepare the silver I was given - in the form of a coin, which I felt a bit bad about sawing in half:

The silver (back)The silver (back)

Sawing the silver into two piecesThe silver, cut in half

I melted half of the silver and poured it into the first (roughest!) mould:

Pour one

When I cracked it open, it seemed I'd not used enough silver, but everything had otherwise gone well:

Pour one mould opened - not enough silver

So I pulled the incomplete casting out, crushed it up, and added the other half of the silver, and gave the second mould a go. Here's a picture of it with the channels cut, before I clamped it:

Pour two mould

I put it all together and got ready for some melting:

Preparing for pour two

But this time, as soon as I started pouring, the silver suddenly froze on me, so hardly anything went into the mould:

Pour two failed due to insufficient temperature

It seems that the larger mass of silver wasn't heated up quite as far as the first pour had. I need to rearrange my firebricks to make a better forge to heat the silver in, so heat loss is slower, I suspect...

Hall effect sensors (by )

At the Bristol Hackspace this evening, I powered up a Hall sensor.

The Allegro A1321 takes a 5v supply and outputs 2.5v - plus or minus 5mV per gauss of magnetic field in the sensor.

It turned out that small magnets don't produce many gauss, so I added a 741 op-amp with a gain of about 100 to get more useful output voltage deflection!

Here's the experimental setup:

Allegro A1321 5mV/G hall sensor and a 741 op-amp

WIth no nearby magnets, we read about 3v:

Quiescent: 3v

But with a very nearby magnet, we get a large deflection, which drops as we get the magnet many cm away, but is still significant:

Magnet brought very close Magnet a few cm away Magnet many cm away, still showing a reading

Clearly we still get significant readings a good distance away, and the nonlinearity isn't too bad; it doesn't max out with the magnet very close but still varies many cm away.

For my next trick I'll make a few of this circuit on some veroboard and hook the outputs up to an AVR with several ADCs that I have lying around, and try comparing the results to measure position (and maybe orientation?) of a magnetic probe...

WordPress Themes

Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales
Creative Commons Attribution-NonCommercial-ShareAlike 2.0 UK: England & Wales