Intro to Programming
Tags: beginners, programming
Published: 2022-03-03 07:11:38

I’ve compiled some resources throughout my journey as a software engineer, and made this list for anyone who might want to start learning how to program given the different fields I've dipped my toes in, and just stumbled across it on my computer and thought you guys might find it interesting.

>
🚧 *DISCLAIMER*: While I have spent some time learning in each of these fields, I am in no way an expert in all of them. I am a software engineer by trade, but I work primarily with web-based technology and mobile applications in my free time. This is simply my experience with each category, and is intended for beginners seeking direction within the vast field of “software development”.
>

## Arduino Microprocessor Development:

Coding Arduino and other microprocessors is fun, and a great way to start learning how to code, but can sometimes be frustrating if (A) you don’t have the right components and have to order parts and wait, or (B) you simply can’t figure out where to start. These small boards are INSANELY powerful and can be used for so many different things, so it’s best to pick a *very* specific project if you decide to go this route, and buy the pieces **just** for that. Parts are not super expensive, but will typically have to be soldered, but if this is something you might be interested, then check out Adafruit ([https://adafruit.com/](https://adafruit.com/) ) which is a great site for both reading through community forums for ideas (or getting help with troubleshooting), as well as actually purchasing materials. **Generally speaking**: I would start with an Adafruit Metro or Feather, and a Breadboard, as they are pretty inexpensive and are great learning tools.

[ Language(s) used: C++ (Arduino-specific)]

## Scripting/Automation:

With programming languages like Python, Javascript (specifically Node.js or vanilla Javascript), Ruby or Perl, you can write scripts (small pieces of executable code) to do some pretty incredible things like Web Scraping (searching a website or collection of sites and emulating keyboard/mouse movements to retrieve data), bots for Discord, Reddit, and Twitter, or even cooler things like IOT tasks.

I have personally used scripting to develop a personal Discord bot using [DiscordJS](https://discord.js.org/#/), but it can also be written using Python, here’s a link to a Hackathon Workshop that is really in depth:

[https://www.notion.so/Building-a-Discord-Bot-in-Python3-d001d3365e14443090c0e4863015f453](https://www.notion.so/Building-a-Discord-Bot-in-Python3-d001d3365e14443090c0e4863015f453)

There are also a variety of beginner tutorials online for Python here:

[https://docs.python.org/3/tutorial/](https://docs.python.org/3/tutorial/)

[ Language(s) used: Python, Ruby, Javascript]

## App Development:

I’m going to be super honest: building apps aren't easy. I figure I'll just start with that because building apps always seems quite easy from a theoretical view, but depending on the language can be ***incredibly*** complex. That being said, in terms of building for fun, there are a couple of different paths you could take: to build apps for Android, you can use either Java or C++, but most devs use Java because its an Object-Oriented Programming language, so data is easier to manage between pages and threads. For iOS, the current standard is the Swift programming langauge, or Apple's new UI framework SwiftUI, but both of these realistically require you to build using a Mac or iPad, because the iOS developer's IDE (integrated development environment, I.E. the software tool used to build software lol) of choice is Xcode / Swift playgrounds. The final way, my preferred way, is to develop using the Dart programming langauge, and Google's [Flutter](https://flutter.dev) UI framework: I like Flutter alot because it provides an easy way to build apps for either operating system using a third-party language, and has a large library of widgets (UI components) that can be used in development, vastly increasing the breadth of the developer's available tools. That being said, Dart/Flutter isn't any *easier* than programming in Swift or Java, but more convenient if you plan on deploying to both OS' and don't want to build two separate apps. 

[Language(s) used: (Trick round bc its your choice) Java, C++, Swift(UI), Dart/Flutter]

## Web Development:

So I obviously have a lot of experience in this field, but that doesn’t mean that you have to necessarily start here, I didn’t! I started my programming journey as an iOS app developer, and was able to learn the basics of code logic and structure, but constantly found myself getting stuck with console errors due to implicitly unwrapped optionals or confusing my variable types. Web development was a beam of light for me as a beginner, because I was able to increase the complexity of my websites as I became more experienced, but vanilla HTML and CSS are pretty straightforward at their core. You can then build on this experience by learning a JavaScript library like React. React is a wildly versatile and compositional library, and is one of the most popular front-end libraries used today. You can build React web apps using either class-based components which allow developers to define and handle component state, or with React Hooks which is a somewhat new compositional feature of React that allows you to write functional components that can still store and handle component state, but without needing to define classes or structs.

I’ve compiled some resources for learning web development as a beginner, and you can check it out [here](https://www.notion.so/a740b1d6f4ae442db2d90786434f9030), or you can check out these other great resources: 

([https://reactjs.org/](https://reactjs.org/docs/hooks-intro.html), [https://www.w3schools.com/](https://www.w3schools.com/))

[ Language(s) used: HTML, CSS, Javascript]

Finally, there is 

## Program (or executable) development:

This would be considered the more “traditional” approach, learning languages like C, C++, or Java, which are all super good to know and very powerful, and are used in many cases like computer programs and executable files. Depending on the implications, they can either be and incredibly fun challenge, or just plain confusing, so definitely tread carefully if you view yourself as a beginner. If you study Computer Science at a University like I did, you will likely learn C and Java as part of the curriculum, which is obviously helpful to know, but in full transparency: I have literally not used either language even ONCE since graduating 🤷‍♂️. If this is the route you are interested in, I would create an account at [leetcode](https://leetcode.com/), and work through the programming challenges and practice problems available, because they have a vast list of resources and explanations for the logic behind the solutions.

[ Language(s) used: C, C++, Java]

---