what I have learned in my first year as a software engineer.
Almost one and half years have passed as a newbie in the professional software development world. Full of laughs, regrets, achievements, failures, the technical words that I have heard for the first time… Here are some notes that I have taken along the way to remind myself how the journey itself was.
It is okay to feel down sometimes. It was probably the biggest lesson that I have learned.
Dependency injection. I have come up to this term in a very strange way and I believe it will be a life-changing moment for my professional life. First of all, be aware of it and then please learn to apply it.
…but in the meantime, be open to any languages or technologies because the world is evolving, we are evolving and an engineer would be able to adapt to anything when it comes to that I believe.
Frameworks are important, not only because of the re-inventing the wheel thing probably but anyway, Laravel is a good place to start.
Sometimes you might need to work on things that you do not want to for quite a long time and start to feel like it is a waste of time that you cannot improve yourself at all. It happens. Take a risk to change it or just be prepared for the consequences. Everything is a trade-off in the end and I am more confident about it than before.
Use some of your free time to learn and try new things like working on side projects maybe. I gave mobile development a try this year. I learned Swift and published a -kinda- complex app at the end of the year as a goal I have set for myself. It was a great experience. Now I want to try React Native for both iOS and Android.
Design patterns, SOLID principles… Be able to apply Object-Oriented principles in a really efficient way no matter what comes to the table.
Read ‘Clean Code & The Clean Coder’. Especially I am in love with The Clean Coder for improving soft skills. There are lots of awesome people out there to try to help and inspire you. Read more, go to meetups and coding events, involve more in the community. You would be surprised how much it might change your point of view.
Fail fast, fail early. I failed way too good. It was probably a very early step to take for me but really important to see my lack of knowledge in the kind of early phase. At least I have seen I was quite close to making it happen and now I know what exactly to improve to have a chance to achieve it in the next years. Otherwise, I would have literally no idea what I was missing.
Algorithms, data structures… it is important to think, communicate your ideas and solve problems considering efficiency and time complexity. HackerRank is a good place to give them a try. I also started a Github repo to try to challenge myself more about it.
System design. I loved it! Load balancers, caching systems… They must look kind of advanced topics but trust me, they do not need to be. You can start to learn and try to apply them in small projects just to get used to it. They are really essential when it comes to performance and optimization.
Learn to collaborate, collaboration is important. Everything looks better with friends even in the most hopeless times. Know to work alone but always be eager to build something together.
Udemy is always my best friend when it comes to learning something new. They might be books, reading codes, etc. for you. Just find the way of learning that suits you the best.
Continuous integration. Know about Travis CI, Jenkins, etc. to automate many processes like building pipelines to run tests for each commit.
Writing tests. Learn to mock classes, I mean really learn it, do not just copy-paste it. Learn how to write tests efficiently. TDD is on the top of my ‘to-really-learn-and-adapt-to-it’ list.
Learn how to store passwords securely and security practices in general. Authentication and authorization get a big portion of our daily lives on the internet and it must be our duty to protect personal information.
APIs, APIs everywhere… Give GraphQL a try, it looks like it is the future.
Build a portfolio website for yourself, GitHub account is also a must. Share your knowledge and try to give the community as much as you take and go even further.
Learn Docker and go serverless with the cloud. AWS, lambda functions…
The list goes and goes, but at the end of the day I think the most important thing is,
There are lots, lots of things to learn and will always be. Just enjoy the ride.