I usually know what I want and how, but it takes quite a bit to structure. Back in the day, labview+scripts/c were great. You could get to a point, and then extend as needed.
The other problem, of course, is finding meaningful problems to solve. Would I like to build a semiconductor process simator: yes, yes I would. Will I....not likely.
I feel like I stumbled on doing this but for many, I think they probably just bumble along building web apps and taking much longer than necessary to understand fundamentals. You have to expose yourself to high level professional code and absorb as much as you can from it otherwise you’re in danger of plateauing.
By that I mean work out how the core algorithmic parts first then interface to the lower level (normally experimental rigs) and finaly polish the interface
After realizing I really wanted a chance to change careers, I decided to just do a second bachelor’s, basically to have a curriculum.
So far, I’ve learned more math than programming. The actual coding we do is greatly benefited by the self learning I did before, but my understanding of what’s going on in code is much higher. The other place I got stuck seems very natural for other people to move past with ease, but it was how to really solve problems with code. For me, I think the much deeper understanding from a school setting will set me up to better understand how to solve problems with code. (At least, I seem to be pretty good solving problems with accounting, my first degree, so I don’t think I lack inherent problem solving ability. This whole second bachelors is a bet that I am just missing deep enough understanding of the subject area to apply it to problem solving yet.)
People that claim that such things aren't timeless are missing the fact that once you've seen enough tools that your underlying knowledge becomes deeper (and therefore timeless) as well.
What will happen though is that when you're doing your job is that you'll begin to notice that you miss certain fundamentals. At such point you know what you're missing, and you can immediately do targeted learning without doing a whole bachelor for it.
This whole story does pressupose that you know aprior what kind of developer you want to be, which is not an easy feat since it's a bit a chicken/egg problem (i.e. you need to know programming and have seen different flavors in order to better know what you want to become).
For me, it took me a long time to really understand where to begin. It wasn't that I couldn't solve a specific problem, like on leetcode. I didn't know how to go from scratch to building some kind of tool or application.
The solution for me ended up being just watching a ton of random tutorials to get something started, then taking the tutorial a totally different direction. That gave me some examples of what the entry point to the process was, and from there it was just an additive process until I got the desired behavior.
I think that first hurdle is the most important by far because once I crossed that it felt like I knew I was actually capable of being a software engineer. The next difficult jumps for me were grasping OO concepts like polymorphism and inheritance and learning functional programming. I also struggled with async style programming (first callbacks, then promises) as well as understanding contextual values such as Javascript’s this.
JavaScript, jquery, json, and xml also were another hurdle. I lump them just because I was kinda learning them all at the same time. I was doing web stuff and one day i finally understood the difference between a scripting language and a compiled language. Suddenly understanding how to use the language became much easier for me.
Oop took me about 6 months of just java coding constantly. Then I got it and it really helped me at my internship.
Now my main struggle is LINQ expressions and streams.
Yeah, that's exactly what I mean about jargon. Even the idea that you have to hardcode what appears at first to be a string of magic words is not very accessible.
> JavaScript, jquery, json, and xml also were another hurdle.
Another area where things are made needlessly difficult - you really shouldn't have to worry about /how/ your data is being transferred (JSON/XML), just that you are in fact transferring it. JS versus jQuery is a bit more of a legitimate concern, but thinking about them in terms of their function rather than what they "are" (JS being general coding and jQuery being a tool for manipulating HTML/CSS) clears it up a big.
> Now my main struggle is LINQ expressions and streams.
I can't help with LINQ but I use streams all the time - what about them are you struggling with? Maybe I can help.
However, it's been a long time since I learned to code myself and my own learning experience is lost to the mists of time, so I'd really love to hear from people who are either learning right now or have recently learned how to program: what were/are the hard parts for you?
I'm not just asking out of curiosity - I'm trying to build a better programming paradigm (based on visual programming) and a key goal for me is to make building software more accessible to new entrants.