Becoming a software engineer is a fantastic way to use your creativity and technical skills to build amazing things that improve people's lives. But it's not always an easy road, and a lack of guidance can often make the process hideous and getting started daunting. Here are things I wish I had known before learning software engineering.
Define your reason
Having a well-defined reason in mind when learning software engineering can help through the rough parts of it. Software engineering may seem shiny and easy to dive into, but it does get difficult. And when it does, you will want a strong reason to keep going.
A valid reason may be an added value in your personal or work life. You may wish to automate tedious processes in your everyday job. It can also aid you in understanding the software engineers you work with, even if you are not in a technical role. Others may learn software engineering to build an app or website for a volunteer job.
Your reasons will be different from others. You may have a passion for technology and programming and decide to learn software engineering. Usually, passion is not enough. Software engineering is a complex maze that can be impossible at times. It is more sensible, however, to set realistic goals and expectations to keep you from lacking the motivation.
Money is also a valid motive for learning software engineering, especially that software engineering does not require a degree. But money does not come easy, and it may take you months or even a couple years before you start making good money. Instead, setting a realistic set of objective goals is the better way to go. Keep in mind that you may prefer average pay with a good work environment to a 6-figure in a brutal atmosphere. It does not come down to just money.
I chose software engineering because it appealed to me at a young age. And this passion has worked for me for as long as I can remember because I set realistic expectations for myself and my goals, which motivated me to follow my passion.
The sky is the limit. What matters is a well-defined reason with realistic expectations to make the journey worth it.
You are not your code
Our lives as software engineers consist mainly of learning. We start by writing dirty code and improve over time. We discover better ways to build the things we do.
Your code will be shit on. Others will completely dismiss it as useless, unclean, or any other reason which will often be valid. But we are not machines. We are human beings. We grow attached to the things we build and the code we write.
You can gradually learn to detach yourself from your code, however. Start by having colleagues, friends, or mentors review your code regularly. The role of code review is to make sure committed code is okay per a standard before it can be merged into the final product. A reviewer usually sees things that code writers do not see, such as misspellings, inconsistent code style, and logic errors.
The best way to benefit from code review if you can not find a trusted reviewer is to review it yourself the following day. This allows you to see things you do not notice when writing the code, and encourages you to develop the habit of self-reviewing. This will improve your code quality over time.
Learn to digest criticism
Criticism is not always going to be objective. And it is not always going to be helpful, even if objective. It may have been delivered in bad faith or by an inexperienced person. Learning to digest criticism will positively impact your learning journey.
Information and motives affect criticism. These motives can be malicious, and taking every criticism as valuable and informed may mislead you into destroying a perfectly sound idea.
Ask yourself when faced with criticism. Is the person giving it genuinely interested in helping? Are their opinions informed? What experience do they have? Does it make sense? These are some of the questions I ask myself, and I always get a clearer picture of whether I should consider said criticism valuable.
Find your niche
A niche is a speciality in which you prefer spending your time. We enjoy our niches more than anything else. And we are usually happy spending more time doing what we love the most.
For example, my favourite topics are performance and user experience. And I can safely say that I spend most of my time working in these two areas. I assign myself tasks related to these topics at work and usually the first to discover issues on them.
The possibilities are infinite when finding your niche, and you usually do not search for them. They are just things you enjoy the most about your job. But once you do find a niche, your perspective shifts entirely.
Avoid bad habits early
Beginners often ignore best practices like code formatting and planning, even though these skills are essential to everything we do. Learn code quality practices and standards early. Learn to use linters and automated code formatters for your language of choice.
Learn clean code principles, code smells, design principles, technical debt, and refactoring. Refactoring.Guru is an amazing start. It dives into the details of code smells, how to handle technical debt, what and when to refactor, and the design patterns we use.
Escape tutorial purgatory
Going from one tutorial to another without actually planning and building projects on your own has more negative side effects on your knowledge than actually following those tutorials.
Take a break from courses, tutorials, and other walkthrough material and start building side projects. This will teach you a lot more than following a tutorial blindly.
Get stuck? Search online. Still stuck? Find someone to help you. There are platforms that specialize in providing help through a question-answer system, such as Stackoverflow. You can also find help on channels used by the maintainers of the tools you use, such as GitHub Discussions.
Plan and document your side projects
Planned projects tempt you to put more effort and complete them. Spend some time planning instead of jumping straight into coding a project. Planning will not only encourage you to work on a project, but will also help you understand it more, have a clearer picture of the project requirements, and have a better overview of the project's potential timeline.
This allows you to set realistic expectations, deadlines, and timelines. Learning an agile framework can help you adapt to changes in your daily routine and will allow you to better plan your projects based on point estimates, previous projects, and previous iterations of work on a project.
Documentation is your only source of truth after the source code. Document your planning, requirements, and your estimates. Documentation will come in handy when you maintain a project months after completing it and when onboarding others.
Find a mentor
A mentor is someone who can guide you through your journey. They provide informed insight and help you with decision-making.
A mentor may be an experienced friend whose judgement you trust, a colleague, or even a stranger. As long as they have legitimate experience and can actually assist you. Some mentors provide their services for an hourly fee, and some others completely free of charge.
Coding Coach is a free, open-source platform that aims to connect software developers and mentors around the world. It is a great platform built by developers for developers.
Learning software engineering can become difficult at times. Forcing yourself beyond your limits can make the journey orders of magnitude more tedious. Give yourself time to learn, practice, and process what you go through.
Use mind maps, summaries, and other forms of complementary tools to aid you in remembering what you learn. Some people learn by reading stuff once, while others take a couple times and a lot of practice before fully understanding a topic.
Understand how your brain processes stuff, and go at your own pace. You're not in a race, and cutting corners to "catch up" will only hurt your potential opportunities.
Create a social presence
A social presence can improve your opportunities. It can also guarantee you more experienced mentors. However, how you build a social presence can differ from one person to another.
You can create content for beginners, mentor people, be active in social groups, attend events, or join communities. Do not just join and be invisible in a community, though! Interact and connect with others to put yourself out there.
Increasing your connections network will definitely have a positive impact on your opportunities as well, either directly or through referrals. Social networks, student activities, and Meetup groups can help you connect to people working in the same field as you are.
And this can introduce you to better mentors, more experienced developers, and more desirable job opportunities. Your interpersonal skills matter, and the better they are, the better your overall experience will be.
There is a lot to learn in software engineering. It can be overwhelming at times. However, if you take the time to master the basics and build a strong foundation, you will be well on your way to success in this field. I wish I had known these things before I started learning software engineering, but I'm glad I know them now. If you're starting out, keep these things in mind, and you'll be sure to set yourself up for a fun journey!
Want more tips to help you learn to code? I wrote an article about that on dev.to. If you liked this article, can you share it with someone else learning to code? I wish I knew all of this when I was starting, and I hope it helped you too. Thank you for reading!
Written by Nabil Tharwat
Nabil Tharwat is a software engineer and mentor who's super in love with all things accessibility and performance. He's host of The Weekly Noob podcast and his content has reached thousands of people around the world.