Categories
Uncategorized

It’s Not All About Me: Interpersonal Skills and SOftware Engineering

The collaborative nature of software engineering means that having good interpersonal skills is a valuable and essential part of doing your job effectively. I believe this is even more important in a remote work setting because it is harder to build rapport and good interpersonal relationships via Zoom.

I recently read a book called It’s Not All About Me: The Top Ten Techniques For Building Quick Rapport With Anyone and I think it is one of the best resources I’ve ever found for learning how to build deeper and more powerful connections with people, especially people you’ve just met or don’t know very well.

The author, Robin Dreeke, is an FBI expert in interpersonal communication, and his book is the distillation of decades of research into the art of interpersonal communication and behavior. 

The overarching idea of the book, as you might have guessed from the title, is that the most important rule to follow in any communication is to make it all about the other person.

I wanted to share three valuable takeaways that I found reading the book:

  • Slowing down your rate of speech is a simple yet powerful way to make yourself sound more credible and confident while also making it easier for your communication partner to follow what you are saying.
  • Is there anyone that sounds shadier and more untrustworthy than the guy at the end of a pharmaceutical commercial rapid-firing off all the potential side effects of a drug at a million words a second? Don’t be that guy. Slow down, take your time in speaking and find natural pauses to give yourself and your conversation partner time to digest the content of the conversation.
  •  Asking people “how, when and why” questions is a great way to dig deeper, strengthen emotional connections and build new relationships/solidify existing relationships.
  • Open-ended questions provide an opportunity for a conversation to open up and go in many different directions. The important thing is to focus on giving the other person your undivided attention and to show them very clearly and convincingly that you care about what they have to say.
  • Paraphrasing is an excellent way to show people you are listening to what they are saying very closely and it will also help you to recall the conversation with much more clarity later.
  • Pausing before responding will give your conversation partner the opportunity to elaborate on what they said, while also giving you time to think of a more thoughtful response.
  • Finally, summarizing a conversation at the end will show your partner you were listening, help you remember the conversation and reiterate any important points/commitments made during the conversation.

I know for myself that there is always room for improvement in my interpersonal skills and I hope that some of the things I’ve learned can also be useful to you. Thanks for reading!

Categories
Uncategorized

My Internship Retrospective: Part 2 (Room for Improvement)

One of the most important parts of learning is gaining awareness of what areas you have for improvement.

My internship gave me a lot of opportunities to discover my strengths as well as weaknesses as well as clarity and insight into what I should be working on moving forward.

When I initially started working on my second Java ticket, I thought it would take roughly the same amount of time as my first Java ticket, since the tasks were quite similar.

However, it ended up taking me more than twice as long to complete due to a few mistakes I made in my initial approach.

First, I didn’t take as much time thinking and learning about the problem and thoroughly considering how to implement a solution before I started coding.

I learned that investing that time and effort up front to understand the problem can help you create a solution more quickly and effectively.

Second, I tried to work on two tickets at once since the next (my third) ticket touched a similar part of the codebase.

However, I ended up introducing unneeded complexity that slowed me down.

Going forward, I took away the lesson that, while it is good to think about building a solution that is extensible, it can be very important to focus on breaking things down and doing one thing well at a time, especially when you’re learning.

Like I mentioned before, the internship also gave me a better idea of what growth areas I’d like to develop further for myself in my career.

I want to work on developing my technical skills as a software engineer like implementation, design, and my ability to read and write code. 

I also want to continue focusing as well on my soft skills such as leadership, written and verbal communication, and planning.

Finally, I’d like to explore new fields within the software world that interest me such as machine learning, personalized education, and audio processing.

In conclusion, this internship experience has been a great way of identifying where there is room for growth for myself in my craft as a software engineer.

Categories
Uncategorized

My Internship Retrospective: Part 1 (Highlights)

As I approach the end of my internship as a backend software engineering intern at Coursera, I took the opportunity to jot down some thoughts about what the experience was like and what I took away from it.

I want to share some of the highlights/accomplishments first and in the next post, I will share some of the lowlights/learning experiences I also had during my internship.

What were some of my top achievements during this internship, and how did it impact the team/company/business?

I was able to contribute business logic to validate products and academic disciplines as well as ensure that students were getting subscribed to the most updated version of their specialization. I also helped work on migrating the code for configuring products in bulk so it could also support the configuration of specializations in bulk. 

This helped the Coursera C4C development team in their efforts to build self-serve tooling to make it easier for C4C customers to find and offer academic disciplines and for credit courses to their learners. 

By improving the efficiency and usability of the set-up process, Coursera can potentially unlock more C4C revenue and increase adoption of Coursera as a solution for universities looking to offer online for-credit courses and teach their students important and high-demand career skills.

How has this internship helped me in reaching your professional goals?

I’ve gotten a chance to work with some really talented people who taught me a lot about how to approach problems and function effectively within a team.

I also gained more experience as well as confidence in my ability to learn new things and be successful as a software engineer and teammate.

I’ve worked with some new languages and technologies such as Java, Scala and  been able to contribute to a product that I’ve used and admired for a long time.

I have a clearer idea of what I’d like to do in the future with my career, a clearer understanding of what I need to do to get there and more self-assurance that I can reach my goals.

Conclusion

Overall, I can say that this internship really exceeded my expectations. I learned much more in three months than I could have really imagined at the beginning of the internship.

I also felt that the quality of the experience I had itself was really good, thanks to the effort that the team I worked on and the recruiting team put into making sure my internship went well.

In the next post, I will try to share some of the lowlights and learning experiences I had during the internship, as well as what growth areas I’d like to develop next.

Thanks for taking the time to read my post!

Categories
Uncategorized

The Overlap Between Music and Code

On the surface of things, it may not seem that the art of programming has a lot in common with the art of making music. 

Music is typically seen as an inspired act of emotional expression and talent whereas programming is considered an analytical and coldly technical pursuit.

 However, in my opinion, both are closer to the middle of those two extremes than most people would think.

To me, music and code both represent a world of infinite possibilities that are made up of small and relatively simple building blocks. 

There are only twelve notes in the Western scale, yet there is no limit to the endless variations and countless compositions that are made up of those twelve notes. 

Similarly, the most complex computers are built upon an arrangement of ones and zeros that are organized and manipulated into doing some very remarkably complicated things. 

Learning music and learning coding both require a lot of exposure to patterns and an understanding of syntax and how the rules work. 

In the beginning, I learned the foundational skills of programming by learning how to write simple for loops and declare variables and I learned how to play guitar by learning basic technique and simple riffs. 

As my learning progressed in both arenas, I started trying to emulate songs that I liked on the guitar and I started trying to recreate programs based on tutorials. 

Eventually, I started being able to recognize patterns and understand how I could compose my own music or my own code after having observed how it was done and spending a lot of time practicing.

A lot of this learning was conducted via trial and error. 

When you play a wrong note, you can usually hear your mistake when you hear the discordance of the wrong note in relation to the rest of the notes. 

Similarly, when you’ve violated the syntax of a language, you will get an error message. 

Learning from mistakes was a huge part of my learning journey in both coding and programming and I am sure I will continue to make more mistakes and learn from them as I progress.

Finally, I can say that writing code and making music were both things I felt I had no natural aptitude for in the beginning. 

I struggled to accomplish even the simplest tasks and it took me a long time and a lot of effort to feel like I had any sort of baseline competence.

Ultimately, I think that I have a long way still to go but I have come a long way in my educational journey and I want to encourage anyone who thinks that they may not have the aptitude to do something they’re interested to just focus on getting started and putting one foot ahead of the other one at a time.

Categories
Uncategorized

Learning on the Job and Learning In School

Over the past year or so, I’ve been alternating between being a full-time software engineering intern for roughly three months and then back to being a full-time computer science student for roughly three months. 

I’ve completed two separate internships and five different classes. It has been a challenging year, both personally and professionally, but it’s also been a time of immense growth and learning.

Recently I’ve been reflecting on the differences between the learning opportunities that I’ve had at work in contrast to those that I’ve had in doing my coursework. Both have their advantages and disadvantages as well as many similarities.

 However, I think that considering the difference between learning on the job and learning in the classroom has helped me make the most of whichever learning environment I find myself in.

The first thing I’d like to discuss is the resources that are available to you when looking to solve a problem. 

If you look up something in the middle of an exam, or you copy some code on a project without citing it, that is a potential violation of academic integrity and you could be in a lot of trouble. 

At work, it is substantially more difficult to do my job or complete any tasks without looking up potential approaches and copying code to either reuse it or tweak it slightly for your own purposes.

Learning from peers and mentors is a very valuable and effective way of furthering your education and skills as a software engineer. 

It has also been an important part of my academic journey but I have found that my computer science program’s format, being completely online and asynchronous, has not been conducive to creating these opportunities to learn. 

In contrast, during my internship, I was lucky enough to have a very effective and generous mentor who was dedicated to helping me succeed in addition to many teammates and peers who were very helpful as well.

The second thing is the available time. My internships have both been roughly 35-40 hours a week, Monday through Friday. Throughout my computer science degree, I’ve mostly been taking eight credits which is two classes a semester. 

There have been some weeks that I spend more than 35-40 hours on my schoolwork but there are many weeks I spend much less time than that. 

Sometimes that is due to a relatively light course load or it is because at different points I’ve also been working a full-time job alongside my classes, not to mention the many other demands that being a human being in 2022 places on your time and energy.

During my internships, I am getting paid to learn and develop my skills and solve problems 35-40 hours a week every week. I’ve been able to dedicate significantly more time to honing my craft because I have a set schedule as well as the incentive of being able to earn a relatively comfortable living. 

Money is a powerful incentive, but there are also other incentives that are very important that are present in the workplace and absent in the classroom. 

When I complete an academic assignment, my main incentive is to learn or get a good grade or pass the class. I don’t have to worry about the long-term implications of maintaining it because more often than not, I have to move on to the next assignment.

In contrast, there is a strong incentive to build systems that are well designed, well tested, and more easily maintainable because it has a significant impact on your wellbeing as the sucker who has to live with this codebase day in and day out. You and your team could have their jobs made much harder by a messy codebase and there are many other long-term consequences such as technical debt and tears and wasted time. 

Any rational human is probably going to spend much more time and care in designing, implementing, and testing an application they will be dealing with for the next year as opposed to one that they’ll never see again after a week. 

I want to conclude by saying that I don’t necessarily think that it’s easier or better or more effective to learn at work as opposed to the classroom.

There are definitely times where one or the other is a much better tool for the job of learning and I think they’re both made more effective when they’re paired together. 

I hope that sharing some of my experiences will help you in deciding which learning experience is right for you at the moment you’re making these decisions on which opportunity to pursue in what is hopefully a lifelong and fruitful learning journey.

 Thanks for reading and please share any thoughts you might have on the subject in the comments section.

Best wishes,

Amin