- Learn fundamentals of your target subject/stack/language.
- Learn by building projects.
- Build in small increments, and test along the way.
- Document your projects somewhere potential employers can see them.
- Mistakes are part of the journey.
- Ask for help soon, take your pride somewhere else.
- Don't get stuck in tutorial hell, it is a bad bad place lol.
- Documentation is a sane way to come back to a project months later.
- Collaborate is essential nowadays, you learn things from more experienced people and occasionally from not so experienced people too.
- Do not stop googling things, I google the most silly things.
- Learn things out of your comfort zone, but do not go into overload mode.
- Just do it, literally, take the leap. You'll never know if you enjoy this career, if you don't start.
- Form your own opinions.
- Don't be afraid, we all started just like you at some point.
In order to understand a bit about my journey, I have to take you back to the 90s. Not going to lie I consider myself an introvert, in part because I had a tough childhood. My step father was a sales executive so there was a lot of traveling, I went to so many schools that I used to hate making friends. My father died when I was three, but before my mother remarried she was always working to make ends meet. She was very positive, always had a good attitude no matter what, and that transpired onto me, I am who I am because of her, no matter how hard or long it takes, get to the goal, mijo (my son in spanish).
Unlike most people involved in software around my age, I didn't own a computer until I was 24. I studied from elementary to junior high in Mexico, and didn't use any computers at all. My high school (US) had computer classes but it was for using programs like Microsoft Office, nothing related to programming. I look back on that, and I dislike that about my childhood. I see other programmers that had parents that embraced computers early on during their teenage years. I didn't really get serious about programming until my late 20's.
I joined the Navy in 2004 at age 23, and without going into too much details one of my many duties was the movie inventory. I had to schedule CCTV movie programs for underway deployments. At that time USS Donald Cook DDG-75 had 5-6 CCTV channels two for 8mm movies, the rest for Satellite which didn't work most of the time due to only having one sat dish. I was an Interior and Communications Technician if you'd like to know or ICman for short. The inventory was the easy part just pack 20 movies every month, fill out a form, and mail the package. We used to get movies before they were released to the public. Every month I would check in/out movies to the spreadsheet inventory and so I did for as long as I was there (4 years).
The problem though, was managing a sane movie schedule. One that people would actually enjoy on their leisure time if they had any. I had a couple thousand movies, and 300+ people to satisfy for 6 months. At one point we did played shooter for what it seemed ages as punishment, it wasn't my call by the way came from above. People would call in to my workshop and complain about the schedule all the time. Although I didn't know much about programming or web dev, I knew I had to figure something out. I was able to put up a crappy intranet website with powerpoint and then created hyperlinks for the pages, cough cough slides, but no one knew that. From the homepage it looked just like a website. Our IT security wasn't very good I literally went straight into the directory where they were serving our intranet website, put my own movie schedule link somewhere and the rest was history. Learned most of this underway with no access to google.
Here's the cool part about the site, I created a movie trivia page where people would guess a movie based on a screenshot or a phrase of a movie, kind of like the game Scene It. They would email me or call-in the answer and I would open a movie slot in the schedule for them as a reward. I probably should have put a site counter but I was naive. Nevertheless everyone would come and tell me how cool the webpage was, literally everyone including chiefs, and even officers. And of course wanted to know if I would run the website in the next deployment. I received two Navy and Marine Achievement medals in 4 years which are given for excellence and accomplishments unrelated to my movie site of course, but to me the greatest success in my Naval career was that website, it was just priceless.
I knew I wanted to do something related to programming, but I needed to pay bills. I went the easy route and got a job related to my Naval training, electronics/electricity. Luckily my path with programming didn't veered off. A few years later I ended up in Industrial Automation. Having a family and a full time job made it difficult to use my GI Bill benefits for college. From 2008 until today I have been learning anything about programming, software engineering, design, you name it. I did take some classes here and there but I could learn faster on my own. Classes turned out to be boring and easy to me. I do intend to get my degree since I have benefits left. Hopefully I can enroll in 2020.
I read about tutorial hell, and that was me 1000%. Learn the basics of programming, and I do mean the basics. If you start with C++, learn how to write, compile, etc. Or if you are doing web dev, learn html, css, and js. Whatever it is you want to learn, just spend a few months learning, I would say no more than 6 months but everyone is different so take your time if needed. The tricky part is knowing when to quit learning, but here's the trick you'll never feel like you know everything no matter how many books you read or youtube tutorials you watch. By the time you're done with 20 books, another 300 new books are published on the same subject. You finish one book, and then feel like you are lacking in a certain area and go look for another one (recursion). It is difficult to quit, but you must do it because if you don't you'll never grow.
After my Navy career I was young, and dumb. In the early 2000's youtube, google, github, etc, weren't as huge as today or maybe I didn't look hard enough for resources. As a self taught I had no idea where to start. I bought some books for making games in C++, but they were too complicated. My mistake was not joining a forum, or asking online for help on how to get started. The other mistake was trying to learn programming while making a game, it proved too much of a task. Remember to learn the basics above all. Dev.to has been super awesome in my personal growth there's tons of awesome writers here, and I've asked for help here occasionally too.
Knowing what I know today, I should have learned c++ basics, then graphics, then animation, etc. Progressive learning is what I call it, or is it successive. Also for whatever reason c++ was not the language for me as a beginner I couldn't hold on to it. So I quit for a few years came back to Java and things seemed to click easier.
If you are stuck in something definitely try to figure out on your own, but know when to ask for help.
Creating projects is the one thing you should never stop doing. After the website I created, I did a small C++ inventory program for parts in one of my jobs. I did it because I needed it. In fact any project you create, you are more likely to contribute or build if you use it or have love for it. The connection to the project is extremely important, well unless your paycheck depends on it.
These are some of the things you learn along the way:
- Patterns. We all know about them, but until you have to use one it really makes sense.
- Bugs. You'll encounter bugs, and how to fix them.
- Documentation. You'll learn how to document code.
- Boost your google skills by searching for answers to your problems.
- Experience, design architecture, and the list goes on and on.
All of these things and more you learn by doing, not reading.
Early on I didn't document much like I do now, so much of my early learning stages are gone. I find it useful to document projects especially if is something that you would use later on. Word Doc, Trello, Notepad, etc the medium doesn't matter just make sure is backed up so you can look back years later.
Whatever you, do collaboration is a skill in itself, just remember how awful group projects were in school :), you have an idea of how something should work, another person has another, maybe both ideas can coexist, maybe not. When collaborating is essential to communicate ideas clearly. As a self-taught I was very scared to go on github and collaborate, I would get lost on big repos. I would always think, they are going to laugh at my code. I have to say part of my growth in the last three years, is due to cool maintainers giving me direction when needed. So don't be afraid to ask for guidance from maintainers.
Google is something I do on a daily basis, so for example when I forget a git command I don't use often is quicker to SOflowit than looking at the man pages. If I am writing something and something doesn't feel right, I search on github for similar projects to look at patterns, ideas, much like graphic designers put moodboards together. Someone, somewhere, has done something similar already.
These days I am learning web dev which is outside my comfort zone, much of my programming has been in backend, command line utilities, and industrial automation, but I think in order for me to grow I have to build a few ideas I have rattling in my head. As a matter of fact one of my ideas is kind of cool, but ideas are cheap if not implemented at all.
At the end of the day you just have to go for it, the learning time might vary but don't let it extend too long 6 months, a year, no more than 2 otherwise you will get stuck in tutorial hell.
The easy way to get started is by having an idea. Getting the idea onto paper. Then brainstorm afterwards. It doesn't matter what the idea is, it just matters that you are passionate about it. In the beginning you should maybe create something from a tutorial but again your idea is yours and you have to start from scratch rather than following someone do it, so is harder but more rewarding in the end to start from scratch.
I will end by saying this, there are too many influencers pushing their opinions on social media on a library, or a pattern, etc. Don't use jquery, or react is better than [insert favorite framework]. Don't buy into the media hype too much when it comes to opinions. Try something for yourself, and form your own opinion about a framework or system, etc.
Lastly don't be afraid to make silly mistakes, otherwise you won't grow. Any developer that tells you they don't make mistakes is lying to you. Good luck to you in your endeavor!