Get Started with Coding Projects

There’s a lot of information available on how to get started with coding projects in the programming language of your choice and how to get set up with the tools you need. This was how it worked for me.

Problem

First, things really didn’t work for me because I forgot to consider process before action. I started reading what everyone on the wider Internet thought was the best way to get started with coding projects in general, including the best set up (tools, operating systems, etc). I lacked a framework to filter the bad information from the good, so I emerged with more questions than answers and more confusion than clarity. This was the wrong approach. I wish I could say I quickly realized this.

After recovering from the resultant decision paralysis, I focused on what I did know – my long-term goal (high level) & short-term objectives (specifically what I wanted to do).

Goals

My long-term goal: to maximize the potential for learning & enjoyment in all of my efforts.

My short-term objectives:

  • contribute to an Open Source Software (OSS) project on Github (preferably in Python);
  • fork a project on Github (preferably in Python) and make it my own;
  • play with MySQL;
  • build some simple things with Python;
  • build a web app with Django.

I would use my goal to make future decisions, and the objectives would provide a focus for my research into what tools I needed.

GoalThis means…
To maximize the potential for learning & enjoyment in all of my efforts.Simplicity, security, maintainability in all things.
ObjectiveResources used to determine tools neededTools
Contribute to an OSS project on GithubGithub website, Women Who Code WorkshopText editor, Git, Github
Fork a project on Github (preferably in Python) and make it my ownGithub website, Women Who Code WorkshopText editor, Git, Github
Build some simple things with PythonTalk Python to MeThis resource (a course) provided the guidance on tools and approaches I needed to accomplish this objective.
Play with MySQLLynda, my husbandText editor, MySQL, MySQL Workbench, VM Ware (for the virtual machine I’d run MySQL in)
Build a web app with DjangoTBDTBD

Prioritizing

Once all my short-term objectives were listed like this, I decided to de-prioritize building a web app. While I was excited by this project, the set up would be more time-intensive, would perhaps not allow me to pursue any other projects concurrently, and may actually work against my goal of maximizing potential for enjoyment. I would learn things, but the risk for frustration in the context of concurrently trying to achieve my other objectives was higher than what I was comfortable with.

I prioritized projects that I could start and finish in a reasonable time with a reasonable amount of effort, to increase the likelihood that I would experience positive emotions* around my learning experience** and want to proceed.

*There’s lots of research on the role of positive emotions in learning environments; mostly, they’re a good thing. 🙂
**Because this learning experience was self-guided, I needed to effectively “scaffold” my own content.

I focused on the first two objectives initially, because I needed the same set up for them. I got a Github account, downloaded Git, and chose a text editor. I read the Github documentation and went to a workshop on contributing to OSS; additional questions were answered by Lynda.com.

My text editor had to be intuitive, well-known, aesthetically pleasing, had to have dark theme, cross platform (compatible on Windows, Mac, Linux), a little customizable (supported plugins). Nice to have: browser preview. I was willing to spend a little money; I didn’t care about whether in itself it was open source or proprietary. After using Brackets during years and years of front end tinkering, I switched to Sublime Text.

Once I was set up to work in Github, I realized I had no idea how to choose an open source project to work on and once again started drowning in information. That’s a future post. So I accomplished my second objective and. played around a bit, forked a Javascript project, did a little work on it to get comfortable with the Github interface, and moved down my list.

Next, I worked on the MySQL item. This was fairly straight forward. I used VM Ware for my virtual machine, installed Ubuntu in that virtual machine, and then installed MySQL using the help of a Lynda course, which I then completed. Objective complet

When I got into the Talk Python to Me course, I ended up downloading PyCharm as part of the course. I love PyCharm and currently use that in conjunction with Sublime Text. This course allowed me to get started with coding projects quickly and with the right amount of guidance. At the time of this writing, this objective is still in progress.

Once I accomplish all of these objectives, I will shift into developing a web app using Django.

Final Words/TLDR

  • Figure out exactly what you want to accomplish. Be specific. These are your objectives.
  • Find resources that help you learn what tools you need to accomplish those objectives. (If some or all of your objectives need the same tools, great!)
  • Finish your set up.
  • Start your projects!

Curious about Coding?

Introduction

I recently shared some “getting started” type resources with a connection who is curious about coding and learning how to code. After spending 2.5 hours composing a very long email, I realized that I had also written a post.

For context, this person had played around with HTML and CSS on Myspace back in the day but didn’t have any preconceived direction that they wanted to go with coding. There was no timeline for learning anything specific but they expressed an interest in using whatever they learned in future employment scenarios.

This is a modified version of I sent them. The resources specific to Portland, Oregon will be called out with an asterisk *.

As you read this post, please keep in mind where I was coming from, i.e. my approach to beginning to learn computer science and more specifically Python. It was very focused, so if I have missed resources in this post that you feel are absolutely essential to people curious about coding, please feel free to say something.

Where to Start?

Okay. So you’re curious about coding. Now what?

Short story, start learning fundamentals of a language and discover things that continue sparking your curiosity about coding, technology, and computer science. Projects come from that and are ultimately the best way to integrate what you learned. 

  • Free Codecamp (same website as above) – it provides a nice overview of areas that can become specializations – you can go from the first certificate to the last and get exposed to a comprehensive set of topics. It goes broad enough for someone curious about coding to discover what they naturally gravitate towards. It doesn’t contain everything, though, so continue to keep an open mind to other resources.
  • EdX’s front end developer certificate from W3 Schools (free but can add verified cert for $) – I’ve had a good experience with EdX and like the structure and formality of my certificate on Python. While it didn’t integrate external projects, it did provide ample opportunity to practice what I’d learned immediately. It also broke material into digestible chunks and prevented me from getting too frustrated.
  • *PDX Code Guild (a bootcamp) Intro Course – If you prefer in person and are interested in checking out local bootcamps (great way to network and also see all pros and cons in the article above :)), go for it.
  • If you’re interested in Python, anything Al Sweigart.

Articles, Books, Podcasts – Oh My!

And while you’re trying to figure out what all of that means…

  • @AliSpittel‘s eBook on learning to code – very helpful and a great first thing to read.
  • If you’ve ever considered a coding bootcamp, this article walks through the thought process of that decision in a way that was helpful to me.
  • A People’s History of Computing in the United States – this book made me appreciate the history of computing in such a way that inspired me to learn more deeply and move forward with a greater respect for the field. Overall, a beautiful book.
  • Command Line Heroes – I started listening to this podcast from Redhat in the 2019 season, which devoted one episode to a brief history of how each major programming language was developed. Again – it provided me with context for what I was trying to learn and a greater appreciation for the field.

Other Important Resources

I separate the below out into resources because they’re not good starting points for a structured learning path, but are essential to be aware of.

  • W3Schools – an excellent resource but doesn’t integrate much with projects. If you’re getting stuck on Free Codecamp, recommend going to this resource to find things explained in different ways. And if you just want to poke around and check things out, also great for that; was a bit overwhelming for me in that regard. 
  • Github – find a tutorial on Lynda on this, it’s a fundamental tool to learn in time. This is a great place to find projects to work on; poke around once you start learning a language.
  • Stack Overflow – a fundamental place to ask questions or just find answers. This will be a home for you to find information during your learning process.
  • Lynda (free through *Multnomah County Library) – these are videos only and there is so. much. content. It’s easy to get lost in here. I recommend using it like W3Schools. Want to learn about a topic or language and need a brief overview? Find a course on Lynda.

*Local Resources

My First Programming Language

Introduction

This post describes my initial interest in computer science and my decision process for choosing my first programming language (Python).

For context, my interest in computer science was sparked during my first job while I was in college (specifically, a QA project for the IT department), and had never really left me. I dabbled in website design for years, was familiar with HTML and CSS (markup languages), and had managed to further my interest and knowledge of technology in every subsequent job. All the while, I had a nagging suspicion that it was only a matter of time before some event would spark my interest and I would tip into headfirst into some aspect of computer science.

The Spark

The event that sparked this happened in late 2018. It was a science pub about machine learning at the Oregon Museum of Science and Industry (OMSI) in Portland, OR. (Side note: OMSI is in the list of my top three favorite places in Portland – they have a submarine. What more do you need?)

During this science pub, I asked a couple of questions and ended up emailing the lecturer (a professor at Portland State University) afterwards and having a brief email exchange. I had so many project ideas that involved machine learning and wanted to learn how to do them.

So, where to start? Learning a language.

Cool. And how was I going to make that decision?

After wasting a substantial amount of time, I created a process for choosing my first programming language.

The Process

1. Language

When I was choosing my first programming language, I weighed languages against the following factors:

  • Usage by private sector/academia
  • Trending usage (popularity)
  • Difficulty
  • 1 totally subjective opinion

Usage by private sector/academia: Python is used in both academic environments and in the private sector; also in projects that focus on deep learning and ML (like TensorFlow) – both personal areas of interest.

Trending usage: in 2018 and at time of this writing, Python has been climbing in popularity. I defined popularity with Google keyword search statistics and an informal survey of job posts for engineering and developer roles at companies in major job markets. Python seemed to be in demand.

Difficulty: High-level programming languages (Python, Ruby, Javascript) are easier to learn than Java and C++. Points for Python. This is established and resources relating to this are available elsewhere.

1 opinion: Because I’m not a robot and I like looking at pretty things, another factor was visual elegance.

2. Resources

My next step was to determine what resource to use to learn my first programming language. I chose a massive online open course (MOOC) because at the time, I was moving across the country and didn’t want to deal with the logistics of any traditional academic institution. (Side note: I do plan on pursuing CS courses in the near future. More to come there.)

For that, I looked three major players in the MOOC space: EdX, Udemy, and Coursera. I based my assessment of courses on several factors.

  • Focused on 1 language (I only wanted to learn Python in this course)
  • Issuing institution (I wanted a course from MIT, Georgia Tech, or other high caliber institutions)
  • Length of time to complete (I wanted a course that would take longer to complete, so I would have more time to become immersed in the structure of that course and the language)
  • Instructor communication style (I needed the instructor to explain things in a way that works for my learning style)
  • Date published (I wanted a course that had been recently published so I could trust that the information therein was as up to date as possible)
  • Frequent opportunity to practice what I was learning (I needed exercises to be frequently scattered in with the material, so I could practice what I was learning as I learned it)
  • 1 opinion (I needed the instructor to have a pleasant speaking voice)

Resolution

My research and this process culminated in the decision to pursue Georgia Tech’s Computing with Python 4-course series on Edx. At the time of this writing, I am still working through the courses.

I am confident I made the right decision because when I start projects in other languages, I recognize fundamental underlying concepts and am able to adapt. The courses have provided me with a knowledge of computing, rather than just how to do xyz with a specific language.

Final Thoughts on Things I Learned

  • I put a lot of unnecessary pressure on myself. Getting to the decision factors cleanly listed above was a long, stressful process. Once I figured out how I’d make the decision, the decision itself became obvious and easy, which leads me to…
  • A lesson I keep relearning: critical thinking and self-awareness are absolutely essential. In my initial “research” stages (more like anxious Googling), I became so concerned about what everyone else thought I should do first, I forgot everything I knew about myself and critical thinking and then tried to make a decision without any foundation for that decision. This led to suffering in an unproductive mental space for several weeks.
  • Teaching myself is risky. At times, because I overestimated the magnitude of what I was learning (because I didn’t know what 10 was, I learned 3 and thought it was 10), I neglected to break projects out into small enough steps. It was frustrating to learn that no, I couldn’t accomplish xyz in one sitting, because it was actually more like xyz123 [insert 20 webdings].
  • Maintaining a sense of play & fun is extremely important to me; maximizing fun during this process would help me develop a more sustainable, enjoyable long-term relationship with my first scripting language.

More to come.