Software Development
Return to main page.- Tools and IDE's
- My favourite Languages
- Other Programming Links
- Blogs
- Game Development
- Human Computer Interaction
- Programming Languages List
I really like to program a lot. I started when I was 8 years old programming in Basic on a Radio Shack TRS-80 Color Computer II. Two years later we got a Tandy T1000 which was a 286 system with 640KB of RAM and a 20MB hard drive(yes, that's MEGA bytes). In High School, my grandma made a deal that she would double whatever I saved up in two years to help me buy a computer. Well, between selling a horse the next week and my grandpa giving me a $100 every month(she's very frugal with her money, and he wanted to see her have to shell out for the computer), she capped the whole thing at about $2000. So in short order, around my Sophomore year of High School I had a blazing fast Pentium 90MHz(which I still have, on a different motherboard in a different case... It even has the floating point divide flaw that was somewhat famous at the time), a 1 GB hard drive(yes, that is 1 GIGA byte, it was a whopping huge drive at the time), and 8MB of RAM. Well, I upgraded that one occasionally and it carried me through about my sophomore year of college. At that time I got a Pentium III 450MHz with 18GB hard drive and 256MB of RAM. A 100GB hard drive later, that's still my primary system.
Okay, so that was more or less a history of my hardware. In High School, I got into QuickBASIC, which was a huge improvement, followed quickly by C(via Turbo C). Over the years I went from that to Borland C, to Visual C(all legal copies even...). I had several brief interludes with DJGPP in the DOS days. So now, I program primarily in plain old C, but I'm branching in Objective C(via gcc) for my work. I have accumulated a decently large library of useful C code, and a lot of it is organized in a very OO manner and so its pretty easy for me to port them to Objective C objects. I love other languages besides C and so I also do work in several other languages including: VBScript(in Active Server Pages), SQL, Erlang, Forth, assembly(x86, 68k, 68HC12), occasionally QuickBASIC, and I'm trying to build up my skills on PLT Scheme. At some point, I would like to see what I can do in Smalltalk and mess around with Lua some more.
Since I did do my Bachelor's degree in Electrical Engineering, I also messed around with Hardware Description Languages as well. So I know VHDL pretty well, and I have even designed my own microprocessor. My interests in hardware lie in the direction of robotics and microprocessor design(especially stack-based microprocessor's, and architectures suitable for robotics applications). I like to use FPGA's for most of my hardware needs, and I'm really not a huge fan of microcontroller's(e.g. 68HC12, Z80, and the ilk), mostly because I've never had a dev board that wasn't quirky(could just be the quality(or lack thereof) of the labs at Tech though...), while I've had a tenth the trouble with FPGA and CPLD based work.
My first love of programming was computer graphics, and I still come back to it from time to time. I have wanted to do game development, and someday I may actually finish a graphical MUD that Israel Huff and I have worked on for a while. Other times I have wanted to design my own operating system. I still want to design my own programming language. I love digital libraries, and artificial intelligence is something I find amusing.
So after all that, here's a list of things I find useful for keeping up to speed on my various interests in writing software.
- Freshmeat - This is software development website, but they archive changes in versions of software, and links to where the software is hosted, and allow people to announce to the world revisions and other useful information. When you're looking for "open source"(freely available) software, this is the ultimate index to go to.
- SourceForge - Not the same people, but intimately related to Freshmeat. This site is a public site for the hosting of "collaborative development" of open source software. Quite a few freshmeat projects are hosted on SourceForge.
- Unix Haters Handbook - Love or Hate, its entertaining either way...
- Cryptogram Bruce Schneier's monthly newsletter about cryptography and computer security. A lot of good stuff. His books Applied Cryptography and Practical Cryptography are excellent introductions to the field.
- Citeseer - If you're looking for Computer Science research papers, this is the first stop. Among other things, lets you follow links to papers that cite the papers you find(very nice to find out where some research has gone). Very good source. Also has the full-text of the vast majority of papers in its database. Oh yeah, unlike the ACM Digital Library, this is a totally free resource. Of course, students at Tennessee Tech University have free access to the entire library(at least on campus, the off campus facilities never seem to work for me...)
- Olin Shivers - An interesting guy, posts on the LL1 list. Has some good resources on his page.
- Slashdot The premier geek news source.
- I, Cringely - Wild speculation, strange new technologies, rampant rumourmongering. Basically, I, Cringely says what he wants, and what he thinks. He even publishes his phone number and responds to his email(I know, he responded to one of mine within a day!). Right or wrong, he's always an entertaining read. Published every Thursday.
- Dr. Dobb's Journal I have gotten this magazine for maybe 6 years now. Its pretty broad in its coverage, but its a lot of fun compared to some other professional magazines on programming. If you're a subscriber to Dr. Dobbs, you can always get a PDF version of the latest issue at this link.
- JOT: Journal of Object Technology - A relatively new journal with lots of articles about Object Oriented systems, languages, concepts, and theory. They have all their back issues online.
Important Papers
These papers are considered relevant, either to the history, or fundamental theory of computer science by at least some. This list is, um, lacking, and more will be added very soon.
- The UNIX Time-Sharing System - Basically, the paper that introduced Unix to the world.
- In Pursuit of Simplicity: the manuscripts of Edsger W. Dijkstra - Dijkstra was one of the greats of Computer Science. He died in August of 2002. He published a whole lot(including the infamous "Goto Considered Harmful" article, but he wrote a whole lot more that wasn't published. This site is an attempt to move copies of all his works, published or not into one comprehensive online repository.
- Recursive Functions of Symbolic Expressions and Their Computation by Machine(Part I) - The original paper on Lisp.
- Reflections on Trusting Trust - A classic paper on the problem of how to decide whether to trust a computer system, including a novel discussion of "quining" programs(self-reproducing programs, but different from a virus) can be used to hijack a system, even once the bug has be cleared from the source code.
- A Relational Model of Data for Large Shared Data Banks - The original paper by E.F.Codd which introduced the "Relational Model" which is the underlying theory behind modern database systems.
- Computing Machinery and Intelligence - The paper in which the "Turing Test" for Artificial Intelligence originated. Has some other goodies as well.
Specifics
Basically, links about "specific" technologies and/or techniques. Sometimes papers, sometimes books.
- HTTP Made Really Easy - If you've ever needed/wanted to implement an HTTP server or client from scratch, this sums up most of what you need to know. Of course, you could always go read the RFC's, but what's the fun in that?(I mean, why not have one more ad hoc, mostly-standard-but-not-quite implementation of a technology :). Actually, it is fun to do these sorts of things, and they can make you a better programmer. Resume building stuff and all. Also, its useful to integrate HTTP into a program sometimes.
- John Hobby's Publications Lots of good papers on graphics. Particularly graphics algorithms (see Smooth, Easy to Compute Interpolationg Splines).
- Wotsit's: Programmer's File Format Collection
- Graph Drawing - A page with some information about graph drawing.
- On Search - This is a series of articles on searching technology.
- The Theory of Classification - This is a series on object-oriented type theory, especially aimed at non-theoriticians. Here's the articles:
- Part 1: Perspectives on Type Compatibility
- Part 2: The Scratch-Built Typechecker
- Part 3: Object Encodings and Recursion
- Part 4: Object Types and Subtyping
- Part 5: Axioms, Assertions and Subtyping
- Part 6: The Subtyping Inquisition
- Part 7: A Class is a Type Family
- Part 8: Classification and Inheritance
- Part 9: Inheritance and Self-Reliance
Miscellaneous
- Retro Computing Museum - Simulators and compilers for old languages and computers.
- Role Fragmentation - The problem of too many administrators and not enough programmers.
- A Tutorial on (Co)Algebras and (Co)Induction - An introduction to Category theory for computer scientists.
- Theorem Provers
- Axiomatic Semantics
- Denotational Semantics
Operating Systems
- QNX Momentics RTOS
- Free DOS - Don't laugh. Good option for x86 embedded systems.
- AtheOS - This was an interesting project for a while, but the guy who was running seems to have dropped of the face of the earth(I think some of the stuff is at SourceForge). Since it was GPL'ed, some people have forked it and put it on Not sure. Seemed like a cool project. If you can't find the files, I have an older copy of it. Syllable is the chief fork of the codebase(that I am aware of).
- Syllable - Basically, the AtheOS fork to continue the project.
- BeOS - The real tragedy behind the MS Monopoly. This OS was really cool. The Personal Edition was the last official release from Be Inc.
- OpenBeOS - A GPL'ed BeOS clone. Also on SourceForge.
- BlueEyedOS - A Linux kernel based BeOS clone.
- Zeta - A proprietary BeOS clone
- NewOS - A kernel in search of everything else...
- Inferno
- Plan 9
- Linux - These are linux based projects/distros I find interesting
- Morphix-NLP - A version of Linux that comes with a complete line of Natural Language Processing tools.
- ZipSlack - A Linux distro that fits in 100MB, conveniently enough can be booted off of a Zip Disk(or other small read/write media). This would be REALLY interesting if it could be made to boot off one of those USB Keychain Drives.
GUI Kits
<sigh> I'm not a fan of X-Windows, that of course doesn't mean I hate it, but I have always been interested in graphics, and so here's some interesting GUI projects, some X-based, many not, that I find to be interesting.
Interesting Software Projects
These are projects that I may have never used, but still have caught my attention because they do something neat, solve a neat problem, or may one day be of use to me(either ideas, or the code itself).
- FreeType - True Type font rendering
- TTX - An XML based True Type tool.
- Zero Install System - Installation tool for Linux.
- Hans-Boehm Conservative Garbage Collector - Basically, a conservative garbage collector that works with C.
- Zero Memory Widgets - I misunderstood the nature of this project, and I have been corrected(and its much cooler than I thought :). Basically, it reduces the complexity of syncing widgets with your application, and so the interface can be more dynamic. It uses a macro to hide the complexity of traversing the widgets, and a couple of others for minor things. Its pretty neat. Definitely something to look at if you're doing GUI work in C(well, really any language, but the current implementation is written in C, but the ideas would be relevant to any language).
Tools and IDE's
- Doxygen
- MinGW Developer Studio
- Eclipse
- CWeb
- Subversion
My Favorite Languages
- C
- Forth
- Scheme
- PLT Scheme - one implementation of Scheme. Has a pretty good environment and runs on a lot of platforms.
- Objective C
- Erlang - Erlang is a fairly modern language used extensively in telecommunications. It provides internal support for a massively parallel(and distributed) computing model that is passed on message passing rather than shared memory. It has lots of support for reliability(including the ability to "upgrade" running programs by replacing code without ever bringing down the application). Its a pretty cool language.
- Lua
- Smalltalk
Etudes for Programmers
An Etude is a short musical piece to practice some skill in the performance of a musical instrument. The concept applies equally well for programmers, and here I try to list some short programs to write that will help you become a better programmer.
- 100 prisoners and a lightbulb
- Self Reproducing Code - the exercise is to write a program that prints out its own source(and opening the source file and reading it is verboten. The solution must be self contained).
- Synchronized Finite State Machines - This one is by Richard Feynman :)
I would LOVE to have more of these, so as people find them, please send them to me.
Other Programming Language Links
- Lightweight Languages Workshop(LL1) - An excellent mailing list with all kinds of cool people and discussion of the design of languages(often by the designer themselves). I've always wanted to go to the conference, and almost went this. Next year I'm definitely planning on going.
- Lambda the Ultimate - A programming lanaguage weblog. Focuses more on functional languages in general, but has lots of cool stuff. Lots of cross between this and LL1.
- Concepts, Techniques, and Models of Computer Programming (MIT Press, available March 2004) - This is a very good book about programming languages and the thinking and design of a programming language. This is not about Compilers, this is about the theory underlying programming language design.
- CS173 Course Notes - Brown University - Some lecture notes about programming languages.
- Programming Languages: Application and Interpretation, by Shriram Krishnamurthi. Another one, a little different from the other set of notes I think.
- CSE P 505 - Washington University - Lecture Slides and Videos. Graduate level class in programming languages.
- One-Day Compilers(or How I learned to stop worrying and love static metaprogramming) - A talk about program generating programs.
- Introduction to Programming Languages, by Anthony A. Aaby. Another programming languages book.
- S and K Combinators - A variation on the Lambda Calculus
- The Origins of Pattern Theory the Future of the Theory, And The Generation of a Living World, by Christopher Alexander
- Five compilation models for C++ templates
- ASML(Abstract State Machine Language - For specifying formal systems.
- On The (Non) Value of Programming Language Research
- PLT Online :: Programming language theory texts online
LL1 Discussions
There are lots of interesting discussions and insightful comments about language design on LL1. I'm trying to list here the posts that I find to be worthy of remembering or something I want to explore further.
- Questions for a Language Designer and More Questions for a Language Designer(the second post is a summary of the replies to the first post.
- Shriram's 4 categories of attitudes about type systems.
- Explanation of why people some people are uncomfortable with Type Theory.
- A discussion of why mutation can be bad, and why people don't program with less of it.
- More discussion of mutation, and object oriented programming.
- An attempt to answer the qeustion: "What is the difference between a method in an object and a function in a scope?"
- More discussion to answer questions about methods/objects functions/scope. and another one..
- More talk about Object Orientation and mutability.
- A discussion of state and continuations for use in Web Programming.
- Advocating greater use of the 'final' keyword in Java.
- More discussion of the 'final' keyword.
- More about 'final'.
- Link to paper about continuations being used for any control structure.
- More talk about continuations.
- More continuations
- Notes about understanding type systems.
- Something about polytypic typing.
Blogs
- JoelOnSoftware I don't always agree with Joel, and he used to be an agent of the man(ex-Microsoft employee), but he has a lot of good things to say, and he knows how to write software.
- A good article on scheduling: Painless Software Schedules
- Bug Tracking: Painless Bug Tracking
- Another personal favourite: In Defense of Not-Invented-Here Syndrome
- Here's another good one about Architecture Astronauts.
- Some more advice about writing specifications:
- Paul Graham A very famous and successful Lisp hacker. He has a lot of good articles on programming languages, software design, and even social ills.
- His book(free online):On Lisp
- Why Nerds are Unpopular
- Programming Bottom-Up
- Lisp for Web-Based Applications
- The famous article: A Plan for Spam, which brought the technique of Bayesian filtering to the forefront as the best tool for spam elimination.
- If Lisp is So Great
- Java's Cover
- Five Questions about Language Design
- Arc, Paul Graham's new Lisp Dialect.
Game Development
Game development gets its own section. I will probably not make a game anytime soon, but its a fun thing to think about, and so here's some sites I like.
- Gamasutra Requires an account(free) to read the articles. They publish Game Developer Monthly, which you can usually get a free subscription to if you fill out their survey.
- Gamedev.net More of an amateur site, and it shows. The article quality used to be good, but then dropped for a while, more recently it seems to have come back a little. The forums are overrun with 12 year olds who think that "Teach Yourself X in 21 days" is all there is to programming, and the site suffers from a general lack of in-depth knowledge of programming topics, but its archive has some gems, so its worth looking through their articles.
- Skotos A lot of stuff about MUD's and MMORPG design. Some good articles.
- MUD-Dev The MUD Developer list. Its moderated and has a very high signal-to-noise ratio. Lots of discussion about MMORPG's, and generally knowledgable posters. Its been around awhile, has a huge archive too.
This is stuff from back when writing a software 3D engine in DOS that run under protected mode was the pinnacle of game development. This day is long dead. Not that some of that isn't an instructive exercise. But really, many aspects of it are better off dead. That said, here's some of the better put together sources from that era.
Game Source CodeIt has been fashionable for Id Software, and a few other companies to release the source code to some of their older games. I posted local copies for those who are interested.
- Id Software
- Duke Nukem 3D
- Rise of the Triad
- Descent
- Descent 2
- Abuse
Human Computer Interaction

The Myth of the Paperless Office - A wonderful book that studies and theorizes about the way people actually work with and use paper in their day to day lives. If you've thought about writing a content management system, or a workflow system, this book has a lot of really good insights. I recommend it to anyone. Lots of hard data and good anecdotal stories.- The Macintosh Human Interface Guidelines Everything you need to know about the philosophy and design of the Macintosh User Interface.
- Jakob Nielson Used to have a lot of really good stuff. Now his articles are mostly advertisements to buy studies, so the free stuff is less usuable. The archives are really good though.
- Ask Tog Another Usability pundit. Similiar to Nielson's site. Lots of good stuff.
More Programming Languages
Okay, the list has moved, it was getting to big, and needed its own page. Its now moved to Programming Languages List.