views:

546

answers:

9

I am currently reading for a BSc. in Software Development, and the time has come for me to start thinking about a topic for my thesis.

I have recently started learning C by myself and I now wish to base my dissertation on something that involves low level development. This is because I wish to get very familiar with low level fundamental programming.

Something that I have in mind is maybe creating a Domain Specific Language targeting something small. Or maybe something that involves Compiler techniques; maybe comparing the techniques used by different compilers and measure them ?

Something else I also thought of doing was something based on Joel Spolsky's articles The Perils of JavaSchools and The Law of Leaky Abstractions; the point of the thesis being that if students only get taught Abstractions and High Level languages rather then low level fundamental languages, they will not be able to understand the problems that arise when the Abstraction breaks.

I also think that it would worth mentioning that it is becoming harder for employers to find exceptional programmers with a language such as Java or C#, instead of C.

Can you please share some thoughts and ideas with me as regards my mentioned topics?

[Update]
I think that I will do my thesis on the dangers of modern day abstractions of Software Development.

inked has made a very interesting point, especially with this statement:

If easy to use tools were made available so everyone could build rocket ships, would they be good rocket ships that could be navigated reliably and safely and used by, "the masses?"

I think that if I focus my thesis specifically on this, it would actually lead to somewhere.
What do you think? Anyone care to elaborate more on this idea?

[Update] MarkJ posted the following comment for inked's answer:

The solution to the "rocket ship" problem is better regulation of the industry. There are easy-to-use tools out there that allow you to build aircraft (perhaps not rocket ships) but in most civilised countries it's against the law to lift them off the ground, because you'd be endangering the public. Similarly laws prevent unqualified people setting up as electricians or gas engineers. When software development is more mature as an industry - it's still quite new - there will be similar restrictions

I think that this is quite an interesting point and also worth mentioning and expanding upon. Software Development is quite a recent industry and maybe in the future, there will be restrictions as to which software is "released to the public".

Can anyone please elaborate further on this point?

[Update]

Here are the links that I have collected up till now that may help me with my research:

Can you please point me to any more related articles as regards the subject of 'the problems with abstractions'?

+1  A: 

You could write about programming on embedded systems. There is a C compiler for the GameBoy Advanced, which requires super low-level stuff.

Rantaak
+1  A: 

Go get a BeagleBoard (or something like it) and an ARM toolchain (gcc and friends would be fine), and write a bootloader or some drivers for it!

Carl Norum
+8  A: 

I think the DSL for a low-level language is a better thesis idea than a paper on the perils of abstraction. You'd have a concrete deliverable to produce, a plus it's more objective.

Kaleb Brasee
Agreed. If the examiner doesn't agree with your line of thought on the perils of abstractions, you could find yourself in a peril. I'd go with a thesis that produces something that either works, or doesn't.
Winston Smith
I think this is a least-risk, yellow-y approach to one's Thesis... though maybe a wise stance at Bachelor levels, it's been too long since even one of my kids got their Bachelor degrees for me to feel sure (I do recall my son's BS, Financial Econ., thesis, a broadside attack against Germany's macroeconomics financial stance... he did get a Summa Cum Laude degree, even though, six years later, Germany's "excessive" prudence seems less crazy... point is, he argued it well, cogently, and with abundance of literature refs, NOT whether the professors agreed w/him or not -- THAT'S IRRELEVANT!-).
Alex Martelli
A: 

I've recommended this book in other posts: "The Elements of Computing Systems: Building a Modern Computer from First Principles"

http://www1.idc.ac.il/tecs/

Using software-emulated hardware, you build complex logic gates from Nor, then a CPU, RAM, then a full computer. Write an OS, assembler, and build an OO language on top of that.

z5h
+1  A: 

A thesis question: If easy to use tools were made available so everyone could build rocket ships, would they be good rocket ships that could be navigated reliably and safely and used by, "the masses?"

No?

Then why is it that people take up programming and think they can design systems without fundamental computer science knowledge? What would be the impact of these kinds of programmers on things like... Operating Systems? What would those OSs act like? (bloated? slow? unstable? Hungry for more CPU and memory -- whereas systems like Unix can support dozens, if not hundreds of users on i386s and have, for years? Sound like anything we've had to deal with?)

Put another way: Are the various, pre-made, "tools," and, "components," companies like Microsoft make available actually helping, or, in the long run, are they creating a sub-species of programmer that is only superficially aware of the underlying engineering that went into those tools?

But, to Rantaak's suggestion, the GameBoy tools that are out there are really cool, really free and work well! I'd only suggest you get an adapter that allows you to put your games/programs on an SD card, so you can play them on a physical device (that is REALLY cool). The adapter doesn't cost much.

inked
inked, you made a very good point with the two first paragraps; so basically, you are suggesting that i go with the point of the articles of spolsky ?
Andreas Grech
Sure. Here's a good place to start your research: getacoder.com. Huh? Yup. Look for all the college homework assignments that are there. Some are so obvious, you can Google them and find the actual class they're coming from.But don't discount the satisfaction of throwing together a good game on the GameBoy either. Even if you learn that platform for fun, you'll learn more than any professor could ever teach you. ARM programming, bootloading, drivers... I'm getting a woody just thinking about that stuff!
inked
Learning to program for the gameboy isn't going to be a suitable thesis project... If you wanted to be an embedded systems engineer, you'd already be taking classes in that.
Paul McMillan
yes true; That's why I'm focus on the Abstraction point.
Andreas Grech
The solution to the "rocket ship" problem is better regulation of the industry. There are easy-to-use tools out there that allow you to build aircraft (perhaps not rocket ships) but in most civilised countries it's against the law to lift them off the ground, because you'd be endangering the public. Similarly laws prevent unqualified people setting up as electricians or gas engineers. When software development is more mature as an industry - it's still quite new - there will be similar restrictions.
MarkJ
@MarkJ: ah yes, that's a very interesting point, thank you
Andreas Grech
Not a real good analogy. All things that go up in the air that can carry a person present a danger to others if used incorrectly. Much software simply presents no danger to anybody.In most industries where software can present a danger there is already requirements and regulations that will protect the public because the entire system, including software, has to be safe. Software is usually only a single piece of a larger puzzle.
ElGringoGrande
Better regulation... isn't this akin to having a manager who hasn't the slightest clue what you do, and having this person do your performance evaluation? Regulation is a false God. Once people put their faith in regulation, they quickly abandon common sense, even in the face of self-preservation. Heck, even pure greed is a better manager of risk than any regulation ever was.
inked
Look at this another way: Even "qualified, professional, certified," developers get it wrong - and that's when they have explicit "regulations" to follow. If I'm wrong about this, then the Browser War never happened and every Web page written for IE works flawlessly on Safari, Opera and Firefox and vice versa. We know it did happen and the battles are still being fought and won. Was regulation the key to solving that problem? No. The free-market was. Sure, MS was in the lead for a long time, but they're losing ground every day.
inked
A: 

An idea I've long considered is implementing a DSL from scratch. That is, bootstrapping the language in itself in bare hardware. This would be a worthwhile project for embedded or homebrew hardware.

There was a great write up in another SO question, bootstrapping a language, about someone who did exactly that.

Dour High Arch
A: 

What you describe as "low-level programming" sounds a lot like embedded software.

If you want to learn about this, get yourself a development kit for a low-end microcontroller, such as for a PIC, or STM32.

Comparing compilers for a given microcontroller could be interesting. It would probably be simpler to use a chip with a small instruction set, such as a PIC.

Can't comment on domain specific languages; embedded software tends to be written in C (or maybe C++)!

(Incidentally, regarding the suggestion of using a Gameboy for development: I think that's too high level. Keep it simple. If you use a PIC, your interface is going to be some LEDs; work your way up from there).

Steve Melnikoff
+4  A: 

Have a look at this video of my Pycon presentation on "Abstraction as Leverage" (you can also download the PDF etc) -- it's very general for the first 30 minutes or so, I only give an extended Python example (App Engine hooking) at the very end. I think the quotes and links from the presentation may give you helpful materials and ideas. (I've also given longer versions of this talk, at OSCON and Baypyggies, but I don't think they were filmed). The "Perils of Abstraction" is a theme near and dear to my heart;-).

Jeff Attwood also has am interesting discussion on the subject in this post (which came a bit too late for me to reference it in the presentation above).

Edit: aha, another can't-miss-this-one reference: this blog quotes excerpts from Brad Fitzpatrick's chapter in Programmers at Work, such as,

In practice, nothing works. There are all these beautiful abstractions that are backed by shit.

You probably can't quote Brad's directly in academically respectable work, but, it seems the phalanx of sustainers of Joel's "Law of Leaky Abstractions" is growing, though some (like me;-) quote him, and some others have their own (perhaps scatological) preferences on how to express their strong agreement;-).

Alex Martelli
+1 Thanks very much for your video
Andreas Grech
A: 

Kaleb Brasee meantioned it, but I want to stress it.

Regardless if I believe the thesis or not, the major problem is to find objective, in the ideal case falsifiable metrics for it. For the topic you proposed, this will be very, very hard to get more than anecdotical evidence.

dmeister
what do you mean by falsifiable metrics?
Andreas Grech
The idea is there must be a way that someone could show that your thesis is wrong. For example that you make predictions based on your thesis that could be wrong. Wikipedia has an article about "Falsifiability".
dmeister