What is programming?
For me it has always been about solving problems, and analytical thinking.
Does it matter what language or platform you solve problems on? How do you learn more on your selected platform?
Specialist or Generalist?
I've always believed that if you become a good programmer in arbitrary language, it should be easy to move to another.
In my 20 years of programming I've had opportunity to work in many different languages and technologies.
When I was a kid I started with QBasic, then Pascal and Delphi, as I got older I've moved to C++ and few other languages.
When I was younger I thought one should achieve mastery in one language.
My thought about it changed over the years. I still think it’s good to be an expert in specific technology / language (iOS for me). But we should all invest time in learning more technologies.
The easiest way to learn is to be around people that are smarter than you
Learning other technologies can help us achieve the same goal, as there is lots of smart people sharing knowledge.
iOS community is still pretty young. A lot of great ideas can be translated from other, older communities.
Want some examples?
-
CocoaPods - alloy missed Ruby gems when he started doing iOS work. He decided to put in place similar solution, that how CocoaPods was born.
-
ReactiveCocoa or RxSwift would not exist without influences brought by Microsoft and C#.
By limiting ourselves to just one platform, we are limiting our ability to learn and grow as developers. There is so much we can learn from each other.
Mastery and Passion
There is a research that says that you should be able to achieve mastery in any skill by practicing it for 10,000 hours. Which for us means writing a lot of code.
Programmers tend to be perfectionist, this might lead up to some serious anxiety, Ash Furrow wrote a great blog post about it, go read it.
My recommendation to any young programmer would be to find passion outside programming, for me it's been Psychology and Bodybuilding, for Ash Furrow it's Photography.
Just find something that doesn't require you sitting in front of monitor for hours of time.
Having other passions in your life will help you unwind and it will prevent Burnout. It's not something to be ignored if you plan of making a career out of programming.
Many times when I was stuck solving a problem I took a break, did something else that I loved and then when I came back to the issue at hand I already knew how to fix it, eureka!
Working with others
It's important to start working with other people as soon as possible. You will learn a lot from them, and it doesn't matter if they are more experienced than you are or even if they are programmers or they have different role.
Team work is important and learning how to do it early will make your professional career much easier.
I learned things from junior programmers, they have fresh ideas that more experienced people might not think about.
It's also important to understand other people points of view, if you are working with Designers try to look at problems from their perspective.
When discussing things:
- Use proper arguments, and please don't use your seniority or other similar things. If you can't find good arguments behind your way of doing things, maybe it's not that good?
- Avoid being reactive, people might take things personally, but a professional understand's that critique of an idea is not the same as critique of a person saying the idea.
- Pause and think before replying, and don't interrupt other people. Let them finish and focus on understanding their message before discussing it.
I highly recommend that you go to social meetings in your area and meet with other likeminded folks, not only will it allow you to gain some perspective but you might also end up with some great friendship!
Comfort zone and Stubbornness
We should all challenge our assumptions, it will make us less ignorant of other opinions and allow us to grow our craft much faster.
I've a rule that every 6 months I try doing things differently than I'm used to.
It allows me to distinguish best solutions from the ones I'm used to. Endowment bias states that we value things we own / known more than they are really worth.
One thing to remember is that change is hard and requires time.
Trying something for a couple of days just won't cut it.
You need to immerse yourself.
Invest time in understanding new things, before making a decision if they work for you or not.
After all, how can you critique anything that you didn’t really give a fair try?
It's too common I see people saying something is bad or can't work, without ever trying it in the first place.
Some ideas:
- Never used AppCode ? Learn all the shortcuts and use it for at least 2 weeks.
- Never used Interface Builder, or tried it years ago ? Maybe it’s worth giving it a try and seeing how things progressed
- Using cocoapods? Try SPM or Carthage, so you understand the differences.
- Never wrote tests? I thought I taught you better than that!