Guest Blog Post: Working in Software, A Guide for Electronic Engineering Students
Increasingly we are seeing a ‘blurring’ of the demarcation between Electronics hardware and software, with embedded systems being an obvious example. Consequently, at the UKESF, we take a very broad and inclusive definition of ‘Electronics’. We work with a range of companies spanning the whole spectrum of Electronics. One company firmly at the ‘software’ end of the spectrum is Embecosm, who are experts in open source compiler tool chains and operating systems. They have sponsored a number of UKESF Scholars who have gone on to become professional software engineers, often achieving international recognition early in their career. Therefore, we asked Dr Jeremy Bennett, the Founder and CEO of Embecosm, for his thoughts on how students can prepare for a career in software. If you are studying an electronics discipline, but want to move into software, then this blog post is for you. This is what he told us……..
First of all, as an Electronic Engineering student, you will have some generic engineering skills that are just as applicable in the software world. These will be technical and numerical literacy, general project management skills and some ‘soft’ skills around working with other technical people. You will also already have some specialist skills that are relevant to some software disciplines, particularly an understanding of electronic hardware. This immediately suggests some specific areas of software engineering where you could focus; these are embedded software, EDA tools, compiler tool chain development, hardware modelling and operating system development. More widely, your numeracy may suit you to disciplines like FinTech or more general modelling. However, you are probably less suited to more high-level software development like user interface / web design or games development.
You are likely to have two main areas of development needs; these are programming skills and software engineering skills.
Programming is the detailed technical craft of writing code. It is a mixture of knowledge of standard ways of doing things and hands-on personal experience. Software engineering is the discipline of building complete systems. At a simple level, this is generic to all engineering; requirements capture, design, development, testing and deployment. But the next level down is specific to software; capturing requirements through use cases and use case diagrams, design using UML notation, development using techniques like design patterns, verification and validation at unit, module and system level, deployment and upgrade over time.
So how do you address these development needs? Some of it you can get through textbooks. Ask your colleagues on Computer Science courses what textbooks they use, or borrow their lecture notes. However, the key thing is to gain some hands-on experience. This is essential to build up both knowledge and ‘know-how. Employers will want to look at your code on platforms like GitHub. This is where open source software projects can help you. You can join a project and start contributing to develop your skills. Choose a sufficiently active project and look at their bug tracker for bugs that need fixing. Start with something easy and work your way up. Your submissions will be critiqued by the community, which for any decent sized project will be mostly professional software engineers. It is a great way to develop your skills. They are also quite likely working for potential employers.
If you want to go the extra mile, start contributing to documenting the project. This is usually the weakest part of an open source project, yet it is something everyone needs, so you will be very popular. The best thing is, if you make a big contribution to the user manual, your name goes on the front.
So, although you may not have a degree in software engineering, a potential employer can see that you are making significant contributions to a public project. You are demonstrating your practical skills, and in a way that the potential employer can inspect. This will make a huge difference to your chances of being invited for an interview and whether or not you are hired.
If you are interested to learn more about compilers, then I would recommend reading this standard text book: “Compilers: Principles, Techniques and Tools” aka ‘The Dragon Book’. I would also suggest you also join either the LLVM project or the GCC project (both open source compilers) to develop your programming skills.
If you really want a career in software, this works. We had an outstanding student apply to the UKESF Scholarship Scheme in their second year at University, but without sufficient programming experience for us to accept. However, when they applied as a graduate, we were able to take them. They are now a highly regarded member of our software engineering team, already developing an international profile.