Rushi Gajaria My Thoughts on the World

Getting Started with Software Development

Over the last few years, it has become quite evident that a foundational knowledge of coding has become increasingly important for career growth. Whether you’re interested in software engineering or in business, learning to code is an essential skill. Fortunately, it’s easier than ever to learn some of the basics of software development and build and deploy your own projects. While many of these concepts may seem intimidating at first, it will become increasingly easier to pick up new skills once you understand the basics. I’ve put together a list of useful steps/resources to get started:

Step One: Prerequisite Knowledge

The steps in this guide will likely only be useful if you have been exposed to some fundamental ideas, so I recommend brushing up on these if you haven’t yet. Firstly, some knowledge of functions, specifically “asymptotic behaviour”, will be helpful for understanding the time-complexity of algorithms. It can also be helpful to understand some basic linear algebra (vectors, matrices, determinants, transformations), as these concepts may come up from time-to-time. In my opinion, one of the best courses to learn the fundamental math is “Mathematics for Computer Science (MIT 6.042)” which covers induction, graph theory, counting, and probability. This Fall 2010 offering features lectures from Tom Leighton, co-founder of one of the world’s largest content delivery networks, Akamai.

Step Two: Beginner Resources

  • Overview to Computer Science: I recommend enrolling in the free online Harvard course CS50, which is designed for people with no prior background, and will teach you how to “think like a computer scientist”. The course touches on C, compilation, algorithms, memory, and Python, and gives you a brief overview of each of these topics. It’s a great starting point, especially if you’re looking for something structured with lectures and assignments
  • Language-Specific Tutorials: It is helpful to have a solid understanding of a few different languages. In particular, I would recommend at least one object-oriented language such as Java or C++, as well as a scripting language such as Python. There are a ton of different books/websites/videos about these languages, however, these are some of my favourites: Java: Derek Banas YouTube Channel Python: Learn Python the Hard Way
  • Learn Bash and Get Comfortable with the Shell: This is another area that can feel intimidating to beginners, especially because most people have been used to navigating computers using a GUI for the majority of their lives. However, getting comfortable with the shell will improve your efficiency, and can help you automate a lot of annoying setup work/commands. This article outlines some great tips.

Step Three: Basic Concepts

As you work through more courses/practice projects, you will come across many new ideas and concepts, many of which will build on each other, and help you write better code, and understand how things work. These are some important areas that are the “building blocks” that are essential for creating programs:

  • Variables, loops, functions, pointers and if/then statements- These are fundamental pieces that will help you control the flow of your programs. Using these tools appropriately will also help you get into the practice of writing clean code. There are a few online tools to help review your code, but I recommend doing code reviews with someone experienced to learn some tips and tricks for writing good quality code.
  • Data structures- Think of these as special containers that help you manage data easily. Basic data structures include; stacks, queues, linked lists, and hash tables. Familiarizing yourself with these early on will make it easier to understand some of the more advanced data structures later on.
  • Algorithms- Put simply, an algorithm is just a list of steps for how to do something. However, over time, common paradigms have materialized to solve certain problems. I would recommend spending some time understanding binary search, merge sort, quick sort, and Breadth-First/Depth-First Searches (BFS/DFS respectively)/

Step Four: Improve Skills in Certain Areas

Once you have the necessary building blocks in your toolkit, you can start to explore certain areas that interest you. The possibilities are truly endless, and you’ll find yourself quickly immersed in a wide variety of projects. Here are a few possible starting points to learn more about these areas:

  • Algorithms- To deepen your understanding, I recommend the “Introduction to Algorithms” textbook. It’s an essential reference that contains great explanations as well. If you prefer lectures, there are several great online courses. My personal recommendation is 6.006 from MIT’s OpenCourseWare.
  • Functional Programming- Functional programming is a different style of programming that relies on not changing state, and “building” your way up to a solution. Martin Odersky, the designer of the Scala language, has created a great Coursera series about functional programming & Scala
  • Machine Learning- One of the most popular areas over the last few years has been machine learning, and it’s helpful to have some level of basic understanding of these concepts. Andrew Ng’s very popular Coursera course is a great way to get an overview of machine learning.