This article is based on my own experience and opinions.
You will solve problems
Software engineers (or developers, programmers, coders or whatever they call themselves) are tasked with problems that need solving. These problems will (mostly) be in the software realm, and will require appropriate tools, such as programming languages, database and operating system knowledge, statistics and mathematics, and more.
This is fun on its own, and can be very rewarding when we succeed, but very frustrating when we don’t. You should strive to have more successes than failures, but you will have to fail many times, miserably, to get there. Also, you’ll need to do it faster as you gain more experience, as will be expected of you.
So, you have your work cut out for you.
You will be seating and typing on your computer keyboard
If you enjoy this basic activity, regardless of what it is your are writing, you’re going to have a good time. Code is text. That is, before the computer does its magic and makes it do stuff. So however you look at it, at the most basic level you will be mostly typing on your keyboard, in English.
You will use a lot of English
You will use it to communicate with remote peers, international client and to write code, as most programming languages (all?) use english characters and vocabulary. The better your English skills are, the more doors will open for you. It is not the only skill necessary by all means, but it is one of the most basic and often overlooked. It is very frustrating to work with people who have poor English. Don’t neglect this skill.
You will be treated much better than the average employee
It is no secret that software developers are well paid and enjoy perks and activities not common to most other industries. Even within some hi-tech companies, developers and other employees such as operations and human resource are not treated equally. This does not make you a better person, it just means you are worth more to the company — you produce more money.
You will have a lot of freedom
On my first day on the job I asked for permission to go to the restroom. After a good 10 minute laugh by everyone, I understood this is not the regular shifts work I was used to doing. In some places I could even take a day off with just the notification of text in the morning, and it was completely acceptable. This is simply awesome, as this freedom boosted my motivation immensely. There are usually no fixed hours to work, just work as much as you need to get the job done — which could be a bad deal if you are not good at what you do.
Sometimes you will sacrifice your free time
You may be asked to work weekends and in strange hours of the night, without proper notice, and expected to perform at 100%. While your employer may not be able to legally force you to do so, it is expected of you, and you should accept it with grace.
You will hear a lot of different opinions about technologies
The hi tech scene is not devoid of marketing, agenda and loud opinions. It is Google’s agenda that you will use Kubernetes, it is Intellij’s agenda that you will use Kotlin and it is that-guy-on-twitter’s agenda to be recognized so he expresses his opinions very loudly. That’s not to say they are wrong, but their product may be the wrong tool for your job. Never choose a technology without understanding why. Be professional and mature.
In the long run, your interpersonal skills may prove more valuable than your development skills
If you are a great developer with very poor interpersonal skills, you don’t have a lot of options other than staying a developer. On the other hand, a poor developer with great interpersonal skills can find herself in a variety of positions, such as a team or product manager.
You will have to work very hard if you want to be great
Software engineering is located somewhere between an art and a science — there are rules, but they are very flexible. It is a craft, and as such it requires tremendous experience to master. You learn by doing and trying out many different solutions to a problem. When I was just starting out I was provided with the freedom to experiment and test ideas whenever I was assigned a task. This lasted for a year or so, and then I was required to deliver faster. This means some (usually most) of the time I needed to test ideas and experiment had to be done on my own free time. And this is a rule. If you want to be great, you’ll have to “sacrifice” your free time to improve your coding skills. If you are doing it with glee, then you will do just fine.
Don’t rely on anyone to build you professionally
The company you work for might train you and help build you up, but most have a very clear agenda — to make you better at what you do for them. The skills you gain at one company can be moot in another. Take care of your tool box of skills, don’t wait for anyone to do it for you.
The team you are assigned to may be more important than the company
Your work experience and coworkers can be completely different from team to team, inside the same company. Unfortunately, unless you have insider information there is no way to surely tell what you are up against before starting. But you can evaluate the place by asking your interviewer to have a walk around the office and meet the employees before you sign anything. Such an act is also very appreciated by the interviewing side, as it shows you care about fitting in socially just as you do about the tech stack. In any case, remember this before switching companies, as you might find a better fit in a different team (that is, if you are not fed up of the company).
You will meet extraordinary people
You will be working with some of the most brilliant minds in the world, and simply awesome people altogether. Take advantage of that. Communicate, socialise and pick their brains any chance you get. This is a rare opportunity, don’t let it go to waste.
But you will meet some horrible people as well
While the most of us turned to software engineering for the purity of the craft, the upscale conditions and perks in hi tech companies attract some nasty people as well. You will come across people who will make you ask yourself “what is he doing in here for god sake?!”. No place is clear of assholes. Steer clear of such people, and if you happen to work closely with one or managed by one, consider switching teams.
Your work will sometimes go down the drain
In Hebrew we have a saying — writing to the drawer. It means that the software you have written will not see the light of day. This happens, and it is OK. Requirements change, and clients and managers change their mind. Accept it with love and move on with your life.
It can get tedious and boring
Work is work. You will experience down times, tedious labor, and monotonic and repetitive days. You will do things you don’t like some of the time. At times it can be the majority of times. This is normal, especially when starting out. But do feel free to approach your manager if this seems to be the rule rather than the exception.
Enjoy your career
While fun is a spectrum, you’re supposed to enjoy doing what you do for a living. The atmosphere, the freedom, the smart people and interesting problems, all make software engineering a great and rewarding career. Make sure to take advantage of what is offered to you, and give back as much as you can.