What is Software Engineering?

It is actually quite hard to define the meaning of what software engineering is. It utilises both engineering and science in order to try to make improvements in software technology. Different people have slightly different definitions of the term software engineering depending on what field they work in.

The main task of a software engineer is to change and design complex software. They also have to spend time making improvements to software to try to make it easier to use.

Software engineering is a relatively new discipline and it has emerged from the fast development of computers. As a result of this, there are not many specific software engineering courses available and people often choose to study Information Technology first. However, there is evidence that the field is growing and slowly but surely, more relevant and highly useful courses are emerging. You just need to make sure that you find the right ones and that they are accepted by the employers that you wish to work for.

Software engineers can work with a wide range of different people and organisations. Some examples of the range of organisations that they work with include businesses, government departments and agencies, charities and health companies. They are required by any establishment that uses computers and computer systems. They are sometimes called in to fix existing problems or to put measure in place to prevent further software problems in the future.

One of the most important things you must know about if you want to become a software engineer is programming. A computer Science degree can certainly help you gain a strong understanding of the subject and provide you with practical skills. However, the best place to learn programming is on the job in a very practical situation. If you start off in a junior or support role then it will enable you to practice your programming skills and work your way up the software engineering ladder.

Dagstuhl Seminar End – User Software Engineering

I have been reading this abstracts paper from the Dagstuhl Seminar End-User Software Engineering and it has lots of interesting points to make.

In the Dagstuhl Seminar report (Burnett et al) it is stated that “The number of end users creating software is far larger than the number of professional programmers. These end users are using various languages and programming systems to create software in forms such as spreadsheets, dynamic web applications, and scientific simulations. This software needs to be sufficiently dependable, but substantial evidence suggests that it is not.” This point relates to that of (Ko) (Carnegie Mellon University) who explains that the goals of end-users may be unrelated to production of code, but instead they are interested in their domain problem, this means they perceive programming barriers as distractions. Ko explains that end-user programmers must be allowed to focus on their goals, and an important part of the solution is to visualise the whole program execution not just the output. A further problem outlined by Ko is that of programs which were intended to be temporary and owned by a particular person becoming central to a company, this often happens with spreadsheets.

(Henry Lieberman) of MIT Media Laboratory asks “Why is it so much harder to program a computer than simply to use a computer application? I can’t think of any good reason why this is so; we just happen to have a tradition of arcane programming languages and mystically complex software development techniques. We can do much better.” He argues that researchers should use program transformation, and visualisation to make the end-user programming process as automatic as possible. In order that people can become End-User Software Engineers without their even realizing it. This needs to involve interdisciplinary research to combine different research approaches. (Blackwell) also argues the need for interdisciplinary research on the end-user programming problem to identify techniques within software engineering that can assist with this problem.

(Coutaz) explains how Model Driven Engineering and Service Oriented Architecture can be combined. Coutaz also explains that “An interactive system is a graph of models related by mappings and transformations.” This would fit in well with the structure of RDF (Resource Description Framework) a Semantic Web standard, which is also a graph structure. Alexander Repenning of University of Lugano explains the need for enhancements to UML (Unified Modeling Language) to aid end-user programming. (Engels) of University of Paderborn also explains that UML should be extended to allow development of user interfaces in order to assist end-users to program. (Repenning) also argues that “Visual programming languages using drag and drop mechanisms as programming approach make it virtually impossible to create syntactic errors.” So “With the syntactic challenge being – more or less – out of the way we can focus on the semantic level of end-user programming.” (Rosson) of Pennsylvania State University also explains about creation of a web based drag and drop interface. Abraham and (Erwig) of Oregon State University integrate spreadsheet modelling into the UML modelling process. (Gerhard Fischer) of University of Colorado explains the concept of meta-design as aimed at creating infrastructures for collaborative design assuming future uses and problems cannot be completely anticipated during development of a system. (Dittrich) of University of Copenhagen argues that more research is needed into the software lifecycle and methods and tools needed for end-user developers, especially when they are collaborating. These end-users often need to adjust old software for new purposes. (Costabile and Piccinno) also explain that new methodologies and environments are required for supporting end-user collaborative development

(De Souza) argues that the goal of human-computer interaction (HCI) will evolve from making systems easy to use to making systems that are easy to develop. Lieberman also argues that HCI experts have concentrated on ease of use and should examine ease of programming. (Begel) of Microsoft Research explains that if programming is left only to programmers rather than allowing domain experts to be involved the program becomes a black box and the domain expert cannot trust or verify the results. He explains that text based computer languages are often too obscure for end-user programmers. Begel also explains that end-users may lack an engineering mindset to form mental models of how to make the computer do what they want. Segal of the Open University argues that professional engineers have a history of programming so can be distinguished from other end-user programmers as having less problems with coding. (Fischer) explains that it is the mismatches between end-users needs and software support that enables new understandings. Fischer also argues that software development can never be completely delegated to software professionals because domain experts are the only people that fully understand the domain specific tasks that must be performed. He also argues for an approach to enabling end-user programming that makes it interesting to end-users. He explains that often the problem is that end-users find programming boring rather than that they find it hard. (Spahn et al) explains that end-users of ERP (Enterprise Resource Planning) systems are domain experts not IT professionals, and this is forcing them to communicate their needs to IT developers. Spahn et al argue for the empowerment of users to customise software by providing an abstraction layer to hide technical details and allow for concentrating on business needs.

The Challenges of a Software Engineer

While it’s true that the engineer is also a programmer, and there are some design duties included in the core job functions, there are also some very fundamental, critical differences in the manner in which software engineers, programmers, and designers complete their work. Many engineers would also argue that there is a marked difference in the quality and performance of the products they produce as well.

Software engineer jobs take a more formal approach to the process of programming software. The manner in which engineers complete their work is much more similar to traditional engineering processes than it is to software programming or designing methods.

Software engineers are often involved in the most complex of design or programming activities. Though every day, run of the mill programs can be designed by less skilled folks, many programs can’t be trusted to just any old programmer.

For example, programs that control important processes – especially in circumstances where human lives may be lost if an error occurs in a program – are primarily the realm of highly skilled software engineers. After all, you don’t want the software that runs a key piece of medical equipment or that which drives the operating system of a nuclear submarine to fail.

This is perhaps the most challenging aspect of design engineer jobs with which incumbents must constantly contend. They are tasked with ensuring the smooth and efficient operations of incredibly complex and sometimes frightening processes with computer enhanced systems.

Design engineers are tasked not only with creating a software program that will serve the basic needs of a business, organization, or other client, but they must also foresee the potential pitfalls associated with the program as well. They must be able to grasp the technological concepts of the methods or practices with which the program is intended to interface and design the software appropriately for the highly technical, and often potentially dangerous, environment in which it will be used.

Although the average programmer or designer may be able to afford a few minor glitches, for those working in design engineer jobs, there is often no such thing as a minor glitch. Of the software fails, the consequences can be great. The pressure that design engineers face on a daily basis is tremendous for this very reason.

Software engineers also face some other unique challenges in the IT world. They must often complete a lot more paperwork than most IT professionals. Once again remaining true to the engineering trade, software engineers will draft designs, test them for quality, integrity and performance, and will frequently redesign them several times before moving from paper or prototypes to the real deal. In fact, many of those who work in software engineer jobs will spend as much as 70 – 80% of their time dealing with paperwork and only 20 – 30% actually writing code for the software itself.

How To Find Your Dream Job As A Software Engineer?

There are a lot of people now who are looking for any jobs in order to earn money for themselves. Jobs are very important part of our lives, because this is where we get something for food, clothing and other needs. Other than that, they can save their money from their salaries in order to form their own business or to spend vacation with their family. One of the hottest and in-demand jobs today are software engineers. Software engineers are those people who assemble an extensive amount of code to build a website or software.

They can also be called as programmers, where their main duties will involve programming of computers. They also work on developing software solutions, and fixing some errors on the software through coding. But there are times that software engineers are finding themselves hard in landing their dream job. In order for them to find a job as quickly as possible, they need some sort of source where they can actually find job vacancies related to their position.

Here are the steps to find software engineer jobs:

1. They need to browse job search websites or online classifieds. Unlike local classifieds on newspapers and bulletin boards with only limited positions, finding jobs online is where you can land your dream job in a quickly manner. There are a lot of online classifieds and job search engines in the internet, and all they need is to find them.

2. Choose a legitimate company that are still in need of software engineers. This is to be aware that we must not land to a company that is full of fraud or scam. It is right that we can investigate the company first through customer reviews or testimonials if provided. None of the companies are always legitimate, so we must be careful. We must only choose a company that is legitimate or is running for a long time with satisfied employees and customers.

3. Read the company’s qualifications before taking action. This is one of the most important requirements for you as a software engineer, to read what skills are they looking for. If you have the level of skills required by the company you applied, don’t turn back and go to the next step. However if the skills listed were not applicable to you, skip it and find another company.

4. Prepare your complete application letter and portfolio. If you are ready to apply with the company, you need to provide them your complete application letter, as well as your portfolio. The most important thing on your application letter is your skills and achievements as a software engineer in order to give you a higher chance to be accepted. Without any samples, portfolio or skills included in your application letter, you can’t be accepted by them.

5. Email your documents to the company. After your completed your application letter as software engineer, you need to attach them to your email and send it to the company’s recipient provided. You need to be patient in waiting for their response whether you will be accepted or not. Don’t email again to force them to reply because they might reject your application for being impatient, if in case they don’t reply.

These are the steps to find your own dream job as a software engineer. These kind of jobs are giving you a huge income compared to other regular and traditional jobs. But don’t let your guard down if you ended up jobless as a software engineer. If you find it hard, there are lots of job search engines and online classifieds that will help you find software engineer jobs.