Advice on while dealing with  software engineering

Tips or Advice for Software Engineering Careers

1. Work really hard

No one will grant you a promotion, salary increase or a better position for nothing. And plain hard work is not enough; you need to be efficient as well.

Working hard and delivering no value is useful for no one, bar people who count productivity by the number of hours you sit on your chair.

And by the way you need to avoid those people, the companies they work for, are usually super-toxic and will make you miserable. Thankfully, those are becoming extinct in our field.

2. Don't stick to programming languages

There is no point in giving too many fucks about a language. Most of them work around the same principles and just do certain things better than others (which is of course important). That's why we have a lot, because no language is perfect.

Make sure though you know at least one language from each paradigm. For example functional, object-oriented, etc.

3. Learn a new language of technology every year

Try to learn one new language (ideally a language that is popular and pushes you out of comfort zone) every year to keep your brain sharp and keep up with the trends of the market.

Also, if you find value on the language you learned, you can propose it as a tool to a certain problem to your company.

4. Take full responsibility for your career

You had a tough childhood, your ex-manager (or the current one) was a jerk, you had 5 divorces in 3 different marriages and the web framework you invested 2 years to master is not popular anymore. Things are a mess in your life. There is no positivity around.

But you are an adult and you should fight this battle yourself. Having a tough past is not an excuse for not being your best self now. Focus on what you can do to make things better and make sure that you... =>

5. Don't worry about things that are out of your own control

Only worry about having the proper response to them. As mentioned before, the web framework you invested about 3 years to master is not popular anymore. So what? Learn another one. Maybe pick a framework that looks to have better prospects. And you will need to do this quite a few times in your career life.

Maybe your (beloved) friend-tech lead has left the company. It is very sad (happened to me in the past too), but it is also time to gear up and impress the new one.

If you cant handle it, you can leave the company as well. But please, please, please, don't nag about things out of your control. Rather, adjust your response, as the show must go on.

6. Avoid hatred

If someone is better than you on something don't hate them, learn from them. We consider people that are better than us, as threats. I choose to treat them as potential sources of improvement and you should do the same.

I remember a couple of colleagues from past employers who were extremely good to handle pressure and come up with solutions on thin-ice-problems. I have learned a lot from them, I never felt envy, because I knew I could acquire that skill as well.

Beware, if for any reason there are no better people (technically) than you around, it's time to find a better place for you and your career. Trust me you don't want to be the best unless you are the CTO or something similar. But even then as the common saying goes, you need to hire people better than you.

Hatred can ruin your personal life too, in terms of mood and reduce positivity in your life. You have nothing to gain by hating people.

7. Chase responsibility and money will follow

I'm sad that too many people are focused solely on money and not to build a strong skill set and brand for themselves
.
When do you think you will have better monetary prospects in the future: If you are an underpaid CTO or an overpaid Junior engineer. Choose your jobs wisely.

8. If you neglect to sharpen your skills, they will eventually abandon you

Too many people think that a computer science degree made them some kind of prince/princess, where the companies will beg them to join them and everything will be handed over easily, just because they have a piece of paper on their walls.

Don't get me wrong, I believe a good degree can give you loads of useful knowledge (I have an undergraduate and soon an MSc in informatics) but too many people stop there.

This is where I admire self-taught programmers. They may lack knowledge on various theoretical things of computer science, but they know the hard way, no one will give them any piece of success for free.

Also, if you don't know (at the bare minimum) some basic things about the most popular trends, you are doing something wrong. You don't need to be an expert to have a grasp of the world around you.

9. Cheap Hardware is cheap on quality, price and ruins your health as well

Invest in an above-average keyboard, pointing device and monitor. Your career depends a lot on your hands and eyes.

Having noise cancellation headphones is great, but don't buy them because everyone has them, if you don't have high-quality hardware of the previously mentioned components.

Unless you are working in an extremely noisy environment you can probably do without noise-canceling headphones.

10. Take a walk and the problem will be solved

Okay I am exaggerating a bit, but I want to emphasize the necessity of diffuse mode, Barbara Oakley explains in her course Learning how to learn (which I highly recommend).

Nowadays people don't put much value in the diffuse mode of thinking. At least I know only a few companies that approve sleeping (or other diffuse friendly activities) during working hours, but the thing is that we need both. Actually the very famous expression "sleep on it" is implying the importance of diffuse mode.

11. Invest a fair amount of your income professional education

If your company can pay that money, that's even better.

YouTube is a fantastic resource of learning but if you are really serious for your craft and of course, your income allows you so, you should have a subscription to a high-quality training service like O'Reilly / Pluralsight.

Find the learning method you like better and learn more by using it. Speaking of professional education =>

12. Avoid companies which have no training policy

I might be very hard and biased here. You may allow exceptions where the company is fairly new to the market or have low funding.

Given that the field requires constantly updating your knowledge and being up-to-date, I tend to not take companies that don't have a proper training/education policy, seriously into consideration.

The bare minimum of proper education policy for me is, each employee to have a dedicated budget, which can at least cover (annually)

  • Attending a conference
  • Buying a couple of books
  • Buying a subscription to a high-quality training service like O'Reilly learning
  • Do a certification

Of course, most people will not do all those in a year, for many reasons; maybe because they have settled or because they have a family and they cannot dedicate much of their free time, but the thing is that the company should not be an obstacle if the employee wants to do so.

I am more demanding for big companies, where I would expect (additionally) some invited lectures on-premises, especially on domain critical things. For example, if the company is migrating to Scrum it is good to bring an Agile coach around to set the stage.

13. Use the best tools money can buy

For example your IDE. In the same logic as in hardware; don't go cheap on your IDE. As it is said in the pragmatic programmer book, pick an editor and learn it very very well. High-quality tooling can literally save you hours.

Don't forget that money are pretty much compressed time. You pay a higher monetary price now and you save time later.

14. Ignore motivation

People tend to rely heavily on motivation towards their important life goals.
Motivation is great but it is still a sentiment. And as all sentiments, they come and go.

You 'd better have a more optimal way to guide yourself (like your dream life or a vision as discussed in the next point), on what needs to be done, at least on the important things of life.

It is easy to put on your smiley face when everything is going well, but what do you do, when nothing can motivate you and you are approaching a burndown state when nothing is fascinating anymore?

15. Keep the fire in you, alive, at all costs

While I do not recommend hanging on your motivation to progress your career and your life in general, I would insist on having a vision for your career.

You should totally have a vision of where you want to go so that you know if every decision you make (not only career-wise) will make your ship move faster and safer. As the famous British row-men medalists in 2000 used to say, will it make the boat go faster?

16. Understanding which type of company fits you better and focus there on getting similar jobs

Startups, mid-sized companies, and big corporations are way too different in terms of benefits and negatives.

The fact that you did a good job in the big corp, doesn't mean you will handle everyday fires at startups.

Do the research and make sure you understand what you have now, what you get and what you lose, in each choice. Unfortunately, there is no silver bullet.

17. Having a great manager is the best denominator to having a healthy work-life

You probably already know that; if you have a supportive manager with whom you can communicate effectively and you like the tasks you have in your job it would be a blessing.

People don't leave companies, people leave their managers. Make sure your manager will try to make you enjoy your stay. Ideally, do so before accepting an offer.

18. The only way to make sure you know something is to teach it

That is the reason I initially started blogging.

If I learn about something interesting (even as part of my personal training plan or on the job), I try to explain via my blog (even though my Msc has led me to reduce the posting frequency).

I think it works very nice. At least for me, I have never asked my readers :)

19. If you stop learning you are already obsolete

The relatively high salaries that are connected with the software sector are correlated (among others) with the level of change that occurs in this field. The sector is moving so fast that if you stop learning you are already obsolete.

That doesn't mean you should spend every waking hour reading and coding, but don't go on the other extreme where you have settled and neglected the changes that are happening.

20. Consistency is better than intensity

Connected to your learning mentality above, reading about your craft 30-40 minutes per day is better than spending the whole Sunday in front of the monitor to cram unreasonable studying workloads.

You knew that from college, didnt you? Stress levels were way better when you did were doing your homework, bite by bite and not in the last evening.

21. First, make it work then make it right then make it fast

That famous expression from Kent Beck is one of my (and Unix's) favorite mottos. I am shocked by the lack of pragmatic thinking in the industry.

People giving too many fucks about spaces vs. tabs, about snake case vs camel case, about how to name an interface, etc.
No one (?) disagrees that those are important things but they are important only if we have something that works.

My favorite, is watching people, putting extensive documentation to code that is not even compiling. Be pragmatic, friends.

22. If you want to spend time on your social media make sure it's worth it

Follow great people who are worth your time. I follow many great people on Twitter including many co-authors from dev.to.

Even though I'm not extremely active on tweeting, I'm always happy to read their opinions even if I disagree,
as they give a great perspective to me.

23. Don't be afraid of asking questions

Regardless of your position in the company, maybe you're the owner or the CTO, no sane human-being expects you to know everything. On the contrary, research shows that people tend to like you more when you ask them for their help.

Also, the field of computer science is so huge, that YOU CANNOT know everything. Just like in every other profession with huge levels of bibliography.

24. Theorems and brainstorming don't pay the bills

Results do. Happy customers and successful products do. You are not in school anymore. No one cares about your romantic approach to coding, theories that are not anymore applicable to industry problems or your what-ifs. I am not saying they are not important but the corporate world favors results and not abstract discussions.

It is a sad truth. If you don't like that, maybe the corporate life is not for you. Prefer to find your shelter to an R&D oriented place or a university.

25. Try to have hobbies outside of software

I am a bit guilty about not following that advice lately.

Between a full-time job, fitness training and a master's degree I can't say I am proud of myself here. I am trying to fix it though.

It will help you avoiding burnout and get a different perspective on things.

For example, I have seen various articles around connecting enhanced diffuse mode (see above) of thinking with playing an instrument.

26. Do not be opinionated on tech

I don't think this needs an explanation. There are various alternatives in software technologies, for a reason. Stop preaching a particular programming ideology or technology, by considering it the one and only solution. At the best, you look annoying, at worst ignorant.

27. Never accept socially unacceptable behavior in your workplace

Sexism, racism, bullying, favorability against your career, being unpaid while the boss is on vacations (I have experienced this personally). There are companies with serious, mature and professional people who will respect you. Go out and find them. Let the rest, enjoy their micro-universe where they feel superior and unique.

28. Unit testing is boring but...

It can be life-saving when things are going tough like the product is growing big very fast or a big scale refactoring is coming.

As with all things in life, first, you sow and then you reap.

29. Effective time/task management is more important than you think

Effective time/task management is equally or more important than learning the newest and hottest tech.

Why? Because if you cannot use your skills to provide value on time, no one cares. If you feel you are not good in that area, start with GTD theory and 15 secrets of time management

30. Don't forget your soft skills

Unless you are a freelancer accepting faceless bids or someone who delegates the sales and customer handling stuff to others, you need this.

We work with people all day and we need to know how to communicate effectively and speak a business acceptable language, with respect to people not being identical to us.

It might not be a problem if all people had low soft skills competency, but as this is a bit dystopian and I asked you to be pragmatic above, you need to become better in this field too.