I want to start in software engineering, but I do not know where to start off. I am not really interested in web development but is it the first step to progress in other fields like data scientist, machine learning engineer, etc. Lastly, what do you guys think are the most exciting and challenging careers in software engineering that are very rewarding in terms of salary and knowledge.
Welcome to the community!
“web development” is a bit of an ambiguous term as it can mean so many things. A lot of people who hold the title of “software engineer” mostly work on web technologies.
“Software Engineer” is a misleading title too since most places around the world don’t have any rules or regulatory bodies enforcing anything. I can self proclaim that I’m a software engineer and it doesn’t matter if you or anyone agrees. I am because I said I am.
So because of that, a lot of people who are “software engineers” either by self proclamation or labeled by their employer, may or may not do what you expect a software engineer to do.
In my experience most people new to the industry have this idea that a software engineer is synonymous to a civil engineer where you have engineers designing the blueprints and workers building the actual end result. In software, this is rarely the case anymore.
In Agile software development it’s also not a practice to design large systems upfront but to create them in a continuous series of iterations releasing the smallest amount of viable software with each cycle. It’s a lot more similar to manufacturing than construction in that sense even though people constantly draw analogies to construction all the time still.
Anyway I’m rambling…
I don’t know where the best place to learn software engineering as a practice is for free. I learned while studying for a CS degree at UoPeople which is an affordable alternative to traditional brick and mortar schools.
A book I recommend is Software Engineering A Practitioner’s Approach by Roger S. Pressman. It’s dated in some of the terminology but the concepts are still true today.
I also highly recommend reading The Phoenix Project by Gene Kim et el. It’s more about DevOps then software engineering specifically but DevOps is really all about how to ship software as effectively as possible and shipping software is a huge component of software engineering.
And then of course there is freeCodeCamp. It’s pretty tough to “engineer” software if you don’t know how to code. So learning how to code is a good first start.
Aside from the FCC curriculum it is a good idea to study code smells, anti-patterns, architecture, design patterns and the SOLID principles as well as understanding some common isms like “composition over inheritance” or “tell, don’t ask” or “Keep it simple, stupid” etc.
Another book I highly recommend related to building software is the Pragmatic Programmer by David Thomas.