I have noticed for sometime now that you are actually lost when it comes to programming and to the whole tech industry and we have talked about that in the past, so I won’t start my comment by saying “you can do it!!” and all these bullshit sentences that will provide you with no real answer from people who aren’t even programmers in the 1st place!
Well, let me start 1st by the bad news.. if you continue this cycle of these toxic thoughts (“playing the victim”, “this is not what I expected”,…) and patterns of behaviors (“giving up after realising how difficult a topic is”,etc..) then I don’t think that you can actually do it!!
Now I am not sure why you exactly wrote this post, if you wrote it for pure venting then I can’t help you, but if you are seeking some real advice (as you mentioned in your post), then read on…
1st point, have you watched “Whiplash” and “the prestige”? I recommend you go and watch these 2 movies, what they teach you is subjective (to each person) and can be a bit extreme, but there are some strong messages there (in addition to being some great movies in general!)
2nd, I think you may have the potential, but you just lack the focus, you are expecting too much, comparing too much, yet relatively doing so little, or more precisely, you are doing so much but in so many scattered topics.. don’t get me wrong, I think you know many details about different technologies, trends, hardware, computer news, etc.. (and I noticed that in the mena devs channel) which is a really cool thing! but focusing is the key! but this may seem paradoxical to you! how you should focus while your exact problem is you don’t know on what you should “focus”!
Well, this is actually a topic in computer science called the “explore exploit problem” (for more info Google: “explore exploit” or “multi armed bandit” or “optimal stopping”), and this problem deal with the fact of knowing when to keep exploring your options, and when you should settle on an option (difficult but solvable problem,but won’t go into details here..), so till now I was talking a bit in general but these are some concrete steps:
1- Focus but don’t commit if you don’t feel like it: passion, motivation, vision, and all these stuff are important and essential, but let’s forget them for a second here.. start working on a project (let’s say a chat bot), and put some realistic time expectations (it can be 1 or 2 months [Yes at least this much, and not just few hours or day, then you close your laptop and call it a day!]), and keep working to finish this project (and let me emphasise on the following using caps lock: EVEN IF YOU DON’T FEEL MOTIVATED TO CONTINUE WORKING ON IT, AND EVEN IF YOU FELT TIRED AND YOU JUST HATED THE PROGRAMMING LANGUAGE.. just continue working till you finish this project (also set realistic goals, don’t build an OS as a 1st project! but don’t also make it a Hello world app!).. and after you actually FINISH IT (despite what you felt during working on it…) look back at the whole process, introspect, and then examine your feelings about the whole process (are you proud, satisfied, enjoyed what you built, etc.. or not <= and based on that you can decide if this is something you may enjoy doing or not), so let’s say if you built a full website (backend, frontend,…) and you still didn’t enjoy it much, then move to security topics for example and repeat (Note: spend at least 1 to 2 months on each topic)
2- Don’t blame/don’t compare: I know it is easier said than done, and we are all guilty of doing that from time to time, but try to control the impulse to do so, and even if you want to compare, use that as a motivation to improve rather than an excuse to quit and/or feel depressed.
3- About overthinking: this is a tough one, but as a 1st step, start to notice yourself when you are overthinking and try to break the cycle (again easier said than done, but being self-aware when you are actively doing that can really help)..
4- Learn the basics/go offline: going offline may seem counter-intuitive in this cyber “connected” world (especially if you are into programming/technology), but being online and staying up to date, may actually kill your chances of doing something great, I am sure those who built the coolest libraries and programming languages (as you mention something related to that in your post) didn’t spend their time checking the latest trend and blog posts all day long, stay up to date for sure, but keep in mind that trends may come and go, so focus on what matters and use different learning styles if needed (check 5)
5- Different learning styles: I am not sure what type of learner you are, but try different methods for learning (articles and tech blog post are good) but I personally prefer that if you want to dig deep into topics, I recommend books and youtube series (preferably a mix of both), and always remember to focus ! (check point 1)
6- Money: you mentioned money in your post and that’s a legit concern, but if you keep thinking about it without focusing on trying different projects/technologies for some time, then you won’t get either! so focus on trying different technologies 1st, and don’t eliminate the concern for money, just postpone it a bit.
7- Open source: no you don’t “have” to contribute back if you can’t, and it is not stealing, it is literally “open source” and those contributors are doing just fine! but if you also want to start from scratch for learning purposes, then that’s great too!
My advice may seem long but I barely scratched the surface here…
P.S: I hope this to be your last post about this topic, and that your next blog post has the title: “Here’s the project that I am currently working on”
And good luck, from one programmer to another.
Note: This is a slightly modified version of an actual reply that I sent to a friend, I hope its content to be beneficial to any programmer, but more specifically to junior programmers.