Welcome Back, World!
Last week we covered the basics on getting started. We hope by now you have started to commit to a regular schedule to learning this from scratch, or just building upon your foundations. In this article, we will cover what “writing code” is all about, since this is the first step for anyone whether it be educational, or a veteran starting a new project. However, anyone experienced knows that design comes first, and we’ll save that for another day as we are trying to progress from each post. If we do deviate and try to mix it up for readers of all levels, we will make it clear.
Writing Code: What It Means
At this point we are sure you have heard this at one point or another. If not, you may have heard synonymous terms such as building, programming, developing, etc. The idea here is that you are crafting statements together to solve that problem we mentioned last post. Back in the day (before our time), there weren’t that many options. People had to use punch cards, programming languages were limited, and even computing resources were scarce. Why do we mention this? Today, there are a many different ways to “write code”. A simple search engine query will show you all the different ways to get started with “coding” (not being sarcastic, this is just what the masses state this as), and it can be quite daunting to get started. In the next section, we will go over the options you have, with emphasis on our suggested approach from last post to learn programming via solving problems.
If you’re new to all this, please don’t worry, even the most experienced continue to feel the same way since technology keeps changing. As we said earlier, you must keep an open mind and be willing to learn new things. If it makes you feel better, we’re way out of our comfort zone building in crypto and learning more about Web3. We normally try to keep comments like this towards the closing paragraphs, but want to make sure we tackle this together every step of the way.
Your Options to Write: IDEs and Editors
Depending on your language of choice, you have a couple of options. You can use either an IDE (Integrated Development Environment) or a text editor of your choice. The difference between both is that an IDE is for compiling and debugging code for a specific language (more on these two terms later), whereas an editor allows you to edit code across different languages, but does not offer compiling or debugging capabilities.
Taking a step back, there are tradeoffs between both. For anyone new, start with an IDE as it is easier to focus on building your foundation. Editors are great, but you could get sidetracked with learning more about compiling and running your code separately. Additionally, when working on large software projects, IDEs truly show their capabilities as you will come across all different types of bugs, code that needs to be easily changed (refactoring), and additional bells/whistles we can cover in a separate post.
As far as options go, there are many, along with a few dominant options that have been around. For example, if you’re using Python as your language of choice, you can use the PyCharm IDE. If you’re using Java, Eclipse and IntelliJ are two IDEs that you could use. Atom, Brackets, and Sublime Text are a few editors that you could use. Now that you have the general idea around how to think about your tools depending on your language of choice, lets cover languages that you can pick, along with some of the positives and negatives of each. Please note that we aren’t handholding each step of the way as there are plenty of guides/videos on how to get into the details. As always, we are trying to help you think such that you can proceed independently (this is how you learn!). Of course, if any questions feel free to ask in the comments and we will try our best to respond.
Programming Languages and You
We can spend a few posts going into the details of programming languages as it is an interesting topic, but for this post we will stick to the high level such that you can make the right decision for yourself and get that W2/WiFi money. Here are some popular (and useful) languages to choose from (no order of preference here, we will explain why afterwards)
Python
Go
Rust
C++
Swift
Java
JavaScript
Ruby
Some are (relatively) new, some have been around for a while. Some may share certain features with others, while some may try to be a better version of another language by solving for issues many engineers would face during their day-to-day. In terms of ease of learning problem solving, the best choice here is Python. Python is used in many different industries, and different application types. For example, Python can be used in your favorite social media’s website, an ecommerce platform, all the way to a quantitative trading strategy that (hopefully) prints USTT. Additionally, the learning curve is not as steep comparing to languages like C++.
C++ is excellent, and we would recommend learning it shortly after you get your foundations down. We specify this particular point in time since C++ forces you to learn more about concepts like memory management. The more you focus on languages that take care of finer concepts “under the hood” for you, the more you may get unintentionally lazy. Learning this earlier on will help you become better at not only writing code, but better at understanding what could be going wrong with your application (app) at runtime.
For example, if you’re running an ecommerce app, and one component keeps crashing, you’ll be able to quickly have a few ideas as to whats happening to get your app back up and running. This may feel like we’re getting unnecessarily detailed, but things like this add up to what you deliver. Someone who understands the “nuts and bolts” could solve an issue faster than someone who just knows the high level logic. Back in the day, an app going offline for a few hours was not a huge deal (depending on the context). Today, anyone who uses technology expects quick response times, and 99.99% uptime. The longer you delay fixing or delivering, the more it influences your income.
Languages like JavaScript and Ruby are great for building web apps, Swift is used for iOS/macOS apps, and Rust is becoming more prevalent and is great for building infrastructure. Java has been around for quite some time, and many companies still use it (one of the easier languages to learn like Python). Go is also another great language for building infrastructure. We just touched on a few different areas here, so next we will introduce two new categories, and you can start searching for other languages to learn that address each category.
The Ends: Front and Back
You’ll hear terms like “Front End Development” and “Back End Development” this is where the programming language you choose to focus on starts to lead to a particular specialization. Front end development focuses on what yourself and others can see; think websites that you visit, or even the visuals for your favorite mobile apps. The main languages used here are JavaScript, TypeScript, and PHP when it comes to the web. You may hear about HTML and CSS, but those aren’t really considered languages (don’t put it on your resume). Based on how much websites have evolved over the years (search for what they used to look like back when they started), one can imagine the number of things to consider, such as (but not limited to):
How to make the front end responsive
Fit across different screen sizes
Handle bad input (ever notice how when you enter your credit card info, you may see a message pop up right away stating its not valid?)
Integrating with different widgets (think third party providers for GPS instructions to find a location nearest to you)
Back end development focuses on everything happening behind the scenes. When you try to order something online, it all does not happen within your browser. The back end component of the application takes the request supplied by the front end (and the request was originally supplied to the front end by you!). Here you can run into a different set of challenges, such as:
Two or more people concurrently requesting the last item to be added to their shopping cart to check out
Handling database reading and writing
How to handle multiple requests to do a certain operation in parallel
Handling failure between other back end components. What if there are two (or more) instances for the back end of your app, and each one has to know the latest state of the world?
Can anyone know both front end and back end development? Of course they can, this is what is called Full Stack Development. There are other specialities you can focus on such as mobile app development, but we’re trying to stick to the fundamentals here (anyone reading this who develops for iOS/Android, please feel free to chime in the comments).
We will cover some of what we mentioned above in future posts, but hopefully this gives you some color as to what you could be doing longer term in terms of your career, or trying to figure out what you use for your next product.
Can I Learn Them All?
No one is stopping you from learning, but do not be so focused on learning; focus on executing. Our suggestion is to learn your foundations well first, and apply what you learn using a programming language of choice. Again, don’t learn the language, learn the concepts! In the foundations we covered last time, you will learn more about specific concepts that certain programming languages try to help you with. Some may have certain libraries you can use, some may not.
As you apply what you learn, stick to a specific language at first to understand the concepts they are trying to help you with, along with any drawbacks/nuances. Once you master it, it is easy to pick up other languages since it is always foundations being applied based on the syntax of the language. For example, one of us started off with C++, but then stuck with it, switched over to other languages as time continued.
One important concept we want to briefly touch on here is specialist vs. generalist. There are many people you may meet who specialize in one language and one language only due to the industry niche that they prefer. These are called specialists. Generalists tend to focus on picking up new languages as they go. Both are great at their foundations, but no one remembers everything. Specializing is great since you keep the nuances on the forefront of your mind and end up delivering in that space to continue to grow. Generalists see a bit of everything, but may not remember it all.
What’s the catch, and what to pick? The catch depends on how you are as a person. We have seen some who learn one language and are not able to learn another (different priorities or just lazy). On the other hand, we have also seen others who simply are great at what they do and it is effortless for them. Our suggestion is generalist first until you find an industry you are good at, and then specialize from there. To avoid going stale, just keep learning new languages/frameworks (more on frameworks in the future!) in your spare time and build things to keep yourself malleable and sharp. To give an example, say you want to be a back end developer; you can start off with Rust, switch from project to project, maybe transition over to Go at some point, find your favorite industry, and then go tunnel vision on some other language since the industry tends to rely on it. In your free time, learn about front end development, build your own app and deliver it to keep yourself sharp.
Conclusion
There you have it, hopefully this helps you think about your “why” and shapes your approach as you continue along. As always, keep learning and executing. One can infer based on this post that its all about continuous growth. We aren’t trying to motivate you, but trying to show you that the more applied knowledge you accumulate, the more of an asset you are to yourself and anyone else you work with.