Last updated: 18.03.2020
Have you been considering a career in information technology? Do you want to know if it the right thing for you? Or maybe you want to learn to code but not sure how or where to start? Are you wondering what is it like to work in tech? What does it take to become a programmer, software developer or IT professional? What are the possible entry points? Is programming easy or does it become easier with time? Am I too old to become a programmer? If you answer any of these questions yes
then I might be able to give you some insights as drawn from my relatively short personal experience.
I will try to answer these questions after sharing with you my story. If you want to skip the first section then go ahead otherwise read on.
I worked as a technology professional for around 5 years (as of March 2020). I rotated between different roles. I began as a systems administrator, occasionally jumping into the role of an IT consultant. Later I worked as a programmer and a software developer. My interest in technology started late; I got involved in technology and programming in my early 30s, shortly after my PhD in physical sciences. I chose technology as an alternative career path because the IT market had more job vacancies and I could not connect with many physics academics. I am not sure if I was lured to the sector or banished from academia. Being able to mentally slip between layers of abstractions and grasping some software engineering concepts helped me to make the switch. Lastly, I had no idea what else to do so I took a chance of an opportunity.
I had to break several misconceptions about the IT job marketplace. At first, I found a lot of advertised jobs with descriptions that made no sense to a newcomer like me. For example, these jobs advertised: "no experience necessary". What it actually meant: no commercial experience necessary but you ought to have had about a couple of thousands of hours of coding (min ~>6 months).
I failed many times during my first recruitment encounters because of my lack of experience in the process. Some job interviews reminded me of X-Factor auditions, highly competitive and some of which made you give, sometimes, very embarrassing performances.
Fortunately, the same ignorance saved me from a few unfavourable and rigid contracts that a few of my more successful colleagues were subjected to. These usually chained newcomers to the same company for a minimum period of two to three years with a restriction of getting a promotion and a strict non-compete clause at the end of the initial employment period. This usually forced these workers into extending their stay with the company.
I am guessing that it makes sense from the perspective of running a business to minimise employee turnaround. I didn't really like that particular business strategy so I didn't have many resentments.
Eventually I entered the industry as a SharePoint developer and systems administrator with a small startup. My work started with building platforms for small and medium sized financial organizations. These platforms hosted intranet sites and various services that our clients used.
Before I started my first job I also had an offer from a larger organisation but I decided to stay with the startup at a much lower starting salary. I had experience working in small tight-knit teams and my thinking was that I might learn a lot more. Probably my decision was a mistake because I was neither experienced, sure what to do nor I had confidence. It is too late now to change the course of history so I came to accept that.
My first tech job was not an entirely my cup of tea. Being a chef was sometimes more fun because it was very creative but cooking doesn't pay as much, and can be very frustrating to deal with other people that can be extremely uncooperative. I not fully convinced that one needs to love their job, however. I believe one should at least try to find a few things that will make them connected with it. Moreover, one should be able to enhance their skills or pick new ones during their work experience. Lastly, the thing you dislike can tell you something about your character.
You always should use the opportunity to figure out why you dislike something. I would also advise you to do things they don't like and try brainstorm a solution to automate/improve that thing. That will give you more satisfaction, experience or even open a door to a new opportunity.
Anyway, my first "proper" job experience, enabled me to oversee a spectrum of projects. I was involved in all stages of software developmental life-cycle: starting from client meetings gathering solution requirements, building proof of concepts (POCs), minimal viable products (MVPs), development, testing, building infrastructure, solution deployment and ending on customer support. I worked closely with technical consultants, developers, sales people and clients.
Working in a small organisation meant that I was involved in recruiting new hires and on one occasion contributed to a decision to let a person leave the company. I care about other people's feeling, therefore, I found that situation to be exceptionally tough. But we had to think about the whole team at the same time when making that decision. I had a chat with the person and he was glad to go because the role he was performing was not his thing. Knowing that gave me some emotional comfort. The experience helped me to realise a lot of things about myself, my values, interests and possible future career aims.
My second tech job was a very different experience. It involved much more coding. We were split into three technology teams: backend team that dealt with managing data processing and connecting various services, frontend team that managed client-side functionality (our product website) and data science that managed more sophisticated algorithms to process our data.
Together we put effort into developing mainly a single product to serve millions of people including some side services selling data insights. The architecture of our product was more granular, distributed and complex. At first, I was overwhelmed; it was a challenge I tried to conquer. Unlike my previous role, the whole infrastructure was hosted on the Cloud so we didn't have to worry about any hardware. Our three development teams had to communicate well to follow the direction of the business. To achieve that we carried out:
Perhaps like in many startups or small organisations, we rode a rollercoaster into various ups, downs, loops, twists and uncomfortable turns. In the end, the ride was exhausting but was an insightful experience. Unfortunately, like 95% of usual startups, we didn't make it. As of today, I think my curiosity for this kind of theme park rides has slowly faded away. Would I encourage anyone to take this ride? Yes, definitely, but please don't fall under a delusion that technology is just about tech, it is as much about people that you share the ride with:
Initially when I started I often hid my face on photos.
Social football, I don't like football but I did it for the team.
Enjoying an occasional adrenaline rush.
This work experience helped me to open up a lot more. The journey was as much about technology as about the people around me. That was a very valuable experience.
Have you ever been considering a career in information technology and you want to know if it right for you?
I would highly recommend anyone considering this career path by starting with online courses (see Learning resources I highly recommend
section). Try to focus on one course at a time until full completion. I would recommend doing/asking someone for job experience and try to talk to people in the field through relatives, friends and online forums.
Quite a lot of jobs in technology, unfortunately, can have a toxic vibe that show up in annoying entry requirements:
I am not sure if the developers in that company are often kidnapped but that sentence, to me, already flashes a speck of arrogance that you will have to put up daily. But that might be my personal bias.
The following is an example contains a much more sensible job description:
I want to learn to code but not sure how or where to start?
I started by doing a few Fortran 95/Python courses (my favorite CS50 on Edx and Interactive python on Coursera) during my undergraduate and postgraduate degrees. I mostly did them in my spare time because I feared that someone might see my code. Therefore, the first programs I wrote were really bad. I laughed in despair. Besides, I battled with physics which kept me busy so my initial experience was not positive.
During my programming beginnings, I assumed I might not possess that magical ability to code so I learned just enough to survive and pass my assignments. Now I realise that I was needlessly too hard on myself - coding like any other skill is just a matter of practice... a monstrous amount of practice. Some people are more effective learners than others. This is fine so don't compare yourself too much with others or take snarky remarks too much to your heart.
Many times I was frustrated with my coding. My ex-CTO kept reminding me:
'Learning is a lifelong marathon and not a sprint'
(👋👋 Vlassios!).
Take drawing for example. I am currently doing some sketching courses because it soothes my mind and I want to use the skill to present ideas that sometimes might be difficult hard to express in words. During the first iterations, I re-learned to draw basic shapes, lines, shadows, colour values, perspective, contour lines, contour shading and so on. My first attempts involved putting all the elements together to form a rough outline of my goal, like the following sketch:
After several additional iterations of trial and error I got more satisfactory results:
The drawing courses I recommend at Udemy, can be found here and here
Coding mastery is no different than any other human learned skill. Your first programs might crash and might seem awful. We often succumb to our inner critic. Also, we might build our inner frustration, resentment and pessimism towards our undeveloped ability.
Persisting and learning to pick yourself up from failures will eventually get weaker but only if you learn to brush off the negative sensation. Once that happens your skillset will start shooting up.
Of course, your emotional pendulum might swing back and forth between confidence and pessimism. But I notice that this is a normal when learning a new skill. Eventually, you will become good enough to start making a living from writing code. But don't put too much pressure on yourself, some stress if alright, just try to learn to enjoy it. If you find yourself loosing the enjoyment of it after a year or two, however, then try either switching to something closely related, move up or try switching departments.
You should aim to try sketching out your problems or begin with drawing logical flow diagrams before you begin writing any code. Alternatively, write a set of bullet points of tasks required to get you from the beginning to the end of each coding exercise. During my physics training, we always had to start with a simple diagram outlining the problem. Chunking the problem into small responsibility modules and functions can likewise help enormously. And don't forget, this all comes through practice.
What does it take to become a programmer, software engineer or IT professional and what are the entry points?
A programmer writes computer code that solves either small to large tasks or introduces new functional features, or makes changes to a codebase. You can entirely learn coding by yourself or do a university degree in computer science. You should aim to do computer science if you want to understand the fundamental and advanced concepts behind computing. A degree will also make your life much easier as they will teach you some management and business modules. I had a frustrating time brute forcing myself into the IT market from Physics.
My personal experience tells me that a programmer becomes proficient through hands-on experience. The learning roadmap involves a lot of independent learning sprints and marathons. An enthusiastic coder should put enough effort to fully understand the underlying technical problems so they can formulate informed questions that can be directed at someone with experience.
A successful coder should be getting comfortable with translating any problem into a sequence of well-chunked computer instructions (algorithms), using one or many computer languages, in such way that computer can run these instructions without errors to produce some deterministic (non-random) output.
The formulated code does have to be perfect, but at least should be easy to follow. It should have a set of written tests that simulate a sufficient set of possible user inputs. The tests make code more robust and allow other coders change, improve or add new features with more confidence.
A skilled programmer can also optimise the amount of computer memory and CPU time for required computations. This becomes important when one starts thinking about running costs of business.
For example and hypothetically speaking, let's suppose you are delivering some content over the internet network, by designing a good data compressing algorithm or optimizing your program's execution time by leveraging concurrency you aim to reduce cost by 5% per user query. If a query costs 0.01 pence to deliver and your business handles 1000000 such queries a day, your optimisation accounts to a saving of 0.05 * 1000000 * 0.01 * 365 = £ 182,500 a year in operations.
This is the reason large global companies stress algorithms when recruiting their coders. Furthermore, efficient code can save power consumption and therefore minimise carbon footprint as long as people don't watch more videos of cats.
A software developer is next in rank to a programmer. My understanding is that a developer has to think more about the architecture of solutions. They are tasked to undulate between coding tasks and seeing a bigger design picture. They oversee the development of one or multitude interacting software programs or services that are distributed in some way to deliver business goals. In addition to coding, learning, researching, analysing solutions, a software developer has to delegate, talk to various stakeholders, perform a lot of tests, document the systems as they evolve and make sure the whole platform is secure, fault tolerant, scalable and fulfils required business objectives.
Therefore a good software developer needs to be a good communicator across technical and business teams. The communication and technical dexterity attributes are almost independent and come from long term experience. Therefore good developers are in short supply so they get paid relatively good salaries.
In my mind, a software developer is akin to a triathlete that masters each discipline to be successful. But it doesn't mean that their role is more elite than of a programmer. It is up to you which one you are comfortable with doing at the end.
IT professional is a more general term describing a person working as a technology specialist. Their role can embrace many areas of IT systems. Some technical roles do not require one to code so might be easier to enter. However, simple scripting may help you when landing your first opportunity.
Initially, you might be put into a client-facing role where you will support them while they use your company's products or services. Alternatively, you might start doing systems administration which is simply managing company's or its clients' infrastructure resources.
I think you don't need a degree to start working with various technologies because the landscape changes very fast. Therefore, you can start learning on the job. However, you can be discriminated if you don't have one and your starting salary might be more moderate.
Over the past few years, I met a few brilliant coders and infrastructure technologists that didn't have a University degree. They told me that some companies rejected their CVs because they only accepted people with a degree. In this case, I would recommend you to do a small portfolio of projects that you can showcase or talk about them during an interview to give yourself a better chance against people with a degree.
Is programming easy?
No. Learning to write good programs is challenging and not everyone's cup of tea. Writing fault-tolerant software that can be used by others, generate revenue, expand the business, give insights etc. is something that not many can do well. It can be intellectually demanding but also rewarding in itself.
I would recommend anyone do try experiment with basic coding even if they don't intend to become programmers as a career. Coding challenges one to write abstractions to interact with machines to perform some task. That insight/skill can be as useful as learning a new language, some concepts in math or drawing.
Am I too old to learn to program?
One of my outstanding teachers learned to program when he was 50. Learning is probably the easy part, the hard part is that you might be discriminated based on your age. But not all places will do that.
Okay IT might not be for me. How to find the right career path for me?
Finding the right career path is like looking in the mirror and seeing your reflection. During our struggles, we often tend to push ourselves to do something that we might not fully like. When we don't like our reflection we don't usually like looking in the mirror.
What we choose to do or how we chose to act during challenging moments will paint itself on our face. The reflected picture of ourselves we observe will eventually tell us who we are and if we start liking it we will look at it more often. Finding the right "mirror" is usually challenging. Writing is my piece of that mirror.
You can also start by producing a set of personal notes and (or) do some kind of online survey that you can honestly answer about your habits. The following links can be initially useful:
University of Kent guide on choosing the right career
Careers and Employability Service
When it comes to a career choice try something that might match your personality more closely but be prepared to be flexible for extended periods before you finally arrive there. When it comes unveiling your personality you need to rotate between jobs and find out what makes you wake up in the morning.
It took me many years to get a better view of myself. At one stage I even did a personality test here 16personalities.com that told me I am an ENFP-t type on Briggs-Myers scale. I am treating these results like horoscope readings, but I like the business model and idea of the site creators. Nonetheless, the finding prompted me to think where I am on the scale of agreeableness; conscientiousness; extraversion; openness to experience; and neuroticism. Knowing these personal attributes, for example, will help me find a job target in which I can perform.
These are the following resources I use from time to time to explore various subjects and try new things:
Tip: do one course or two at a time to completion, give yourself plenty of time, be patient and try to apply new learnings to daily situations. If you do badly during your first attempt, repeat it at a later date, no one will judge you.
If you are interested in technology/coding the above resources are great but you should also check the following:
Once you obtain a basic knowledge I would urge you to do something by yourself. A project that will challenge you and make you very uncomfortable. This will truly solidify your newly learned knowledge.
TODO