Great Software Engineers Fail

No Gravatar

This is a litte unstructured rant. That just needs to come out.

I listen to some software-engineering postcasts, read some SE-blogs and generally try to get better at what I do for a living (which is developing software). But I listen to those bloggers and postcasters,  who have often developed software for two or three decades (this means 20-30 friggin’ years), and wonder if they think we all did so. No, we didn’t. And this is where they fail.

They are gurus. Nerdy heroes. They developed languages, built enterprise software, know all the technical details and some may even be able to read assembler code. They work at google, microsoft or some agile startup that will do it all right. The wiser ones tell us what the best practices are, which design patterns are more superb than others and why dynamically typed languages rule now that we’re doing test-driven development. The lesser wise ones use other buzzwords like SEO, Social, Scrum, Semantic, … S-omething. Some are talking about architectural layers, loose coupling, ORMS, SQL vs. NoSql databases, the importance of version control, team-management and the big difference between computer science and the software development craft. Dependency inversion and injection. They’re talking about a wide array of frameworks, tools, libraries and assemblies. Damn, and they still talk about command-line-tools, grep-commands and build-scripts.

But they fail to realise that the usual software-developer out there doesn’t understand what they’re talking about. I see it every day. Computer scientists that finish with a university-degree know next-to-nothing about software development. People programming everything in PHP. I mean the easy stuff and the complex stuff - and PHP wasn’t made for both. I met doctors of “buisiness informatics” with no clue about Software Development - but a good skill with word and powerpoint. Project planners who taught this at university - but fail at leading a team finishing a project in real life. I experience it in my own skills, that I may know all the ideas, but in the short time, I haven’t worked with 1% of what the gurus talk about. We didn’t get taught that at university - and if you try to teach it to yourself, you’re doomed to fail (for some time at least). Try pair programming alone. Or getting the idea behind version control - alone. Try to write structured code - if you’re the only person reading it. Try learning programming as the one guy not having programmed for 5 years besides two others who have. They won’t wait for you, and you won’t learn.

A quick overview of the Test-driven developmen...Image via Wikipedia

All just Buzzwords? Well, what about those fancy Design Patterns? Architecture? MVC? Unit-Testing? To be true, I know that the gurus are right. Many gurus also think about these issues. I work for a real guru who also understands that the fresh programmers need to learn, and he’s a good teacher and patient with us learners. And I try to get used to all the best practices, the agile development, the continuous learning, the new tools. But I think that 80% of the developers out there just want to do what they were trained to do, not knowing that at school or university, they just saw 5% of what they really need to know. And they truely have no intention to learn even more - as 8 hours of work a day certainly is enough!

But are CS-students software developers? Or do those developers come from somewhere else? India comes to my mind. But no, thats not what I meant. I believe good software developers are born from themselves - no school is gonna bring you to developing good software, the only thing that will help you is an unlimited thirst for knowledge. I heard the word “Infovore” somewhere, and thats exactly the kind of people that transcend into those good developers. Enjoying learning new stuff.

I don’t mean SuperBrains. Well, there are the few geeks that came on this world with the fun to code and which were born with a linux-kernel in mind, but please try to realise that software development tools and techniques need to be usable. And that at universities more practical work needs to be done. And people should have more basic-courses. Learn programming more. Get lessons on source control, on getting to know different IDEs. On learning using basic libraries. Get told more was object oriented means instead of giving them a definition and telling them “this is better than goto”. WTF is goto? Show them! Let them make some Basic or Pascal code. Let every wanna-be developer do a lot of projects with different focusses. And let them explain their code afterwards, so they’ll do it themselves. Instead of people from China who just earned 20 bucks.

There are only so many people speaking binary even if they’re developing software. I heard Linux has reached 1% market share. By making better GUIs. Go figure.

At the end, I want to give you the link to a really great post by one of the wiser programming guys: Confessions of a terrible programmer. You may think this is all BS. :-) See ya.

What should a good ToDo Tool do?

No Gravatar

About a software - and what you would need it to do so you think it would be useful for you

After trying out many different ToDo tools, I found that none of them makes using these tools fun. I don’t have a mac, otherwise I would certainly use something like “Things“, as the introduction movies look pretty nice and simplicity defines the software.

Nothing on the PC? Well, not entirely: we have A LOT of REALLY BAD solutions for Windows. Firstly, Outlook. This one is too simple, and office is high priced. You cannot organize ToDos with Outlook. Then an unlimited number of applications that fill your screen and give you 1 million buttons. Require about 10 hours to use first time. Missing a good PC-ToDo-tool, I looked for web applications. Toodledo is a nice service, but the interface just sucks. And you won’t use a bad interface anymore, as we’re living in modern times where usability engineeriing is reality … sometimes. Additionally, the web-software needs me to keep an eye on the browser everytime, which I just don’t like. If I want to get things done, I shouldn’t need the browser for that as we all know where that leads (youtube).

Therefore, I only depend on the iPhone-”Todo”-app, the only one thats pretty much usable. Sadly, I don’t have a 3GS, and the 3G needs about 5-8 seconds till I can see the screen and the app is started, so thats not perfect too. I often let this app run at work, but seeing the screen still takes 3 seconds.

So, what would you do? Usually, if you want a certain software-tool that exactly fits your needs, you just try out some, and after you didn’t find what you were looking for, you just use the next best thing OR just decide to throw away the idea completely. Well, that is, if you’re not programming software. So I decided to write down some requirements and asked at Abelssoft (the company I work at) if we could do something like this. Well, we could try :-)

So I’m asking you: What is the most important requirement, a todo-tool should fullfill, so that it would help YOU? What we found out is that it needs to fullfill the following:

  • easy to use, intuitive to use
  • small, compact interface thats in the background, popping up from time to time to ask if you still do <this>
  • tells me what I should do next
  • rapid way of adding new todos (and a rapid way of setting importance, due dates and stuff)
  • only necessary properties of todos (some want projects, some categories, everyone contexts, some tags, some planned time…)
  • good organisation of todos (projects? recurring todos? inbox?)
  • good filtering (if I search something, I need to find it instantly)

We had another giantic list of things that COULD be nice, but we’ll be trying to keep it sleek. And we found out that most people have very different ideas, what a todo tool should do more than the above. My boss wants project planning stuff like how much hours will this item take (I won’t want this). I want it to be able to synch to my iPhone (others don’t use iPhones). Some want dependencies between single todo-items (like this one can only be ready after another one), but how can you build this in without blowing the tool up to one of the complex tools already available? Some want projects while others find them confusing. Some want time-management-functions inclused. Some want further project-planning stuff like delegating ToDos or connectors to projectmanagement solutions like JIRA included. Choose and divide, young jedi.

Also, the GTD-philosophy seems to get in the way sometimes. For example, “Folders” don’t make any sense to me when you have contexts. They’re some kind of tags gone worse. That said, I like tags more. For these and some more reasons, I’m not sure if we should follow a certain philosophy (like the 30-year old GTD), as these were born in times when computers were not that essential in people’s everyday lives.

What do you think? Which feature would let you use a ToDo-organizer?

RDFa Editor Presentation

No Gravatar

I just finished my final presentation as the finishing-line for my studies in computer science. I wrote about the inclusion of a RDFa-Editor in a blogsystem, where a user can include semantic annotations in their posts. The goal was to create a tool for editors that would enable them to enrich the posts they make with individual semantic markup. Its mainly focused on usability and is based on the WYMeditor and two servlets. It should be easily portable and perhaps this can be an inspiration for CMS-vendors, so normal people without domain-knowledge (in RDF and Ontologies) will be able to post semantic markup for their contents.

The presentation is made with the flash-tool of prezzi.com and is completely in GERMAN. You can find it shared here. Let it first load the media before you go on watching. If you experience lags, you can download the more smoothly runningoffline-exe-file.

If someone needs a translation, I might invest the hour of work doing so (just post a comment). This is the presentation … click on the forward button to move forwards, in the downloaded version you’ll find the forwards/backwards-butons in the lower right corner and can also use standard powerpoint-presentors:

I hope you like the idea - and I hope that the semantic web world gets more usable for “usual people”, otherwise it might not come to reality for many more years. If you’re interested in the thesis, let me know.

Filtering Information & New Idea for Twitter.com

No Gravatar
Image representing Twitter as depicted in Crun...Image via CrunchBase

Robert Scoble (who’s on Twitter about 24 hours a day) did an interesting post about how he uses Twitter today - after he unfollowing a whole lot of people and shutting down his autofollow-bot he still follows about 2k people (about 1300+ that he met and 600+ that he’s interested in). This is one of his accounts that he uses for the “filtered information flood” as I’d call it. All people he follows are from a certain area of expertise that he’s interested in most or people that he’s met and therefore might be interested in their tweets. These people he met are also followed by Scoble on another account.

Scoble tells us that he switches Twitter clients pretty often, and therefore can better filter information by following a certain target group with different accounts. And he also tells us that its pretty impossible to read the tweets of 90000 people anyways.

I must say that I think the same way. But I don’t have time to be on twitter everyminute of the day (as Scoble and some other “Social Media Guru Expert Evangelists”), so I even have to filter some more. First, I took my ithoughts_de account and only followed people I like to read and who tweet interesting stuff. As I don’t have too much time and don’t want to clutter my timeline with people who tweet way too often (like Scoble) or only tweet a lot of completely pointless stuff (like Ashton Kutcher or Tila Tequila), those get removed rapidly. Following 250+ people is pretty easy to keep up with, if you look for the filtered information of the day. This is the source of knowledge, that will always instantly tell you important stuff - much earlier than official magazines or websites. No matter what, I still get a lot of information in there, so I can’t always be on that account when I want to use my time effectively.

Therefore I set up a protected account for myself, where I only follow people I know personally (one exception). Here in germany Twitter STILL didn’t break through to the usual webuser, so these are only six people (if you leave out doubleaccounts). That I’m pretty sure that only friends can read it lets me also dump my own pointless stuff without much information value there AND I can use it for communication. I also use this account with my iPhone, so if I make a pointless TwitPic I won’t scare away my ithoughts_de followers (that I believe are there for the good links I find and share).

After all, I also set up a follower-bot thats nicely working in the background to build up followers slowly with 3.4k followers atm. You never know when you wanna have that audience around (that might mainly be bots, but who cares - sometimes also numbers count).

New Idea for Twitter.com

I think if you know about Twitter you could also drive this to the extreme and make different accounts even for different topics of interest. Every account could follow some special breed of people and you could tweet your links to the group of people who follow your account dedicated to that single topic. In facts, this is one of the features that twitter should integrate into (premium?) accounts: using their REST approach they could let you divide your stream into topics and also let you assign your friends (the people you follow are called ‘friends’ on twitter) to that topic. This topic-centered URL would look like http://twitter.com/ithoughts_de/topicjava/ instead of just http://twitter.com/ithoughts_de and you also wouldn’t have to set up 100 accounts then. A nice drag-and-drop webinterface could let you customize your topics and sort your friends in there and you could decide if you follow a person or only one (or more) of his or her topics. Some microsyntax like “§topicjava I found a nice Java-related article that I want to share” could work for older twitterclients while Twitter expands their API by one more parameter called ‘topic’, so updated clients could directly post messages into topics.

If you like this idea, please share it on Twitter … lets hope someone at Twitter sees it. They could also do this thingy for their premium accounts. *cough cough … I didn’t say that you must be mistaken*

Which JavaScript-Framework?

No Gravatar

If the question is, what JavaScript-Framework you should use, finding an answer is usually all about finding out what you already use and what seems to be the feature-richest, fastest and best supported frameworks. If you already use a Framework, just take that one if you’re not only using it for some easy simple stuff like a popup or something. Otherwise, think about what you’ll need the JS-library to do and consult the web. What I have done:

Some Quotes:

“You can save a tremendous amount of time and effort by using the browser-independent framework that JQuery has spent untold man-hours testing, debugging, and proving in the field. While there’s nothing wrong with writing JavaScript, why not speed your development time by writing to the library instead? As I’ve always said, don’t reinvent the wheel, unless you plan on learning more about wheels.” - Jeff Atwood

“A JavaScript framework may not make you a better programmer, but it will make you more efficient. That alone should be reason enough to choose a JavaScript framework, or library if you prefer. Unless you decide to build your own, there are plenty of options available to developers. However, choosing the right framework can be tricky, and weeding through a mess of opinionated fanboys (myself included) is intimidating.” - Brian Reindel

Features-comparison:

http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks

(pretty much tells us that Dojo and jQuery rule)

Speed-comparison:

http://www.domassistant.com/slickspeed/

My test resulted in: jQuery fastest, Dojo was close … Protoype and Moo were pretty slow (used Firefox 3.5)

Research and advise:

http://www.dannydouglass.com/post/2008/04/Comparing-Popular-JavaScript-Frameworks.aspx

Conclusion

Think for yourself. I’d always recommend jQuery, as every single developer that has ever used it has fallen in love with it, and it just always ranks best - everywhere. You got all features, high speed, short syntax, small filesize, very good documentation, unnumerable amounts of plugins, tutorials - and a low learning curve. If you can’t trust EVERYONE ELSE, you’ve got to have good reasons to.

Learning to Code - You Really Want to be a Programmer?

No Gravatar

There is a lot that you can do wrong. A lot that I did wrong and that took its time. But after all I think I made it. So here are some simple rules that you should follow if you’re trying to become someone who touches keyboards a lot:

Have a goal. If you just want to be a programmer but don’t know anything that you’d like to program, you’ll have problems keeping yourself motivated. Going into a certain direction of technology is a good idea too, so you know what you can concentrate on.

Just do it. (In fact, this statement is the best you can do in any situation of life.) Every time that you’ll write code, you’ll learn something new that will get you closer to your target.

Never miss an opportunity to code. If you have a project where you’re working / studying, try to take responsibility for some functional piece of software. Documentation or user-testing won’t get you further.

Use an IDE. I began with writing java code in a text editor, compiled it by hand and did so for some time, because I thought “Eclipse looks … complex”. It was an error that cost me soo much time. Embrace all help that you can get, if its an IDE, a build tool or whatever tools you’re friends and colleagues use. They all save time, and thats the stuff life is made of.

Don’t forget to use a console too. There are a lot of graphical things out there that want to make you move the mouse more and the keyboard, but often there are no better solutions than just using the command line. Don’t be afraid of it, you’ll have to learn all the commands sooner or later anyways.

Make a list of skills & experiences that you’d like to have. Making your first objects, Unit-testing, working with threads, building a gui, parsing some HTML or XML, getting data into a database or out of it, using the twitter API, building a website, writing a firefox-plugin; HTTP, HTML, CSS, JavaScript, Flash, (a lot more Web-Technologies), Frameworks of all kinds … write down what you think would be useful whenever you meet something new you want to learn … and then make it some kind of long-term-To-Do-List.

Don’t think too much about inheritance, interfaces, reflection, … you can first live without that or just use it by-the-book and will understand what they do soon.

There’s no magic involved. Just code. Like in JUnit, I somehow thought it would verify that my code has no errors if I just configure it correctly - plain wrong, no magic inside! You have to write code that checks everything in your other code. I also thought Struts2 would make websites by magic - again, just code. There’s nothing visible that you don’t code, its just makes just need very few code to get those websites running.

Framework is a signal word. Its means “Software that makes something easier for you”, but you should be aware that you’ll need to invest some time to learn how to use it. Framework should give you a positive feeling, when you hear it, like “I’m here to help you!”. Again, no magic involved. Usually ;-)

Ask. Use online forums, ask friends or people you work with. Google can’t always help (but don’t ask question that Google can answer easily). There is so much that could be known about technology, that noone knows everything (especially when you don’t have your master in computer sciences and 10 years of field-experience). Just accept that and also accept if others don’t have all your knowledge.

Teach. If someone asks you and you know a solution, then help him. Assume he didn’t understand something basic that you know and be sure that you teach it so he can solve the same task again later on. Never just give someone the code, they won’t gain anything from that.

Find someone to learn with. Someone who is the same stupid guy like you and also doesn’t know how to do that complicated stuff. Where one brain gets stuck, two often find a solution and both learn. Working together on a project is a great way to learn. Just make sure the other person keeps up with you, or vice versa.

Never stop learning. Technology evolves with lightspeed, new languages appear, new technology is invented. If you’re involved with computers, you’ll probably be one of the most-learning-and-training persons of the world. Never assume you’re ready to “just do work”. Where would be the fun then?

Get tech feeds. Or follow twitter-users who have the smae interests that you have. From time to time, there will be interesting articles that will teach you good new stuff.

Don’t be afraid to buy books or magazines. Its not always cheap , but if it saves you time learning you should just spend that little money. You’ll get that money back with your skills later.

Get your head around this object-orientation-thingy. Don’t use GOTO. Don’t put the whole code in the main-method. Classes are just there to produce objects and objects are nothing more than some fields and methods in one instance. If you write a main-method, produce an object that does that work from there. Objects can be tested nicely and are more useful.

Its not just coding. Software design, team management, data structures, design patterns, team-collaboration, algorithms, time management are all with you at that party. And much more. And don’t you ever forget your social skills. They might be the most important after all. Even programmers need friends ;-)

Be careful with your coffeine comsumption. A programmer is a person who converts coffee to code, after all. If you still want to code, connect with me on Twitter. What do you think I missed? Do you have more hints for the newbies? What was not ever told YOU, that you should have known from the start? Just add a comment …

AssertTrue(this) - reading recommendation

No Gravatar

AssertTrue(this) is a great blog. Its about programming in general and also a lot about (W)CMS-systems. The author Kas Thomas writes in a very nice way and regularily makes me laugh. I even envy his superb blog-title.

I might be writing the same stuff in 10 years - but as I’m still learning a lot, I more feel qualified to talk about little gadgets that I can understand to a reasonable extent. He blogs very actively and when I just started my feedreader and read some of his latest posts, I just needed to point your programmer’s noses to this blog.

This reminds me that I need to rework my blogroll and seperate it in something like recommendedreading, friends and just links (that link points to a very good blog too btw, just don’t try to read it without a feedreader, the design is pretty ugly).

You seem to be using an unsafe, outdated browser. Click here to install the world's fastest and safest browser for free! X