Before starting out, I’d like to take a minute to thank you for reading & sharing my last article “You Need To Know These 7 Traps That Make Your Software Useless The Gap Between Learning Code And Producing Usable Software”
Since we have numerous new members joining the club, feel free to send me your requests, topics, comments, advice, and I’ll make sure to reply to each one of your emails!
Without further ado, let’s dive in.
Learning how to code can be daunting, the progress is slow, the concepts are unique, and the positive feedback loop that will keep you motivated is hard to maintain. Countless are the articles that tell you should learn some framework X because it’s the future or master a language Y because it’s robust. Personally, I wouldn’t have learned multiple stacks (Deep learning, iOS dev, Android dev, Game dev, Cloud services) had I found the right source to guide me. And this is what I wished I had known:
Before choosing what programming language/framework to learn, let’s establish these first principles:
Programming is an investment
Learning programming and taking it to the next level are two different things, this is what you’ll be working with for years to come, the market is competitive but you definitely have a spot - if you work hard+smart enough. You don’t need to be a genius but willing to sit down and work. Had I told anyone I wanted to learn deep learning when I was still a freshman with 0 experience in coding, they’d have laughed their life off.
When you pick a programming language, you’ll start building “assets”. Think of assets as utilities that help you in video games. The harder the level, the more you need them to win fast. Typically, after 2 or 3 side projects, you’ll be having a folder full of code snippets that will save you hours! (I’m constantly taking code from projects I’ve finished 3 years ago)
No, you don’t need to stick with your programming language and you can always bounce off to something else. That might sound counter-intuitive, but at least before switching, you’ll have an important cognitive asset:
The ability to make complex decisions fast.
Knowing how to learn the new programming language/framework faster & more reliably
Apply the same general concepts onto the new PL
However, I don’t recommend switching areas frequently unless you have a valid technical reason for doing so.
You can’t skip the basics
Not fun to hear, I’m fully aware. But learning the basics is your first step into programming. Here, you build your tools, learn facts, and polish your skills. Many people struggle with this phase, and when stuck, they think programming isn’t for them.
Think of this step as learning how to reason in sequence. The human brain is a supercomputer on steroids, 1 + 1 appears trivial since you are looking at an equation from a top view. However, the machine only gets to look at 1 operand at a time, so you have to declare your intentions first then tell it what to do with your intentions.
Finally, you elevate your reasoning by solving a real-world problem using an algorithm (a set of instructions).
Again, it doesn’t have to be daunting or scary, as I always say, take an hour or two a day and learn at your own pace. Don’t compare with others because chances are you’ll feel overtaken. And there is no room for intelligence or stupidity in learning code. Only actions and results.
To close off this first part, I invite you to experiment and try whatever works for you. This isn’t the absolute rule on how to learn how to code. If the analogies aren’t that practical for you then great! set your own. If my logic is flawed, then also great, rethink yours! It’s always great to experiment.
Now let’s get you started with choosing the right platform, here is what you should know:
Unity is your friend. I still remember the day I decided to make games and become a game dev. The language is C# and unbelievably easy to learn.
Some people prefer using Xcode, but the software is platform restricted, and from my experience, I found it a thousand times easier to learn game dev on Unity than Xcode
The game engine (Unity) does the heavy lifting, you tell the objects to move by a given speed and whether they can collide or not, and there you go, the embedded physics kick in
You’ll have a huge boost by learning design using Blender (An open-source software for design and animation) or similar. Nevertheless, it’s not required, but there will be instances when you wish you’d known how to design
You can compile your game for whatever platform! (Desktop, consoles, web, mobile, etc..) Check out this link for more info
The industry is competitive and requires a lot of discipline since you’ll be working long hours. Some like it some don’t, it’s up to you to decide
You are restricted a bit in terms of employment. There are only as many game dev companies out there, and if you don’t like the domain anymore, you’ll need to learn another skill instead of reusing what you already know
Game physics are annoying sometimes, however, the more you learn, the easier it gets - Classic debugging scenario. Game dev is inherently time-consuming given the small details to address. Also, often you’ll get unwanted guests: Bugs. The combinations of physics are near unlimited, sometimes you’ll find yourself debugging for 5 hours a small bug that you simply can’t fix. In this scenario, you can get help from someone you know or revert back to online forums.
No, you won’t make “easy” money with game development. It will take a bit of time to learn how to make smooth, flawless mechanics. So if you are doing it for the money only, maybe you want to save yourself the frustration.
If you are doing it by passion, by no means try it out! you’ll have so much fun creating weird games. Let your imagination go wild, it only gets better from there!
Simply practice and resilience: Back in freshman year, I decided to dive into competitive programming. It sounded nerdy and cool. I finished the “cracking the coding interview” by Google. Which contains 150 programming interview questions. I noticed slight progress given the giant amount of work I had to endure for a full summer.
If you want to make money through this, you sure love making money the hard way, but it’s doable. Nevertheless, this is a great way to get into big techs if you rank top in programming contests.
You only remember as much as you practice. The hidden trump card about Competitive programming isn’t the difficulty of the problems but how prepared are you. You don’t have to remember how you solved a problem but where you missed. If you stop practicing, you’ll feel you lost that ‘cognitive prowess’ that helped you draw links between multiple parts of the question.
More often than not, the standard programming language is C++. Python is on the rise too.
Android or iOS, it’s up to you to choose. I prefer coding for iOS (Swift) because it feels much cleaner. Back in Android (Java/Kotlin), I had to deal with preliminary problems like fixing “Gradle” after an update to just get the project going. Also, I felt that Android was a bit messy to code for in a native language. So I switched to iOS.
iOS is more restricted, you need to pay $100/year for the Apple Developer Program. Also, you need the membership if you want to include advanced features in your app such as Deep Links, notifications, background activity, etc…
Android on the other side, you pay $25 for a lifetime. You submit as many apps as you want, and no one is restricting you in any way. You have a wide audience of developers and potential users waiting for your app. But on the other side, you are competing with more people.
Why not both? Use a framework! I learned both Android & iOS dev and now I’m switching completely to Flutter (more on this in the last paragraph). Using a framework helps with coding for multiple platforms using the same code base. You don’t want to do double the work, and maintaining just 1 app needs many! people. It’s not a matter of “competency” but resources. If I judge by my skills, I don’t need anyone technical on my team, but often than not, I need many people to help me out because there are many small details to take care of.
App developers have a favorable edge in the job market. Mobile users are on the rise. According to BankMyCell, 3.5B people are using their smartphone and it’s only been growing to date
Career-wise, you can work anywhere from the comfort of your home. Also, you ‘ll progress quite fast if you know what you’re doing. Salaries are on the rise too, and the benefits are staggering. Finally, you’re not limited to some predefined companies, you can work for startups, freelance, build your own project, and so on.
This area is getting more & more competitive, and there is a slight switch that is happening, which is the move to software development kits (aka Flutter, React native, etc…). Instead of paying a full-stack mobile dev to write code for 1 platform only, you can have the same code base work for multiple platforms.
No, you don’t need to worry about the “no-code tools” and the “website builders”. These can only help as much. If you want to focus on the backend (servers, technical logic, business logic, etc…) you are in a much better position given that each use case is different. And for a no-code tool to handle that, it’s pretty unreasonable.
Web Development is a dimension in itself. I’m not a web developer and don’t want to snap off someone else’s advice. But what I can say is: going down the framework path (React or Flutter) is probably the most profitable way, time-wise.
The holy grail of technology, Deep learning. You don’t necessarily learn how to “code” Deep Learning. But I felt the need to address the topic since there is little info out there about what it’s like to be a deep learning engineer.
Python and frameworks are enough. You don’t have to learn Deep learning, neither know how the internal mechanism works. However, it helps to know what type of Neural Network is used for what, and some hyperparameter tuning to make your training better. Currently, some services such as AWS Sagemaker, and others… do the work for you. They not only optimize the best set of parameters but also find the most optimal neural network model for your specific use case.
At some point, there was a lot of hype about this, and many people confused it with ‘Data Science’, even though, they are 2 different areas.
There are some robust frameworks out there that will help you train your model. Chances are, you’ll find the full algorithm for your intended use case online. Either under the form of a tutorial or contests (Kaggle).
Deep learning sounds great and advanced, but it’s not coding, you’ll be doing a lot of analysis, probability, statistics, and research. As a data scientist though, you ‘ll mostly process the data into a clean format for the machine learning engineers. I advise you to read more in both areas further. I just brushed over the topic given the complexity.
My own opinion and what I would have done differently
Google launched its framework “Flutter” in May 2017. Flutter is a development kit that helps you write the same code base for multiple platforms, phones, desktops, web. The framework is ready for production for iOS/Android. However, it’s still in beta for Web and Alpha for Desktop. Personally, I would have gone straight for Flutter and learned the inside outs and became one of the best at it. That being said, the framework offers incredible flexibility and a fast development environment. There is also a huge community behind it already. Some people might argue that React is better and stable but it’s a matter of what language you are most comfortable working with. And what type of investment you prefer, long term or short term. Some final thoughts: I’m getting familiar with the framework to learn web development. It’s far from ready, but I see it as an investment in the future and you can do so too.
To conclude, whether you are going for web or mobile, I highly recommend going down the framework path. Knowing multiple stacks is great, but mastering 1 is even better.
Thank you for reading this long article. I intentionally made it long to cover the most use cases out there. Many people are lost and I really hope you found your answer here. Shoot me an email if you have anything to say: comments or requests. I’d be happy to reply.
Thank you so much for reading! In the meantime, you can comment and share with your friends. Also, consider subscribing to get my latest updates by email. See you!