New to software development? Here is what you need to know.

Introduction

Starting your journey as a software developer nowadays could be overwhelming if you don’t have a mentor or access to constant guidance. There is a vast number of technologies, languages, and frameworks that could make your journey more complicated. I want to share with you some tips that could help you clear out a path for your developer journey. Warning, you may see the term “things” being used very loosely, so whenever you see that term keep in mind, I am using it interchangeably with frameworks, languages, libraries, and methodologies.

Do not aim to become an expert in the first week.

Patience, patience, patience. I think the two most essential traits developers should have are, excellent problem-solving skills and patience. I mean lots of patience. As you will learn in due time, if you haven’t already, things don’t usually work on the first try when you are coding, especially when you are starting out. It would be wise not to expect to become an expert in a short amount of time. Becoming an expert as in any other field comes with practice. Expect to make constant incremental progress as you learn new things and work on projects, so don’t beat yourself up if you don’t pick up things quickly.

Don’t allow yourself to get overwhelmed.

As I mentioned in the introduction, there are way too many things to learn out there. When we are new to this field, we tend to get excited when we grasp something new like a framework or library, right away we want to start using in our project(s) even if the functionality of the application does not require it. Another common scenario is that we want to feel like we have another notch under our belt and move on to the next thing. Not always thoroughly learning all the correct applications for what we learned.

A right approach would be to find out what you want to specialize in. You could be visualizing yourself working on the front-end, back-end, mobile, AI, or big data. Each one of these specializations requires a different path for you to be able to get there the quickest. I have written my thoughts about this. You can find that post here.

Build ASAP

Don’t spend too much time learning new things. I don’t want to contradict myself, so let me explain. Throughout the years, I have spent a lot of time learning new things that I never used. I spent many hours learning something that I thought would be beneficial or just downright cool and end up not building anything with that gained knowledge. The reason we learn things is to be able to accomplish a goal, to create an application. I advise you take a step back and find out the pieces that are required to build what you want to develop and what knowledge you need to have for each of the parts that go into putting the application together.

Once you know what those things are, start building as soon as you know enough. The rest will be trial and error as you start developing, expect this to be the case even as you gain experience. The best way to remember how things work is by applying what you learn.

It’s just like playing with Legos.

After a while, after building a handful of applications, you will start to realize that a lot of the pieces that go into an app are similar. You don’t have to re-invent the wheel for each application. Design your projects in a way you can re-use code you have previously written. Sticking to the same tech stack over time will turn out as an advantage. Switching languages or technologies will limit the ability to re-use code, but if you play it right, you will be building a library of code overtime which you will be able to use to piece together an application and shorten the development cycle.

Summary

It is very close to impossible to learn everything there is to know about computer science, and even if someone knew everything there is know, that person wouldn’t have enough time to apply all of their knowledge. What I’m trying to say is figure out the reason you got or are getting into programming. Usually doing it for solely financial goals is not a good reason. In addition to monetary compensation, there has to be the element of passion, whether it is for building things or for an idea/vision you want to develop. Motivation is a vital part of becoming a good developer; getting satisfaction from what you make will keep you going.

A Mac vs. PC Experiment for Developers

Talking about Mac vs. PC could trigger a perpetual and heated discussion for both sides. Before I continue, I should clear some things out. Some of you might already be jumping at the bit to correct me. I understand that technically a Mac falls under the personal computer category, so let me give you a few more details about this experiment. I know there are a lot of users who are very passionate about Linux, Unix or other flavors of operating systems other than Windows and MacOS. I apologize in advance; it is not technically accurate to group all non-MacOS operating systems in the “PC” bucket along with Windows. I’m sorry about that, but for the sake of this experiment, I figured it was the best option.

About a year ago I showed my naivete by asking on my Instagram account @thedevlife why developers preferred Macs to do their work. You see, I made the mistake of assuming Macs were more popular. As you might have guessed, I did receive my fair share of messages full of intensity, for lack of a better word. These came mostly from Linux fans who rightfully felt left out. Recently, a young developer who I admire made a post on Instagram making the same assumption. I made that assumption because pictures of Mac computers are trendy on social media and somehow create the illusion that Macs are more popular in development. This erroneous assumption was the main reason that prompted me to run this experiment on Instagram.

The goal of the experiment is not to show that either side is better, it is not an experiment about hardware either. I am not sure what the primary goal for the research was other than the curiosity to know why developers chose one over the other.

These are the results.

1 Hour
6 hours
9 hours
11 hours

When the Instagram story ended 4061 viewed the story and 3203 people voted, the final percentages were 38% for Mac and 62% for PC. Unfortunately, I did not get a chance to capture a screenshot closer to the 24 hours a story post lasts.

Reasons in favor of Mac

  • Macs tend to hold their value better
  • Simply because they have used a Mac longer than a PC
  • The user interface is better
  • Is needed to code in Swift and develop iOS applications
  • Windows sucks
  • Beautiful design
  • Easiest way to use a computer
  • Better file structure
  • AirDrop is really helpful
  • No automatic updates
  • Terminal environment
  • Some applications are made only for Mac
  • Easier configuration
  • No driver problems
  • Better battery life
  • Mac is more adequate for UI/UX Design

Reasons in favor of PC

  • A PC is what employers provide at the respective workplace
  • Linux is free
  • More affordable than Mac
  • Windows is a better platform for gaming
  • Windows 10 is stable
  • Better memory management
  • Needed to work with .NET Framework
  • Bigger developer community for Windows
  • More applications
  • More options on hardware
  • Easier to crack a program on Windows
  • Love for Visual Studio IDE
  • Windows is more mainstream in respective city

Many of the reasons shared are debatable and can start a discussion for decades, but please remember these are personal reasons for choosing one side of the other. There are a plethora of reasons why either side was elected, but looking at the results shows that I was indeed mistaken by assuming Macs were popular among developers. Macs might be more popular in some regions, and Mac users might feel more confident to share pictures of their system on social media, but those numbers don’t necessarily represent the number of developers using Mac vs. PC.

Tips on how to become a software developer

How do I get started as a developer? This is probably the question I get asked the most on social media. I run a page on Instagram called @thedevelife, with almost 90k followers at the time I’m writing this. That question comes up at least once a day. It is also a hard question to answer.

Sometimes people get glamoured by the pictures they see on Instagram of a dude attempting to be code at the beach on a sunny day. I’ve been a programmer for more than ten years, and I have not been able to code at the beach efficiently. I have attempted it a couple times, but it did not work out for me. At least in my experience that has been the case. What I’m trying to say is that sometimes people want to become programmers for the wrong reasons. Aspiring developers like the freedom being portrayed in social media, but sometimes that is all it is, just a portrayal. There is a lot of freedom that comes along with being able to work from any place with a WiFi connection, but there still some limitations. There are a lot of good things that come from being a programmer, the biggest, in my opinion, is knowing that someone out there is using an application you built in their everyday life. I became a programmer because I love to create cool shit and then eventually the perks of being a programmer came along.

When I give advice to someone on how to get started, I lead with the following questions.

What do you see yourself doing as a developer?

Do you see yourself working on the front-end, back-end, maybe programming for mobile devices?

Depending on the answer to these questions, the steps anyone looking to become a developer should take might be slightly different. There isn’t an answer that fits all situations. Also, I cannot provide advice on areas I have not enough experience with like Big Data, AI or IOT. I am familiar with back-end development, mobile, and web development being my strength (my kung-fu is pretty strong when doing work for the web), so if you want to pursue any of those areas I have deficiencies on, I apologize (sad face), I can’t be of value there.

Let me start with bad news first. If you aren’t able to sit in front of the computer for long periods of time and work late nights, sorry to say this might not be for you. I say this because you will have to work long hours to develop an application worthwhile, once that application goes live you might be required to work even longer hours. If the app goes down for whatever reason, you will be expected to show up in the office (or get online at 3AM) to help resolve the issue. At the very least you will have to respond as soon as possible, even if you are working on another project. If you don’t like the sound of this, maybe being a developer might not be for you.

Something else you will need is to have is a mind of a problem solver. I have met programmers who struggle because they are not able to solve a problem or are not resourceful enough to look and find the information that will aid them to resolve the issue at hand. You will not be expected to have a swift solution to every problem that is thrown at you, but the expectation of you being able to solve issues will definitely be a factor in your success as a dev.

Now that we got all the negativity out of the way let’s get into something more constructive. Don’t try to take on too much too fast. I suggest you get proficient at one thing at a time before moving onto learning something else. Figuring out where you want to end up working will help with this. If you’re going to be a full-stack web developer, focus on either the front-end or the back-end until you learn it, then and only then move on to the other. Trying to learn both at the same time might overwhelm you. Let’s explore or this scenario a bit more. Let’s assume you will choose to learn the front-end first, then move on to the back-end and you know your way around a computer, but have not taken any computer science courses.

Front-End Web Development

HTML, CSS and Javascript. Those are the main things you will need to learn to be able to build a UI. JavaScript can be used on the back-end, but in this case, JavaScript will be used for the UI. HTML and CSS, go hand in hand, and without being familiar with those two, you won’t get far, so I advise you learn these first. Then you can get familiar with JavaScript, pure JS without jQuery or any other framework or library. I would only devote enough time to learn how to access DOM elements (by the way if you don’t know what some of the acronyms or terms mean, I will make a list at the bottom of the most common ones) and make simple manipulations to HTML elements. Once you feel comfortable moving around the DOM, I recommend choosing a JavaScript framework. I like ReactJS (technically, React is a library, but many refer to it as a framework), there is also Angular and VueJS which are very popular. All have their pros and cons, the reason why I chose React is that is the most versatile, and once you know ReactJS, the learning curve to learn React Native is small, this will be an advantage if you ever want start building mobile applications. Take some time to do some research and pick the one you think is the best.

Mobile Development

Like web development there a few flavors you can choose from. You can be a truly native developer and learn Java or Kotlin to develop for Android then learn Swift to code for iOS devices. Or, you can choose React Native for which you need to learn JavaScript and develop for both platforms, Android, and iOS at the same time. I personally chose this route because using React Native is just a hop away if you are already familiar with ReactJS. React or React Native will require you to have knowledge of JavaScript. Another advantage is that if you start with mobile development using React Native moving your skills to web development the learning curve will be minimal.

Back-End Development

Here is where you can choose from a plethora of frameworks, some of them are PHP, Python, Java, Ruby On Rails, NodeJs and many more. The best approach for planning out your back-end is to develop a RESTful API your web application or mobile application can access to be able to send and retrieve data securely. All the frameworks or languages mentioned above can help you achieve this. The frameworks I work with are .NET Framework and .NET Core with C# as the language of choice. Again, I was pragmatic with my approach I chose C# because I can build applications for many platforms and there is a ton of documentation on how to get started with Web APIs. The main thing to keep in mind is to make sure you can reuse your code and/or web API(s) as much as you can.

I don’t expect this to be a guide on how to become a developer. I would look at it more like a set of tips that I wish someone would have shared with me when I was starting out. I’d love to hear your thoughts on this, you can find me at @chesco.me or @thedevlife on Instagram.