In a previous post I wrote about how to move from Electronics to Software Engineering. This time I want to approach the problem of moving to Software from a more general perspective. If you come from a technical background, the process might be naturally straightforward with a bit of effort from your side.
Before we start, let give you a little motivation. Software Engineering (in its several flavors: web/desktop/mobile development, architecture, management, QA, and others) has become one of the most popular career paths, with thousands of jobs posted every day on different employment boards and with jobs which are in the top paying rates. So, you can't go wrong with Software Engineering in the middle/long term.
How to start
Well, to be honest, you might need more than a bit to become a full Software Engineer, but it takes a little to start.
First, you need to be aware of the ever-changing nature of software development technologies, as such, you'll keep continually studying and learning new ones. As a single rule of thumb, it's a good idea to make a habit of studying once a week or more often. I know, this might sounds shocking the first time someone tells this to you, actually I thought it was an exaggeration, to make sure to get the idea of how important is to study. However, in time you'll see it's true, and more importantly, you'll love to do it!.
Learning new things in programming is not limited to the classic methods from university, which consisted primarily of reading long books and solving problems on a notebook. Nowadays there are plenty of resources for learning through videos, lectures, programming exercises, among others.
I recommend taking a look at these online learning sites:
Udemy: A vast compendium of courses on video from a wide variety of areas, made by professionals. Does not require membership; instead, you acquire individual courses (offers usually go to 90% discount).
Pluralsight: Membership based network focused on technical skill building. You can find a large variety of SW Development technologies here.
Edx: This is a nonprofit, open-source company offering online courses from member institutions, like universities and diverse prominent organizations.
Coursera: Coursera has a more academic approach, having several universities around the world host courses. Some courses are paid or free with the option to get a paid certificate.
Lynda: Online courses subscription-based, similar to Pluralsight and hosted by LinkedIn.
Udacity: Focused on programs designed to become proficient in a specific field, they offer a Nanodegree credential you can nicely share in your LinkedIn profile.
What to study
Now, if you have made up your mind about moving to Software Development, you'll need to start learning the missing parts in your technical skill set.
It's a bit long way ahead, but nothing compared with the 4-5 years it might take to get a degree; actually, you can get proficient in developing an application in less than a year. Coming from a technical path, you already have experience and knowledge in the IT world and programming is no different.
To start with the basics, you might cover the following topics:
- Basics on programming, like functions, arrays, classes, control statements, memory management and object-oriented programming concepts. Head First Java is an excellent book for beginners.
- Algorithms and Data Structures: This is a must-have foundation for any Software Engineer or Developer, it's applicable and still relevant in any field of Computer Science. Introduction to Alogithms is a classic book that covers much of the topics. Another good book is Algorithms, which also has its online course in Coursera from Princeton University.
- SQL and Relational Databases. You will likely have to work with databases sooner or later, and the most common language for relational databases is SQL. You might start with this course from the University of Colorado.
- Discrete mathematics. Especially relevant in programming, it's highly recommended to learn the basics of math for CS. A famous book on this subject is Concrete Mathematics.
Once you know the basics, you can continue learning new programming languages and technologies, according to the side you take.
From the backend side:
- Back-end programming languages: SQL, C#, Java, Python, Ruby, C++, among others.
- Any MVC framework like ASP.net MVC, .net Core, Java Spring, Django, Rails, Sails.js, etc.
- SQL Databases: SQL Server, Oracle, SyBase, MySQL.
- NoSQL Databases: MongoDB, RethinkDB, Arango DB, Dynamo DB.
Front End side:
- HTML and CSS.
- JS frameworks like Angular, React, Vue, Ember, etc.
- Node JS and NPM
- Bundling libraries like webpack and system.js.
- C/C++, Python, Perl, Bash scripting
- Test Driven Development. Unit tests, functional and integration tests.
- Linux and RTOS.
- Computer Architecture.
I hope this guide helps you on the exciting journey to become a Software Developer. Trust me, it's worth the effort!. Let's keep in contact!.