My Software

Portugol is a programming language and IDE designed for teaching. Its main characteristic is that it has two representations for the same algorithm, a flowchart and a textual representation, which the IDE keeps synchronized:

The first version was developed in 2004 by a group of teachers and students at IPT. In 2008, we decided we needed an entirely new IDE from scratch, so I proposed to use the NetBeans Platform and tried to pass my knowledge about the NetBeans Platform to them, since I was the only one with experience in it. Portugol already had a lot of users, mainly in Brazil, from where we are already seeing a lot of hype about this new NetBeans Platform based version:

Botbeans, a second application, is part of my thesis at the ISCTE. It is also a tool to teach/learn programming but with a different approach and relevant to a different age group. The idea is to eliminate all textual representations in the language, even in its output:

To accomplish that, I needed not only to develop a graphical language but also a different output, a more tangible output, in order to let the user (student/kid) experience in the real world what has just been created. The tangible output is a robot, only Lego Mindstorms NXT is supported for now. Connected over Bluetooth, users can draw their algorithms by connecting different nodes and drawing conditions (in decision nodes) by using a expression builder based on the MIT OpenBlocks IDE:

Comparable Software

There are comparable software packages to the above two. BlueJ, Alive, and Greenfoot are object oriented and they try to teach object orientation to the student. The objective of Portugol is not to be so advanced. Portugol just wants to teach algorithms in a generic way. At this level, we don't want to teach things like inheritance, which is for a next level. For example, we want to keep things so simple that in Portugol the programming language is translated to the student mother tongue, so that a Portuguese student instead of typing "if" types "se". This way we even try to eliminate the regional language problem from the equation. In my opinion they are not truly comparable because they have different objectives.

Botbeans is even more basic. The target age group for Botbeans is the first classes of programming in secondary school (i.e., high school). People who never programmed and don't have a lot of experience with computers and, more importantly, people who don't really know if they want to pursue a career in computers at all. There are some other IDE's, like Scratch for example, that target the same age group as Botbeans. But these IDEs use a block representation, from OpenBlocks, for the language. Instead of that, I used a flowchart type representation. However, since the block representation is very good for expressions and conditions, I used block representation in conditions, so that I'm trying to gain the best from both worlds.

NetBeans Platform Usage

Well, in some ways, the reasons for using the NetBeans Platform are the same for both applications:

I needed to have a bug free IDE as the basis of my own IDEs. Students are one of the worst type of users because they will do things you never thought about. So, the IDE needs to run in a harsh environment. The NetBeans Platform helped a lot in solving this problem because the application code is already tested by the NetBeans Platform creators, resulting in a more stable basis for my IDE.

User experience was another reason. With limited time available, I nevertheless ended up with an IDE with a lot of functionality in the GUI. Things like dragging windows, undo/redo, open/save, all these things were partially already there, you just have to learn how to use them.

The modular architecture was another important factor. These applications had to be modular. For example, Botbeans will use the modular architecture to be able to connect to different robots and extend the available graphical blocks in the library.

One thing I dislike about the NetBeans Platform are files such as the WSTCREF file and the settings file. I always forget to change something in them while refactoring and then end up with a module that is not working correctly without knowing why. This is one of the things I will love in version 7.0 of the NetBeans Platform, all this information can now be in the component class via annotatios, awesome. :-)

But I just love the modular architecture.

The NetBeans Platform mailing list and Geertjan's blog, in my opinion, are the best two spots on the web about the NetBeans Platform. There are some people that under underestimate mailing lists but, in this case, it is an awesome library about the subject.

Upcoming Features

Portugol development is stalled right now. We already have a multi-language version of it, even in the programming language syntax, but we don't have enough man power since everyone is busy with other stuff. So, we are trying to create a community around it and there are starting to appear some interested coders.

Botbeans is under heavy development. Every day there is something new. I will present my thesis in July, so until then there will be a lot of features implemented, such as a simulator that doesn't require a real robot, completed MIT openblocks integration for conditions, integration of lejos compiler, and a converter from graphical language to Java, which will be able to compile it with the lejos compiler and send it to the robot.