Hi! Don't know if this is the place to ask this but, basically what the title says.
TL;DR: Where do I start if I want to learn programming and potentially end in cybersecurity? Would computer science be a good decision? Should I learn any specific coding language?
I am a designer but I want to expand my knowledge and learn other things, programming is something that I've always kind of struggled with but I'm starting to like it nowadays.
I am currently switching my way over to Linux from W11, I've been distro hopping and trying Ubuntu, Fedora (the one I like the most as of yet) and now I will try EndevourOS (I still am not prepared to try pure Arch imho). All this playing around on Linux made me interested in coding, using the terminal, solving problems, analyzing logs, etc.
My main question is: where do I start? I'm not asking what "the best language is" or "which gives you the most jobs", it's more like I need advice on where to start with the things I want to do. While using Linux, I've been copy-pasting repos, codes, commands, etc., but I sometimes want to know what do those even mean or what the hell I am even doing, I don't want to be a copy-pasting machine without understanding what it means.
I think my objective is to end up doing Cybersecurity because, for me, it's one of the most interesting topics. I've read that it's better to start with Computer Science and then I can go with Cybersecurity or if I change, I could go with Soft. Eng., etc
I don't want to just make websites or apps, and I think I don't want to do IT (the kind of IT where you just help other people fix their computers), I do struggle with mathematics but if it's something I need to do to learn these things then I'll do it. I also would like to learn how to use/build servers.
Just want to make it clear though, I will be doing everything myself, as I don't have any money to go to a college/university, so if anyone has free resources, I would highly appreciate it.
Thanks in advance to everyone who read this and is able to help/give advice!
As far as I know the most used language for cybersecurity is python and assembly (for reverse engineering), but that doesn't stop you from using any other language. Specifically for CS, C and C++ are the most used for learning. As a kind of roadmap for programming are:
After that you learn algorithms (Sorting an array, Searching algorithms, and others) data structures (Lists, Trees, Stacks, Queues, Hash tables/Dictionaries/Maps). A good book for this is Introduction To Algorithms (You can use it as a reference, but reading it front to back is a bit though), but there are many other online resources like geeks for geeks or tutorialspoint and many YouTube videos for specific algorithms and data structures. Your programming language might already have them, but it doesn't hurt to implement them by hand at least once. After learning all of that, all you need is practice.
On free resources, there is Harvard's CS50, which is a free introductory CS course that you can watch on YouTube.
On language resources, there is "The C programming language" for C (It has exercises), "C for Dummies" and "C All-In-One desktop reference" both by Dan Gookin (The second one is better IMO, It has a lot of useful information on C), and there is also this thread on stackoverflow which has even more C books. . For C++, there is "Programming Principles And Practice using C++" and "C++ Primer".
On practice, you can follow this list: https://github.com/codecrafters-io/build-your-own-x, or this image: (Remember to read the gray part)
[EDIT: This practice might be difficult for a beginner, so you might want to find other stuff to practice first. But still, there are some easy exercises like fizz-buzz, towers of Hanoi, and basic text encryption]
Whatever language you choose, you might want to research it's standard library to know what other stuff your programming language has implemented (It may have data structures and algorithms that you've studied).
Not necessary but useful is learning to use git, and things like github, sourcehut, codeberg, etc.
Other miscellaneous skills you need to learn (for easily maintaining projects) are splitting the program on multiple files instead of having a single big file containing the logic of the program, and good variable and function naming.
Sorry if this is not specialized on cybersecurity, but I hope it helps anyway.