And the winner is …

by Prof Barry Dwolatzky

Barry Dwolatzky with the Taiwan Team

Barry Dwolatzky with the Taiwan Team

Imagine Cup 2011 has come to an end.  It was a truly incredible experience to be part of it. The award ceremony was held in the famous Koch Theatre at New York’s Lincoln Centre. Being in that theatre surrounded by the energy and enthusiasm flowing from 400 excited students was truly amazing. Continue reading

I’m in Geek’s Heaven

by Prof Barry Dwolatzky

Steve Ballmer - CEO of Microsoft - opens Imagine Cup 2011 in NYC

Steve Ballmer - CEO of Microsoft - opens Imagine Cup 2011 in NYC

For those of you who don’t know about it, the Microsoft Imagine Cup is a bit of a “geek show”. University students – working in small groups – develop software applications and then compete for prizes. Microsoft runs national competitions, the winners of which are entered into the World Finals.

Over the past few years I’ve been involved in Imagine Cup South Africa as a judge. The competition always attracts a good cross-section of socially awkward technology obsessive South African youth. Race, religion, social background, gender – none of this matters. They all share a common “geek-ness”. From the SA competition we have always carefully selected the best team of local geeks and sent them off to compete in the World Finals. And here I am at the World Finals!!!

Over the past year 350,000 computer geeks from 183 countries have competed to represent their species at the Imagine Cup World Finals-  the “Computer Nerds World Cup”. And here they are at the 40-storey New York Marriott Marquis Hotel in Times Square. 124 competing teams from 40 countries together with 80 judges and 140 journalists. They come from every corner of the world. Most have never flown in an airplane. Some have never stepped onto an escalator … and yet they share something in common … a love for software technology.

Last night Steve Ballmer, CEO of Microsoft, opened the event. It’s the first time I’ve seen him live. If an alien from outer space came to earth looking for a good specimen of a “1970’s computer nerd” to send back home to a zoo in their distant planet, Steve Ballmer would be a wonderful choice. He is everything his generation (my generation?) represented – and more! When he announced that every contestant would receive an XBOX Kinect to take home with them, a cheer went up that must have been heard on the moon. (Thinking about it… the cheer wasn’t instantaneous .. It took about a minute for Ballmer’s announcement to be understood in 40 different languages.) In any other audience most people in the room would have been sitting there saying “what’s an XBOX Kinect, and what will I do with it?” My only regret is that I’m a judge and not a contestant.

There were also speeches from Jeffrey Sachs, Professor of Economics from Columbia University and special advisor to the UN on poverty alleviation, and from Dennis Crowley, co-founder of FourSquare [I admit to having to ask someone what "FourSquare" is]. Jeffrey Sachs was there because: (1) he was at nursery school with Steve Ballmer, and (2) the theme of Imagine Cup 2011 is “Imagine a world where technology helps solve the world’s toughest problems”. The challenges of the UN’s Millenium Development Goals are a particular focus for contestants.

Everywhere you look in the hotel there are groups of students dressed in their team t-shirts sitting around fiddling with devices – laptops, tablets, smart phones, fancy cameras, i-pods, etc. I can’t understand many of the conversations but I’m prepared to bet that its about the latest app, download or gadget.

Today I will be working hard. I’m a judge in the Software Design section. I will be listening to and marking presentations by the teams from Mexico, Taiwan, New Zealand, Australia and Greece. By the end of today the top 18 groups will go through to round 2, which we will judge tomorrow. The final is on Tuesday and the winners will be announced at a gala event at the Lincoln Centre.

I’m in Geek Heaven!

Can all “software developers” write programs?

by Prof Barry Dwolatzky

In my role as Director of the JCSE at Wits University I have, over recent years, been interacting with a large number of South Africans who earn their living as software developers. In some of these interactions I’ve had the opportunity to formally assess their skills and abilities. I’ve been shocked to find that some – a small but significant minority – of our “professional software developers” find it difficult to write working programs – even simple ones. Some of these developers have degrees and diplomas in IT-related disciplines from local Universities and Universities of Technology. 

As an academic responsible for educating software developers, and as a person deeply concerned about the successful future of the South African software sector, this situation has troubled me deeply.

What is a “software developer”?

Before I go any further, let’s be sure that we’re on the same page with respect to terminology. I understand the term “software developer” to refer to the individual at the sharp end of the software industry entrusted with the task of putting hands to keyboard to write software.  In the past we called these people “computer programmers” – (I’m not sure when and why they were rebranded as “developers”).

We can debate in some detail the set of generic and specific skills that a “software developer” should have (I will come back to this later). There is however one absolutely critical ability that (in my mind) is never negotiable. A software developer must be able to write a program!  In other words he or she must be able to convert a specification or requirement into a set of instructions in a “programming language” (of some sort) which can then be run successfully on a “computing device” (of some sort).

Although this may seem obvious, let me expand on this last sentence.

Suppose, as a very simple example, that the “programming language” is C++ and the “computing device” is a PC. The specification might say “Read a set of numbers from a text file. Add them up and write the total to another text file.” Anyone who calls him/herself a “C++ software developer” must – in the very least – be capable of translating the specification to (something like) the following:

    blog code

The C++ developer must also be able to get this program to run successfully on the target computing device. This will require compiling, loading, testing and (possibly) debugging the above program.

 In modern software development, there are many different languages, environments and devices.  Developers need many specialized skills and abilities. However, any developer, must be able – in the very least –  to do something conceptually equivalent to the task described above.  The target language may be very different from C++. The target device may look very different from a PC. The specification may look very different – it will undoubtedly be much more complex. But every software developer needs to be able to successfully translate a specification into a “program” that can run on a “computer”.  I’m sure that no one will dispute this.

 Other generic and specific skills

Given that a “software developer” can write a working program, what other skills should they have? This is a topic that I’m sure we could debate for a long time. My suggestion would look something like this:

Generic skills and abilities

  • Detailed design: Any software developer should be able to develop a number of alternative detailed designs that would satisfy a given requirement. He or she should then be able to examine these alternatives and select the one that best meets the requirement.  In many cases the requirement may correspond to a small piece of functionality and the design options may be relatively simple.
  • Unit testing: The developer should be able to test the program that (s)he has developed. Test cases may be given as part of the requirement. They may also have to be devised by the developer. In either case the developer will need to run the tests in a systematic way and record the results.
  • Documentation: The software developer is responsible for low level documentation. In many cases these are added to the code being written in the form of comments.
  • Estimation: If asked the question “How long will it take you to write a program to do X?” can the developer provide an estimate? (S)he should be able to do so with some degree of accuracy. Furthermore, what is this estimate based on? Is it an “educated guess”, or is it based on data collected by the developer from previous tasks?

Specific skills and abilities

  • Different software developers need a vast array of specific skills relevant to their specific technical environment. They also need to have some understanding of the domain (eg. financial services, health care, etc.) in which they are working. Many of these skills are acquired “on the job”. They are not taught at universities and colleges.

The problem we face

As I said in my introductory comments I have a concern that some of our local “professional software developers” do not have the “entry level” generic skill of being able to write a program. If this is true then none of the other generic and specific skills really matter.

My concern, however, is based purely on a perception gained in interaction with a number of developers over recent years – it is not based on any research I’ve done.  I may be wrong!

My question to you – the readers of this blog is: Do you share my perception? Can all professional South African software developers write a program? If (in your experience) they can’t, what should we be doing about this? Is it a problem? Am I wrong to assume that “software developers” need to know how to program? 

I would welcome any comments on this issue.

Creating a 1,000 jobs – round pegs in round holes

By Prof Barry Dwolatzky

 square_peg_in_round_hole

The story so far…. In a previous blog posting I outlined a strategy based on the “Franchisor/ Franchisee” model for setting up software development units capable of delivering extremely high quality software in a very predictable way. I made a commitment that over a 3 year period I would set up 40 such units, each employing 25 people. In this way we could create 1,000 new software development jobs. I will call these new software development units “High-Maturity Units” or “Hi-Mat Units”.

I ended with two questions: Where will all the skilled people come from to staff these units, and where will all the software projects come from to keep them busy?

Finding the skilled people

We have all heard about (and some of us have experienced) the “skills crisis” in the South African IT sector. Both large and small companies struggle to find suitably skilled and experienced people, and – when they do – find that they have to pay top salaries to attract and retain staff. At the same time we have the paradoxical situation of large numbers (hundreds of thousands) of unemployed graduates. Some of these graduates even have degrees in computer science, information systems and other IT-related disciplines. 

I believe that the root cause of this paradox is that we as South Africans have not been at all successful at matching people to jobs. There is frequently a mismatch between aptitude and interest on one hand and education and training on the other. We have the situation where a person chooses to study computer science (for example) when he or she is not well-suited to working in the IT sector. We also have people with a degree in (say) psychology who land up working in software development.

Part of the solution to the “skills crisis” is therefore aptitude testing and career counselling. In other word putting “round pegs in round holes”. In finding people to staff the “Hi-Mat Units” our focus will be on identifying people with the right aptitude and a high level of enthusiasm. While experience and formal qualifications are important, aptitude and ability will be the determining factors.

 Each “Hi-Mat Unit” will employ 25 people. A quarter of these (about 5 or 6) will be experienced in software development. The remainder will be recent graduates or unemployed graduates. After passing and aptitude test all recruits into the “Hi-Mat Unit” will be trained extensively. The focus of the training, which might require several months to complete, will be to teach the recruits to use the processes and tools specified in the “operations manual” for the Hi-Mat Unit. It’s like sending people employed to operate a McDonald’s franchise on intensive training before they are allowed to work in the store. Many of the successful Indian IT companies send new recruits to a training campus to learn how to work within the company’s environment. Intensive technical training will also be given to “Hi-Mat Unit” recruits.

Each “Hi-Mat Unit” will have a formal relationship with a local University and/or University of Technology. This will also assist in recruiting staff into the units.

Keeping the “Hi-Mat Units” busy

 Each “Hi-Mat Unit” should be capable of doing about R10 million worth of development work per year. Where will all of this work come from?

 In the first few years work will come from Government, NGO’s and parastatals. Some of the projects might have to be subsidised. Since the “Hi-Mat Units” will be unknown entities with no track-record, giving work to them may be seen to be relatively risky.  In time, however – on the assumption that the work done by the units will be of exceptionally high quality – they will win contracts to develop software on merit. They should also be well-placed to compete for work internationally.

 Next steps

 At this moment I have a proposal “in the pipeline” with Government to get seed-funding to set up the first 4 “Hi-Mat Units”.  These will be used to flesh-out the concept and as “proof-of-concept” pilots. Moving forward the “Hi-Mat Units” will be rolled out using profits and skilled people from each Unit to seed others.

If you have any questions or thoughts about this concept, please comment.

My “Thousand Job Strategy” to be launched at JCSE’s Process Improvement Symposium

by Prof Barry Dwolatzky

Barry Fifa

So why do I write this blog? The answer is simple … I’m on a crusade. The sub-title of my blog makes it clear what this crusade is (broadly) about. It says I’m “passionate about the SA software industry”. My focus, however, is much sharper than that. Put quite simply … I’m on a crusade to ensure that the SA software sector grows in size and international reputation over the next 5 years. Furthermore I need to be able to accurately monitor and measure this growth. 

Is this a pointless crusade? Am I a Don Quixote figure tilting at windmills? 

Obviously I believe strongly that my mission is achievable. I also don’t, for one moment, underestimate the difficulties I face. 

So – let me lay it down in front of you!  Here is my action plan: 

1.  My first step is to clearly define what I mean by the “SA software development industry”.

2.  Having agreed what the “industry” is I need to measure its current performance. After considerable thought I’ve decided that the performance of the industry will be determined by collecting a set of 5 numbers from as many software development projects as possible. These numbers are:

  • Size: Number of people in the team.
  • Schedule Performance: What was the difference (in days) between the promised completion date and the actual completion date?
  • Cost performance:  What was the difference (in Rands) between the promised budget and the actual cost?
  • Project size/complexity: How big and how complex was the application developed in the project?
  • Quality: How many defects (or “bugs”) were discovered during system testing?

These – per project – measures will then be averaged to give a measure of the state of software development in South Africa.

3.  I will then implement a strategy (see below) to improve the performance of the industry. My strategy also aims to increase the number of people employed in developing software in South Africa.

4.  On an ongoing basis the measures listed above will be collected and reported on.

5.   If my crusade is to be a success, I would want to see improvements in both performance and the number of jobs.

Before you say that this is “pie-in-the-sky”, or “mission impossible”, let me ask what else we should do to sustain and grow our local software industry?  We need to have ambitious plans, and (I believe) we need to monitor progress. I accept that it’s going to be difficult, but I’m ready to try! 

I’ve developed a strategy (see point 3 above) that aims to achieve my mission. I call it the JCSE’s “Thousand Job Strategy”. It aims to create 1,000 new software development jobs in South Africa over the next 3 years. It also aims to achieve a significant and quantifiable improvement in the performance of local software development teams. 

Are you interested in finding out more about the “Thousand Job Strategy”? It will be unveiled at the annual JCSE Process Improvement Symposium on 26th October 2010 from 8:45 to 12:45 at the Sunnyside Park Hotel, Johannesburg.  I will be inviting comments, both supportive and critical. 

The Symposium will also be addressed by the eminent international software engineer, Prof. Dr.-Ing. Manfred Nagl, Emeritus Professor of Software Engineering, RWTH Aachen University, Germany. 

Visit www.jcse.org.za to find out more about the Symposium. Documents describing the “Thousand Job Strategy” will be posted on this blog after the Symposium.