% From novice to expert % navigating your journey in tech % Khalid Lafi
- Khalid Lafi Almouraikhy
- Principal Engineer @Mozn - Co-Founder @ByLinker
- ~15 years of experience.
- I build a lot of open source projects Github: @lafikl
- I gave talks on them at O'rielly Velocity 2014 and RedisConf 2018 in San francisco
This talk is based on my personal experience, as a reflection to what worked for me. While trying to generalize the lessons learned.
- You're about to graduate/freshgrads
- New Hire
- You want to become senior
- Stories
- Fundamental knowledge. (long lasting age, and transferrable)
- Data structures & Algorithms
- Computer Architecture
- Operating Systems
- Network
- Specific knowledge that isn't fundamental (like mastering a framework).
- React
- Django
- Flutter ...etc
You just started, don't focus on one discipline.. explore everything, know what's out there. With time you should dive deeper at the areas that interests you.
According to Paul Graham:
The first step is to decide what to work on. The work you choose needs to have three qualities:
it has to be something you have a natural aptitude for, that you have a deep interest in, and that offers scope to do great work.
You're about to graduate or you're a freshgrad
What do you need to do?
Build something, take it through the full cycle. And keep it running!
Don't pay attention to best practices.
Just build something and deploy it.
You gain have a mental model of how things work on a very high-level.
Examples:
- Restful API
- Website with small function (url shortner)
Now we dig deeper.
What do you need to learn?
You should be able to answer these questions:
- What's a process?
- How to know what process is running?
- How to have a process always running? (Daemon)
- What's a file descriptor?
My first outage was caused by full disks. Because, i didn't know i had to rotate logs
- Chapter 5. The Process
- Chapter 8. Behind the process
Learn algorithms and data structures
- You can get from a very bad solution to a 10x better one just by picking the right data structure.
You have a CSV file containing
start_ip, end_ip,vpn,hosting
192.0.0.1,192.0.0.2,true,false
...
...
...
The file size is 10GB on disk, but in memory it becomes 200GB. How can you read it into memory to serve a function like this
func is_vpn(ip string) bool
Which data structure & algorithm you would use?
Git
Git uses merkle-trees. I explained them here
Learn how the network works, on a high-level
Learn SQL and how to use databases. Pick an RDBMS and learn it, preferably Postgres.
Pick a language and build things in it, practice as much as you can.
Learn how to use Docker
Keep in mind there's no magic anywhere.. it's all abstractions made by humans and you can dive deep every now and then to see how it works.
Congrats you got hired!
Software delivery cycle:
- How they collaborate, manage code? (Git, Github, Gitlab)
- How do they ship the software? (CI/CD)
- How they package the software? (Docker)
- How they test? (Unit tests, integration tests, e2e tests)
Spend time learning the company core business:
- What matters to them? how they make money?
This will be handy when you want to make technical decisions, because you can align what you do with it.
- What are you trying to solve?
- What solutions did you consider? each one with its own trade-offs
- Which solution are you choosing and why?
Read a lot of open source code, from different projects you're using.
It's the best way to become a better engineer.
Examples:
- NGINX
- Redis
- Kubernetes
Read my post on
Learn distributed systems
Books
Video Course
Learn how load balancing work
Thanks you!
For more questions reach out to me on: