Skip to content

Instantly share code, notes, and snippets.

@peteristhegreat
Last active November 10, 2023 00:49
Show Gist options
  • Save peteristhegreat/2b600f403018851ec8b485c3f70e281a to your computer and use it in GitHub Desktop.
Save peteristhegreat/2b600f403018851ec8b485c3f70e281a to your computer and use it in GitHub Desktop.
Computer Science Education, where to start, as an adult? as a teenager? as a preteen? Programming

Introduction

Many people of the years have expressed interest in programming to me.

My background and variety of influences in my young life made me want to program more daily.

I had formal education, 2 CS classes in highschool and a minor in CS in college, but programming for fun and for profit has amplified my skills a lot.

Answering hard questions, researching answers to hard questions for a specific application are also the baptism by fire for most of my knowlege. Also writing things down. Most of the stuff I write down ends up being self serving, but a small percentage of what I write ends up helping a larger audience.

Wanting to make games outside of work or school has made programming a fun hobby.

Another big piece that helped a lot was my older brother that recommended that I give back to online communities that helped me be a better programmer. (especially stackoverflow)

The open source community is amazing, and the longevity of any project is great when it is built with plans to go open source.

With all that said, there are a few directions this post could go...

In no particular order, here are some important topics. At some point I'll cross reference these to other posts I have written previously.

Typing

Learn to type. Programming requires typing. Get a decent WPM on querty.
Don't look at your hands while typing. Find the bumps on the keyboard for F and J.

Set your Expectations Appropriately

Don't expect perfection immediately. Try to have positive interactions while learning the material. Seek help after you have googled and searched out answers. Attend a class, watch a video, and be positive.

Many programmers love to talk about programming and help new programmers. Show effort of trying to solve the problem.

Have an attitude of learning and a determination and an eagerness to learn.

Write down things that were hard that you had "Ah Ha!" moments for.

Be kind to yourself, and be persistent.

Find a Good Feedback Loop

Either show off what you are making to a supportive individual, or post it online in a positive community or in a discord group.

Keep track of your progress on a kanban board like trello. Break down big tasks into smaller ones. The path forward is doable, but it takes a lot of steps.

First Language

Pick a fairly mainstream language and start learning syntax and examples for the basics.

  • Small math problems

  • Small games

  • Working code that needs a new feature or a bug fix

  • Some UI

  • Retype someone else's program and try to understand and comment it as you go

Mainstream languages

https://duckduckgo.com/?q=stack+overflow+developer+survey

Python and Javascript (Typescript) are pretty high up there on the list (at least in 2021's survey)

Platform

Linux, Unix, WSL + Ubuntu

Get used to the terminal (the shell, the black text screen) sooner rather than later.

The toolset of unix is how most code is compiled, and executed. Bash scripting is a great base for running things.

IDE, Integrated Development Environment

What's your text editor look like?

At the time of writing VSCode is pushing hard to be the everything editor.

Jet Brains has consistently made high end IDE's, like WebStorm and PyCharm.

Pulsar (the successor to Atom) also looks very promising.

Having a terminal IDE ready to go is important: vim or emacs (vim in my case) and cat when neither are around

Examples, Syntax help

ChatGPT is very helpful.

RosettaCode is nice.

StackOverflow, find your language tag, and look at the most frequent or highest voted questions for the language can give you a quick hint on what to read up on for the language.

Google's Style Guides for a language are impressive and immense and super useful.

https://google.github.io/styleguide/

w3schools has been very consistent.

GeeksForGeeks is a new kid on the block, but hits high in google searches.

Supporting Libraries

Finding a good mix of libraries to start with can make a big difference.

Size of community, stagnation, growth, etc can make a big difference.

For NodeJS, javascript for web development the number of libraries out there are daunting and the favorites and boilerplate lists change every hour.

Some with longer legs at the time of writing are: React + React-Hooks + NextJs + TailWindCss has been nice.

Remix.run looks promising.

For desktop development, Qt is great! Electron is another well known platform for cross platform UI.

The documentation for the Qt libraries is legendary.

Versioning

Using a versioning system makes life easier and provides a safety net. Learn git sooner rather than later.

Virtual Machines, Containers, etc

Docker, containerd, nerdctl, rancher, kubernetes (k8s), etc... and learning how to write a Dockerfile to make your code truly portable is important.

Getting Started, Links

KhanAcademy - Programming (Winston)

Atmel Arduino - Microcontrollers, C++

RaspberryPi - Python

Coding Robots, Botley, ArtieMax

Coding iPad/Tablet games - CodeSpark

Game programming - Unity or UnrealEngine... lots of early tutorials

HumbleBundle's learn to program bundles once in a while.

More links

https://news.ycombinator.com/item?id=34673581

https://missing.csail.mit.edu/

https://teachyourselfcs.com/

https://www.reddit.com/r/learnprogramming/wiki/faq/#wiki_getting_started

https://ocw.mit.edu/collections/introductory-programming/

https://pll.harvard.edu/course/cs50-introduction-computer-science?delta=0

https://www.uopeople.edu/programs/certificate/computer-science/

https://www.freecodecamp.org/

https://leetcode.com/

Competitions

https://www.codechef.com/

https://www.topcoder.com/

https://projecteuler.net/about

https://codegolf.stackexchange.com/

Get a book

Public libraries have great books on the subject

https://openstax.org/subjects

https://open.umn.edu/opentextbooks/textbooks/computer-science-i

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment