How to Become a GREAT Software Engineer (Without a Degree?)

Written By John Sonmez

If you’re thinking of becoming a software engineer (or developer – they’re very similar, as we’ll talk about below) … this guide will teach you all about it.

You’ll get a complete step-by-step path for how you’ll achieve that goal. 

Enjoy your 15-step software engineer roadmap!

Is this you? 

You love to crack tough problems…

As a software engineer, you’ll use your intelligence and creative ability to tackle difficult problems and provide a ton of value by solving them for your employer or client.

You enjoy immersing yourself in the study of a topic…

To become a software engineer, you need to learn a number of complex skills. You’ll also never stop learning after that. If you’re all about expanding your knowledge and bettering your skills, this could be the perfect career path for you.

You want to work with others to achieve ambitious goals together…

The basement-dwelling developer working on coding problems all on his own is a myth. Most of the time you’ll have to lead others or collaborate with them on a solution. You’ll also actively take part in meetings and do presentations about your work.

And you’d like to make more money than most of your peers by doing that…

Then why not become a software developer or engineer?

Problem-Solving Programmer

What is a software engineer, exactly?

A software engineer is a computer expert who uses engineering principles to design, create, debug, test, deploy and maintain the systems and code of software applications.

Working in tandem with a team, software engineers create effective software solutions to costumer’s problems in various fields. 

Software Engineer vs Software Developer

Most use Software Engineer and Software Developer interchangeably.

In fact they’re very similar.

Software Engineers analyze and shape (read: engineer) a project from a wider point of view. They’re highly involved in planning and directing, on top of the software development tasks.

What do software engineers do?

software development life cycleWhat software engineers do in a nutshell: As a software engineer, you’re engineering all parts of the software development life cycle.

Defining problems and objectives. Implementing code. Assessing and measuring the deployed software programs. Changing systems and improving programs. Providing ongoing management and support.

15 examples of what you’ll do:

  1. Identify a customer’s problem to solve through a new software application
  2. Run a test of new or existing software
  3. Correct problems with systems or applications
  4. Build new programs from scratch
  5. Manage software engineering projects – often multiple at the same time
  6. Use models to understand and present a project in detail
  7. Create overview diagrams of a project
  8. Iterate new versions of code
  9. Perform quality control on your team’s output
  10. Document your team’s processes
  11. Research information and tools to help complete your tasks
  12. Communicate with customers or clients
  13. Write efficient code yourself
  14. Be a mentor to younger developers
  15. Offer help to anyone on your team who needs it

What's it like to be a Software Engineer from day to day?

Software Engineer Day to Day

If you become a software engineer, your working day could look like this:

  • You prepare your schedule. Whether you’re working at an office or remotely – you want to have your and your team’s tasks for the day all scheduled out.
  • You start working on a software engineering problem. You’re outlining and modeling a software solution to a customer’s problem – complete with guidance for your team on how to implement this solution.
  • You attend a meeting. As a software engineer, you’re working with programmers and testers who assist you in realizing the solution you’ve modeled. You need to hold frequent meetings to coordinate this work.
  • You fix issues with the application you’re working on. By way of testers’ feedback, or your own assessment, you’re constantly facing new challenges. You spend parts of your work day troubleshooting: Fixing ineffective code, debugging and resolving security issues. 
  • You launch a new piece of software. While closely watching how it performs, you’ release a finished application to the world. 
  • You service a live product. In your work for customers or clients, you keep measuring the performance of your finished products. You provide technical support, fix any issues that come up, and continue updating the software. 

How hard is it to become a software engineer?

It’s hard to learn software engineering from scratch, go through the challenging interview process and manage the varied, intellectually demanding tasks on the job.

But if you’re willing to do what it takes, you’ll overcome these hardships and enjoy a fulfilling career as a software engineer.

Here are the top 3 challenges you’ll face:

1. You have to have patience & persistence to finish your education

There’s much to learn for an aspiring software developer / engineer. Basically, if you choose to become a software developer, you'll be a student forever, and you'll have to be constantly improving and keeping up with your education.

As you learn your first programming language, you might feel especially challenged. You can’t get discouraged if everything doesn’t click right away. 

Sometimes you have to work through a learning problem many times over. You also can’t get complacent after you’ve successfully added a skill to your repertoire – there’s many more to be acquired! 

But if you keep at it day after day, you becoming competent enough to start applying for your first developer job is inevitable.

2. You’ve got to work hard on your communication, team work, and leadership skills

Software Engineer Social Skills

Against all stereotypes – as a software engineer, you’re not a lone basement dweller! 

  • You’re taking responsibility at work 
  • You’re coordinating with and delegating to team members
  • You’re communicating with customers

If you haven’t honed your communication, presentation and public speaking abilities much until now, you’ve got your work cut out for you. These things can be a challenge for personality types that are attracted to coding. 

But let me tell you, it’s exhilarating once you get better at these skills – and that’s what they are, learnable soft skills any developer can acquire. Not only can you now engineer solutions to your customers’ problems, you can communicate them well and lead your team to a successful implementation. 

Your life as a software engineer will be 10x easier and more enjoyable. 

3. You need mental rigor on the job 

First off, the ‘systems thinking’ that you need for any project takes a lot of brainpower. But, it’s what sets you apart as a software engineer, so you have to invest that energy again and again.

Secondly, you must be able to battle through challenges. Whether you’re self-educating (takes the most willpower), or getting your degree (deadlines loom), or taking a course or bootcamp (long hours and peer pressure) – you’re choosing a hard path here. Interview prep is hard. 

Juggling multiple projects on the job and solving problem after problem on the job is hard, too. You have to have the mental strength to push through all those obstacles. But maybe you’re the kind of person who thrives when challenged?

Should You Become a Software Engineer? The Pros & Cons

Pros and Cons of Software Engineering


You’ll spend hundreds of hours relentlessly studying

It’ll take you months to learn the programming language(s) you’ll need to work in this profession. And it’ll take months to prepare for your job interview.

If this sounds too daunting to you, maybe you shouldn’t become a software engineer. 

You’ll invest thousands into your education

Especially if you go to college, you’ll be spending tens of thousands to become a software engineer. And while you can go the completely self-taught path (we’ll talk about this later):

Even if you opt out of going to college, by spending some money, you’ll be able to speed things up, and get a deeper education in less time. 

You’ll work a decent amount of hours

But, this is normal for any higher level job. Unless you work as a freelance software developer and only take on a limited number of clients – you should expect to work full-time hours at your software engineer job.

You might end up paying the opportunity cost of ‘having a great job’

This is if you consider the long-term outlook of becoming a well-paid software engineer vs. starting your own business(es). It’s easy to stay in that cushy job forever instead of taking the chance to make even more money in business.


You’ll be in high demand

The demand for software engineers has doubled in recent years, and it’ll continue to increase. The amount of jobs is going to grow by 22% until 2030 according to the US Bureau of Labor Statistics – which is a lot higher than average. This means you’ll have an excellent chance of snatching an good job in this field.

You’ll make good money

Software Engineer Salary

Salaries for  software engineers ranke between $36k and $265k per year. The average is $120k in the US – that’s over $50 per hour for a salaried employee. Depending on the client, freelance software developers can earn $100+ per hour. This will put you in the upper rank of professionals working in the US. And it’ll afford you a lifestyle most can only dream of!

Software developer salary

Software Developers made a median salary of $110,140 in 2020.

Entry level salary

The average salary for a Entry Level Software Engineer is $73691 per year in the United States.

Lead software engineer salary

The estimated total pay for a Lead Software Engineer is $150,667 per year in the United States

You’ll do exciting work and help a lot of people

If you like a challenge and you love being a high-level problem solver, you’re choosing the perfect profession. What’s more, you’ll be helping your customers get their projects off the ground. 

In many cases this means you’re improving the lives of tens of thousands of users – either directly by them using a software you wrote, or indirectly by your code facilitating a product or service they benefit from.

How to become a software developer from scratch with no experience: 15-Step Roadmap

1. Find Your Why & Set a Goal

First and foremost is to have a clear and ambitious reason for your goal of becoming a software engineer or developer. Ensure that your reasons are strong enough to keep you going.

Maybe you hate your current job as a salesman, or accountant and want to become a developer. You want to work for a cool new tech company and get the nice salaries of a software engineer.

I’ve seen a number of people stop programming because they felt it was too hard to continue, but if you have a strong “why,” it’s easier to keep pushing than to simply give up when you face an obstacle. 

Otherwise, you're actually just not going to do it. It's difficult. It's difficult to go from knowing nothing about anything and becoming really good at it.

It doesn’t mean you don’t have to love every minute of coding.

But you’ve got to love tackling and solving difficult problems.

You also can’t be turned off by working with and leading other people.

If you really want it, and you’re willing to go all in on this career – you’ll be able to make it as a software engineer.

2. Pick Your Career Path

There’s different specialties of software engineers. As a specialist you’re more likely to get hired for a job. And you’ll be able to command an even higher salary, because your expertise is rare. 

So pick a field you’d like to specialize in, and start working towards becoming excellent at it.

Here are some career path specializations for software engineers:

3. Pick Your First Language

Software Engineer Programming Language

Before we can run, we have to learn to walk. 

You walk by learning how to program in a single programming language. You don't learn to walk by trying to learn 50 million things all at once and spreading yourself way too thin. 

Here’s 4 steps to succeed with starting to learn your first language: 

1. Start with the language most useful to you

Pick a single programming language that you think you would be likely to base your career around. The programming language itself doesn't matter all that much, since you should be thinking for the long term here. What I mean is you shouldn't try and learn an “easy” programming language to start. 

Just learn whatever language you are interested in and could see yourself programming in for the next few years. You want to pick something that will have some lasting value.

2. Start your learning journey properly

Once you've picked the programming language you are going to try and learn, try and find some books or tutorials that isolate that programming language. 

What I mean by this is that you don't want to find learning materials that will teach you too much all at once. You want to find beginner materials that focus on just the language, not a full technology stack.

Expect to go through a book or tutorial three times before it clicks. You will not get “programming” on the first try–no one ever does. You need repeated exposure before you start to finally get it and can understand what is going on. Until then you will feel pretty lost, that is ok, it is part of the process. 

Just accept it and forge ahead.

3. Start coding right away

As you read through the material or go through the tutorial you have picked out, make sure you actually write code. Do exercises if you can. Try out what you learned. Try to put things together and use every concept you learn about. 

Yes, this is a pain. Yes, it is easier to read a book cover-to-cover, but if you really want to learn, you need to do.

When you’re writing code, try to make sure you understand what every line of code you write does. The same goes for any code you read. If you are exposed to code, slow down and make sure you understand it. Whatever you don't understand, look up. 

Take the time to do this and you will not feel lost and confused all the time.

4. Start building your first small project

Coding Your First Program

Now that you have a basic understanding of a single programming language, it's time to put that understanding to work and find out where your gaps are. The best way to do this is to try and build something. 

Don't get too ambitious at this point–but also don't be too timid. Pick an idea for an application that is simple enough that you can do it with some effort, but nothing that will take months to complete. 

Try to confine it to just the programming language as much as possible. Don't try to do something full stack (meaning, using all the technologies from user interfaces all the way to databases)–although you'll probably need to utilize some kind of existing framework or APIs.

For your first real project you might want to consider copying something simple that already exists. Look for a simple application, like a To-Do list app and straight out try to copy it. Don't let your design skills stand in the way of learning to code.

The Languages You Need to Become a Software Engineer

The top languages used by software engineers are Python, Java, JavaScript, TypeScript, C#, C++, Go, HTML, Ruby and Kotlin. They are of varied difficulty – as mentioned, pick the one you’ll need for your desired job. You can find this out by looking at job postings, for example. 

You could even call in to companies advertising jobs and ask them exactly which skills you’d need to be considered for the role.

4. Understand programming fundamentals & best practices

You need to learn how to write good clean code that is easy to understand and maintain. In order to do this, you'll need to read a lot and see many examples of good code.

Beef up your library with the following books on coding fundamentals:

  • Code Complete
  • Clean Code
  • Refactoring
  • Working Effectively With Legacy Code
  • Programming Pearls – (do the exercises)

And language-specific structural books like:

  • JavaScript: The Good Parts
  • Effective Java
  • Effective C#

At this point you really want to focus your learning on the structural process of writing good code and working with existing systems. 

You should strive to be able to easily implement an algorithm in your programming language of choice and to do it in a way that is easy to read and understand.

5.  Learn a database technology

Learn Database Technology as a Software Engineer

Most software developers will need to know some database technology as most series applications have a back-end database. So make sure you do not neglect investing in this area.

You will probably see the biggest benefit if you learn SQL–even if you plan on working with NoSQL database like MongoDB or Raven, learning SQL will give you a better base to work from. There are many more jobs out there that require knowledge of SQL than NoSQL.

Don't worry so much about the flavor of SQL. The different SQL technologies are similar enough that you shouldn't have a problem switching between them if you know the basics of one SQL technology. Just make sure you learn the basics about tables, queries, and other common database operations.

I'd recommend getting a good book on the SQL technology of your choice and creating a few small sample projects, so you can practice what you are learning–always practice what you are learning.

You have good knowledge of SQL when you can:

  1. Create tables
  2. Perform basics queries
  3. Join tables together to get data
  4. Understand the basics of how indexes work
  5. Insert, update and delete data

In addition, you will want to learn some kind of object relational mapping technology (ORM). Which one you learn will depend on what technology stack you are working with. 

Look for ORM technologies that fit the framework you have learned. There might be a few options, so you best bet is to try to pick the most popular one.

6. Decide how you’ll become a developer

Choose one of these 5 ways to be a software engineer:

  1. Get a college degree
  2. Take an (in-person) coding bootcamp
  3. Earn a certificate
  4. Complete an online course
  5. Learn entirely on your own


Software Engineering Degree

This is your longest and most expensive option. 

You’ll go deep on mathematics and fundamentals like data structures and algorithms. Coming out of college, you’ll have more knowledge about fundamental computer science concepts than someone who chose a more DIY path. You’ll have studied computer architecture, databases and source control.

But you might not have as much practical coding skill as someone who’s gone through a bootcamp, for example (which is 90+% hands-on practice).

Even if you go the traditional college route, keep building things in your free time on your own. Applying those theoretical learnings is where real growth happens. It’s how you make sure you’re more than prepared to work a software engineering job ‘in the real world’.

What degree you need to be a software developer

When you study to be a software developer / engineer, you can do an associate degree, bachelors and masters, or even a doctoral degree. 

The most popular fields of study for developers are computer science – a more theoretical line of study – and software engineering, which is a bit more practical with more time spent actually coding.


Today there’s hundreds of online courses teaching you aspects of software engineering within a timeframe of weeks or months. Courses are great if you are someone who can learn individually, but still wants guidance and resources in an easy-to-consume online format.

What’s missing is the community aspect of college or bootcamps. On the other hand, online courses are often more affordable and easier to complete successfully.


If you’re not sure you want to commit to an expensive multi-year degree, you could opt to earn a certificate in software engineering first. These are cheaper and you only need six to twelve months to complete one.

Coding bootcamps

Go all out for one to six months and be ready for your first job. That’s the promise of coding bootcamps. 

Along with other like-minded aspiring software developers, you immerse yourself in studying and coding – for 8-12 hours per day. 

Because they’re so focused on having you execute everything you learn right away, you can expect to become a competent coder after only a few months of bootcamp.


Self Taught Software Engineer

Can you really become a software developer without a degree?

It’s absolutely possible to become a software developer or engineer without a degree.

You could argue that skipping college puts you at an advantage: The time and money you’re saving can be put into your self-start projects, practical intensive courses, and interview prep. Some employers do require you to have a degree, while others are focused only on which skills you can demonstrate. 

Again, as a self-taught developer, you’re often ahead when it comes to practical application – though you might not be as well-versed in computer science concepts, math problems, data structures and algorithms.

7. Get Experience with an Internship

I’d recommend that as soon as internship opportunities are available to you that you start prepping and applying for those, so that you can be ready and get your foot in the door. 

Because one of the most difficult things is even if you have the knowledge, even if you understand how to program and programming language and how to use the tools and technology: No one is going to give you a chance. 

It's hard to get your foot in the door without experience and internships are a good way to do that.

8. Stay Informed

Stay Informed as a Software Developer

Never stop learning. Never stop reading. Always be working your way through a book. Always be improving yourself. 

Your learning journey is never done. You can't ever know it all. If you constantly learn during your career, you'll constantly surpass your peers.

These are the top ways you can stay informed about trends and developments in the software engineering profession:

  • Events and conferences
  • News
  • Podcasts
  • Books

9. Work on all software engineer Skills

Make sure you’re improving on all the hard and soft skills it takes to be a great software engineer. 

These are the most important ones you need:

Software Engineer skills

  • Critical Thinking & Attention to detail
  • Communication skills
  • A cooperative mindset
  • Time Management
  • Multitasking
  • Troubleshooting
  • Testing
  • Designing and developing databases
  • JavaScript
  • C#
  • C++
  • HTML
  • Python
  • OOP
  • SQL
  • .NET

Lead developer skills

  • Responsible
  • Motivated
  • Highly technical
  • Humble
  • Has conviction
  • Good communication skills
  • Trustworthy

10. Build your Portfolio

Start building up your portfolio as you’re on your way to becoming a software engineer to increase your value to the marketplace. If you can show that you’re already applying all your learned skills in the real world, it’ll make you that much more attractive to your future employers or freelance clients.

Do coding projects

Start with small projects and move up to more challenging ones as you grow your skills. All the while, document everything you’re doing so you can show it off and use it to build your authority and personal brand as a developer.

Create your developer website

Starting your own developer blog is low barrier to entry and it's extremely effective. If you blog regularly and consistently, it’s almost guaranteed that someone searching for your name on the internet will find your blog.

Think of a blog as an advertisement for you that works all day and night without you having to do anything other than feed it every once in awhile.

Aside from the external opportunities blogging offers you, it offers some great personal development opportunities as well. I don’t think there is any better way to improve your communication skills than writing.

Blogging for Programmers
Writing teaches you to organize your thoughts clearly in a way that other people can understand. The more you write, the better of a communicator you’ll become in general.

Blogging also helps you keep track of your own career and progress, as well as provides some historical documentation and reference material which you can look back on to see how you solved a particular problem in the past.

Every software developer should have their own blog: it’s like a lightsaber for a Jedi.

Learn to market yourself

I think this is so important that I built an entire course around the idea. Learn how to market yourself as a developer and continually do it throughout your career. 

Figure out how to create a personal brand for yourself and build a reputation for yourself in the industry and you'll never be at want for a job. 

You'll get decide your own future if you learn to market yourself. It takes some work, but it’s well worth it.

11. Create your Resume

Software Engineer Resume

When it comes down to it, resumes are more about advertising than anything else. You can think of a resume as a one-page advertisement for you. In fact, if you want to have a good––nay, a great––resume, you have to think of it that way.

The simple truth is, for most jobs you apply for, the only thing anyone will ever see is a quick 15-second glance at your resume. It’s in those 15 seconds that the course of your life literally can be determined. Interview or rejected.

Like it or not, a good programmer resume is important.

Ultimately, you want to portray very clearly what your skills and expertise are, how you’ve used them in the past to achieve great results, and how those skills might be transferred to the future position you are applying for.

12. Apply for your first software engineering Job

There's another hurdle that you're going to face – and that's actually getting a job.

This might even be the most difficult thing out of everything I mentioned today. Even if you follow everything I've talked about and are truly a great programmer, no one's going to give you a shot unless you position yourself properly.

13. Master Interview Skills


Whether you like it or not, interview skills are a big part of the puzzle if you want to get a job as a software engineer. Being a great interviewee is a whole game in itself.

Get ready to prepare for months in advance, studying coding problems and holding mock interviews with your friends.

Practice interview questions

At your software engineering interview, you’ll be asked questions about different topics:

  • Computer science fundamentals
  • Coding problems
  • Behavioral questions

To excel at your coding interview, prepare for those questions months in advance.

14. Teach

The whole time you are learning things, you should be teaching them as well. It doesn't matter if you are a beginner or expert, you have something valuable to teach and besides, teaching is one of the best ways to learn.

Document your process and journey, help others along the way.

15. Continue your Education

I'll say that no matter how you learn how to become a software developer, it still requires taking action, writing code. Just reading academically – going through the motions – is not enough.

You need to be creating some real applications and there's opportunities today in the mobile development world. It’s easy for someone to create their own mobile application. Even web applications are fairly easy compared to what they used to be in the past. 

You could actually create a working application that you could actually sell and make some money,and build a business off of.

How long does it take to become a software engineer?

It could take you three months to four years to become a software engineer. With courses or bootcamps, you could be ready to start applying for jobs after 3-6 months. College is going to take 2-4 years to finish. Being self-taught software engineer takes months or years depending on your effort.

Can you become a software engineer when you’re older?

Yes, it’s absolutely possible to become a software engineer when you’re 30 or older. You can go through the same steps that someone younger would. After investing a few years into your new career, you can be exceptional at it – even if you’re not so young anymore!