Home - Downloads - Project - BF Resources - Tutorial

BF Debugger Philosophy

written by Robert Scott Horning

There are a number of things that I'd like to comment about, regarding some decisions that I made in the process of developing this software. Some design decisions as well as my own outlook as to the value of the BF programming language. I'd like to explore some of that in this forum, as a sort of explaination as to why I did some of the things I did in this project. I also don't want this to ramble on too much, but if you want to get inside my head a little bit to understand what I was thinking when I did this, you might want to read a little further.

Of course, if you don't want to read the ramblings of a computer geek, just go back to the main page, download the software, and simply use it.

Computer Science as a Scientific Discipline

Like many true computer gurus/hackers/computer enthusists, the only way to explore the topic generically called "Computer Science" is to keep seeking out fresh new ideas. Don't make any mistakes about it, this is a true scientific disipline... or at least should be. The one largest problem is that unlike some other scientific disiplines like Astronomy or Physics, people have figured out how to seriously make money doing this, and government grants are just a side show. What other profession besides banking or stock market gurus can boast the number of billionaires or millionaires that are in this field?

The amature/professional ratio is also rather low with this field, with most of the amatures consisting of either people who don't need, want, can't, or are too stupid to make it a full-time profession, or consist of high school or college students that are still trying to gain the skills necessary to compete professionally. I'll also admit that there are a number of amature computer scientists who are simply passionate about another field of interest, but still like to dabble with computers every once in a while.

I deliberately left off comparing Computer Science to Biology. For many decades there have been thousands of biologists who were true "gentilemen-scientists", trying to explore the world to try to get a grip on how living things worked. Famous individuals like Darwin, Linneas, Mendel, etc. discovered some very essential principles, but it continued to be a rather low-paying field with mostly amatures until recently.

With the advent of bio-technology research, DNA sequencing, and a solid understanding of the underlying physics, chemistry, and structure of living things, money is starting to pour into this field. I think a good comparison can be made between computer science and biology, but it would be using Computer Science as an archtype, rather than showing an example of another scientific disipline with a lot of amatures. Biology is now at the same point that Computer Science was when "Main-frame" computers dominated the CS field: It still takes an expensive laboratory to get stuff set up to do basic research, especially for manipulating DNA. Advances in computer science has indirectly helped biology by giving the tools necessary to collect, store, and examine the huge quantities of raw data natural to this discipline. I also see that even more money is going to be poured into this field in the future, and I'm not alone with that thought. I think the time will come when biology-related professionals will be making much more money than computer professionals. Unfortunately it will also ruin the field in the same manner.

I would also like to include Chemistry, but there are a number of things really discouraging amature chemists. One of the problems with chemistry is that huge quantities of energy can be stored and released through chemical processes. This leads to explosives, which tends to attract quite a bit of attention from government officials, and puts a huge legal dampener on many activities. It also doesn't help when amature chemists like Timothy McVeigh decide to kill a few hundred people in Oklahoma. Even accomplished chemists, such as Alfred Nobel, were concerned about this problem. This was one of the motivations behind establishing the Nobel Prizes, because Nobel didn't want his name to be permanently associated with the deaths of hundreds of people who mis-used his discoveries.

And if you thought chemists had it bad, amature Nuclear Physicists have a real problem, including not only strong government control of the basic supplies, but even the basic ideas with deliberate mis-information being published to stop would-be amatures from successfully creating their own private nuclear reactor, even though it has been done in the past. Mind you, I'm not passing judgement on the moral ethics of such laws stopping amatures in this field, which may be necessary to an orderly society based on the rule of law. I am saying that such legal roadblocks are stopping real developments and fresh new ideas in these fields. I have more to say about legal BS in Computer Science further down.

Amature Computer Science Research

Computer Science can boast of individuals like Turing, Babbage, and Von Neuman who lead research into important basic foundation principles of the field. When these researchers explored computational theories, it was a mathamatical side-show with a couple of minor and very expensive machines.

The computer developed by Charles Babbage shows a true genius who was a century ahead of his time. Also, the very thought of a computer whose power supply is a giant flywheel fueled by compressed steam leads to great imaginations of what the 19th Century could have been like had he succeeded. The fact that his computer was later built (finally) a century and a half later, proved that his ideas were correct.

Amature Computer Scientists have been critical in many of the developments related to the computer industry. Groups such as the Home Brew Computer Club and S.H.A.R.E. have played a part. The advent of the microprocessor made computers accessable to the general public, which in turn with the development of the internet has in some ways made Computer Science turn full circle back to the amature researchers with the growing Free Software/Open Source movments.

I could cite Linux as an example of what amaturs have been able to accomplish, but I would like to emphasize that this is merely the most developed and recognized of what has been an explosion of new operating systems at an extreamly varied level of development. If you confine yourself to the strange idea that it is only Linux vs. MS Windows, you are missing some important developments in Computer Science.

Why C++ shouldn't be the Only True Language

The computer industry tends to go through fads on both operating systems as well as programming languages. Contrary to what may be currently taught by some CS professors or teachers, the programming language and operating system that will be commonly used in 30 years is not going to be C++ under Unix. Yes, I know that it is over 30 years since Unix was originally released, and I'll also be the first to admit that many exciting CS research activities are still happening in Unix or Unix-related systems including Linux and Free BSD.

Don't get me wrong here either, because I think that C++ has an important role to play. It is a useful language that allows hardcore developers the ability to interact with with computing machines in a way that fits the mental framework for how most programmers have been trained. It is also widely used, so skills developed in that language are easily portable when computer professionals move from one company to another, and new recruits fresh from College are brought in. Since C++ is a widely used "standard", much of the body of computer science research is written in C++, and it would be foolish for anybody studying the computational disiplines to ignore C++.

I also believe that any programming language has a framework that forces certain kinds of solutions to problems encountered, and has limitations that keep some classes of software from ever being written. What I see as the primary strengths of C++ are also its biggest weaknesses. The C programming language deals with programming structures on a level very close to assembly languages. In fact, this closeness is one of the reasons why C and C++ are commonly used: because writing a compiler for the language is quite simple. Well, relativly simple compared to some other languages. Simple enough that it is often used as the target language in CS Compiler Theory classes.

If these students who developed these compilers do a little bit of polish, many of these can also be publically released and in some cases sold commercially. It at least gives a lot of experience for C or C++ compiler development and makes the common ones being developed to be some of the best of the business. This is one of the biggest "selling" points of C++ as a development language.

My personal experience is that larger projects (10,000 lines of code or more... in other words, something original worth doing) when written in C++ take on a style that is very personally reflective of the lead programmer of the project. If the project is allowed to "sit on a shelf" and not worked on for some time, it takes quite a bit of time for either another programmer to take over, or even the original developer to remember the train of thought they put into any given section of software.

C++ programmers also love to get into "clever programming." An extream case of this was an example of an entire quicksort algorithm implemented as a single "for" loop instruction. I'm not talking a single Do loop like you'd do in FORTRAN, but rather all of the computation is done in the parameters of the for loop, and there aren't any instructions to be performed in the loop itself. The obfuscated C programming contests are a forum for programmers who want to relish this as a good programming techniques. Besides, if you really want obfuscated code, you should try a more realistic language like Intercal or Malbroge.

Other Programming Languages

Since I've beat up on C++, I'm going to give some equal time to some other languages that I've had exposure to. I'd like to hit some of their strengths, weaknesses, and usual applications with these languages. As I said earlier, this is a personal philosophy page regarding why BF as a language, and these other languages do have an impact regarding the current implementation of BF.

Pascal

Pascal was used for many years as a teaching language for computer science students. As a result there is a body of literature that involves the use of Pascal to teach basic CS concepts that is quite extensive, although not quite as big as that for C++. As fads go, the use of Pascal for teaching has mostly passed, but there are still some very good implementations of Pascal compilers, both commercial as well as GPL/Free/Open Source implementations. These are available on almost every computer platform imaginable, so the arguments that you should only use C++ because it is the only programming language available is a false point to bring up. Indeed, all of the languages that I will be discussing are freely available.

Standard ASNI Pascal does have some serious limitations in it, particularly with text string manipulation. There are some real quirky syntax rules that take a little bit of getting used to when developing software in this language. A group that has made some "unofficial" changes to Pascal to make it useful for production software development is the team of programmers from Borland (later Inprise... later Borland again... oh well). They developed the Turbo Pascal compiler, priced the compiler cheap enough for mere mortals to obtain (including special "Student/Education" discounts), and added some extensions to Pascal that also made it a useful development languages, such as string manipulation, interfaces to the operating system environment, inline assembly, and with version 5.5 of Turbo Pascal, a true object oriented language.

Object Pascal was further enhanced with the introduction of Delphi, which was still largely based on the original Turbo Pascal compiler, but with libraries and an organization that worked with a GUI API environment (specifically, the 16-bit Windows 3.1 environment, and with Delphi 2 the Win32 environment.)

Now a more legitamate complaint would come up that only C++ can be used for modern GUI OS development environments. This is again false with several other languages being used routinely in production software development teams.

Why reimplement yet another BF?

This is a question that I've asked several times myself in the process of doing this project. There are several reasons:
  1. No Windows Implementation
  2. SourceForge.net Logo