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.