After our successful year of training at Openismus, I thought I’d publish the rough bullet-point list that we used. Whoever we choose for the following year will repeat much the same process, with in-depth critique and a dose of reality.
These were our overall aims:
And this is the stuff that we checked off along the way:
Familiarity with GTK+, to the level of implementing new widgets.
This takes more time than anything else, but its doable with motivation and mentoring from our experts.
Hi Murray!
Nice list, small note:
For C:
“Initializing local variables, even if you don’t think it’s necessary.”
actually, that prevents a useful warning from gcc (‘X may not be initialized’ in some code path),
so I usually do the initialization just before use. There’s a small risk in depending on a gcc for mistakes here,
but in my experience (and in my case), the useful warning helps me more to fix (more subtle) bugs than
the early initialization does.
Very nice post. This kind of makes me want to get into Gnome development. I’m mostly a Windows user but I do play on Linux. But when I use Linux, it is the Gnome desktop. I guess I liked Gnome early on back in 1998 when I discovered it used the gtk+ toolkit that I was already familiar with. Believe it or not, I was introduced to gtk+ as a way to program on Linux via some magazine. I found gtk+ to be much more beautiful than writing something in the Win32 C API.
I would love to read details on what you use to train your developers. These details may help me get more into Linux and Gnome.
hey, djcb, but the compiler doesn’t catch this, I think:
int something;
get_something_but_implementation_forgets_to_set_it_in_some_case(&something)
do_something(something);
?
Yes, we do strongly believe in warnings-as-errors, and wish all our customer projects did too. I also believe that deterministic wrong behaviour is better than random wrong behaviour, so we believe in fixing valgrind warnings too.
> I would love to read details on what you use to train your developers.
We use time and people and the real world. If you don’t have us to train you, just try to get involved in a real project, fixing real bugs.
Great training!
For the general community I think that the “Other C stuff and basic tools” topic is the one that lacks more documentation, good practices and one centralized way to learn it. Those tools are crucial to make a succesfull and good citizen application in the Gnome environment. I’ll love to see some inspired developer to write some lines on this because is something absolutely necesary if you want to share your scratchy code xD
Hi Murray,
Well, the compiler does raise a warning, but *only* when compiling with optimizations (-O1 or higher). It’s a bit of a gotcha.
I like warnings-as-errors too, but only when I can control the compiler. For normal builds, I use
AM_CFLAGS=-Wall -Wextra -Wno-unused-parameter
AM_CXXFLAGS=-Wall -Wextra -Wno-unused-parameter
which keeps me honest. Also, I use some special rules in my Makefiles, again, another automatic check to keep things in order. They are part of the checks that are done before releasing.
# this warns about function that have a cyclomatic complexity of > 10,
# which is a sign that it needs some refactoring. requires the pmccabe
# tool. If all is fine, it outputs nothing
cc10:
@$(PMCCABE) `find -name ‘*.c’ -o -name ‘*.cc’` | sort -nr | awk ‘($$1 > 10)’
# this warns about functions that are over 33 non-comment lines long, which is a
# sign that they need some refactoring. requires the pmccabe tool. if
# all is fine, it outputs nothing
line33:
@$(PMCCABE) -c `find -name ‘*.c’ -o -name ‘*.cc’` | awk ‘($$5 > 33)’
[...] have chosen two new Openismus trainees who will start at the beginning of June: Patricia Santana Cruz and Chris Kühl. We are looking [...]
[...] the move has become even more exciting after learning that I’ve been chosen as one of the new trainees for Openismus. Since Murray has made the announcement, I thought I’d introduce myself to the [...]
[...] like I will be joining Openismus in Berlin from July, as one of three trainees! There is much to learn, but that’s gonna be half the fun. The other half will be working with something I really [...]