Normally it is 1 of 2 ways
60 min phone screen 90 min coding interview 60 min architecture interview 60 min culture interview 45 min final interview | 3hr/ 3 day take home project 60 min coding interview (may not be included) 60 min architecture interview 60 min culture interview 45 min placement interview |
It ranges a lot but in America, if you are just self taught, going into a 500+ person company, you would probably start at 65-85k right now if you could pass the interview. It's not uncommon to start at 100k now out of college if your coding skills are good.
Once you write enough code, you’ll start to see that you need to have certain guidelines to give it structure. It’s like how if you build a tower of dice straight up, it will be unstable. That’s why it’s called architecture, because it prevents the whole system from falling over under the weight of its own complexity.
Generally in the arch interview you will need to describe a standardized architecture in detail, and you may have to design an API.
You should know a little bit about MVC, MVVM and Reactive, regardless of your discipline.There are a bunch of other ones that are only applicable to certain fields, like Mobile development, which also has MVI/Viper.
This is an example of an MVC architecture with layering.
The only thing your degree will affect is whether you get that first screen or not, the rest is performance based
Interestingly you may be ignored based on recent relevant experience. If you have worked at a bank or in the government in the past you are really in a different field - they move very deliberately and slowly which is not great for profits.
Take-homes are more difficult than phone screens. They usually expect 3 hour take homes to take 1.5 hours to complete, and they usually expect 3 day take homes to take 4-6 hours to complete. The structure of the take home depends on which discipline you are applying for, eg data science will be far different from Android.
3 hour take homes have the clock start when you download the project - the longer ones are just an agreed upon time when you need to have returned it by. It can actually be longer than 3 days - usually they recommend you start it on the weekend.
Best to apply to places in groups if 3-4 so you’re not working on too many take homes at once
It is usually broken down into levels.
Level | Title | Scope | Duration |
L0 | Interns and contractors | Self | Improvement expected within 0.5-1 year |
L1 | Junior Software Engineer | Self | Improvement expected within 1 year |
L2 | Software Engineer | Team | Improvement expected within 3 years |
L3 | Senior Software Engineer | Team | Indefinite |
L4 | Staff Software Engineer | Pod | Indefinite |
L5 | Senior Staff Engineer | Superpod | Indefinite |
L6 | Principal Engineer | Department | Indefinite |
Generally as you get more senior you get more specialized. You are expected to be continuously learning to stay up to date with the field - this is harder in some disciplines than others. Most places will have development training and a “league” type initiative, where people from the same role meet to discuss new technologies and techniques.
With the pandemic, most places are now open to fully remote. The major hubs are San Francisco, Boston and Austin.
I think it would be a good idea to have a certificate of some kind, because it shows that you’ve had at least a little formal training in the field. Unfortunately you need to impress HR first - engineers will be able to level you effectively regardless of your certificates. Boot camps are effective, so they are no longer looking just for degrees.
Yes. You can also list github projects on your resume. Most jobs will require a Linkedin and Github link. You don’t need to go overboard, but there should be at least 1-2 projects in there with a Readme. Some places check it out in depth, but most just check that it’s there and you’ve actually put code in it
Discipline | Languages |
Web development - UI/UX/Front end | JS, Typescript, HTML, CSS, SASS, SCSS, React |
Web development - Back end | Python, Ruby, Java, Node(JS), cloud technologies (AWS/google cloud/Azure) |
Web development - FullStack | Backend + Frontend |
✨Android Engineer ✨ | Kotlin, gradle, Jetpack, XML |
iOS Engineer | Swift, Xcode |
Hybrid Mobile Engineer | React Native (JS) OR Flutter(Dart) |
Data Science | R, Python, Julia, Jupyter Notebooks, Tensorflow / Pytorch. Focuses on either data exploration / data mining, or model creation (like the AI that does visual search) |
Database Administrator (DBA) | MySQL, Postgres, MySQLServer |
Game Development | C++, C#, Rust |
Information Security (Infosec) | C, Bash/sh/zsh, nmap, linux, curl, JS |
System Admin / Network engineer | ((Windows/Powershell) or (linux/sh/bash)), perl, python, package managers. |
Platform Engineer | Bash, gradle, package managers, CI/CD providers Writes the stuff that allows code to run |
Quality Engineer | Focuses on testing frameworks within one of the other disciplines |
Developer Relations | Focuses on FAQ / tutorial content on one of the other disciplines |
Financial Technology (FinTech) | Focuses on payment systems for one of the other disciplines. Usually a combination of security / fullstack. |
Search Engine Optimization (SEO) | JS, HTML, XML. Focuses on getting web pages onto the front page of google |
Analytics and Intelligence (AAI) | SQL, python. Focuses on writing dashboards / graphs that inform business decisions. Close to data science. |
rust, c and c++ are "systems level" programming languages, which means they have no training wheels and sometimes very strange syntax. It is easier to move up than down when it comes to languages, so starting from python and moving down will be tricky.
C# is a good alternative because it is used in engines like Unity, and it is somewhat high level.
The other things to think about are pay and crunch time. Game developers are paid very little comparatively, are frequently laid off after they finish releasing a product and have to work up to 60 hours per week right before launch.
Seems like starting pay for a junior dev would be somewhere between 35-65k
Compilation = taking source code and translating it into a lower level language
Ex Java -> JVM ByteCode
Ex C++ -> X86 -> Binary
Transpilation = taking source code and translating it into a same-level language
Ex Typescript -> Javascript
Types of compilation
Ahead of time - embedded or binary code gets saved into a file, then that file is run, ex C
Just in time - code is compiled as it is run, ex Java
Interpretation - the code is directly interpreted without being compiled, ex Bash
Level | Examples | Why |
Top | Scratch, drag and drop editors, Excel | Sometimes writing actual code is too much setup work, say you want to do arithmetic on a list of values for a single report - do that in excel instead |
High | Python, Ruby, Bash, R, JS, Typescript | Applications that need to be changed frequently / highest safety |
Mid-High | Kotlin, C#, Java, Julia, Swift, Dart | Business applications that require more safety than speed. Things are less likely to crash but they run slower. |
Mid | C++ | Compatibility with microsoft products / C with more features |
Low/System | C, Rust | C = Speed over safety. The fastest language, but crashes a lot unless you know exactly what you’re doing. Used for writing operating systems |
Embedded | X86, ARM, WASM, ASM, JVM ByteCode | Ultimate speed - used when writing operating systems. 1:1 translation to binary |
Machine | Binary | The thing the computer actually sees |