I'm nearly 32, I took introductory coding classes and got straight As but I can't seem to get past more complicated projects. I'm not sure if my brain is wired for it, I have a very hard time finding bugs that are sitting right in front of me, and thinking about loops for too long makes my head hurt. I've certainly tried, I'm considering getting a Mac for dev because Windows is so painful to try and learn any coding. Seriously, I'll copy and paste stuff and it just won't run or it'll give an error on Windows, every single time.
> Seriously, I'll copy and paste stuff and it just won't run or it'll give an error on Windows, every single time.
I've had this as well, in part it's because I don't know PowerShell / CMD that well. I'd go for Mac, I did it and never looked back. Buy the new M1 Mac Mini even, if you have the spare money.
> I'm not sure if my brain is wired for it,
I've thought about this question as my brain partially isn't and learned a thing or two on how to overcome it.
My issues:
1. Being detail oriented isn't my strong suit.
2. For a long time I wasn't able to grok it.
3. I have hard time visualizing code.
My solutions:
1. Use all kinds of tools that will kill the detail. Simple things like syntax highlighers and linters are a given. The most bang for buck was when I learned how to use a debugger, that was almost 10 years ago.
2. Follow a computer systems course like NAND2Tetris and after that hack computers at hackthebox.eu (especially the x86-64 assembly challenges). By understanding the internals of how computers work at a systems level, you essentially are capable of grokking a lot more. Take a compilers course while you're at it, I failed mine, but learned a lot from it anyway that helped to grok more stuff.
3. Debuggers help here as well, practicing pure math helps (I'm not good at that either) and simply doing data structure and algorithm exercises help.
---
I've learned over time that making a statement like "my brain isn't wired for it" isn't helping. In part this is because it isn't true, what I was lacking was a certain perspective that comes quicker to some people. For me, it took some time, but now I have it :)
You're right about the last bit, I'm really frustrated by people who say "Math isn't for me!" because for me, I love math, as long as I have a good teacher. If I have a bad teacher, though, which isn't uncommon, it's a nightmare. I can't learn higher-level math when it's just a series of proof, corollary, lemma, whatever, without any motivation. I have trouble picking what things I want to study with CS, because it's all interesting. Too much breadth, not enough depth. I still haven't figured what's best for me. I probably have ADHD but haven't taken any medicine for it; maybe that'd help. I trip over the details and I know I'll get it if I keep at it but I have to keep looking up syntax and it drives me crazy. I've liked Python because of the simplicity. But then I want to learn the nitty gritty of architecture and systems programming, and people tell me not to waste my time and focus on the higher-level stuff.
I disagree here. Being able to use gdb makes things easier. I had 2 programming courses under my belt after taking a computer systems course.
People make it more difficult in their minds than it is. The key tricks being: one step at a time, use a debugger and google everyday assembly instruction that you encounter.
I’ll give you this: studying computer systems made me a better programmer.
Late reply, but gdb wouldn’t be used in nand2tetris. Their online grading system accepts only a couple of high level languages. I used Python to write the assembler and compilers.
What I was trying to say in my previous comment was that one would not want to be a raw beginner when starting nand2tetris. One would need to be thoroughly familiar with basic Python data structures. I used lists, dicts, and a class I wrote to handle the AST nodes.
I’d recommend nand2tetris before taking a full compiler course.
We’re agreed that low level understanding is very helpful. And, it’s interesting.
I'm more than twice your age, and I can say that Windows is the worst coding environment there is.
If you just want to learn to do software, but don't want to dig into computers per se, then a cheap Mac is a good choice.
If you do want to learn software and computers, then use Linux. You can install it on most any old PC or laptop you have or can scrounge. Learn how to admin the box. It's an important skill for experimental physics and engineering physics these days.
Can I ask what languages/tools you've tried to learn? (Hopefully nothing complicated like C++?) If you have a link to something you followed that confused you in the
past, I'd be happy to see if I can pinpoint the issue and suggest an alternative. A lot of tutorials, courses, etc. definitely do assume Linux/Mac, so they're painful on Windows. And conversely if you find a Windows-based one, you'll find it painful on other platforms. It's really important to pick something with less friction so you can focus on the concepts initially.
That's the other thing. Pretty much every tutorial I find is front-end web development, which I understand is most of what we interact with on a computer, but not especially appealing to me (fiddling with CSS doesn't feel like programming). The intro classes I took were Java, IDL (computational astrophysics, learning to solve ODEs) and also Javascript via HTML5 Canvas (a really fun class on chaos theory and fractal art). I got all As and thought it was easy. Beyond that, learning on my own, it got really hard really fast and I didn't know what to do.
I'm interested in iOS app development but that requires a Mac. I'm probably gonna grab an M1 Mac Mini.
I've tried CS50, got most of the way through it but it's tough to be motivated by self-guided courses when I'm not forced to do it. I was able to do the first week or so of Advent of Code before it got way too tough. I love self learning mostly, but for programming it did help to have lectures, grades, and office hours. I have choice paralysis where I just dabble in all sorts of things and don't know what to commit to.
If there's any programming-adjacent technology that is practically guaranteed to make you want to pull your hair out, it's CSS :-) I don't find web dev appealing in general either, so lots of sympathies there.
It's nice that you've tried Java and computational stuff and found those more appealing. Re: CS50, my understanding is that while the course is well-structured, they do start with C, which is better suited for people who really like learning from the "bottom up", rather than those who learn better "top-down". You might be in the latter group.
If all that sounds about accurate, it's probably better to focus on courses that start with higher-level technologies like Python, C#, or Java in the beginning (but stay away from web dev). Python is the most likely to feel "natural", so that's what I recommend to people just starting out. You could check out Berkeley's CS 61A for example (though I think MIT/Harvard have Python-based courses too). If you stayed on Windows, I'd recommend Visual Studio 2019 (not to be confused with Visual Studio Code), since it has everything well-integrated together. But courses focus on UNIX-based tools, so you'd indeed want a Mac if you're following anything that uses the terminal. And if iOS app development is your goal then you definitely don't want to go with Windows, though I don't have any experience with that so I can't give you pointers (hah) there.
CS in general isn't about just coding though; the algorithms and data structures are extremely important, and they aren't necessarily easy to pick up, so that's normal. And self-guided courses in general definitely need a lot of motivation, and that's easier said than done for most people, so don't feel like it's just you. You probably want to pick something where you have a good dose of interest & curiosity to drive yourself instead of just relying on the course, regardless of what you're doing.
Not sure how helpful this is but best of luck trying it with a Mac!
> I've certainly tried, I'm considering getting a Mac for dev because Windows is so painful to try and learn any coding
As a happy Mac user for many years, I agree it is worth it. However, in case you aren't ready to spend the money just yet, you can start by dual booting your PC to switch between Windows and Ubuntu or other Linux distro.
Yep, you can learn programming in any OS. (OS is mostly orthogonal to programming itself really.) Especially if you are using something popular like Python that is available for almost any platform.