Table of contents
Today was my 25th day at the internship and last day, and this is what I learned
1. Refactoring an anticipated change is always easier than sudden ones
Make a configuration file, make it hold all your constants, and reuse them over the codebase; this makes your life easier
2. Base Layers are good... when needed.
put in the base layer the main thing and build on it, so if you want to change
the change affects everything rather than go over many things and change
3. Less Over-Engineering, More YAGNI
Comments here and there was something I used to do, which is a sign of poor code
if the code is not comprehensible and self-explanatory, then it needs refining
4. Stop and Think, Is it reusable and testable?
sometimes you want to add something over and over again, but you need to make sure this thing is testable
5. The Hare who lost to the turtle
Step by step, one of my faults was trying to learn advanced topics to make use of it and build better projects
I was doing it rigorously and well, I still do because I love learning
One day you would see me learning about animations the other learning how to break the array with a race condition and trying to make a deadlock on purpose just to know what is bad.
this is not good sometimes, because you are disturbed, I can do it, I can focus on multiple things at a time and learn everything I see but some people can't and I love learning and teaching what I do with this blog, so things always sink in fast!
Aaand me from the future disapproves... 😃 well... one was a teenager back then so not judging 😄
6. avoid the Hot names
this was from my Sensei, @YoloAbdo
yea, it sounds cool to say I know how to avoid a cyclic dependency (deadlock); it's cool to say that I made an open-source project
cool messes up priorities, and you might learn something that's not important at your knowledge level and leave more important things
7. MVC doesn't apply for code only, it can apply for a storyboard too
(MVC is Massive View Controller)
My senior told me that he faced a problem before that made the Xcode unable to even open the project...
which was having tons of screens in one storyboard, which was the main.storyboard (back then)
this resulted in too much information for the XCode to handle (and also the hardware of the MacBook)
so the key to solving it was to utilize the power of xib files and "divide and conquer."
8. Tapping into Alamofire's internals
Don't import something you don't need or do something you can do without importing it (YAGNI)
-- Says My Senior
When I told him I use Alamofire, he told me to forget Alamofire and build my own network layer; this made me tap into Alamofire and get some key things about how it works and what it does, also turning Abdo's layer into native components and removing Alamofire made lots of things clear
9. Sometimes code is not everything
you have to make sure that your code serves other things other than functionality, like a good UX and good design is also important; UX is the most important part of your app, so handle it with care
10. Think twice and Code once
Sometimes you need to make sure you write best practices and avoid anti-patterns
you would think that it would take time, but actually,
clean code well-planned code saves time and meet deadlines rather than your normal clean Ratatouille
11. Always leave on good terms
that's My Friend Ahmed Itman who told me to always leave on good terms even if it was a liability to you so that people would want to work with you
12. Expect nothing, and you will never be disappointed
Don't devaluate yourself for a chance, if a chance doesn't come, it's not the end of the world, however, devaluating yourself for something, will always backfire
All of this was thanks to the amazing Senior, Mr. Sameh Aly, who taught me all of this and took me under his shoulders. Thank you very much, Sir!
Hope to work with you again!