wesbos / ama

Ask me anything!
282 stars 30 forks source link

How to get into first JS dev job? #148

Closed toothless-coder closed 7 years ago

toothless-coder commented 7 years ago

Hi Wes.

I have noticed that almost every dev job requires some sort of experience with a latest framework or two. I only know vanilla JS and a little bit of jQuery. I'm trying to catch up with recent trends, but there always seems too much to catch up to. I'm not new to programming and has experience writing C, C++ for embedded systems.

What approach would you suggest for a college grad (not CS) like me to get into first dev job?

Thanks.

wesbos commented 7 years ago

Ohh - good question. The funny thing about me is that I've never had a job, so I can't really give advice here. I always always freelancing/consulting, so as I took on more ambitious projects, my JS skills got better.

Maybe I'll ask some twitter folk to chime in with their thoughts because I'm not sure!

folks?!

MylesBorins commented 7 years ago

biggest tip I can give js to find an advocate for you internally

this can be a friend, someone from the open source community, a connection at a meet up, or even a truly dedicate recruiter.

navigating the process without an internal guide is not only anxiety inducing, it is nearly impossible.

the interview process will always have subtle differences, your advocate can help prepare you.

if you have experience in programming and are humble about coming in a junior role an advocate will make all the difference.

another important skill is knowing how to collaborate. git is platform and tool agnostic!

antonioyon commented 7 years ago

Frameworks will come and go but understanding how to use vanilla JavaScript will always keep you employed. Contributing to any open source JavaScript project will earn brownie points for many hiring managers.

jkup commented 7 years ago

Hey!

I wrote up a bit about how I got my start here! https://github.com/jkup/ama/issues/1

As for advice, I think the two best places for beginners are consulting firms and small companies. Consulting firms allow you to work on a wide range of projects (so you can find what you enjoy!) and smaller companies are more often willing to invest in training.

Honestly, as hard as it sounds, I'd try to avoid learning the trendy stuff (frameworks, tools, etc) in favor of the general context stuff. Learning a fair amount about JavaScript the language, learn version control, a bit about HTTP requests, CSS and HTML. That sort of thing. That basis will give you a great jumping off point with any job!

ClemMakesApps commented 7 years ago

I would recommend contributing to open source projects as that was how I jumped fully into a JS position. Some open source projects (Like https://gitlab.com/gitlab-org/gitlab-ce/) have coaches to help guide you when you get stuck, so that is very helpful if you need that kind of help

bkbooth commented 7 years ago

I actually got my first JS job through a recruiter. I cringe a little at the thought of recommending the recruiter approach because now with a bit of experience I get so much outreach from recruiters and it's mostly just background noise to block out. I just happened to totally luck out with the recruitment company that placed me in my first JS job, they're a great company and I know a bunch of them personally and most of them are former devs. Hard to believe but there are good recruiters out there! I've moved a few times since that first job, but I'm actually now in another great job where I was placed by that same recruitment company.

As far as what to learn, most important is to stay on top of JS and be aware of frameworks without having to dig into all of them. A decent company will know that you can learn framework specifics on the job.

imjoshdean commented 7 years ago

If you are well versed in vanilla JavaScript, you will probably be fairly okay. Companies worth their weight in salt will recognize that you have a core understanding of the underpinnings of whatever framework you are utilizing and invest in you spending a bit of time training up on how to use whatever popular JS Framework they are pushing at that moment. After that it gets a lot easier.

JavaScript frameworks are kind of similar to different languages. The more well versed you become in them, the more you understand the various patterns that each of them employ and the various nuances that give them various perks. For example - if you know C++, learning Objective C is not a terrible endeavor. If you know Java you can probably learn C#. So on, and so forth.

Various popular (and less popular) JavaScript frameworks kind of all work off of the same principles. Each have their own nuance or quirk to them, but most of them have very similar goals. If you wanted to take time to learn something on your own - React or Vue.js would be smart picks given their meteoric rise in popularity.

Contributing to open source frameworks that look interesting to you is a good start. I started doing debugging and bug fixing for jQuery Mobile before moving into JS development as a full time thing and I think it helped when I didn't have a lot of other experience to show for my skills at the time.

Also just building interesting (to you) pet projects helps your own learning as well as demonstrates your abilities to utilize different JS technologies.

jonlow commented 7 years ago

Probably sounds obvious, but I think the best way to upskill and demonstrate capability to potential employers is to build 'something'.... and 'something' can be a project that only takes you a handful of days. As long as you can demonstrate to an employer that you're keen and have some problem solving skills .... you're half way there.

A few years ago, I hired an 'ex-architecture' student who was moving to web dev. He came to the interview with his small portfolio site that had some nice javascript interactions he coded. All he did was walk me through his code and thought process, and I knew this guy was going to be a winner. He's now one of the best developers I work with.

jonmajorc commented 7 years ago

This is a very good question and I am glad it was asked. Companies don't always have a good understanding of what to expect from a front end developer. Laundry list items I have found are unreal from non tech companies, but don't be discouraged and not apply. Portfolios are always helpful no matter where you go. You don't need a job to get started on building your portfolio, so I would suggest doing that if possible. Vanilla JavaScript is very important to understand and many developers skip this and go straight to a framework. You definitely seem like you're in a good spot with knowing vanilla javascript and other languages!

hsubox76 commented 7 years ago

I went to a bootcamp (Hack Reactor) which really helped a lot. I don't think anyone needs a bootcamp unless they are very time-constrained (I was) but it really can help to focus and learn efficiently. The things that takes the most time often aren't actual learning, but (1) figuring out what you need to learn and (2) finding good resources on those things. You can go down a lot of dead ends which may not be wastes of time in terms of personal growth and lateral thinking and broadening your experience, but don't accomplish a lot towards the narrow goal of finding a job, if that's what you are currently focused on.

I found the program saved me a lot of time by giving me a list of things to learn, some of which I wouldn't have thought of (security, database schema design, etc), it gave me a lot of good practice in interview algorithm questions, and made it easy for me to build ambitious projects in a team, and as other people have mentioned, showing projects is important. There was also a lot of coaching specific to finding a job, from cover letters, to mock interviews, to negotiation.

I'm not saying anyone needs an outside program, but if you don't have one, you can copy a lot of its benefits if you create your own little program that mimics some of it. Make your own curriculum - a list of things you think you "should know something about" and maybe how deep you feel you want to know each of them. You can run the list by other people in the community, and they will probably be able to give you more specific input on a list like that than on a broader question of how to get a job. Come up with a small project you can do for each of those things, like if one item is "learn React" your project could be "make a basic React todo app". If one thing is "understand callbacks," then for your project, you can maybe implement some lodash functions from scratch.

If any of your mini projects seem like they're very fun or impressive, then think about how to expand on them into something that might impress people. Put them in Github, and deploy them somewhere, and put the deployment url on your resume.

Basically, a good bootcamp is good (but bad bootcamps are very bad) but you can also steal some ideas and be your own bootcamp, if you aren't in a time crunch.

sfioritto commented 7 years ago

Loads of people are going to tell you the best way to land a new gig is to prop up that resume with some open source commits and a side project or two. This helps, 100%, but with a little thought you can get a lot more bang for your buck.

Landing the first gig is always tough but honestly so is the second and the third, etc. It isn't until you've been around for a while and enough of your friends and coworkers have gone to other places that it gets easier to get a gig because you can just reach out to your network.

But even then there are some pretty big problems, namely you tend to get boxed into roles you may or may not want and on top of that all the hard work you put into building a reputation at your previous job gets tossed out the window. Nobody at the new gig knows who you are and what you're capable of so you're basically starting over.

There is a way around this, something that I've noticed in the past and that I've been doing for myself recently that gets around this problem. I call it a portable reputation and I think it's the best way to get a job whether it's your first or 10th. The key is to knock out a side project or two that people actually care about and that ideally you care about too. Then when you do land a gig they know who you are and they know what you can do and you have a lot more say in what you end up doing in your new position.

I wrote a three part series about this topic and did an interview with some folks with very successful careers that you might find helpful. Good luck!

http://www.planningforaliens.com/blog/2015/01/15/github-ghost-towns/ http://www.planningforaliens.com/blog/2015/01/27/github-ghost-towns-2/ http://www.planningforaliens.com/blog/2015/02/04/how-to-ship/

jayfallon commented 7 years ago

tl;dr: learn one language, be very good at one thing, decent at three others, always learning the stuff, don't get caught up the in hype of shiny trinkets.

College grad, non-CS here, I've been a developer for awhile now. I started out like Wes, front end guy, all HTML and CSS back before there were any frameworks to speak off. Unwittingly, we built our own, but sharing wasn't a big thing and people like myself relied on NukePHP, Wordpress, Mako, etc. to power the back end and every once in awhile you'd get a job that needed modules beyond that and you'd beg, borrow, steal some code or learn to hack it yourself.

Getting my first, real full time job at a development house came by luck and reputation. I convinced some agency to place me to do HTML/CSS work at a client and I parlayed that over the next six months into a decent portfolio and a reputation for someone who could do that kind of work while being wholly ignorant about programming. I developed a relationship with a vendor and when the one place let me go, I went to work for the vendor and stayed there for 6.5 years. Now I either freelance, consult or contract. It suits me better and I do 50/50 design and development so I have options there. Getting there took awhile and while I never got a job at the big-name funky places I've done pretty well for myself toiling at the anonymous shops. You just have to take every unknown as an opportunity and work it.

First jobs are always the hardest. Imposter syndrome sets in as soon as you read the first task requirements, you fear that someone will “discover” that your experience isn't what you claim it to be or maybe the stress of being in that position isn't something you can handle right away, but that's all normal and happens to everyone, especially when they're breaking into the business and they they think every move they make is being scrutinized by three master developers who can't wait to hate on you.

And that feeling kind of stays with you until you've been doing something for so long that it becomes second nature. Then you start to develop an imposter syndrome based on your team leading and management abilities. It's good fun, but those people looking at your code are generally doing it with the best intentions and they make get annoying now and again but they're your lifeline and it pays to listen to their advice and do things the way they ask them to be done. If they're not then you're working with jerks and life is too short for that. Not everyone can walk away from a job but planning to walk into a better once is something you can always do and be thinking of.

Things all changed when Rails went bonkers ~'06 and has been like that ever since. Before they'd ask you if you were a Java or .net person and now it's like, which framework of the week do you use? We never had those types of conversations because people wanted to hire a developer who could write code in a couple of languages and was smart and malleable enough to be able to jump in and help out on anything, learn a new system/framework/product or whatever. I worked at a medium sized consulting firm with a lot people like that. We knew what we knew but we stayed flexible and ready to accommodate whatever platform the client had chosen for the job.

I understand it's tough and probably scary to walk into a shop and be judged on what you know based on a business decision they made about using Jorpys.js when you've been trying to learn React. Well, my last gig lasted two years and when I got there they needed help converting legacy JavaScriptMVC pages (like a lot of them) to Anjular.js and when that was done I worked on two teams simultaneously working with both React and Polymer as an internal competition to see which would be the one we'd convert all the Angular pages to. I steered them away from Meteor, thankfully and they figured it out in the end. But the thing is, all those folks could program something and it was usually javascript. Older folks had Java, Python, etc. skills but the point is that if you can program in the language, the framework, toolkit, module, library or whatever doesn't matter. You read the docs and you learn through trial and error and talking to people online or better yet, in person.

The skills you'll need to break into the business are:

Constantly improving your skills is survival in this business. I'm currently doing Python, Swift while keeping up with my daily work and trying to work Elm in there somehow and doing Wes' courses. This includes learning all sorts of non-core stuff like GraphQl, deployment tools, data mining, machine learning, etc. and the list of modules Wes talks about whose documentation I'm now going to read. It never stops and once you figure out that knowledge is key, the clients/bosses/coworkers start coming to you at the planning stage to get your advice instead of at the ticket stage where you're just a robot implementing feature-like code snippets that can pass a sniff test.

Hey I've been rambling, thanks for reading if you made it this far!!

ryanbsherrill commented 7 years ago

This is a great topic. I have a few friends that are high level developers and engineers, and I think needing to know all the frameworks is a bit of a myth. Sure, if you're the absolute best at them you're gonna stand out, but it's more likely that your resume will end up looking very similar to the next ten candidates. One of my friends literally mastered computer science and is a top machine learning engineer at a top 5 company. The other is a former musician that liked design, mastered front end skills w/ just vanilla JS, HTML, and CSS (as many people here have suggested) -- and is now being aggressively recruited by 3 out of the top 10. Wildly different cases, but both include the word mastered.

That being said, I think that knowing C++ could be a huge advantage for you -- if you choose to treat it as such. Companies like Google and Facebook or whatever are going to be much more likely to take a second look at a candidate who has mastered a low level language and has a solid understanding of how ALL web tech works. As you may know, the V8 engine (that powers Node and the Chrome browser) is built with C++ and C. The Unreal Engine, Electron (creators of Atom), basically all of the power tools of technology are built with lower-level languages. If you've mastered this tech, you're probably not going to have too much trouble learning anything that's been built on top of it. This is why every company still puts the Bachelor's in CS under required, even though they don't necessarily mean it. What they really want to see is that you have a passion for it -- that you love it and are truly invested in it.

Perhaps you should consider taking your C++ skills to the next level w/ some self-training. This would immediately open you up to many opportunities that people with only web dev skills won't even be able to (or want to) apply for. You're always gonna have to learn a new thing -- that's pretty much half of your job as a programmer. Having an core understanding of the why and how is likely to serve you better than surface-level experience with a hot new framework that might be replaced in a year or two. This is especially true if there are 30 other candidates lined up w/ the exact same skill set, that have chosen to focus on and master pure web development.

Obviously, this is just my opinion, so take it for what it's worth. I just thought I'd weigh in since it's such an interesting topic (one which I've thought about a lot myself). Full disclosure, I also started out w/ C++ and CS, and I'm hoping to do the same thing I just suggested to you -- as it was recommended by both friends I mentioned earlier.

To go completely off the deep end: Some people are gonna write game changing Richard Hendricks algorithms and some are going to create beautiful interfaces like Dinesh. Others will save the world from cyber attacks like Gilfoyle, but most will probably be a lot like like Bighead or the brogrammers. Every person brings unique skills to the table, and that's what's great about it. Don't worry too much about what others are doing. Just follow what YOU love and go all the way with it. You'll have more fun doing it, be way better at it, and have a higher chance of ending up where you're supposed to be. Anyways, all the best on your journey. Not trying to preach -- just encourage. C++ 4 LyFe!

-Ryan

kevinlanglois commented 7 years ago

Maybe, just, apply here http://jobs.humi.ca/job-board ? :)

johnfoderaro commented 7 years ago

Echoing one big piece of advice that everyone else basically touched upon: become an expert in vanilla JavaScript and learn as much as you can about the DOM, Node.js, etc. Learn these fundamentals and ANY JavaScript framework/library will become near effortless to pick up and learn.

From there, build out a few portfolio items that are simple projects that demonstrate the above knowledge. You'll land your first gig in no time!

hew commented 7 years ago

Hacked OS until someone noticed! (Along with networking, actual interviews, crash-and-burn love coding, etc).

foo-baar commented 7 years ago

My thoughts:

Depending which part of the world you live in (off-course) but there are exceptional high number of jobs now in market for a core developer (specially a full stack one).

Just being good with JS alone could also put you in agile/scrum teams, which typically has a front-end, a backend & a DB guy, all works individually. The fight is little hard to step in your foot there.

However from my 10 years of experience in the industry I may support the idea of having an (at least) mid scale working knowledge of any back end framework (.net MVC, Sprint, node, PHP) would really push your profile up.

Last tip: Keep trying, Keep applying without been demotivated, you never know where your legos fits in & when :)

Swizec commented 7 years ago

I've written about getting US jobs before (both remote and by moving into the country), but I don't think I have a definitive article to link to.

Here's a summary of what I've learned:

1) When somebody searches your name, they should find something. You're from far away, you don't pass credential matching because you didn't go to a school they recognize, you are often out of their network.

A google search of your name should say "This person is great. They do cool shit and they know how to communicate".

2) The biggest fear US employers have with hiring foreign engineers is communication culture. Will you know what they mean when they use idioms? What about colloquial language? Most foreigners I've worked with struggle here. They are fluent in English, but they aren't culturally fluent in English.

You have to be able to communicate with nuance and clarity.

3) You might have to settle for the so called immigrant tax at first. If you are remote, you won't get paid as much as you would living in San Francisco or New York. Working with you is a bit of a pain, especially if timezones are involved. To compensate for the risk of being able to tap you on the shoulder and talk to you, you'll be paid less. You will likely still be paid handsomely depending on where you are.

Don't get me wrong, making 4x or 5x your local median is still amazing. ;)

If you do get to move to the US, you will likely still be paid less than the mythical "Facebook engineer straight out of college making $300,000" figures you hear on the internet. You can get there, but your starting line is waaaaay in the back. Be patient, work hard.

4) Another thing US employers worry about with foreign workers is culture. Americans have a strong culture of "If you see something, say something". Disagree with your boss? say so You think you're being asked to build something stupid that will hurt the business? say it

Many cultures around the world are very strong on deferring to authority. You always say yes to whatever the boss asks. Americans don't like that. They want to hire an expert, someone who can help them make decisions and drive business goals. People who say "yes we can do that", then spend 6 months failing to do it, are not appreciated.

You'll notice none of what I say talks about technology. That's because US engineers are no better or worse than engineers anywhere else. They just get paid more because the companies they work for make more money so their marginal value is higher.

If you're making a living as a software engineer in eastern europe or india or africa, you're already good enough to work for a US company. Do it.

PS: HN has a monthly "who's hiring" thread. Hundreds of jobs are posted every 1st of the month. If you email everyone each one of them where you are a fit, I promise you'll get a job.

wesbos commented 7 years ago

Thanks for everyone's insight on this thread - super valuable!