I've been a long time viewer of the forum but never posted anyything but I have appreciated browsing the site every day for a couple of years now. This is my first post and my first account. The community has inspired me over the years, both in terms of the quality of dicussion given and by presenting thoughts and opinions that I've never even considered before.
Because of this I'm considering changing my career options to Software Engineering or a similar computer science related role. I'm currently a penultimate year business student at a University in the UK. Some of my modules have contained the R programming language and small amounts of Python. Nothing considerable for the most part but very interesting none the less but that's as far as my computer science education goes. When I finish my bachelors I would like to do a Master Degree (conversion course) in Software Development.
I'm 29 years old so I do feel a little bit of time-pressure (in terms of what to learn) and my maths skills are lacking, since I only have a Math GCSE from school about 11 years ago. For this part, usually my coursemates at Uni do the more quanititative parts since I struggle alot with this.
I've dabbled here and there in Python, R, Bash and Lua in my own time, and I'm not technologically illiterate (I really enjoy playing with the UNIX eco-system and I used to build computers as a kid) but nothing too major.
I didn't find 'The Pragmatic Programmer' very helpful, Automate the Boring Stuff on Udemy threw many errors at me and felt outdated, and I'm definitely not ready for 'The Art of Computer Programming', though I've tried.
The problem I'm facing is, no matter the resource I use I just don't feel like I'm developing a deep understanding, or even comprehending what it is I'm learning. I get very overwhelmed by the complexity of it. I've tried doing coding books for children and I even find some of those a bit beyond my grasp.
Whatever resource I use, I ultimately feel like theres just pieces, 'something', missing, or the explanations aren't clear at all, I get frustrated and then try again with another resource. I'm starting to feel like I'm the problem, albeit some of the resources I've used could really do with a more rigourous understanding of what 'beginner' means.
Many of them tend to be very 'academic' sounding, much like the maths books I've tried and full of complex language or terminology that I don't understand.
Resources I've tried: Codecademy, Datacamp, Udemy (automate the boring stuff, Python Bootcamp: Zero to Hero, etc), FreeCodeCamp, TheOdinProject, FutureCoder, Python.org, LearnPython.org, learncpp.com, C# for Beginners, leetcode, edabit, exercism.io, Code Wars, Code Abbey, Project Euler, Codinggame.com, books from NoStarchPress and various other books and youtube videos (e.g. FreeCodeCamp Videos).
Many of the publications by Manning go right over my head, NoStarchPress is good but sometimes assumes the reader knows a lot more than I do and video courses like Packt, Treehouse, Udacity and Datacamp have varying levels of teaching quality and contain gaps.
I feel like everyone but me can sort of 'see' the code in a sort of 'logical' engineering kind of way and that's the skill I'd like to develop. Is that possible?
I saw 'Thinking in Systems' by Donella Meadows reccomended so I picked the audiobook version of that up and I'm going through that.
Should I stick with business? Am I capable of learning these things even if I find them overwhelming? Am I the problem? How do I resolve this, if I am the problem? What am I not doing that I should be doing?
The majority of computer programmers do not use or know any math beyond the high school level. Math is great and I won't discourage you from learning it but for an entry level programming job it's 100% unnecessary.
> The Art of Computer Programming
It's really weird to me that you've even tried this book. Despite the name it's a really serious computer science text that would be struggle even for students with a graduate level knowledge of computer science and mathematics. I would not expect you to get anything out of it right now.
What exactly is your level of programming knowledge? Can you write a function that prints a string in python, what about a function that determines if a string is a palindrome? Figure out where you are and then work on getting to the next level.
> I feel like everyone but me can sort of 'see' the code in a sort of 'logical' engineering kind of way and that's the skill I'd like to develop.
You might be expecting too much, too quickly. This is an ability that just takes tons of repetitions to develop. You need to struggle with bugs and errors for 1000+ hours to get anywhere. Intuition comes from practice, not reading or lectures.
Of course, the beginning was still difficult. But the assignments were all solveable and didn't take too much time (on average), so I had a positive feedback loop that kept me engaged. Ultimately, just by the sheer amount of assignments and them having appropriate difficulty levels, I managed to develop a good intuition about why some things work and other don't. And later on, they also include slightly bigger projects so you can put stuff into perspective.
I do feel the problem with most online courses, that they often have very simple exercises (that can be easily copy-pasted) and overly long explanations. But the real way to learn programming is by doing it, not reading about it. Once you gained the underlying understanding, the theoretical concepts also become much easier to grasp.
I agree with other comments here that it seems like you might be stuck in a tutorial loop. Do start building something, a small project for yourself. I've had the privilege of mentoring a few people and it is almost always when building something, not when "learning" that the actual learning and insights and aha moments happen.
Getting a mentor or coding in a community can be invaluable. We all learn differently and build mental models to understand stuff. (I'm down for helping in any way :-) email on profile)
But if you really want this don't give up!
Another thing that sometimes can get starters stuck is a false idea that engineers have some sort of privileged mind (some would like to think so) but in reality we are all people from all places and genders and backgrounds and think about things in wildly different ways! So don't try to become some idealized and maybe non-existent ideal engineer, but just grow yourself with this new skills and do what works for you!
You mentioned that you have done some R and Python, and your comment about math seems to suggest that the use of those might have been in data science-y fashion?
It could also help to decide _what_ type of software engineering you'd like to do. This could help you clear up a bit of confusion because there's A LOT in software engineering...
Anyways, best of luck!
Yes! Especially if you find them overwhelming - that means you've taken the first step of treading into new territory and trying to make sense of what you see. "Beginners mind" is a fantastic resource.
The key is to stay in that mindset, explore, iterate, stay curious about what you observe. The only way to do that effectively (besides sheer stubborn willpower) is to work on an interesting project. Build something real! Start with the simplest possible thing you can imagine and iterate. When you get stuck, learn to push through and to get comfortable with long periods of ambiguity. There is no substitute for practice. Learn each topic as it comes up, in the context of a real application not a tutorial, and you'll develop an intuitive sense for that code eventually.
>Resources I've tried: Codecademy, Datacamp, Udemy (automate the boring stuff, Python Bootcamp: Zero to Hero, etc), FreeCodeCamp, TheOdinProject, FutureCoder, Python.org, LearnPython.org, learncpp.com, C# for Beginners, leetcode, edabit, exercism.io, Code Wars, Code Abbey, Project Euler, Codinggame.com, books from NoStarchPress and various other books and youtube videos (e.g. FreeCodeCamp Videos).
If all of these failed then the one I think will click for you is CS50x.
https://cs50.harvard.edu/x/2022/
Watch all of the videos, do all of the problem sets, set up the online coding environment so you can push your code to the testing suite and check your work passes.