Cookies

Chocolate Banana Cream. What’s different about this cookie? That depends. The frame of reference aside, and disregarding how particular I could get, this cookie is dissimilar to any cookies that I…

Smartphone

独家优惠奖金 100% 高达 1 BTC + 180 免费旋转




10 lessons from my first year as a software engineer

It’s been a year since I moved from Customer Success to the Engineering department. After a year of intensive study, these are the lessons I’ve learnt.

Between my own self study, and the part time bootcamp, I put a lot of effort and emphasis on applying what I was learning to side projects. This was in the hope that it would give me practical experience and allow me to transition into the engineering role easier.

Whilst this was beneficial, I was not prepared for the steep learning curve of having to read and understand the code that had come before me, in a project which had existed for years before I joined, in order to build on top of it.

This complexity increases when you’re working on a feature that has been contributed to by multiple people over a long period of time. Although any given code base should have its own conventions and rules, so that it is as consistent as possible, everyone has their own preferences and styles for how they like to achieve their goal.

Reading another person’s code requires you to understand the previous requirements for the feature (which may have changed over time), by reverse engineering what is already there. This is a massive part of starting most tasks.

I think that if I had the opportunity to go back in time to prepare for this career change, I would try to find open source projects to contribute to. This would provide the opportunity to gain experience in reading other people’s code, and the collaborative skills necessary to build together with others.

I remember feeling the pressure when starting, to ramp up as quickly as possible and deliver value from day 1 to demonstrate that I deserved to be there. This pressure was self-inflicted, and was not at all a reflection of my team’s expectations.

As a new person to the team, you have the valuable perspective of being new and fresh to something that others are already very familiar with. This is an incredible thing to have.

Your value doesn’t end there. You are still able to weigh in and give your opinion in important decisions, even though you are not writing code yet. Having a customer focused hat on could be a benefit in this situation, and you can offer a point of view in a planning meeting that could positively impact the final feature.

This should go without saying. But during my first few months, there were a lot of times where out of fear of seeming silly, I would hold back from asking a question.

As a senior engineer, it can be tough to remember what a junior does or doesn’t know. If there is an assumption of knowledge, it isn’t necessarily because they expect you to be an expert on it, but likely because they have forgotten that it’s not something you would have come across in your learning so far.

Don’t be afraid of asking more questions, it can be a helpful nudge to the engineer you’re asking, reminding them that there are some foundational concepts that need to be explained.

Since actively working to ignore that fear, I have found that I am much better able to work on tasks that require the assumed knowledge that I would have otherwise missed out on.

Matcha latte’s, Data Structure’s and Algorithms

Being the most junior FT SWE on my team for the year has meant that it can be hard to have someone at work to learn alongside in the same way I might with someone who has a similar experience level.

In having a group outside of work, who share a common goal of learning computer science fundamentals having come from non-traditional backgrounds, I have been able to better see and understand my progress.

A good team around you would be organising regular 1:1s, so that you can get experience pairing with different engineers. Having regular catch-ups with engineers who specialise in different areas, means that you can gain their methods of learning.

Have mentoring sessions. Not all 1:1’s need to be collaborative and peer-to-peer. Sometimes the most helpful sessions can take place in the form of a mentor — mentee teaching session. A type of tuition where you can prepare questions ahead of time and get an in-depth explanation into a concept or area of the codebase can be a game changer.

You can come prepared to a session with context, and be able to demonstrate the steps you’ve already taken to understand a concept, so that the tutor in this situation can help you with your process of learning, as well as with the concept itself.

Your team can provide help in your success through the selection of quick-win work which builds your skills and knowledge of the product incrementally, while delivering value and giving you that reward.

Not being the first career conversion on the team, some of my most helpful sessions were with peers who’ve taken a similar route to me. Seek these out in your workplace with a similar experience level as they may have insights into the resources and methods that could work well for you too.

My ADHD brain loves learning new things. I can also very easily hyper-fixate on an area of technology which has nothing to do with the task I should be thinking about.

Having your eyes and your mind on too many disparate topics may ultimately slow down your progress in the domain that you’re specialising in.

Keeping focus on the topics that most relate to what you’re doing, can ensure that you’re learning things that are relevant and that you will be able to apply. Rather than getting too wide a breadth, having the knowledge be surface level and not having the opportunity to apply it.

Teaching an introduction to secure coding principles to a group of girls attending a Girls Into Coding event

As a beginner, it’s hard to imagine that you could provide much insight at all to others. Having read what others are learning and knowing how much that has benefitted me, I can assure you that what you have to share as a newbie has the potential to help a lot of other people.

An additional benefit that I’ve found is that by speaking at conferences, delivering workshops and writing content and courses, I have been able to commit all my learnings to a deeper level.

A core concept in educational development is reframing, which involves new labels, new perspectives, and the examination of assumptions. Teaching gives you the opportunity to reframe the information you have learnt, especially if you do so in a live environment where you have students asking you questions.

As a result, I feel that I am much better able to apply these well to my work.

A large part of being a great software engineer comes from managing stakeholder relationships, effective communication and presentation skills. It’s easy to neglect these “soft” skills as you focus on building up technical ability.

One thing I’ve found is that, although you can learn these things from others in your place of work, it has been fantastic to get a different perspective, away from the context that I spend the majority of my time in.

From a mentor who does not know my place of work, I am able to get an external opinion on the difficulties I am having. I get a different point of view or proposed solution which I can try out.

I also get an insight into another organisation’s processes and best practices in terms of communication methods, and can bring these with me into my own place of work.

This different perspective isn’t to be taken in isolation, but is complimentary to the regular feedback I’m receiving at work.

Ensure that you have others around you who share a similar lived experience.

It’s not easy showing up every day to a place where there are hardly any others who look like you, are from a similar background or experience the same issues you do.

Sometimes you just need to have a conversation with people who “get it”, without having to explain a lot of who you are and why these feelings manifest.

Make an effort to seek out those groups and find people that you can connect with, the opportunities to help others as well as being helped by others, can facilitate growth in ways you may not have thought possible.

If you’re not part of an under-represented group, seek out opportunities to volunteer or help out with one.

Attend their events! You might hear a lightening talk on a topic which inspires you to do the same. You could hear about your next job opportunity. You’ll most certainly get practice at being able to discuss and debate technical topics.

In the beginning, I looked forward to the 1 year mark as a place I would feel confident in what I was doing and not need much help.

Whilst it is true that the work I can do independently has increased in complexity, and I require less help when I do get stuck, I very much still feel like a beginner.

Not a day goes by where I do not learn something new.

This could be reframed from:

“I’m having to learn so many new things that I’m not confident yet

to:

“It’s exciting that this role is so varied that it requires me to learn new things every day”.

Learning to get comfortable with this feeling is immensely helpful in keeping the focus on moving forward (something which I am still working on).

As I reflect on the year I am excited by so many of the milestones:

Amber and I at the Women in Software Awards 2022

I hope to continue learning and growing, and document my lessons and reflections next year.

Please do share lessons you’ve learned in your software engineering journey!

Add a comment

Related posts:

Iran President Likely to Announce Details of 3rd Step on JCPOA Wednesday

The Iranian president will most likely announce the details of Tehran’s measures in the third step of reducing the JCPOA commitments in a weekly session of the administration’s cabinet on Wednesday…

The Top Online Writing Tip

The top online writing tip is simply this: write conversationally. It’s a tip you can apply to all kinds of copywriting for the web: email, websites, blogs, social media — even sales pages. But this…