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.
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.
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.
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.
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
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)
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.
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
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.
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.
Using a versioning system makes life easier and provides a safety net. Learn git sooner rather than later.
Docker, containerd, nerdctl, rancher, kubernetes (k8s), etc... and learning how to write a Dockerfile to make your code truly portable is important.
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.
https://news.ycombinator.com/item?id=34673581
https://missing.csail.mit.edu/
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://projecteuler.net/about
https://codegolf.stackexchange.com/
Public libraries have great books on the subject
https://open.umn.edu/opentextbooks/textbooks/computer-science-i