Introduction
I wrote this article while going through Tunga.io’s Non Programmers Kit; — A course for beginners looking to understand the basic terms, concepts, and technologies used in the software development space.
This a course like many others, you can find on the Academy platform of TUNGA, — “A staff augmentation firm that works with African software developers.”
In the past I scribbled down notes while I learned something never but lately, I try to blog about what I’ve learned or managed to make sense of from whatever I’m learning hoping someone else learns from my experience or shares more insight onto what I might have overlooked. This is one of many.
Why did I explore this course?!
For starters, It was available and like any other techie felt the overwhelming curiosity to explore what was new from what I learned back at University. Besides, In the software engineering or software development business, learning never stops.
Also, Developers, Engineers, Project Managers and other IT practitioners need to constantly be on the lookout for what’s new in the Technology business environment in order to best position themselves for success in the industry.
But most importantly, as an IT Engineer building a professional career in the technology space, my roadmap involves becoming proficient in areas like project/product management, Technical Writing, and having a good grasp of a few tech stacks among other things as I work towards more IT administrative challenges like IT Policy and Governance.
Breaking down Software Engineering; —
Engineering; — mostly involves applying science, conventional methods, and applicable tools to find cost-effective and sustainable/scalable solutions to developing problems. This can be in any industry where engineering is applicable.
Software; — Software can be understood as a set of instructions, data or programs and sometimes algorithms used to operate computers and execute specific tasks.
Software Engineering; — is a systematic, disciplined & more so quantifiable approach to the development, operation and maintenance of software or software projects.
A Software Engineer Vs A Software Developer: A software Engineer applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software while a Software Developer is a problem solver with a creative mind, the ability to think outside the box and other technical skills that enable him/her design and develop computer software and applications.
But in all true honesty, these two are almost the same and in today’s business technology environment, their roles will be similar across many companies.
Personally, I like to believe that Software Engineering and Software Development are one in the same thing but that’s just my opinion. Sometimes you will also hear people call it software programming, coding or simply programming.
Characteristics of Software
Software and especially good software is operational, transitional and maintainable.
Software is developed or engineered and not manufactured.
Software doesn’t wear out but it does require enhancements or scaling depending on how, where and for who it’s being used.
Software in a nutshell;-
As we already know software is developed or engineered and that process is referred to or known as a software development life cycle; — “the overall process of developing software from start to finish.”
The software development life cycle; — consists of stages ( Analysis/ Planning, Design, Development/Implementation, Testing, Deployment and then maintenance.)
Front-end Vs Back-end Vs Full-stack Software Engineering/Development.
because the industry is growing and diversifying at a fast rate there are instances where an engineer and developer will defer but like I said before sometimes they are the same and sometimes they are different, therefore it comes down to the Job Description(JD) and industry-specific needs.
For purposes of simplicity, I’m choosing to use them to one.
A Front-end engineer/Developer; — ensures a satisfactory user experience with no issues, errors, or downtime by planning, designing, building, and implementing quality user interface systems for the software or application in question. Front-ends create and optimize systems, resolve UI/UX issues and even play an active role in testing and troubleshooting activities.
A Back-end engineer/Developer; — typically creates the logical back-end and core computational logic. He/She is responsible for the server-side/back-end part of a software or application. Back-end developers usually write the business logic of software, web services and APIs used by front-end developers and mobile application developers.
A Full-stack engineer/Developer; — can develop both client and server software (that is, is conversant with both frontend and backend). This usually comes with experience working both as a Front-end and Back-end. He/she can be seen as a “jack-of-all-trades” who has skills in a wide variety of coding niches, databases, graphic design and UI/UX that enables he/she to do their job well.
In summary, Front-ends work on what the user can see while Back-ends build the infrastructure that supports it and Full-stacks are both in one. Both Front-ends & Back-ends are necessary components for high-functioning software or applications.
Software testing
Software testing is a process of using various industry-standard techniques to show and verify that a software, application or system is fit for use. It’s a way of checking whether the said software product matches expected requirements and is defect-free. The purpose of software testing is to identify errors, gaps, or missing requirements.
The classifications of software testing are; — Functional Testing(Unit testing, Integration testing, System testing, Interface testing, Regression testing, Beta/acceptance testing) and Non-Functional Testing(Performance testing, Load testing, Stress testing, Volume testing, Security testing, Compatibility testing, Install testing, Recovery testing, Reliability testing, Usability testing, Compliance testing ). Check out;- What is software testing? under the Non Programmers Kit on the Tunga.io Academy for more details.
Level of Developer expertise
As you extend your skills and grow your experience in the software Engineering industry you will go through a number of levels based on your expertise. They are basically 3 levels but in some places or companies, you will find 5 or 7 depending on the breakdown and classifications of the expertise levels.
Junior Developer
When you are starting out you will most likely be a Trainer/Apprentice or most commonly known in the industry as a Junior developer. At this level, you probably have 0 to 1.5 years of experience tops and everything you know about Software engineering is basic at best. You will work on a team where you either pair, work with or have your code reviewed by another Developer probably a mid-level developer before it gets to the Senior developer or Lead Developer.
Read my Article; — The Struggles of a Junior Software Developer to get a feel of the experience a typical Junior Developer goes through
Mid-Level Developer
This is most commonly referred to as Software Developer or Intermediate Developer on some Job descriptions(JDs) put out by hiring companies or recruiters. This is any developer with 2–3 years under their belt who has developed a substantial level of technical skills in the software engineering industry. This Developer has worked on some projects and can work unsupervised on a team among other things or under limited supervision which is typically code/tasks review from the Senior Developer who will act as a guide, mentor and advisor for the most part.
Senior Developer
This developer is also known as the Developer Lead or Team Lead and is often referred to as a problem solver, because of his/her deep, specialized knowledge and exhaustive experience in the software engineering industry, programming language, tech stack or even the specific product being worked on.
At this level, a developer has somewhere 5 to 8 years+ of experience and is able to handle complex problems, comfortably review other developers’ codes, solve their problems, be a trendsetter when working on projects and most importantly mentor Junior & Mid-level Developers.
Other Areas of focus; —
Seven Principles of software testing.
Project Management.
Software development tools(IDE, collaboration tools, version control tools, marketing tools)
Tech communities you can join to foster your technical growth in the software engineering industry.
Agile, its manifesto, core values and principles as well as the various frameworks like Scrum under it.
Some reading resources to check out
What Does a Software Developer Do?
What is Software Engineering? Definition, Basics, Characteristics.
The five expertise levels of a software developer; the road to zen master.
Conclusion
Software Engineering is a lucrative venture for those looking to technology to solve evolving problems. I must say it's not the only way. there are a lot of approaches one can explore when solving business problems.
Also, software engineering is both hard and easy depending on the person and the approach. Read my article; — The Struggles of a Junior Software Developer and Reflecting on The 10 commandments of Egoless programming for more insights & motivation while exploring Software Engineering opportunities.