In about one year from now I will(hopefully) get my degree in software engineering and management. This means that from the point I graduate my road splits in two directions, from which I have to choose(excluding the one where I could possibly go around the globe for a big self discovery journey): one is continuing my education and taking a master degree and the other is finding a job in IT.
In this post I want to address the second one and give some thoughts on the expectations of software engineering graduates and how they fit/could fit in a company.
Usually when people ask me what I study after answering with the name of my program, seeing their confused look I complement that I study computers!
In addition to that people that do ‘know software’ and even sometimes people in IT industry immediately think that I study programing.
I do like programing and do study it, but studying IT can involve so much more than that!
The issue is that I have the impression that the IT companies’ employment structure is build so that everyone should start/be a programmer and work their way from there to a different position.
Hmm…I do agree that knowing a programming language and the concept behind programing is extremely important … but it feels like there is something wrong with that picture!
Imagine if you are building a house. How do you estimate the cost in time, money, and other resources to complete the project? How can you divide the project into manageable pieces? How can you ensure that the pieces produced are compatible? How can those working in the various pieces communicate?
Questions of the same scope must be answered during the development of a software system.
By this example we see the varieties of areas involved in software development that implies the different abilities and knowledge people working in it should posses.
I guess the ‘tabu’ in the software industry of having graduates working with other than programing largely comes from the fact that the field of software engineering is relatively young(after all it was only in the ’90s agile development appeared and we understood that building a software system is not the same and can’t be managed in the same way as other engineering areas). And then it is even more ‘unfamiliar’ that there are education programs where the whole process of software development is covered(my program was started just 10 years ago i.e). So we are still not used to the fact that it is possible to get out of university knowing how to design, develop, test, implement and upgrade a software system.
The important question then is: are we(by we I mean the IT industry) ready to make the big ‘leap of faith’ and let people that have just finished university manage our big projects, derive requirements or design the architecture of the system?
My answer would be of course yes, as a matter of fact why is it so strange?!
And here is some reasons why I believe this:
-It is more important to be product oriented then write good code. I’m stealing a quote from an IEEE article on software engineering to better elaborate on this: “What we have found is you need product-oriented people,” says Arvind Srinivasan, chief technology officer and co-founder of ZL Technologies. “They need to be able to work on a project from A to Z and solve problems at every level, not just be able to write code. We hire people with a mathematical background and a strong engineering sense.” Srinivasan says one of the main things he wants to see from a job candidate is if they have already shipped a product. “If not, it doesn’t matter how well you write code.”
-Analytical skills are essential during the process of requirements specification. For a requirement engineer quite a few psychological skills are needed as well, since you ultimately need to extract information from the customer that they are not even aware of.
-As an architect an important thing is to be able to see the system as components, to be able to break down the system and find how the subparts are going to communicate with each other. For this analytical skills are needed as well but also an ability to see the big picture of it all.
- And how about process improvement, change management and so on. Strategical skills, innovative character and an ability to pair practice with process is what comes first.
If we then see how many qualities are involved into the different areas and the non-tight cope between them then why wouldn’t a graduate student not have them?
Of course we can always say that the lack of experience can be a factor but as the saying goes “You learn to swim in the water!”
Of course developers are needed and it is an amazing area to be involved in. My point in this article is not to rank the different fields in software engineering but just to point out the misconception that this is ‘the only’ thing you can start working with after you graduate.
Some years of working as a developer give you insight to important things but ultimately I would like companies to be more open minded to the fact that, even as a fresh graduate one can have the capability to design and lead a project. If this is someone’s best quality then spending some years working as a developer just for the sake of won’t really help the person eager for and knowledgeable in something else, but just waste time in which the person could have gained more knowledge and use its full potential to contribute to the company.
So these were just some thoughts on the topic. ( I still enjoy coding in Erlang for the time being btw! )