12 Lesson from my 
first Internship

12 Lesson from my first Internship

A Blog entry from an old blog website I had, back in early 2018


4 min read

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

but sometimes 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!