Where to start with programming

Where to start with programming computer questions

In running a weekly social get together over the last year at the Denver Central library I usually get asked some recurring questions. I'll attempt to answer some of those questions in this post along with some resource suggestions for those of you wanting to self-learn.

Do I need a computer science degree?

Not necessarily. The deep theoretical knowledge you would learn in a comp sci program would be a great foundation for learning practical programming skills. The issue is the amount of time you have to learn the practical skills while learning the theoretical concepts. Many comp sci graduates I've talked to have also claimed they use a very small subset of what they learned at university.

Stack Overflow conducted a survey a while back in an effort to gain insight into the educational backgrounds of working programmers. A large portion of the participants claimed to be at least partially self-taught.

Stack Overflow education survey results

https://stackoverflow.blog/2016/10/07/do-developers-need-college-degrees/

How much math knowledge is required?

Based on personal experience, I've used little more than basic arithmetic and algebra. Scientific fields will require additional math knowledge depending on the domain. Game development might require vector math and physics depending on the type of game you develop.

I spent a good amount of time on Khan Academy brushing up on early math and algebra. Khan offers free courses on math, science, computing, economics and other awesome topics. I was amazed at how much I had forgot and quite enjoyed the experience. Someday I'd like to go back and try out the calculus material they have, but this would be for fun as it has very little impact on my day to day work. Highly recommend doing this if you are feeling a bit shaky with the old early math skills.

What is the quickest way to learn to code?

There is no quick way to learn computer programming. It takes practice and discipline. Having a goal, such as an application you want to build, should help keep focus and motivation to learn. The idea that it takes 10000 hours or 10 years of deliberate practice to master a skill is widely discussed on the Internet. An article by Peter Norvig, the Director of Research at Google, discusses the topic in relation to programming:

Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, telegraph operation, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. The key is deliberative practice: not just doing it again and again, but challenging yourself with a task that is just beyond your current ability, trying it, analyzing your performance while and after doing it, and correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music.

http://norvig.com/21-days.html

How many languages should I learn?

You should stick with one language at first. The underlying concepts are the same across all languages with the main difference being syntax and community support. Once you have a handle on a language, you should consider what languages complement it. For instance, if you are interested in web development and learn Javascript, you should also learn HTML and CSS, as these are the three main languages for front end development. If you start with Python, learn a bit of SQL so you gain a better understanding of the interaction between your code and the database.

One common misunderstanding, specifically with web development, is the idea of learning HTML and CSS as your first "programming" languages. HTML and CSS are not programming languages. HTML and CSS describe presentation, whereas programming languages describe function.

Types of developers/engineers

There are many different adventures you can take in software development. Some popular high level types include:

  • Web development
  • Database development
  • Desktop development
  • Game development
  • Mobile development
  • Infrastructure
  • Data science
  • Security

You don't necessarily need to decide what path you'd like to take to get started, but eventually, once you understand the basics you'll probably want to pick one of these high level paths to focus on. I look again to Stack Overflow for useful information about what new devs are pursuing:

https://stackoverflow.blog/2017/06/12/new-kids-block-understanding-developers-entering-workforce-today/

So, where do I start

Below I outline some pros and cons of three popular paths you can start with.

Self-Taught

Pros

  • Can find all information for free
  • Can learn at your own pace
  • Shows passion to others

Cons

  • Requires discipline to practice and learn
  • Must work harder for networking opportunities

Bootcamps

Pros

  • Can complete in short time frame, usually six months
  • Most will help with job placement after graduating
  • Possible networking and team experience

Cons

  • Quality varies across boot camps
  • Only have experience with specific tools
  • Most bootcamps are expensive, especially in-person ones

College

Pros

  • Should give a solid theoretical understanding
  • Good opportunity to network with other students
  • Useful for jobs that require the deeper knowledge

Cons

  • May need to learn practical skills on your own
  • Time commitment is usually four years, longer with a masters
  • Can be very expensive

Conclusion

If you have the money and want to be working as soon as possible, maybe a bootcamp is a good fit for you. If you have the time and want to really understand deep concepts, consider a comp sci degree. If you have an opportunity at your current job to up-skill in programming check it out. Any route you take is going to require some self-learning. Here are some free resources you might find useful:

  • Codecademy

    Great for a taste of what programming looks like. Doesn't represent day to day, but will be a great way to see if you like it.

  • Free Code Camp

    Nice alternative to paid bootcamps. Totally free and will place you with a non-profit to do a project with if you complete the course work.

  • Udacity Intro to Computer Science 101

    Nice introduction to basic comp sci concepts. Uses python and will guide you through building a search engine and social network.

  • Open Source Society University

    This project aims to give you a "complete education in computer science" utilizing only free resources. The curriculum is well thought out and uses some courses from top universities such as MIT and Harvard. At the very least it will give you an idea of what a computer science program looks like.