1.) Graduated valedictorian from an A Ranked School and being captain of the Programming Club at 17 years of age.
2.) Graduated Summa Cum Laude from MIT with a Bachelors in Computer Science, minor in Mathematics in 3 years.
3.) Became an intern at Google which converted into a full time role after a year.
This story, as stereotypical as it may seem, is not the be-all when it comes to the background of software engineers. Some of the largest names in the game (Bill Gates, Steve Jobs, Mark Zuckerberg) did not finish college yet led/lead wildly successful careers in tech.
However, the tech scene is competitive and if you don't have the right skills or package them the right way, you may find yourself at the bottom of the pile. What if you don't have any skills yet? What if you can't go to a traditional brick and mortar school? What if you don't have any connections? This post is to provide some suggestions for those who find themselves to be the underdogs of the interview process.
The road to being an engineer is a winding road of topics, technologies, projects, collaboration, etc. As an engineer, you will never stop learning. There will always be some new tech on the horizon, some new pattern that's better for creating applications, some new build tool that automates the process better. With that comes the responsibility to continue to hone your craft and add new tools to your toolkit.
Now, at the beginning of journey, making a selection as to what kind of engineer you want to be can be quite daunting. There are Software Engineers, QA Engineers, Test Automation Engineers, Dev Ops Engineers, Data Engineers and many more. It may serve you better to figure out what you want to build and break that down. That can help to build out a pathway of learning.
Future Engineer: I want to build the next Amazon.
Let's break that down:
Amazon is a
web site. It is an
e-commerce app. It has a
catalog of items. For this goal, I can see a couple of skillsets that would be useful. Web Development, Database Administration, API development, just to name a few. Those are possible pathways to pursue.
With so many avenues for education out there, it can be quite daunting to figure out what works best for your situation. There are universities and colleges, MOOCs, Bootcamps, Meetups, Books, one-off online courses, and many other avenues to learn how to build things using code. So which should you do? While I can't make the choice for you, I can give some sample questions that you can ask yourself to help evaluate which form of learning is best for you.
1.) Can I teach myself effectively?
2.) Do I need the structure of a classroom setting?
3.) Would I qualify for financial aid if I can't afford classes?
4.) Do I need access to professors or tutors if I am having trouble?
5.) How much schooling does my schedule allow for on a weekly basis?
6.) Do I need the assurance of a degree or certificate once I finish my training?
7.) Can I pace my own learning or do I need someone else to pace my learning?
8.) Do I have uninterrupted study time at home or would I need to leave to go to an establishment?
9.) Do I have good enough software or hardware at home or will I need to use public facilities?
10.) Would I be comfortable seeking work myself after my schooling or would I want assistance from my educational establishment?
Of course, there are pros and cons to every type of schooling. I have created a chart from my own personal experience:
|Universities/Colleges||Receive Degree. Most expected way to receive education.||May teach out of date techniques and technologies. Expensive. Takes a lot of time and a long time. Necessity to take unrelated courses.|
|Massively Open Online Courses (MOOC)||Self paced. Taught only what's relevant to track. Open to anyone who can access. No entrance exams. Relatively inexpensive compared to college and bootcamps.||Limited help when trouble arises. Need to be able to teach yourself. Homework can be lacking. Most likely no certificate for completing.|
|Bootcamp||Consolidated track that still has access to teachers and tutors. Being able to meet other students. May provide certificate of completion. Less $$ than university.||Very condensed program means a lot of time in classroom per week. May not be as respected as College or University. Can be a challenge finding a good one since so many are out there. Inflexible schedule. Can still be expensive for some.|
|One-Off Online Courses||Self paced. Often has student community online. Usually inexpensive. Frequent course updates. Large catalog of topics to learn. Reviews for courses to aid purchasing decision.||Large amounts of variance between courses. Pre-requisites are not always well defined. Must be able to learn in the provided format.|
Show us! Build, dangit! Build like you've never built before! Software development is very interesting because it's one of the few industries where credentials don't really mean too much if you can't prove in the interview process that you can do the work.
It helps immensely if you have some public code or artifacts from said code to share with whoever you are interviewing with. That being said, what should you build? Glad you asked! There are many initiatives that can help if app ideas are lacking.
1.) 30 apps in 30 days (or a variant of that)
Use web search and social media to your advantage. Many people have done the challenge of developing a certain number of apps in a certain number of days (i.e. 30 apps in 30 days) and have documented their journey of doing so. You can take a look at some of the app ideas they had and try your hand at the challenge as well.
2.) Open Source Projects
Many large companies put their code out there for contributors to help out with. GitHub, Microsoft, Facebook, Elastic, Mozilla, etc. These companies have projects that are out in the open with issues being tracked to help those looking to contribute to discover them.
You can also join communities of different projects by looking the project up and finding where they congregate. Could be via IRC, Slack, Discord or other.
This repo is also a good one for finding a project for a good first pull request.
3.) Blog about it!
Tried a new approach to building a web app? Write about it. Spun up your own CI server using a tutorial? Write about it. Finding your college coursework underwhelming? Write about it. If you are doing something of interest....what should you do? Write about it. See how that works? This will help you retain what you learned, articulate yourself better, etc.
Once you have put together a portfolio of work that you have done, articles that you have written, projects you have contributed to it's time to start interviewing. In your interviews, you will likely be able to call upon your experiences from building things, blogging things, etc. Even if some interviews don't end in an offer, take those interviews as opportunities to improve. Ask for actionable feedback from the interviewers. Work on exercises that feature the concepts from the coding interviews. Most of all, keep at it! Persistence and refinement through iteration will definitely yield results.
The road to a job offer can be a challenging one when you have no experience. It's hard, but doable. I have shared a few tips on how to bridge the gap between inexperienced and Jr. Developer. If this helps even one person out there, I consider this late night write up a success.