Table of contents
- 1. Are you worthy of being called a software engineer? 🤔
- 2. Confidence 😰
- 3. Productivity 💪
- 4. Code 🧑💻
- 5. Good practices 📜
- 6. Communication 💬
- 7. Learning 🧠
- 8. Jobs 🧑🏻💼
- 9. Life 🏝
I've done side projects, several internships and now I'm a Software Engineer at a well-known tech company.
The first steps might be hard and overwhelming, even worse if you didn't learn to code early as many kids do now. I'll be sharing some pieces of advice I wish I knew before that will x10 your early growth.
⚠️ DISCLAIMER: If you disagree or spot any mistake, don't hesitate to leave me a comment, I'll be happy to discuss and update this article as a living document.
1. Are you worthy of being called a software engineer? 🤔
You might be asking yourself things like:
- Am I worthy of being called Software Engineer?
- Did I pass the interviews all because of luck?
- I don't know how to do lots of things, am I gonna be fired?
If that's you, let me tell you quickly that of course, you're a Software Engineer, and you didn't pass the interviews because of luck. Smart and well-established senior engineers decided you were worth a hire. Of course, you won't know how to do lots of things, if you were supposed to be a "know it all" you'll be a senior. That's the reason they're making 3 times more than you. And no, you'll not be fired as long as you are willing to learn, show interest and work hard.
2. Confidence 😰
When we achieve one goal, we get used to it quickly and change our focus for the "next big thing". When you are making 80k, you always look at the guy who's making 140k and think damn, I wanna be that guy. Stop and reflect on what you achieved, and where you've come from. You might just be a little bit proud of all the things you've done. You'll be impressed!
3. Productivity 💪
I'm not productive enough
Don't expect to be productive out of the box. Takes time to get used to large codebases and learn new technologies you're not familiar with. You'll be productive with time. Remember, you're a junior, not a senior, It might sound silly, but it isn't.
We all wanted to deliver quickly to impress, and it's admirable. But, often this velocity comes at the cost of quality and easily avoidable mistakes like syntax errors, typos, code failing tests, shitty variable names, commented code, or traces you've used to debug. These easily avoidable mistakes shouldn't be happening either.
Learn your stack
If you're using something daily, then you should dedicate time to learning and understanding it. From your code editor to programming languages. You'll see the increase in productivity you'd have!
I'll be posting useful tips about tools like VScode or Git that I use on my daily workflow. Follow me if you're interested
Perfect is the enemy of done. Don't expect ages to optimize code that just needs to work, probably you won't impress anyone, they just don't care if it just works. Push to get feedback and iterate!
Often you would spend 20% of the time to produce 80% of the value, and 80% more time trying to get the 20% of the remaining value.
4. Code 🧑💻
If you've been a "lonely" coder for your whole life, pay attention:
Maintainable code is as important as working code! If everyone is careless with their code, you'll create a big mess nobody understands, making your team waste ages to fix the tiniest bug. And this is exponential, as the complexity grows, "fixing times" do as well!
Writing good code is not just about what works right now, but also about investing in future productivity. A maintainable codebase has:
- Good variable/class/function naming
- Insightful comments
- Avoids repetitions by creating libraries, thus solving one problem = solving many
- And many things I still don't know :)
The wheel already works fine
Avoid starting all from scratch! If you did it, you'd probably have tons of unfinished side-projects like me. Don't be ashamed of using frameworks and libraries.
Your goal is not to prove you're smart, but to achieve your goals by delivering.
Be comfortable with code you didn't write. You'll be working on big projects made by teams. Starting all from scratch is a huge waste of time, and one of the most common beginner mistakes, that I've also made.
Unfortunately Tony Stark isn't real, to have that amount of work done, hundreds of engineers and several years would be needed. Maybe you don't like things about the code you're working with, but in most cases, there's a reason for every design decision. Embrace team standards and learn from them, you'll set yours at the right time, and perhaps they're even the same!
Principles and coding conventions
You should learn all the principles and conventions, and put them into practice with your work. But take it easy, if you have to add a lot of complexity to follow a principle, maybe It'd be better to repeat that "piece of code" twice.
5. Good practices 📜
Make it simple!
Keep things as simple as possible. Don't worry, complexity will come with the project's growth, want it or not.
Learn fu**king Git!
Git is a tool you'll be using daily. Don't "survive" googling stuff every time you need to do something different from "add, commit, push, pull". This tool will save you tons of time if used correctly, if used wrong you can even ruin a month of work, so don't be lazy and do yourself a favor and go learn it now.
Don't wait for the whole feature to be finished. Finding bugs by going back in small bits is way easier than finding a needle in the new monolith you've just committed. Your laptop can die, losing your work is easily avoidable.
Don't add multiple unrelated changes in the same commit, because you can't roll back without potentially wiping out something that you wanted to keep. Keep your commits atomic!
Don't commit trash
Avoid committing broken code, when your colleague pulls the code is not nice to find the code doesn't work (just do it if explicitly said, and do it in a separate branch you can easily delete afterward). Remove trash like prints and commented code. Also, make sure the code styling is always right by the time of committing.
You're the first reviewer!
Do a review of your code first before committing. You can use your editor to browser through your changes. You'll often spot things to improve right away. This avoids wasting your colleagues' time by commenting on typos, wrong variable names, and so on. Sometimes they'll have to act as gatekeepers to prevent your "beta" code from being merged, you don't want to be in that situation.
Don't change random things blindly to fix bugs
At best you'll fix it without knowing how or why. At worst, and probably more likely, you'll make it worse or introduce new problems. Take your time to understand why is falling, it will take more time now, but will save you a lot in the future. If you don't know how to fix it, ask and learn why it was failing.
6. Communication 💬
You're not telling a story don't start at the beginning, sharing all the things that happened along the way, and eventually ending with a punchline. Nobody has time for that. Start with the punchline. Answer right away, and follow up with any important details. The person will ask you if they need to know more.
Just f**king ask!
If you don't understand, need help, you're blocked, or anything else, JUST ASK! We come from a college and environment in which we learn that asking things to each other is cheating, in the real world this is called collaboration.
Nobody judges you for speaking up and talking about things, but if you struggle silently, then it may seem even worse! If you tell them you plan to get the work done by Wednesday, but there is a deadline on Tuesday that you didn't know about, someone will have the chance to correct you and clarify. You'll avoid uncomfortable issues upfront.
Of course, you don't have to ask right away, give yourself some time to figure things out, but don't feel like you're facing things alone. Believe me, that's the worst case.
Don't use your colleagues as Google
In the beginning, over-communicating is essential, but asking things you can Google is counterproductive and gives a bad image about you. You'll waste your colleagues' time and they will answer you by doing a quick search, as you could do as well.
If in doubt, over-communicate. When things are not clear, simply over-communicate. That creates opportunities to correct you, and thus you'll grow.
7. Learning 🧠
Learn by doing, not by watching. Make sure you put into practice the things you learn. Wanna learn React? Doing a course is great to get started and set the basements, but building things (useful when possible) on top of them is essential, that's when the real learning occurs.
Go and code a website, deploy it, get some users, and struggle with the technology as the "pros" do. If you've done it, you've learned something useful and you've also got a cool project for your resume.
8. Jobs 🧑🏻💼
Ten seconds rule
Assume the reader of your Resume will give you at most 10 seconds of their time. In that time you have to convince them you're worth spending one more minute, in that minute, 10 more, then a phone call, an interview, and then the job. Don't leave the most important information until the end! Craft your resume being easily skimmable.
You should have a website
On one page (no fancy navigations), you should include your Github, LinkedIn, Resume, projects, and contact information. But don't expect them to click any links.
Soft Skills are important. Becoming more experienced and skillful with your technical abilities it's not enough to move up to senior roles. Communicating, presenting and pitching, leading groups, and planning or managing projects. These things may seem outside the scope of a developer, but you'll soon find that they are absolutely necessary for you to be effective at a senior/manager/director level.
I'm still struggling with this, but I realized how important it is.
NOTE: From now on, the advice wouldn't be confirmed from my experience, but from the experience of people I trust. Whether in books, direct advice, or colleagues.
9. Life 🏝
If you did it right, you'll probably be making a ton of money for a guy/girl of your age. Take an interest, learn how to handle your money, invest and spend wisely. You'll have a more healthy and less stressful life. People who manage money poorly often struggle for the basics in life.
Be radically open-minded
Radical open-mindedness is the only way to maximize your learning, and thus your growth and "success".
Don't argue to be right, but to seek the truth. In the early stage of your career, there's a huge probability for you of being wrong, so if in doubt, assume you're wrong.
If you want to know more about this, please read Principles by Ray Dalio.
Excuses never won a match
That's what Toni Nadal, Rafa Nadal's uncle and coach say. Excusing yourself won't fix anything, embrace reality and change the things that are within your reach.
Long term thinking
Learn how to handle your money, save and invest monthly, eat healthy, read books, exercise, and learn to listen while being radically open-minded with the people around you. Soon, you'll see the reward.
😁 Hope it helped!
To write this article I've based myself on Things they don't teach you in software school an e-book from Shane Neubauer and ex-Google that now is building beyond a cool startup for web3. If you want to support him, it is worth a read!