I kept reading about how difficult it was to get a job as a self-taught developer, so I thought I needed to do something unique. I remembered a game where a Dow Jones stock graph started trending, and you had one opportunity to buy and one opportunity to sell, and the goal was to beat the market. The purpose of the game was to show you how difficult it was to beat the market. My idea was to make a game similar to that, but instead of the market, you would be playing against a machine learning algorithm.
So I created StockIT. I took a video tutorial on Pandas and Scikit Learn that covered multiple machine learning techniques. I originally wanted to do some cool deep learning techniques, but I realized that took massive datasets and more time than I wanted to spend. Instead, I stuck to a simple linear regression model. Getting D3 to jive with React was the hard part.
Both libraries wanted to control the DOM. There were some other libraries that helped to join the two, but I felt they were too bloated. Turns out, just like VCs, redditors are all about that machine learning. All the love from Reddit was a big confidence boost. People were playing my game and enjoying it! After StockIT, I rolled right into my next personal project. I wanted to make a job board that aggregated the smaller tech-focused job listing websites such as Stack Overflow, Github, and Hacker News.
To add my own unique spin to it, I decided to have it sort based on the technologies the user wanted in a job and how badly they wanted each of them. The listings would then sort accordingly.
I ran into various obstacles with this project and had to change course a couple times, but I ended up with a product I was happy with. Because of my issues, jobSort took up a decent portion of the month. I ended up getting coffee with a friend I had met at my first meetup, and he advised me to start applying for jobs now. I read all over the place that everyone says they waited too long to apply. In my head, I was going to work my way through my structured plan to build up my portfolio with personal projects, and then work on open source contributions, and then prepare for interviews, and finally start applying to jobs.
This friend convinced me to ditch that plan and start applying. So this month I made a portfolio and a resume. The following month I would start applying. This month I focused on touching up my projects and applying to jobs. I also wanted to learn testing and Redux. I added flexbox to CodeClub. Social to make it responsive.
I improved the mobile UX on jobSort. By the end of the month, I had applied to 63 jobs. I viewed this as a self-assessment. If so, what did I need to work on to prepare for interviews? On Hacker News, I used jobSort to determine which listings to apply for. On Indeed, I tried non-software companies to see if I could even get a call or an interview anywhere. Then, I decided to personalize my cover letter and resume, and then try to send an email to someone from the company.
This method was clearly better than the shotgun approach. I received five calls that month — two from recruiting companies and three from software companies that included:. I made it past the HR screen in two of these, but none of them yielded an onsite interview. I was pretty happy with the three calls, and I learned a lot from them. So I thought, easy. I am passionate and excited to learn.
What I learned from these calls, however, was that nobody was looking for a junior developer. I started this month working the night shift for a 40 day stretch at my full time job - 6 days a week, 12 hours a day, 5PM to 5AM.
I refactored jobSort to use Redux which was surprisingly not as difficult as I thought it would be. I listened to a lot of podcasts about it and read blogposts about it, and it never quite made sense to me until I started using it.
I really like the flow of data with Redux. This was supposed to be the month of open source for me. I was going to make my first open source contribution, and it would be a great contribution to a fantastic library. I was going to contribute to React!
Everyone said it was a difficult codebase to read let alone contribute to. But I needed to stand out, I needed to be unique. I would start by reading the docs all the way through and then pouring through the codebase.
Watch every issue, every PR. This was a gamechanger. It was right in my wheelhouse. The right difficulty, right amount of issues to help with, not too many collaborators, super helpful maintainer, clean well-tested code. On top of all that, it was a perfect solution to some issues I was having with my jobSort application.
About halfway through the month, I received an email from one of the companies I applied to in the previous month. They set up an initial phone screen, and then a technical phone screen. The technologies they were looking for were exactly what I had learned - React, Redux, and D3. I mostly just talked about my projects and why I made certain decisions. After this, they asked me to come onsite for an interview. My first onsite interview! It was a fairly straightforward challenge, but I was very nervous.
At first, I was worried about making sure I knew everything without looking it up. Since I thought I failed the pair programming, I felt relaxed for the rest of the interview. Ultimately, I left the interview with my chin up. Worst case I got some valuable interviewing experience, and best case I got my first job offer.
I ended up receiving my first job offer 9 months and 7 days after that first day when I decided I was going to dive head first into programming with the intent of changing careers. I ended up taking the offer, and I am happy with my decision.
I wanted to get paid to code! Up to this point, I have mostly shared my story with some advice sprinkled in. My current manager at Stripe reached out to me on LinkedIn. Do you have any interest? But I feel strongly that if there is an opportunity that seems interesting to you, you should at least have the conversation.
So I did, and it went really well. So then, I started to study. I did the interview. You do a phone screen interview, which is usually just one or two questions with one person.
And then you do an on-site, which now is just all virtual. But the on-site interview involves about five interviews. After that, you find out if you got the job or not, and then you go into negotiations.
I think the hardest part a lot of the time is just getting your foot in the door, getting your resume recognized. I definitely use LinkedIn to help me make those connections. There are definitely more open software engineering roles than there are software engineers. That gap will continue to grow unless we do a lot more to get more people educated in computer science.
A lot of people will reach out to me about their open roles. I have Lyft, Slack, and now Stripe all on my resume. And these are really well-respected organizations and institutions. I think I get a lot of inbound traffic because of these names that are on my LinkedIn, and on my resume.
There are a lot of open roles. But then people have unreal expectations of what a resume is supposed to look like. And of course the interviews are intense, as I was describing. Not everyone has the resources to prepare for three months for an interview. So there needs to be some bridging of those gaps there, in my opinion.
When you do have a ton of opportunities like that coming your way, how do you decide which ones are worth your time? I think it depends a lot on what you want to do. There are a lot of different kinds of software engineering. So when my manager at Stripe reached out to me, it was for a full-stack, more product-engineering role. I was doing a lot of infrastructure engineering at Lyft and was interested in what it would be like to work on a product team. Stripe is also just super well-known and has a reputation for being a good place for engineers and developers.
That was a particular combination that was interesting to me. But someone who wants to work on a lot of AI and machine-learning stuff might not be super interested in a product role at Stripe. There are all other kinds of factors, like what size company do you want to work at? Are you interested in a Google-size or a five-person startup? Slack, Lyft, and Stripe are all similarly sized, and have similarly sized engineering organizations. Valuations are in a similar realm.
They were all pre-IPO when I started working at these companies, which is something that I was particularly looking for. In the future, that might change. I might look for something completely different. And I think that I probably should at some point just to widen my range of experiences. I have a pretty clear idea of what I am looking for when I start a job hunt. Can you tell me a little more about all the different types? There are a lot of different types of software engineering. The basics are front-end, which is more like web development or what you see on your computer screen.
And then there are people who are full-stack, who do both of those things. A lot of developer tooling is considered infrastructure, things that keep the upper layers working. There are QA engineers, who test the quality of the things that other engineers are building. And they build automated systems in order to test the quality of products. I think the most difficult part is just learning the new technology.
The biggest thing you have to do is learn the new language and learn the new technologies. And there are a lot of resources in order to learn. There are Udemy courses, books, and online projects or tutorials you can follow to understand how to do something. I think the parts that are a bit more difficult to learn are maybe AI and machine learning because they require a very specific, more math-based education.
If I wanted to become a software engineer, what are the most important skills that I should be developing right now? Definitely building, testing, and maintaining software is the core skill set.
Getting your foot in the door and getting a job is a lot about developing those interview skills, which there are a lot of resources for developing those skills, as well. A big misconception is that software engineers just code, which is not true.
A lot of my job is writing documentation to explain things to people or communicate or pitch ideas. A lot of it is meetings where we figure out the direction of a particular piece of software or a product. And those all involve a lot of other skills that are not coding. That can mean mentoring people who are younger than you or just people who are new to your team. That involves getting people ramped up, helping them, answering a lot of questions, and being able to communicate your ideas.
And even with that, you definitely get people who doubt your skills, doubt your skill set, and undermine your work, which sucks.
A lot of navigating it, for me, has been my own internal work of staying confident, sure of myself, sure of my skills, my education, and everything that I bring to the table, even if not everyone sees that. How does your company think about or treat diversity and inclusion? Are there other people at the company who look like me who are doing well and feel good? It can be different depending on who you are and what you struggle with in particular. For me, I struggle with imposter syndrome.
And also it helps when I get some positive reinforcement. So staying confident and staying sure of myself has been a particular challenge for me in software engineering. That is an ideal that people expect out of engineers. And whether they figured out the solution or not, it does feel better to know that other people are dealing with the same things that you are.
I would suggest that for any career path, whether it be software engineering or not. Having your people, having your community, helps with any kind of struggle you may face. What should I expect to get paid in a software engineering role? It depends on a lot of different factors.
The Googles and the Facebooks will have the higher offers. But there are a lot of upsides when you think about equity and stock. It might look very different. I would recommend looking at websites like Levels. I would also say talk to your friends. There is also a range of self-directed learning opportunities to explore for those who prefer less formal academic options. For instance, learners can pick up necessary coding skills via free educational websites like Khan Academy and freeCodeCamp.
In a ddition to being cost-effective, these classes are designed to suit self-guided instruction and scheduling, making them highly personalized by default. But the flexibilities provided by self-directed learning come at a cost. While this approach may work well for some, those who are less self-motivated may find themselves falling behind on their upskilling timetable. Aspiring software engineers will want to accrue hands-on experience through volunteer work, personal projects, internships, and other practical work opportunities.
Practicing your coding skills outside of the classroom will allow you to pad out your resume, add items to your professional portfolio, and otherwise improve your standing during the job search. Not sure where to start? Alternatively, you can check out a few of the resources below for inspiration!
Want to maximize your chances of being chosen by employers? You may want to consider earning a certification. Being certified may help you rise above other applicants when potential employers sift through resumes. A coding portfolio is a crucial asset for all aspiring software engineers seeking employment. This comprehensive body of work is often the first impression job recruiters have of you. It is a great way to showcase your past projects, too; these can convey your versatility and general know-how as a work-ready software engineer.
As an interested candidate, your job is to provide as much evidence of your abilities as possible — so take time to build out your portfolio accordingly! When summarizing projects, be sure to include detailed descriptions of all technologies utilized, roles you served, and any other relevant information about your process and ideology. Start by mapping out your career goals, pinpointing jobs you would prefer based on your experiences to date; this will help you narrow down compatible opportunities early into your application process.
Update your resume, LinkedIn profile, and other relevant application materials to ensure that potential employers have an up-to-date snapshot of your skills and capabilities.
It is essential to remain confident and not limit yourself during this time. The sheer number of different roles can be overwhelming at first, but as you test the waters, keep in mind that your right fit is out there — it just might take some time to find it!
Software engineering broadly refers to the practice of building, maintaining, and improving computer software and networking systems. Software engineers, in turn, have extensive knowledge of coding languages, software development, and engineering principles.
This process is usually preceded by intensive studying of specified system requirements and limitations. While software engineer job descriptions will vary across industries and employers, most professionals can expect to share the same core set of responsibilities. These include but are not limited to:. As you apply to jobs, remember to tailor your resume and cover letter to the role specifications laid out in the role description!
The answer depends on you! The time required to become a software engineer will vary based on your desired academic route. For example, a typical college education, such as a degree in computer science, takes around four years to complete and spreads instruction out across seasonal semesters. The pursuit of a degree is a slow but thorough process, and graduation stands as a notable achievement. However, if you want to get started with a job in coding sooner and get valuable job experience while you continue to work toward completing the required skill sets of software engineers, you can also consider enrolling in a bootcamp or learning on your own.
Most bootcamp courses range from three to six months. During this time, instruction is often quick and intensive, focusing on helping learners build job-ready web development skills as quickly as possible.
Independent learners face the most uncertainty when it comes to establishing timelines. Generally speaking, motivated learners could teach themselves coding basics within a year or so — however, this span can grow or shrink according to their self-imposed schedule, availability, and aptitude for independent study. The enduring relevance of JavaScript makes the language a go-to by default; it remains one of the easiest languages to learn and is used by most major web browsers.
Python is another common language used primarily for back end development and data science. This general-purpose language is tailored to several different programming styles — such as object-oriented and functional — to aid in a variety of projects.
Like JavaScript, Python is known for being relatively easy to learn , but even seasoned software engineers should consider its offerings; ove r 50 percent of hiring managers PDF, 2. Google-developed Go has seen a steady increase in popularity since its inception. Java is th e fifth-most commonly used language among professional developers.
0コメント