Fundamentals
A community-driven web development fundamental skills project
Install / Use
/learn @iandouglas/FundamentalsREADME
The Technical Fundamentals Project
A lot of people have been impacted by a difficult hiring market in the tech industry in 2022 and beyond.
Whether you're a new graduate from a college, university, or code school, or even self-taught, the inspiration of this project was to help each individual practice a core set of fundamental skills by building a single project.
Leveling of the Skills
Primarily, this is meant to be a list of ENTRY-LEVEL skills, since I do a lot of career coaching with new graduates, and NOT meant to be an exhaustive list of things that a senior-level applicant "should" know to get a job later in their career.
However, I also use these skill lists whenever I want to learn a new technology. If I'm a middleware developer and want to switch from Rails to Django, I have a list of things I can follow to learn to implement. If I'm a front-end developer switching from React to Vue, I also have a list of core skills to implement. And so on.
For those coming out of college/university, you might not have some of these skills. Coming out of a bootcamp/program, you might have worked on a small part of a large team project and don't feel confident that you could individually build some of these things. And if you're self-taught, my hope is that this will be a guiding point of things to build and practice.
Table of Contents:
- The Technical Fundamentals Project
- GOALS
- The Fundamentals
- Community and Accountability
- Sponsorship & Community Involvement
What this project is about:
The heart of this project is merely the implementation of a set of core skills that demonstrate your individual ability to build something with these fundamentals in mind.
It is a checklist of ideas for you to build into a project, which you can maintain over time. It is tech stack agnostic -- aside from some front-end skills like JavaScript and HTML, the list of skills should not include specific programming languages, frameworks, databases, etc. no matter their popularity. You can choose to implement these skills in whatever tech stack you want, and you can choose to implement them in whatever order you want.
I want this to be a community-driven effort to support one another. Encourage each other to keep going when you are feeling discouraged or stuck. Help each other get past any hurdles that are blocking your progress.
What this is NOT:
-
This is not a group project, nor a group effort. YOU need to know these skills, so YOU can talk about these skills in your interviews, therefore YOU need to build these in an individual, solo project. If someone needs help, you should GUIDE them to the answer, not GIVE them the answer, nor write the code for them. You won't be there in their interview...
-
I don't want this to become a gate-keeping list that we see so often, saying "you must know these 50 things or you are not a competent developer/devops/qa." In fact, I want to avoid the word "should": you "should" know this, you "should" be able to demonstrate this, you "should" be able to talk about this. Every company will have different skills for which they are interviewing. They will need some of these skills found in this project, and not need others. They may need skills not included in this project, but you can always add those things later. If you want to take a "generalist" career path, you'll want to take a little bit from all of these disciplines.
-
This is NOT a project that I expect you'll put on a resume. You can certainly extend the project and use it as a launching point to start new projects if you choose. But if implemented as-is, it probably will not look too fancy, and may feel unfinished. That's okay. The goal is to demonstrate your knowledge of these skills, not to build a fancy production-ready project.
Pull requests welcome
I am very open to communication about things that the community would like to see on these lists, and alternate prioritization ideas. I just don't want the lists to become huge. Let's work to keep them simple, aimed at new graduates.
GOALS
I want to help people get jobs. Our tech industry is one where demonstration of your skill is a necessary portion of the interview process, as well as technical communication. By building this project, you will be better prepared to execute ideas in technical challenges and take-home assignments, and speak to the purpose of each of these skills as a web developer.
Practice Makes Better. Building this project will allow you to practice these fundamental skills in a single environment, instead of having a larger number of projects (or smaller personal involvement in larger projects) trying to showcase each of these skills.
Self-paced, no deadlines. Building this application quickly won't guarantee you a job any more than working at it methodically and carefully. However, you will prioritize working on this project in a way that represents your urgency of finding a new job.
The Fundamentals
(last updated June 2023)
These fundamental skills are broken down first by job role, and then by "core skills" and "nice to have" skills. They are prioritized by the community and ideally added to your application in this order. Ultimately, this is YOUR project to implement, so build it however you feel makes sense to you or to highlight the kinds of skills YOU want to present to a hiring company.
Full-Stack Development
I've removed the "full stack" development list, as "full stack" means a lot of things to a lot of people. Instead, draw on the core fundamental skills that multiple disciplines know and use, and you can choose for yourself which pieces of information you want to focus on knowing.
Front-end Development
A front-end developer deals with user interactions, user interface controls, and the overall "experience" of the application. This list contains the only "specific" technologies in the project, being JS, HTML and CSS).
Core Skills:
- JavaScript
- HTML/CSS and data presentation
- understanding of Framework / components / routing
- event handling
- user input (building forms, setting up browser-side validation)
- async data fetching
- parsing complex data payloads
- global state management
Nice-to-have Skills:
- accessibility standards
- authentication (workflow of login, starting the OAuth flow, etc)
- Web security topics (OWASP Top Ten) which are applicable to front-end, such as protecting against click-jacking or cross-site scripting vulnerabilities.
- Behavior-driven or Test-driven development
Middleware Development
Middleware is the "glue logic" that helps tie together a front-end application with back-end APIs. It probably includes some database work and maybe a little HTML, but isn't what I would consider "full-stack".
Core Skills:
- MVC design pattern in your framework of choice
- form processing (CRUD)
- ORM for storing/retrieving data from a database
- handling authentication requests (finishing the OAuth workflow)
- determining authorization access (what are they allowed to do)
- consume third-party APIs
- parsing and building complex data payloads
Nice-to-have Skills:
- Web security topics (OWASP Top Ten) especially around data handling, and user access controls
- Test-driven Development, maybe some behavior-driven development
Back-end API Development
Back-end development is more "behind the scenes" work, and processing of data, with less direct user interaction. A typical back-end developer will be storing and retrieving data in some sort of database, or getting and transforming data to or from a third-party API service.
Core Skills:
- building API endpoints to industry standards
- ORM for storing/retrieving data from a database
- handling authentication requests (managing API keys, etc)
- determining authorization access (what are they allowed to do)
- parsing and building complex data payloads
Nice-to-have Skills:
- Web security topics (OWASP API Top Ten) especially around data handling, and user access controls
- OAuth (do something on behalf of the user)
- Test-driven development
QA Engineering
The idea of QA Engineering is testing system compatibilities, determining the root cause of problems, and automating these tasks.
Core Skills:
- reading and writing software tests
- building test strategies across many systems
- service-oriented architecture and system communication (APIs, data payloads, etc)
- automated test environments and CI/CD pipelines
- strong code revision skills to 'cherry pick' specific branches for testing
- building automation through scripting/programming
- some use of bug tracking and reporting systems
Nice-to-have Skills:
- defect tracking and reporting tools
- some amount of programming skills in the languages used to generate the software you're testing
DevOps
DevOps means a lot of things to companies and encompasses many areas of automation, some amount of system-level scripting, and setting up systems for deployment.
Core Skills:
- operating system fundamentals (Linux, Wind
Security Score
Audited on Mar 15, 2024
