In this blog post, we’ll attempt at looking at the software engineering profession through the lens of both tech recruiters and prospective candidates alike. We’ll tackle different terms like software engineering, explore the differences between a software developer and engineer, and break down the core competencies of each. Let’s dive into it.
What is software engineering?
Software engineering is when engineering is systematically applied to software development. So what it actually means is that some of the scientific and technological principles, methods, and experience are transferred and applied to the design, implementation, development, and testing of the software. The quantifiable approach to development is what defines software engineering and its principles. Some of the informal definitions include the practice of computer programming as opposed to the theory and the implementation of a specific engineering approach to computer programming.
Software engineering comprises a number of subdisciplines, and these are:
Requirements engineering
Software design
Software construction
Software testing
Software maintenance
Software configuration management
Software development process
Software quality
Software engineering economics
We’ve covered some of the web and software development fundamentals in our previous blog post, so if you want to learn more, definitely check it out.
According to the Computer Society of the Institute of Electrical and Electronics Engineers (IEEE) and the published SWEBOK standard (Software Engineering Body of Knowledge), the knowledge stack of a graduate software engineer must include the subdisciplines outlined above. The legal requirements for certification of software engineers vary wildly across the globe. In the US, for example, if a software engineer would like to get licensed and recognized as a professional, they can attempt the software examination organized by the National Council of Examiners for Engineering and Surveying (NCEES), however, due to lack of participation among prospective licensees, NCEES will most likely close the administration of the exam. Still, in many of the states of the USA, the title engineer should be earned and confirmed by the Professional Engineering license. But the licensing is still a largely debated issue. There are, nevertheless, some specific certifications available that cover particular fields of software engineering, as well as broader certifications that can be obtained from various professional societies. For example, The Software Engineering Institute offers certifications on security, process improvement, and software architecture. IBM and Microsoft have their own certifications, which are very popular among professional software engineers. Some other vendors of technologies and software have their own certifications which are tailored specifically to that piece of software or technology. Then IEEE offers its own broader certifications, like Chartered IT Professional. Some organizations offer memberships for qualified talent and the opportunity to prove the professional knowledge and skills.
A lot of controversies are raised over the terms of software engineering, computer science, and computer programming because these areas of knowledge are so interrelated and cohabitate one against each other that it’s difficult to define what each of those disciplines entails. Also, software engineering often implies a certain level of academic training, professional recognition, and adherence to formal practices and standards. Thus, the ability to write code doesn’t make one a professional software engineer, rather that person should be called a software developer or similar. Also, since the software development, a subset of software engineering is changing so rapidly, it doesn’t exactly suit the engineering part, because the approaches to the discipline rarely change so fast. Besides, many renowned commentators and scholars have been vocal against using the term, because programming is not just science, but also — art, thus the term is particularly harmful.
Still, the term has been widely used by tech professionals, although different people might assign different responsibilities to that software engineering. We suggest breaking that down a little further and see what a software engineer is and what they do.
Who is a software engineer?
Software engineering, primarily, was born out of necessity for better quality software and approaches to the development process. Reduced levels of quality, exceeded budgets and timelines, these are the core things the software engineer is due to address. Software engineers are responsible for how software systems are built, including such aspects as project management, quality assurance, and software testing. As opposed to computer science, software engineering requires the study of electrical engineering, software engineering fundamentals (design, software requirements specifications, and testing). The fundamental duties of a software engineer include (but are not limited to) determining the feasibility of software operations; documenting and demonstrating solutions; designing system standards; completing system analysis; recommending and advising changes for inefficient procedures and policies; licensing software; testing and approving solutions; collecting, analyzing, and summarizing development issues.
The required skill set of a professional software engineer includes programming skills, software debugging, design, development, and testing, knowledge of software documentation, software development process, and software requirements.
What are the differences between a software engineer, a software developer, and web and app developer?
The thing is, the terms software engineer and software developers are used interchangeably. The reasons are plenty: from the tech recruiters really not having a clue to the inherent intertwining of responsibilities between the two professions. So, whenever you see a job description looking for a software developer or a software engineer, chances are you can be interviewed for both or either.
According to the article published at Hacker Noon, where the author talked to some of the leading experts in tech, one interviewee answered that there was, in fact, a fundamental difference between a developer and an engineer. While another respondent said that titles didn’t matter and that he preferred to use categorizations like “junior,” “mid,” and “senior” instead. There might be some subtleties in the definitions, which are obviously treated differently across organizations, but more often than not, these distinctions involve treating an engineer as a professional with an educational background and training in engineering principles, and a developer, as a more creative type who’s driven by self-discovery rather than any set of core scientific fundamentals. If that still sounds blurry, then perhaps because it is. To elaborate on those differences a little further will be to say that a developer is a person who implements and an engineer — architects, plans, and designs.
We’ve written a couple of articles on web and app developers, in case you’d like to learn more about those professions: Hire a Web Developer; Hire an App Developer. Check out some more tips for recruiting tech talent.
Quirks of a profession: things to look for when hiring a software engineer
A good software engineer, especially without relevant years of experience, say, in junior level, should graduate from a computer science or software engineering program, shine at such concepts as data structures, algorithms, the language of choice, object-oriented programming concepts, and have code samples at GitHub (possibly, participation in an open source project). Since most of the profession involves more debugging rather than actual code writing, a professional (or any aspiring specialist) must have a solid understanding and knowledge of the debugging tools and libraries.
Terence Kuo, a software engineer at Tesla, wrote an extensive guide on writing a killer resume that landed him interviews at Microsoft, Apple, Amazon, Facebook, and Google. So, if you’re a prospective candidate, that might sound like a good starting point. If you’re a tech recruiter, you can learn the thinking of a prospective candidate into building up a resume and highlighting any particular relevant skills. The most beautiful and informative part of this article which I particularly liked is Terence writing about the importance of having and highlighting personal projects; these things are especially critical if a candidate has very little or no previous working experience.
Although some companies leave out the personal traits of a candidate, most of them are still looking for a person who’s going to be a great cultural fit. A professional, although being a great team player, must be relatively independent, passionate about coding and software, cool-headed and open-minded, willing to leverage the existing code and is prepared to read more code rather than write, have to be focused on usable and maintainable code, and should not be easily bored.
Conclusion
With that being said, different companies will look for varying skills for a software engineer. The line between a software developer and software engineer is pretty much blurred, and many companies and experts use the two terms interchangeably. However, again, a software engineer, while still an unlicensed profession in many states, does require some engineering educational background. But yet again, not necessarily.
Very useful tips. Thank you!