I want to code. Where do I begin?

20.01.2020

In the programming communities I'm in, this might be the most asked question. Even though there is no single correct answer to the question. I'll try to express my thoughts and suggestions as well as share my own journey and thought process over time. Please note, as my career revolves around web development, even though most of the principles and practices I will talk about can be applied for other programming fields, I'll be guiding for web development.

Before we begin and me starting to assure you that such stuff you might dream of being possible; let me put all the cards to the table. This is not an easy journey, not everyone can have the time or interest for this field. Stuff you need to learn and practice thankfully is straightforward. If you do not know what giving up is you'll be most likely successful. Success behind this depends on commitment and patience. In most optimistic manners you'll need to spend at least 1000 hours in this field to be able to produce high quality product that will allow you to either freelance, work in a company or work as a remote contractor etc. The time required will depend on how good you are with programming previously, how efficient you can spend your time (this includes being able to focus as well as planning properly), whether you are able not memorize but understand the concepts necessary. Memorizing will only get you so far, but understanding will allow you to master the concepts. Now that's out of the way lets start.

If you have done even little bit of research on what to do for web development you might have come across this roadmap. It is an accurate representation of the fields. This might seem like a giant and impossible path. Two things I've to say about that; first you do NOT need to learn everything there the content there is every aspect of it and nearly impossible for a developer to keep up with, and second remember the stuff I told in previous paragraph. It requires at least 1000 hours to get good with the concepts. This is a marathon not a sprint. You want to go from zero-to-hero. If you commit and always return to your studies after being burnt out(which you will, I myself burnt out 3 times over 2019, I often came back after 1-2 weeks) you'll do just fine.

Important soft skills you need "to be successful at learning stuff"

1) How to Duckit (aka. google it). Whenever you have a question this must be the first course of action to get an answer.

Be as brief as possible, include the language you want.

Examples:

"forEach loop js mdn" - js for javascript, mdn is Mozilla Developer Network which is the official documentation for Javascript. "flex css example" - this type of query will often result in 3-4 minute read article that includes code examples which you can adapt to your own code "How to upload file html" - even specific questions like this will have answers on web "C read from file" - you get the idea...

2) How to ask questions in programming boards.

Make sure you Ducked the question with couple different phrases before doing this, if you have not been able to find an answer make sure you ask only part you are having trouble with, do not over explain but give all necessary details necessary. Do not ask question without a direct way of answering. If you want to align a button vertically using bootstrap paste your code to codepen.io which is an amazing site for this purpose and ask through that.

NEVER DO THE THIS: "Hi I'm having trouble with x can someone help?" or any non-direct questions - Nobody knows if they can help with x or not. You have not asked the question, most people will not go into "what is the problem?" "did you try this?" dialogue flow as that will take more attention than necessary. And if you are in the deeper parts of internet, you might get a negative even aggressive response. There are nice programmers who fix your mistakes and there are programmers who bash people who they consider to be stupid. It's hard to swallow but it's the truth.

3) Ability to commit.

If you begin a course, see it through. I can not express how important this is. Do NOT ever leave a course that is teaching you stuff and go off to start another more appealing subject. Line them up and focus on one by one. Otherwise you'll end up being jack of all trades master of none which is incredibly bad.

4) Sticking to one language till you become expert on it.

Same as 3, but people often hear and get distracted by "that fancy language or framework" that is very performant. Let me tell you this much, your ability to code will determine how good your program is at least 10 times more than the language you are using. So if you start with something stick to it, learn how to do everything you need to do with it. Then you can experiment with other languages and see their pros and cons. Almost no modern language is superior to one another on general scale. Each of them are meant for different task, in the end what you want to do with your next project will determine which language you might want to use and at that point you can learn a language in 1-6 weeks depending on its' complexity.

How I evolved to be who I am?

First of all, I'm not an expert in my field yet, I'm still developing as a programmer and as a human being. My current position is Front End React Developer at a remote web development company consisting about 15 employees. I might have done some stuff wrong but I like to believe I did a lot of stuff right which lead me to success.

How did it begin?

Background: I've been with computers all my life, even when I was 12 I'd write excel macros or keyboard macros with "AutoHotKey" program for games I used to play. But I've not done proper programming of something beyond 100 lines until college. I've studied Mechatronics Engineering and as minor Software Engineering. These gave me a lot of knowledge over various topics, but being young I did not spend my time productively during those years. Also has to be mentioned that it nearly gave me nothing in web development field so even if you do not have a degree you'll probably not be any different than I was when I fully committed myself to web.

The Decision: I've had done small freelance jobs over Fiverr before with bootstrap supported html/css sites for extra bucks in college before but the dedication was never there. A friend of mine who is a web developer got me into proper bootcamp over udemy in Colt Steele's course and that was the time I decided I wanted more from my life. I started off easy like 15 hours a week for first 2 weeks, then I realized I really enjoy being able to code in a way that will bring me money, I'd never focused on that sorta stuff before. Then with heavy load of coffee the time I spend programming and studying increased to average of 40-70 hours a week. At one point I'd wake up at around 9 am, breakfast and daily internet browsing till 10 then I'd find myself entering study session that would last until dinner which is around 7-8 pm. This went on for a long while.

But what was it exactly that I did?

As mentioned I started off with Colt Steele's course. After that was finished I made my first portfolio site hoping I could land a junior developer job. The site was powered by bootstrap and customized with CSS to not look like one but still... I got rejected quite a lot, and realized I still have a lot to go on. By this point on I was about 150 hours in which is not enough. So I decided I want to build a website. I did not do a nice job. The idea was a Turkish medical site where medical professionals could blog for public to see as well as capability to add symptoms, diseases and drugs to system. It'd have a symptom and diseases connection and that sorta stuff, I actually did make progress on it but the content entry etc was highly vulnerable software. Though this project was incredibly helpful for me to understand DOM manipulations and what-to-do what-to-not-do. By this point even when I was not programming I'd go on reddit or programming boards and read articles etc.

I was crazy obsessed with achieving this nothing was ever on my mind or my life. I'd wake up, eat, code, coffee, code, coffee, code, coffee, dinner, relax 1-2 hours then sleep. I took every social aspect of my life out (I danced for 7 years and used to frequently dance every week.). I excused myself to friends' invitations some respected my decision to shell myself, some worried, some got upset and took personal but I had one thing in my mind, geting my life straight.

After this medical site I was about 300 hours in. I wanted to improve a lot more, I used to hear all those fancy technologies from job adverts. Ruby on Rails, React, Angular, MERN, MEAN, Flask, DevOps and countless more. I did a lot of reading and decided I want to learn React. Afterwards I bought Maximillian Schwarzmüller's React course and finished that. It took about 100 hours (I often stop and Duckduck stuff throughout courses to learn every question I have which I suggest. Finishing courses will only educate you so far, learning to learn will take you beyond).

After learning React and Firebase, I bootstrapped a website called MvP-RO. This basicly is a site that is focused in nearly 20 year old game. It allows tracking of monster's death timers. Right now as of this post I've 300 users actively using this platform. Seeing appreciative mails occasionally thanking for the system is really nice. By this point I think I've had 700 hours in and even then I had made bad decisions while developing software now that I look into it. But by this point I was pretty skilled at what I do but still not nearly there yet... So I sat down and researched what do I lack?

Two things I realized, not all HR personel is knowledged about field and tend to ask dumb stuff, and 0 experience means you will be in mud during job hunt if you have no connections which I did not. I started applying to jobs one day a week. Where around 70-80% got unanswered and most of remaining got rejected instantly. I also realized the following. Most companies wanted me to know how to test my software, I didn't know how. Wrote it down. Most companies threw me algorithm questions in hiring process and I was not good at it. Wrote it down. Some companies also wanted me to know React Native. Wrote it down. Basic server management, lack of experience thus more projects, SQL(Postgres), further NodeJS skills, GraphQL, advanced CSS/Sass skills etc etc. wrote them all down. And made a plan. First focus on ones for Front end only. Why? Because full stack is big bite, front end only is smaller bite and easier to get in jobs. So I started learning better CSS, improve my overall design capabilities, take 3 different unit and integration testing course (2 of which sucked thus I needed 3rd, knowing test syntax is not enough, knowing how to test is important this is a topic that took a lot of my time to understand it really was difficult for me to understand), a basic website designing principles course. By this point I believe I was in about 1300-1500 hours in. I've had some small freelance jobs in between my learning aswell but not good experiences or money with those. I have had burnt out 3 times to this point which lasted me not being able to program for 1 week or so, I still researched stuff and read online but did not code during those times.

Then during all this an application I made made through and I was hired by the company I'm working now. It just happened in span of 2 weeks, I couldn't believe it would be that simple.

My journey to learn has not stopped there, for straight couple months more I kept on studying, I was not excellent on GraphQL and just only good when I got hired. I improved my skills on that, learnt React Native, learnt Go Programming Language. Improved my basic python skills that I had first learnt during college years. And I keep going and going. I sometimes work 30 hours sometimes 40 hours a week depending on how busy we are and remainder? I. Still. Study.

What keeps me motivated?

I believe that nobody has a purpose in life until they make it so. I intend to help world evolve into better than today with my skills. It's what drives me. I'm idea hunting and critical thinking every two weeks on what I can do to better even small group of people, maybe other developers, maybe some employees at a voluntary organization. I'm trying to be the best possible version of myself and that keeps me going.

And after this marathon I've started step by step recovering my humane-side and social life as well. Knowing that I did what I had to when it mattered to better myself immense joy to me. I hope you too can feel it.