this post was submitted on 16 Oct 2023
7 points (100.0% liked)

Programming

17369 readers
450 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities [email protected]



founded 1 year ago
MODERATORS
 

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!

top 8 comments
sorted by: hot top controversial new old
[–] [email protected] 2 points 1 year ago

The following might be a bit hard to digest, but bear with it if your are serious about what you asked.

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.

Struggling with something new to you isn't a bad thing. What's more important is that you perceive that struggle as interesting, cause especially in software (in the broadest sense), the struggle never really ends.

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.

Approaching it in a playful manner like that and trying various distros is certainly how lots of people have started their linux journey.

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.

If you don't want to become a "copy-pasting machine", then don't engage in mindless copy-pasting!

For instance, if you copy-paste a command like ls -lF, before running it, open man ls and:

  1. search for -l (pro tip: always add a space in front of your search for arguments like this in man pages, cause it will narrow down your search better)
  2. read and try to understand the description of that argument
  3. repeat for -F (or any other argument there might be)
  4. only now run your copy-pasted command.

Isn't this tedious? Yes, especially when you start out and don't know most of the arguments of all those commands you are pasting. But that's a solid approach to prevent yourself from becoming a mindless "copy-pasting machine".

BTW: If you don't yet know how to search man pages, use your preferred search engine and search for "linux man page reading".

If the man page isn't enough, extend your search online.

I think my objective is to end up doing Cybersecurity because, for me, it’s one of the most interesting topics.

Now I don't know what makes you think cyber security is the answer for you or what makes it that very interesting compared to all the other software related topics out there. In a sense, the less far you are in your journey, the less certain you should feel about where your journey should lead you in the end. Rather stay open to course corrections along the way as you discover more and more things.

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

You write that, but...

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.

...this kind of makes the above obsolete, cause you seemingly aren't planning to go to a college/university.

I don’t want to just make websites or apps,

But this might actually be a pretty good bet for you coming from "I am a designer but I want to expand my knowledge and learn other things, programming ...".

And I'm not sure what you mean by "just make websites or apps". That in itself can be a vast challenge depending on what you are creating.

and I think I don’t want to do IT (the kind of IT where you just help other people fix their computers),

Fair enough.

I do struggle with mathematics but if it’s something I need to do to learn these things then I’ll do it.

You see, I'm not a cyber security expert, but I know for a fact that part of cyber security is the whole topic around cryptography, which certainly relies quite heavily on mathematics. Just look at something like RSA. You are bound to encounter lots of information of that kind when you're trying to make cyber security your career.

It's good that you have willingness to learn. But considering you haven't gone to college / university yet, you haven't really seen quite yet what "real struggle in math" actually looks like (speaking as someone that has a master's degree in an engineering related topic).

Likely there's various areas of cyber security that won't require you to go too heavily on mathematics, but then again, I really wouldn't wanna bet on this when it's about making cyber security your career.

I also would like to learn how to use/build servers.

That's just too random of a remark. It's as if you were asking about "how to become a professional power lifter", but then added "Oh BTW, I'd also would like to learn MMA.". It's just too unrelated and would require a distinct investment in learning and practicing.

"how to use/build servers" can mean oh so much:

  • using APIs in a frontend web dev context:
    • likely the most tame interpretation of "use servers"
  • doing server administration, network administration, DevOps, etc.:
    • each one of those is something people make careers out of

A comment like that just screams "I'm a total beginner" and makes it less likely that people will take the time to write you a meaningful answer(likely why you haven't received a reply in over a week). But being a "total beginner" is fine, cause after all, for anything that anyone of use can do well, we all were a total beginner at some point.

But I hope you understand that your goal of getting into cyber security is already a big challenge. Can you learn a bit about using/building servers? Sure, you always can learn new things. But all of that requires time. Not just weeks, but potentially many months or couple years to get good at (depends a lot on your starting point and existing experience around tech and software in general).

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?

TL;DR: Start by learning python. It's a solid scripting language to know, esp. if you have some initial interest in cyber security. Furthermore it's a very common programming language to get started.

Follow some free, guided python tutorials. For instance: https://realpython.com/learning-paths/ Just spend the needed time (might take weeks or even months, depending on your current knowledge) learning about programming basics with it.

And for cyber security related learning:

https://tryhackme.com/

If only tried it a bit some years ago, but it certainly seems like a decent option for some initial, playful learning about some cyber security topics. But try doing the most basic tutorial or course they offer first and build up from there.

IMO a "start small and build up from there" approach is your best option overall in general.

And maybe the best habit to build: Keep seeking out information! Don't just "blindly copy/paste", but look up what it does. Do that for everything. It will take time, but that simply is the price you pay for learning new things.

[–] ridago 2 points 1 year ago

Sounds like maybe capture the flag would be a good start for what you’re interested in. There’s some good YouTubers that cover the basics. I don’t remember any off the top of my head, but search for Capture the Flag on YouTube and you should find them

[–] Clifspeare 2 points 1 year ago (1 children)

My 2 cents: Cybersecurity is definitely better as a secondary field. Having some pre-existing knowledge that you can leverage in your cybersec career can put you in a unique position.

I moved into cybersec from embedded software development, for example.

I think your designer experience could be a big advantage if you use it. Not sure what kind of designer you were specifically, but if you have User Interface design experience or similar then you could have a unique perspective (among cybersec folks) when it comes to user interaction, social engineering, etc. If you were a more general systems designer, same goes for understanding and breaking down large systems, etc.

Point is, definitely keep in the back of your mind the question of how you can combine what you're learning with your past experience.

That said, I do think some general computer science knowledge would be helpful to you. I'd recommend you watch some lectures on general CS and try to learn a language like Python, Ruby, etc. That background will be hugely helpful for providing a thread of context so that you have a solid foundation for security stuff.

There are so many corners of cybersecurity, and the unifying mindset that overlaps between all of them isn't even specific to technology per se, so you can definitely find your niche.

[–] RustySharp 1 points 1 year ago

some general computer science knowledge would be helpful

I honestly couldn't think of any compsci knowledge that would not be useful in cybersec. Dealing with exploits would require some pretty in-depth knowledge of how computers, OS, and applications interact with each other. Network intrusion would involve some in-depth networking concepts. Encryption has some very heavy math.

But yeah, I agree, it's such a wide field that there's as much stuff outside of compsci that would be extremely useful.

[–] [email protected] 1 points 1 year ago

Sounds like you have the right idea for what to expect and what you are looking for! This is great. I think what you ultimately need is a passion project. Copying commands might feel kind of janitorial without a passion and drive behind it. When you are personally interested in seeing results, you'll naturally want to figure out what to do, and the commands will mean something to you.

If you haven't explored security too much, you might consider learning it as a second step to your programming. That way, you can tackle one thing at a time and get the programming down, then apply your knowledge to security while you learn that. Just my $0.02, though!

You might also be interested in Ruby and Metasploit. Ruby is a friendly language that you can learn and write quickly, and Metasploit is a very comprehensive security tool, mostly for penetration testing. There are a ton of other Ruby libs you can use to hit the ground running, too.

[–] [email protected] 1 points 1 year ago

It sounds like you're ready to try out the OWASP Juice Shop, a vulnerable by design web application that functions like a puzzle box for learning Cybersecurity topics.

Beware, it's designed to challenge professionals, it's very difficult. But the early challenges have step by step tutorials.

[–] [email protected] 1 points 1 year ago
[–] [email protected] 1 points 1 year ago* (last edited 1 year ago)

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:

  • Pseudo-code (Might seem useless at first, but it helps you to develop the logic of a program regardless of programming language)
  • Hello world
  • Variables and types (Commonly: Integers, Arrays, Characters, Strings/Arrays of Characters, Floats, Booleans, Enums and whatever else your language supports)
  • Operations (+ - * /)
  • Conditions (If, switch)
  • Loops (while, do while and for, also break and continue)
  • Structures/Classes
  • Functions and Procedures (Also arguments, and the difference between passing by reference or by value)

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.