Some comments from me to add to the mix:
Listen to people who know better. Zed and several other people I respect as programmers, said very similar things about beginning; stick to a text editor and terminal, create lots of small programs (no gui, extensive library imports, etc), write programs a line at a time - not in one go, read lots of other people’s code.
I have to admit that I didn’t always follow this advice. I wanted to use a Professional IDE (that I had no use for really) so spent a lot of time mucking about with Visual Studio. I also wanted to learn Ruby as its sounded cool, and I liked the whole ‘chunky bacon’ thing. But I didn’t really get that much of it as I went immediately to Rail and therefore wasn’t learning Ruby, but learning how to implement a Ruby MVC web framework. This was demotivating.
I was reaching for libraries all the time like Twython, to do specific things before I really understood the basics. Now I have a much better grasps, I’m finding moving to other languages considerably more easy.
I still find myself writing too much code at once. And I don’t have enough tests. But I am following the ‘practice’ of TDD in many things I write now because I got burnt. But this isn’t always easy. I also have a sign I wrote over my desk that says ‘refactor code OR tests, never both!’ as a permanent reminder
Everyone talks about a ‘click’ moment, when they start getting things. I’m trying to recall what and when mine was, but I can’t pin it down. I struggled with ‘self’ for ages, and I’m not sure why. I thought a tuple was always two immutable items for a while!?! Oh, and I didn’t get the difference between printing output and returning right at the beginning.
I think it’s about perseverance now. I’ve reached a stage where I can program and converse with programmers. That has achieved one goal in my professional life. I started using Vim initially for developer kudos, (if I truly admit it), but I actually really like it. I don’t use it exclusively, but find I bounce around between Vim, VSC, PyCharm and Brackets depending on what I am doing. This seems a good practice as I never know where I could be working and what toolset is in place.
But the biggest thing for me, was that I started the LCodeTHW with these guys as a process to help me recover from alcoholism. I’ve not mentioned that on here before, but at the beginning I was dealing with those personal issues as well as trying to learn a whole new discipline of programming. It’s clear to me now that changing how you think about things is mentally exhausting. Learning programming if you are not used to thinking in those terms was hard. But it helped me a lot to stay focused on something. That’s certainly why I didn’t give up in either pursuit.