I recently received an email from a new developer asking for some advice:
I recently came out of school and will start work as an entry level C#/.NET developer in a few weeks. It'll be my first true work experience. What were your trials and tribulations when you first started out? What lessons would you imprint on newbies like me fresh outta school and walking into this vast software development world?
This is a great question.
First of all, what an amazing time it is to be a software developer! Technology has changed so much since I was starting out and there are so many exciting opportunities available if you grab onto them.
Having said that, the question has made me reflect on what I did early in my career (and still do to this day). The following is my 2 cents and it is completely subjective to my own experiences. Here are the 8 things I think every developer should do when starting out.
1. Pick your mentors wisely
I feel strongly that one of the best things I did early in my career was that I focused on finding mentors. In fact, I think picking your mentors is so important, it's not a coincidence that I'm putting this as #1. Understand that not everyone is willing to be a mentor to you, or maybe they don't have time. When I found a mentor in my own company I made sure that I learned as much as I could from them - anything that they were willing to teach me, I was willing to learn. They had way more experience than me - both technical and non-technical - and I was more interested in learning what they knew than trying to prove what I knew - after all, it was early in my career so I didn't know much. Spend more time listening than talking - and ask thoughtful questions.
My mentors did not always work at the same company as me. In fact, I had many mentors that I never met and, in fact, they had no idea they were my mentors! I would subscribe to blogs. I would always make sure to go watch certain speakers' presentations. Again, once I identified a mentor, I tried to absorb everything I possibly could from that person.
2. Focus on communication skills - especially verbal
Yes, it's important learn as much technology as you possibly can and the more deep technical knowledge you have, the better. However, if you truly want to maximize your success in the software development profession, focus on improving your communication skills - especially verbal. This can take many different forms.
- One-on-one with another developer - When you're having a conversation with another developer, make sure you're clearly articulating your questions or idea. If another developer is asking you a question, are you sure you've understood the question? Can you explain the answer in a way that developer understands?
- One-on-one with a non-developer - Great, you can interact with other developers - but what if your non-technical Project Manager comes to you with a question? You can't just throw a barrage of technical jargon at the PM and expect them to understand. I can't tell you how many times in my career, a PM or manager has come to me to ask me to explain something to them that another developer confused them on.
- Group setting - can you clearly and succinctly articulate your thoughts in a meeting? Every meeting is an opportunity for practice.
- Public Speaking - Not everyone is going to become a world renowned public speaker like Scott Hanselman, but I challenge you to reach outside your comfort zone. Start small. Give a short presentation to a handful of developers at your company about something new you learned. Once you're comfortable, try your hand at presenting at a local user group. I've given a lot of presentations in the last few years, and I still look at each presentation as a way to improve in some aspect of my public speaking. It may or may not be in the cards for you to do this regularly, but it will benefit your career when you're in meetings and presenting your ideas to your customers.
- Written - I've been emphasizing verbal communication skills here because I do feel this takes priority. But don't forget about your written communication skills too. Can you write emails clearly, yet succinctly? Can you author a design document that is easy to understand? These are areas that will come up repeatedly in your career.
3. Learn the business domain
Too often, new developers just focus on learning all the features of a language or framework. While this is important, it is just as important to become knowledgeable on your current business domain. In my first technology job, I worked for a company that built credit lending software for banks. I became an expert in consumer lending and it helped me thrive at that company in so many ways. You'll understand your software better. You'll be able to communicate with managers and customers better. Learn your business domain.
4. Adopt a learning mindset
So you've just spent the last couple of years learning in school and you're now ready to put what you've learned into practice starting your career - this is exciting! However, what you'll soon discover is that your learning process has barely started. Technology...changes...FAST. Much of what you know now will be obsolete in a few years. It can be exhausting to keep up on all the technologies. Here's a secret - it's impossible to keep up on all the new technologies. You have to accept that fact now. For those that grasp the concept of being a "life-long learner" and embrace it, you'll have much success to look forward to. However, if you're looking for a profession where you're not required to constantly learn new things, then software development is going to be frustrating for you.
5. Never be afraid to ask questions
Too often people (especially developers) refrain from asking questions because they're afraid that their questions will make them look dumb. One thing that I did well early on in my career is that I wasn't afraid of asking questions. I still do this. Believe me, it's way better to ask a couple extra questions up front, than to get to the end of a task and people realize you didn't know what you were doing!
6. Figure out what you're passionate about
We just established that it's impossible to stay up-to-date on all the new technologies. Do your best to figure out which technologies really capture your interest. Do you like front end work? Do you like back end? Perhaps developing mobile apps really gets you excited. You may not always have the opportunity to work in your #1 technology of choice, but make sure you identify what really gets you excited. If you're going to deliver a presentation, make sure you really love the technology you're presenting about.
7. Go the extra mile
Early in my career, I wasn't shy about going the extra mile with side projects at home. It wasn't even that difficult because it was before I had kids and before my free time was quickly filled with family activities. At my first company, I developed an app on the side (on my own time) just because it would make my current job easier, and it provided me an opportunity to learn a new programming language. One day a manager saw me using the app and asked me what it was. One thing led to another and within a couple of months, my little utility app was transitioned to replace the existing UI of one of our products, and I was in my first lead-developer role. You just never know what can happen. Even if my app hadn't caught the attention of the company, it was an extremely valuable learning experience for me to build an app on my own.
Go the extra mile. Read books. Watch Pluralsight courses. Go to watch user group presentations. Contribute to an open source project. Spend a little time outside of work honing your craft.
8. Never be condescending
This might seem like basic advice for a developer starting out since new developers naturally won't have as much technical knowledge as other developers with several years experience - but it's not. I've been amazed at some interactions I've had with junior developers where they came across as condescending or cocky - probably trying to "trick" people into thinking they know more than they do - this doesn't work. Regardless of whether you have one year of experience or 10 years of experience - never be condescending. Absolutely nothing positive will come from it.
I have never met anyone with as much knowledge on Microsoft Azure anywhere in the world as Vishwas Lele, my colleague at AIS. And yet, I have yet to meet anyone in my entire career as humble as he is - this is the example of what you should emulate professionally.
Bonus - Technology Specific
OK, I know I said there were 8 things but I'm going to throw in one "bonus" item. Up until now, really nothing I've talked about has been technology specific. And I believe these 8 things stand the test of time, regardless of technology. But I will offer a couple of technology-specific items with the caveat that this is relevant in 2016.
- Learn a Cloud platform - If you're a Microsoft developer, then it makes sense for this cloud platform to be Azure. If you're not a Microsoft developer, then perhaps it's AWS. But regardless, start getting familiar with at least one of the major cloud providers (if not multiple).
So there you have it - my own opinion on what new developers should know starting out. Now here's the irony: these are principals that I believe still hold true for me even at this stage of my career. I believe software development is one of the most rewarding careers you can have. Accept the challenge - embrace it - and don't look back.