# Some thoughts on webdev/career stuff
Hey Tim! I'd be glad to offer my take and I hope I can be helpful. I know everyone's opinions differ on this stuff, but I'll try to hit some general points.
Also, some (hopefully not all, haha) of the stuff I write out will be stuff you already know, I hope it doesn't come across as condescending - I'm not sure how much you do/don't know, so I'll just say it all.
Also, a few of my friends have asked me for tips in the past, so I already have a lot of stuff below saved, I'll just send it all to you :thumbsup:
#### 10 second summary about me cause context or whateva :chicken:
Hey so I'm a front-end developer and I've been working for about 5 years "professionally" but have been coding on/off for fun since 2012ish. Studied compsci at UMD but dropped out :wave: so no degree. At my current job, I work primarily with React and SCSS and some Go (aka Golang). At my last job at Nulab, I worked with VueJS, Go, WordPress, Hugo, and some other random stuff, but I won't go into it unless you're curious - let me know. I've helped to interview like 10+ candidates over the years, and have helped with both front-end questions and systems design rounds.
#### Overview
There's a ton of questions to answer when trying to get a job in this field:
- what tech do I learn?
- front-end? back-end? or more specialized "software engineer"?
- where should I apply?
- how do I prepare?
- what are interviews like?
- what can i expect in terms of salary?
- etc x 10000
## Overview
A good first step, I think, is to decide whether you want to be a web-based engineer (aka front-end or back-end) or a more specialized engineer (machine learning, game development, app development, "dev ops", network security).
Your decision isn't final (you can always job hop later on) so don't stress too much on this, but I think it'll have a big impact on the rest of what your strategy should be, since the tech stack/salary/preparation looks fairly different for a front-end developer vs a game developer or mobile app dev.
For the rest of this I'll stick to covering front-end and back-end stuff, since I know those better than specialized development positions.
Front-end development has a massive visual component: you have to be mindful of how things behave on the browser's page, how the application's states change between user's clicks and hovers, how designs change based on screen layout. If you like being able to interact with what you're working on, and/or you love visually dealing with color and design, give front-end a try. Primary languages are Javascript, primary technologies are React, Vue, Angular, Node, HTML, SCSS.
Back-end development, at a very very high level, is largely concerned with managing data. You'll have to think about database modeling and normalization, scalability, data types, packaging data to send to the front-end. Common languages are Go, Java, Python, Ruby, and Javascript.
Both front-end and back-end have to think about basic software engineering principles, like DRY, APIs, REST, database considerations (to some level), security, optimization, scalability, testing, error handling, and more.
## A big dump of things to do:
I didn't go the usual route of uni -> internship -> job, so I'm unfortunately probably not the best person to help you with internship advice. I imagine internships arent even available right now because of COVID, especially. But, there are still ways to make yourself stand out. I think you should do basically all of the following if you haven't already, regardless of what kind of software job you're pursuing:
- Make a LinkedIn and polish it if you haven't already.
- If you're going for a front-end job, I would absolutely try making your own website (by hand-coding it, not via Squarespace).
- Do not be mistaken into thinking that the web design or fancy animation stuff comes first. The content comes first, 10,000%. An extremely common noobie mistake is making some super-colorful site that has zero content. Write a thoughtful in-depth bio about you, do not try to hide the fact that you're new by pretending like you're a professional but don't make it seem like you're a complete amateur either, otherwise the people who are in charge of hiring may have a harder time selling you as a hire to their HR. Your site should have a "projects" page where you talk about your work (Github alone isn't enough to show _how_ you solve problems), and maybe even write a blog post or two showing how you think through problems. This, to me, is VERY helpful. My site is here: https://kevinoh.me. It's not amazing or anything LOL but it gets the job done.
- Make a Github account, fill it out with a real photo and populate it with projects with well-formatted `README.md` files. If you don't know Markdown, learn it. The idea is to present a professional image everywhere you can.
- This is what I think really helps set a person apart: Do at least 1 "big" project in whatever language you can. Find some real-world problem and solve it to a non-trivial level. You can use an all-in-one framework like Django (Python-based), Angular(JS-based) or Laravel(PHP-based) or Ruby on Rails (Ruby-based) to make it easier, or you can make a PERN-style app too. If you already have a bootcamp project that's pretty legit, duplicate the repo and try turning it into a REAL project. Having one big project is more impressive than having 15 baby projects which is what a lot of bootcamp grads do. Also, make this project ACCESSIBLE to employers. If you have a website, create a dedicated page discussing this project. If you have a LinkedIn, add this project's Github link (or web URL, if you actually launched it) as a "Project" on your LinkedIn profile. Market your work too! Don't just keep it tucked away, but show it off a bit. Use Figma.com to create some branding images, like a logo for your project or something. It does NOT have to be fancy, but even simple design work can show an employer that you take end-to-end ownership of the things you make.
- Learn `git` through the CLI, not through a GUI.
- Absolutely learn terminal (bash or zsh is way more popular than something like Windows PowerShell unless you're going for .NET Framework work. I'd learn bash/zsh first.) If you don't have a Mac or Linux machine, I'd run Ubuntu inside of a Virtualbox. Unless you're learning `.NET` (which is not as common in the NYC area), I would try to not code on Windows. A Macbook Air is 100% fine for dev, and you can pick up a used one for like $600-700. In fact, it's what I choose as my personal dev machine because I hate the Macbook Pro's Touchbar LOL
## Resources
- The interview questions I had at various companies:
- > Make the game "Snake" from scratch using HTML/CSS/JS
- Create a function `getChildren(selector)` that returns a DOM element's childrens based on `selector`. Basically, code `document.querySelector()` from scratch.
- What is a closure in JS?
- What is the benefit of async/await in JS?
- Why might someone use Typescript over standard Javascript?
- What is the benefit of prototypal inheritance over classical inheritance?
- Describe a time where you solved a problem.
- In your opinion, what is one of the hardest problems you solved? What did you learn from it?
- Create a basic header using React
- Create a basic component in React, from scratch, that issues a GET request to some public API, it doesn't matter which, and then displays the response in an organized card-style format. (style doesn't matter as much)
- [Mock Interviews with people from key companies](https://www.youtube.com/channel/UCNc-Wa_ZNBAGzFkYbAHw9eg)
- [LOOK AT THIS RESOURCE FOR "ROADMAPS" ON BECOMING A DEVELOPER](https://roadmap.sh/) - It's opinionated but I think it's a good huge overview. Don't get discouraged by this btw, I don't know a ton of stuff on there but I've got a job :joy:
- For learning a new language's syntax, I first go to Codecademy.
- For useful, cheap courses, check out Udemy.com. I am very serious when I say that the $15 courses I buy here far, far exceeded my college courses in terms of quality and material coverage. It's also more fun and up to date.
- For job boards, look at LinkedIn Jobs, Indeed, and Angel.co. Angel.co (formerly known as AngelList) is a site featuring jobs specifically from START UP COMPANIES, and they show their salary ranges upfront most of the time. You mentioned you'd like a starting salary of ~$70k, I think that's a safe bet to start if you're really just trying to get your foot in the door, but some places are flush with cash and fine with offering $90k+ for an entry-level position, so don't sell yourself short! My first salary was at $60k.
- I'm a mod over at /r/webdev and r/web_design :sunglasses:! Come check us out [here](https://www.reddit.com/r/webdev) and [here](https://www.reddit.com/r/web_design).
- The subreddits above have a discord here: https://discordapp.com/channels/434487340535382016/640667408696344607 come chat! :frog:
- Regarding salary negotiation, [this single blog post](https://www.kalzumeus.com/2012/01/23/salary-negotiation/) is one of the most-linked articles on the topic. When I jumped from Nulab to my current work, I was able to more than double my very first entry-level starting salary and it's because I strictly followed a lot of the basic negotiating strategies outlined in that post. I highly advise giving it a read, even for your first job.
## Last notes
- A word of encouragement - hang in there, I know things can pile up, and COVID can slow your education right now, and it can all seem like a lot but you got this.
- I skimmed the surface of a ton of stuff here. I feel like I'm coming off as one of those buzzfeed "top 10 things you need to do" gurus, but it's only cause I'm trying to condense stuff down. I have plenty more to share: salary success stories, red flags with employers, beginner mistakes, specific advice on which tech to learn and not learn, and so much more, but I don't want to dump a 100-page essay on you out of nowhere so I'll leave it up to you to ask if you are in fact curious.
- This might come off as weird but you've got my word that whatever we talk about stays between us.
# I hope this helps. Stay safe out there my friend. :thumbsup: