Software engineering and returning to my roots

My decision to take up a programming job – returning to software engineering – and start climbing the more typical career path for a computer science graduate has been met with an understandable amount of scepticism and confusion from friends and acquaintances who know me.

I was always vocal about my desire to pursue education and academia; from my extensive volunteer and activist acumen developed throughout my time as a student to my eventual enrolment and the recent completion of a PGCE teaching qualification and acceptance onto a PhD programme within the past year. With all that in mind, why the sudden change of heart? How on Earth was I satisfied with a junior position?

Life as an unpaid trainee teacher

It’s complex. From September to December of last year, I was still teaching at Arden. At my own expense. Despite needing to work an extra semester in the wake of nationwide school closures caused by COVID-19, there was no additional government or university financing available to me which placed me under serious financial hardship. Given the hours I was at my placement, it was also impractical to find part-time work. Despite the placement itself being fulfilling and my colleagues being unbelievably fun to work with, I can’t stress how difficult this period was.

Nevertheless, I managed to drag myself through it and hey, I’m a qualified teacher now. Neat!

All the while, I was planning my next steps. I secured a PhD position at the University of Portsmouth, but I wouldn’t be able to start that until at least September because it was self-funded and I needed a chance to put together some cash. Furthermore, computer science teaching positions, especially those in Further and Higher Education were scarce. I knew that I had to rethink my options and that I had to start looking for jobs in the field that I am good at – software engineering.

I was approached by a developer friend about interviewing to join their company in January as a PHP developer – my programming language and ecosystem of choice – and I was immediately interested. Though it would be remote, they have an office in my hometown. The salary and perks are good. There’s plenty of room for learning and progression, and most importantly from my perspective, there’s a warm and close-knit culture that values you. The caveat? I would be entering as a junior.

Don’t think for a minute I got in effortlessly though. I still had to pass a programming challenge and technical interview, both of which went well.

Impostor syndrome or a dose of reality

Was this an absolute deal-breaker for me? Not really. Despite my academic credentials, I know I damn well didn’t have any software engineering experience outside of education, in my six months at Amadeus, or in my personal projects. To me, coming in as a junior is a chance to reacquaint myself with programming on a deeper level. To finally apply the mountains of software engineering literature I had previously endured; all within a safe and risk-free environment.

It didn’t bother me knowing that there are plenty of self-taught, degree-less developers with junior positions such as mine, all the while I have the shiny (and expensive) accomplishments earned during my time in Aberystwyth. Chances are, they will remain in said positions until they have developed the experience, confidence, and programming knowledge to ascend further. By the way, even though this can take a while, you know it’s natural and totally fine. In any case, I knew that I would not be a junior for long. It would be just enough time to sharpen myself into form once again after spending so long cutting the grass.

Now that I’m over four months into my time at Stickee, where do I think that I’m at? Hand on heart, I think that both my technical skills and my more soft skills have skyrocketed, and it’s thanks largely due to the support of my more senior developers who have helped me at each stepping stone. There’s still always so much to learn, and that’s okay. We’re not encyclopaedias. We’ll learn what we need as we go, and whatever is super important will undoubtedly stick around.

So did you meander for no reason?

Learning to teach has been incredibly meaningful and enriching and I don’t regret it for a minute. I learned a great deal about the science of learning and of pedagogy and the impact of these skills is evident in numerous aspects of my work, no doubt. The students were 100% the most rewarding part and I would do it all again.

I understand why many of my friends and acquaintances criticise me for “postponing” just getting a software engineering job instead of spending more time in the Ivory Tower, but I did it for myself. It’s what I wanted to do. There’s so much pressure on graduates to race head-first into their careers. Many of whom spend months, if not years preparing all whilst completing their studies. I wanted to do these things now whilst I’m still young, full of energy, and with a head full of malleable brain matter.

Some quick-fire, tl;dr questions and answers

  • Will you return to teaching/academia/research?
    • Maybe when the time’s right. I love education and teaching, so I won’t rule it out altogether. Not in the foreseeable future though.
  • Do you regret your Master’s degree?
    • Yes and no. Was it challenging and a positive experience? Yes! Was it basically worth it and outvalued by a year or two of real-world experience? Yes again. Unless you’re specialising in something like AI or pursuing academia, I probably wouldn’t bother.
  • What’s it like working at Stickee?
    • Seriously great. No, I’m not at gunpoint! I’ll write a more general blog post soon about my first few months there.
  • What are your ambitions now?
    • Senior code monkey! In all seriousness, I look forward to being experienced and knowledgeable enough to be a senior or lead programmer within software engineering or nearby fields. After that? Who knows.
  • I’m a former student of yours and I’m lurking your website. Do you miss us?
    • Immensely! You’re all incredible and I know you’re capable of anything you set your mind to. Once you’ve finished school, by all means, get in touch.

Conclusions

From programmer, to teacher, to programmer once more, it has been quite the journey. Frankly, I can’t wait for the next chapters and I hope to document them here on my blog.

In case you’re wondering, I migrated back to WordPress from Hashnode (though if you haven’t seen my neat PHP API, go take a look) after being dissatisfied with the platform – it always felt more of a circlejerk of the same authors and I couldn’t be bothered with that anyway.

Thanks for reading, and until next time.

My strategy for learning a programming language quickly

When I first arrived at my new school, I was completely unaware of what programming language they were using to teach the students – it’s something that is prone to change over time and isn’t usually mentioned on a job spec. Many schools throughout the UK will use Python from start to finish in both a procedural and object-oriented fashion later down the line, whereas some schools are still using Visual Basic. I was alarmed to find out that the senior students use C# – a language I had very little knowledge of and experience using outside of playing with it in Unity. Or so I thought.

This article is all about how I was able to rapidly learn C# and begin adding it to my programming repertoire because I was suddenly in a position where I had to! This isn’t a situation that is unique to educators such as me; as a developer, a system architect, or whatever role you are currently in or aspire to be in, there could be times where you too are forced to rapidly learn a new language, framework, or technology in the face of new circumstances, such as a new client or acquisition, or maybe your boss was just feeling malevolent.

Tip 0) A reminder that the language acquisition overlap is huge

Chances are, what you know already in another programming language will transfer over to a new one that you’re attempting to learn. Core concepts such as variables, classes, functions, arrays, and so on are more often than not going to remain identifiable as you change technology, give or take semantic differences. This is just like how once you learn how to speak another language, you get more efficient at the language learning process.

Granted, some jumps are larger than others, like getting used to semicolons and braces when you’re from a Python background, or entire design patterns such as MVC (Model View Controller) when learning a new framework like Laravel or Rails. Chances are though, you already know more than you’re aware of!

One more thing, please don’t be afraid of admitting you don’t know something! If you’re familiar with Broadwell’s learning competence theory, this is one step closer to mastering something!

Tip 1) Learn by doing

I knew to start writing C# my best bet was to download Visual Studio and get started*, and that’s exactly what I did. I dedicated a few hours to installing the software and building basic programs and algorithms that I knew just so that I could come to understand the syntax and general workflow.

I played around with building console apps, using Winforms to build some basic desktop applications, and when I was ready I decided to start looking around at tutorials online and on YouTube to learn some more complicated functionality, such as accessing databases, accessing and writing to CSV (Comma Separated Value) files, and so on. I remember laughing to myself when I found the StringBuilder functionality was just like the implementation in Java.

You can do as much or as little of this as you want, but I truly believe this is the most effective way to learn it, more so than reading or watching alone.

I realise that this isn’t the only way to develop in C#, especially on macOS or Linux. But this is what we do in my workplace, so it’s how I opted to learn.

Tip 2) Find a good reference guide

(If you want to suggest something to add here, please let me know in the comments!)

I don’t recommend reading textbooks or references from start to finish as an effective guide for learning programming languages. But finding a good reference that you can look at for additional insight is a great way of learning. Here are a few of my favourites for the languages I use most, and they’re completely free (unless stated otherwise):

Multiple / General Purpose

  • Codecademy (JavaScript, C#, Java, etc.)
  • freeCodeCamp (Web Development)
  • The Odin Project (JavaScript, Ruby)
  • General MOOC websites like Coursera, edX, Udemy, and FutureLearn also fall under this category

JavaScript

C Sharp

PHP

Tip 3) Learn from others

Learning from one another is a tried and tested way of aiding you on your learning journey. You’d be surprised what you can learn by sitting down with someone for half an hour when you get stuck. For me, sitting down with my colleagues and having them run through some of the aspects I was unsure about was immensely helpful.

I realise that this isn’t everyone’s cup of tea, nor is it a luxury available to everyone. As a bonus, I recommend giving fellow developers tweeting about the technology you’re learning a follow on Twitter if you use it.

Tip 4) Remember that this is an ongoing process

Don’t be discouraged. Remember, learning is something that developers and other professionals (teachers included!) never stop doing and there will always be gaps in our knowledge. We can’t possibly be experts on absolutely everything, so remember that it’s only necessary to learn what you need – you can always learn more along the way and there’s absolutely no shame in that.

In my experience, smart people are those who recognise that there are things that they themselves do not know.

The smartest people aspire to go one step further and learn what they don’t yet know.

Conclusion

In all, it took me a few days to get comfortable with working in C# and to develop my confidence where I was able to pick apart my learners’ work and debug it comfortably. I realise that I am absolutely not an expert, nor do I claim to be. But I know enough to do my job effectively, to teach it to other beginners, and to start me down the path of continuous learning and improvement in my own skills.

I hope that you enjoyed this piece of writing and that you find it useful whenever you might find yourself needing to learn something in a hurry.