Software development is hard. You will bang your head against the keyboard. You will struggle with concepts that aren't immediately clear to you. And you will need to do a lot of learning on your own. Now, with this reality check, please do keep reading.
Why Software Development is Hard?
In the beginning, it can be really hard to assess when you should move to learn the next topic. Not taking enough time to build fundamentals before moving to the more advanced topic can lead you to spend more with the simplest problems, and it will be really hard for you to follow or create programs that deal with those advanced topics. I mean it could be as simple as not getting comfortable with boolean expressions (true or false statements) before moving to loops and if statements (conditional logic), which will get you into trouble of figuring out bugs (your program doesn't behave the way you want it to), resulting in banging your head against the keyboard.
Software development is all about problem-solving, especially in modern-day development, you don't spend your days solving math problems, but building products that your clients want with other people. The hard part will be for you to communicate well and understand what your stakeholders want.
The hard part is forcing yourself to take a step back, and stop yourself from diving headfirst in trying to find solutions. It can get really hard when you are alone. When you don't utilize your peers and community, it can get hard to process, learn, and grow. You will reinvent the wheel without learning from your community or taking benefit of their experiences.
A lot of software developers have impersonation syndrome. It is really hard to sit between people who talk smart all day, and feel like you are behind or you need to catch up. It can be hard to tell people what you don't know and use your team to grow yourself. Software development is really hard when all you see is new blog posts about this new XYZ technology, and now there is another thing on your bucket list, or worst, you have now switched your focus.
It can be hard to prioritize your bucket list of things to learn. If you follow blogs, Twitter, and other great resources, you will learn about a lot of cool innovations that people are working on, resulting in a never-ending list of things you don't know about. The hard part is stopping yourself from jumping into each one of these new topics right away.
How Can You Make Software Development Easy?
If you are just getting started, and maybe already tried out 5 tutorials and "still don't get it". Most likely your problem is that you need to first build fundamentals of problem-solving. People who usually succeed in boot camps are already natural problem solvers or have built the experience in some other form. Problem-solving is a mindset, you too can have one. One simple way to start improving it is by reading "Problem solving 101" by Ken Watnabe. I started reading this book after I started working on my programming boot camp, Learnly, and realized how many similarities we have for building a framework for problem-solving. There are a lot of other resources for learning problem-solving. If you have tried programming and are struggling with coming up with solutions, it's probably just your approach to problem-solving that needs to be improved. Lucky you, that's doable.
Build a structure and schedule, if you want to accomplish anything, all you need is a structured and consistent approach. The structure will help you stay focused, it will help you by not letting you jump to the next new thing without being done with the first one. Structure helps you learn concept A before concept B, as in don't be random. Consistency will make sure you can do it regularly, and complete it! A lot of people start a lot of things but never complete them. It's a doers world, people who do it are the ones successful. They can only do it because they are consistent. Doesn't matter if you are trying to improve your basketball shot, or learning this software development thing, you need to consistently work on it. Figure out what that consistency is for you, 5 hours/week, 10 hours/week, or 2 hours every morning. Apply this to anything you want to learn or build, and thank me later.
Learn to communicate well. It means writing and speaking in a clear and efficient manner, you also need to listen well. Engineering is not all about building solutions, you build solutions for people and with people. With good communication, not only will you and your team be more efficient, but you will all be happier. Isn't that what everyone wants anyway? Always always always state your assumptions, this will help you deliver the right solution with less back and forth, end result => every one is happy faster. You must be patient and understanding; stakeholders frequently ask for things that do not make sense since they may not even realize what is already available or possible.
When you encounter a new problem, programming-related or not, don't just start by solving it. Verify and validate that you understand the problem. Understanding the problem has multiple steps, it can be breaking it down into multiple small problems first, and THEN figuring out solutions to each individual subproblems (divide and conquer!). Especially as you progress in your career, it will become less important about how quickly you can spit out code, and more about how well you understand the problem and break it down.
One of the worst mistakes I did early on was not being a part of communities. They help you in so many different ways, keeping up to date, motivation, guidance, and so much more! That community could be online, in person, or just sharing ideas between your peers/friends. Basically, don't do it alone, there are almost 8 billion people in this world, I'm sure you can find people that are in the same boat as you or have been.
Impersonation syndrome can be a good thing. Fake it till you make it right? Not necessarily! There is no harm in claiming you don't know something. Use it instead as positive energy to keep going and learning, if people around you are pulling you down for not knowing something, maybe you need to change the people around you.
Don't jump to every new shining technology or new idea. Again, structure your learning goals and checklist. Prioritize everything in your bucket list, I mean really write it all down. If you see something interesting and want to know more or try it out, throw it on your bucket list with prioritization.
Beginner Programmers Checklist:
First, you need to learn the fundamentals of software development before you learn that popular React tutorial that is for beginners. Fundamentals before specific technology. Learning fundamentals will help you become technology agnostic. Technologies change all the time.
- Pick a course that goes over problem-solving, data types, conditional logic, functions, loops, etc. Strictly staying close to fundamentals. Say no to making web servers after day 3, to anything with objects very early on. This is where you will learn to build algorithms.
- After building low-level fundamentals, pick a course that strictly focuses on object-oriented programming (OOP). You can do OOP with most high-level languages today. This is not something you spend a day on and move on. There is a lot that goes on. Remember the goal is to bang your head less against the keyboard.
- Next, build on data structures and algorithms, see, no webservers still. It's really important to get comfortable with how data flows in a computer program first. Once you get comfortable with that, then you can start throwing your data across the internet (web).
- Now that you should be comfortable with OOP, take a look at different programming paradigms, such as functional programming. This is something you should add to your bucket list and prioritize to do a deep dive.
Now that you are comfortable with the concepts of coding, you can do whatever you want. Learn to build websites like Twitter, mobile apps, ML in self-driving cars, or wherever your heart desires. This is a sample path to building applications:
- Learn about databases. They are a lot of different ways to store data these days, learn to pick which way works best when.
- Now build that website or app that you wanted to build. It doesn't have to be a website, it could be your augmented reality app that you wanted to work on. But now is the time, once you are really comfortable with expressing solutions in code.
- Learn enterprise software development practices. Doesn't matter if you are building your own project. You need to build software with good practices. It will pay off when your startup takes off, or the company you are working for. I was writing code when I was 15. 12 years later, my solutions are very different. Building algorithms is one thing, building scalable software with a team is a whole different ball game.
- Deep dive into algorithms. In today's world, people don't care about computer resources because most computers are so stacked, by taking this deep dive, you will learn to be frugal with your resources. It will be a humbling experience when you realize the kinds of solutions people have.
- Prepare for interviews. Doing well in interviews is an art. There are lots of resources like "cracking the coding interview" that help you get good at this art. Practice. Practice. Practice.
- If you are interested, get started with smart contracts, VR, and ML.
I'm in the process of building an online program that helps with all of the above. If you are interested in joining the pilot phase, sign up.
You can also reach out to me on my Twitter for any help with any of the above.
Thanks for reading.