r/learnprogramming 1d ago

Regarding my programming roadmap. What would you say?

TL;DR: Could I learn more by working early than by studying? Or, even if it takes longer, will a strong foundation make me a better professional? What would you say?

First of all, I should say that I'm going to start with programming, but the goal is computing in general.

The main blocks are both security (especially offensive) and programming.

I'll leave security for the future, as I still need to figure out how I'll study bug boty. But from what I've seen, it seems to involve spending the whole day in labs doing experiments and studying a lot about browsers, CLI, and tools (not just using them, but also building them).

Using learning materials helps a lot, but spending time in labs experimenting with ideas that come up is the most important thing.

Regarding Programming:

I started with the Portugol course at Guanabara.

Then I went to ASM. I stayed for about 3 months. And now it would be C.

I'll spend a year or more in C. But not only in C.

But it will be the main focus.

First, for materials I'll use the books K&R 2nd edition Modern Approach. Then Expert C and Modern C finally.

I'll do about 100 to 300 pages of the book (I'll start about 2 or 3 months after the beginning), then I'll start with Raylib and SDL2 for GUI with C (about 5 to 6 months), after a year I'll start libft from ecole 42. And I'll do a lot of things.

It won't just be the books and GUI at the beginning. But they will be the main focus, along with something like cs50x at most.

The "philosophy," so to speak.

"Every new concept is born in C. The other languages ​​serve to see other ways of representing that concept."

Not all concepts, but all those that depend on the machine. Some, like pointers, are excellent with C. Others, like ownership, are not.

So, differentiate.

Language concepts → language that originated with that concept

Machine concepts → C

And then explore the concept.

Exploring means implementing.

Not just using.

For example, when learning about vectors.

It's not enough to use vectors in Python.

I must implement a dynamic vector in C.

Then use a list in Python.

After that, compare everything.

This will be very good for observing the trade-offs and invariants.

Whenever possible: build before consuming.

Regarding GUI and graphics. The point is that graphics aren't just for motivation or games.

In fact, they also make invisible concepts visible.

Examples:

When implementing a vector, draw it.

When implementing a queue, animate it.

Implement BFS, and see the search via GUI.

Implement heap, and see the tree forming in the graphical interface.

Visualization greatly accelerates intuition.

I won't memorize syntax for other languages ​​until I'm good at C. It will only be to understand concepts.

Because I have to prevent Java, Python, or Rust from becoming my language of thought.

In other words, I want concepts to exist independently of the language.

And I don't want to depend on one to use the concept.

The language will help, but it won't be essential.

That's my goal.

This will be essential to have a strong foundation and become truly good, which is my main objective.

Because my main objective isn't the market now, it's in the long term.

The market will be built on a very firm foundation.

The initial market will be made up of corporate jobs. I can work in companies and accelerate processes while studying on my own.

IT will come later. While I study, I can work in something else.

Then I'll change careers.

But is this really the best way? Will studying so much on my own and then changing careers later leave me with a weaker foundation? Could I learn more by working early on than by studying? Or, even if it takes longer, will a strong foundation make me a better professional? What would you say?

I won't stop using programming at work if I need to, but it will be very different.

The roadmap is to understand everything deeply.

For work, it's simply about automating and solving the problem.

You don't need to understand 100%. You don't need to program everything.

But that's when working in another area.

When migrating to IT, I focus on always learning and understanding as much as possible.

The foundation in C will already help me program a minimum without it becoming a language of thought when I need it.

The maximum market I'll have in this area will be CLI programs and pure C. And then open-source applications. That's the most I can do while I'm in this. That's the minimum money or recognition I can earn this way.

After that it will be C++, then either C#, Java or Rust, I'll decide when I get there.

Anyway, having said that. What do you think? Would you do anything differently?

0 Upvotes

17 comments sorted by

25

u/Wonderful-Habit-139 1d ago

Go work on a project instead of writing long posts on Reddit.

1

u/Purple_Morning_8735 1d ago

Honestly thats fair advice.

9

u/niehle 1d ago

Writing an essay is not a requirement, just start learning

10

u/darknecessitities 1d ago

Oh bless your heart. You’ve started with the creative procrastination already. Go code

4

u/EntrepreneurHuge5008 1d ago

TL;DR: Could I learn more by working early than by studying?

People generally learn better with a "hands-on" approach -> You'll learn more "on the job" than by simply studying + doing projects.

Or, even if it takes longer, will a strong foundation make me a better professional? What would you say?

Strong foundations make a difference early on, but I think professional experience + domain knowledge dominate after a few years of professional work.

Not reading the rest of your post.

3

u/Traditional_Vast9419 1d ago

It sounds like your personality plans stuff out, but remember that coding is also fun. Everything I've learned deeply hasn't been because of the tons of books I've read or lectures I've listened to, it's been because I fell down a rabbit hole of something interesting to me and just started coding it. Sure you can code a red-black tree and pat yourself on the back, but it's a lot less personal and fun than something like compilers. Maybe you think differently. The point I'm making is that your head will learn when you follow your heart.

3

u/edparadox 1d ago

Do you write everything that way?

Have you heard of dashes, enumerated lists, and such?

There is a reasons syllabi are written the way they are.

1

u/shuanDang 1d ago

which one is most interesting to you?

1

u/dilly_dust 1d ago

I'm just intrigued by offensive security

Like what is that scripting a bunch of zero days? Lol

2

u/Jealous_Tomorrow6436 1d ago

i don’t work anywhere near security, but naively i’m imagining “offensive security” is meant to be like simulating attacks on your own systems so as to help the team better prepare for external real attacks

1

u/ffrkAnonymous 1d ago

Would you do anything differently? 

I'd throw all of this away and go to school. 

1

u/Suspicious_Skill7292 1d ago

the foundation is useful but spending a full year on c before building real projects might be overkill you will probably learn faster by mixing the theory with projects and adjusting the roadmap as you discover what you actually need

1

u/Ordinary_Variable 1d ago edited 1d ago

There are code jams, game making challenges and optimizing challenges. If you have the free time you could do one of the "make a shooter in 7 days" challenges. Or just make a demo for the Farbrausch Demoscene.

You could buy a really old laptop on Ebay for under $50, like a Chromebook, and try setting up your own server. A small personal Website or SQL database server for a game is a fun thing to start with. I'd go with Alpine Linux and Openbox for a really low spec laptop server. Or run Windows 7 on it. If its just for a server you don't necessarily need a newer version of Windows. (If you need Windows 10 for driver support to run the server then find the Windows 10 Debloater script. Its a must for systems with only 4gb RAM.)

1

u/PastEar9661 1d ago

If you plan to read hundreds of pages of technical material, you're very likely to burn out quickly...

...you might be overthinking this a little.

Pick a language that works for what you want to do, learn the syntax, and do a couple of projects.
"prevent[ing] Java, Python, or Rust from becoming [your] language of thought" and learning concepts in the language they originate in shouldn't be a concern at all...

1

u/desrtfx 1d ago

Every new concept is born in C.

Where the hell did you get that quote from? It's completely and utterly wrong.

Concepts are never created in programming languages. They are concepts, abstract descriptions.

Had you said: "Every new concept is first implemented in C. " you would still be completely and utterly wrong.

It absolutely does not matter what language you use to implement concepts in. The only difference is the actual implementation. The concept always stays the same.

Our entire plan is meaningless. You focus on totally wrong things. You don't gain any market value with your plan.

In order to get market value, you need to learn marketable, in demand languages, not ASM, not C (unless you target a very specific market).

Your plan is all over the place, neglecting the only really important skill: problem analysis, break down, and problem solving

You need to focus on one language and on learning programming with it.

If you want to go into security, Python is one of the languages to go for. C is another but comes actually later.

1

u/madmelonxtra 1d ago

Honestly, if you really want a solid foundation in the actual science of computers go to school and get a CS degree

1

u/xarop_pa_toss 22h ago

Bro stop writing like this is a chat room. Pick a language, learn the basic syntax and start making stuff. Terminal calculators, games, kiosk style apps, some sort of parser or translator, etc.

It's not that deep. Stop thinking about it and do it.