DEV Community

loading...
Cover image for 6 Essential Things I Wish I Knew When I Started Programming

6 Essential Things I Wish I Knew When I Started Programming

nickbulljs profile image Nick Bull Originally published at blog.nickbulljs.com ・6 min read

I could probably achieve 300% more in 6 years as a programmer if I knew these things when I started.

Coding Is Not About The Coding

What do you think programming is about?

Writing code?

Writing good code?

No.

It's just a part of the truth.

Programming is not about coding, programming is about solving problems with coding.

End customers don’t care what technologies, languages, frameworks, or methodologies you use. They care only about one thing, whether your product solves their problem or not.

That’s why no one cares what technologies Google search is using under the hood. Until people can find relative information with it, they will use it.

It’s the number one thing I wish I knew when I started programming.

I would spend less time writing “best code” and more time solving customer’s problems best.

Don’t write code just to write code, solve customer’s problems with the code.

Communication Skills More Important Than Coding Skills

When I just started my career, lack of social skills was not my main problem. But when I moved higher, to the middle, senior, and leadership position, my weak soft skills became my Achilles heel.

When you work on a product with a group of different people (engineers, designers, managers), communication is the only thing that makes you a “team” and helps you effectively develop the product.

Lack of social skills does the opposite, it decreases the product development time and overall productivity.

Here is the real situation you might face:

The leadership team tells your product manager that they want to create a new product feature and put it in the next product release. It’s not urgent, they just want to release it as soon as possible (as always).

The product Manager calls you on Zoom, tells you what you need to build, and asks, “How much time do you need to build it?”

You are doing a rough calculation and tell, “I need 20 hours.”

The Product Manager is not satisfied with your answer. He wants to release it as soon as possible and show the management that he can deliver results fast (this is a very common situation).

So he asks you, “Can you build it for 10 hours? We really need this feature in the next product release!”

And you know that you can if you cut the corners (no tests, messy code) but then you will need to refactor it, and it will take an additional 30 hours. Because other engineers will work with your messy code when you release it. And after refactoring, you will need to integrate their code with yours.

So here’s what will happen next. If you have bad social skills, you will not convince the Product Manager that you actually need 20 hours to build this feature.

Why?

Product Managers often have good social skills, from my experience. So if you can’t convince him that refactoring later is worse than spending 20 hours right now, he will easily argue with you and convince you that “refactoring later is okay.” And the whole team will lose additional 30 hours for this refactoring (I don't count the time to fix unpredictable bugs after).

But if you have good communication skills you will be able to convince him of the opposite.

So improve your social skills as well as coding skills (send memes in the group chats on Slack or something).

And remember one simple truth:

People work with people, not machines.

Regular Breaks Help To Program Better

For 4 years I always feel exhausted after work. Somehow I could productively work only for a couple of hours. After that, I didn't have much energy. Until I learned about the Pomodoro technique.

It’s quite simple. You work for 25 minutes and take a break for 5 minutes.

Your working routine becomes:

8:00-8:25 – Work

8:25-8:30 – Break

8:30-8:55 – Work

8:55-9:00 – Break

I tried it for a week and was surprised at how focused, energetic, and productive I became (the science behind Pomodoro)

Then I went further and implemented the 52+17 system and my productivity levels spiked by 200%.

So take regular breaks if you want to operate at your maximum capabilities.

10X Engineers Don’t Exist

At the beginning of my career, I thought that a great programmer is a person who knows tons of programming languages, frameworks, and methodologies.

I was wrong.

Such a mindset only gave birth to my impostor syndrome. I thought that I don't deserve my current position, my salary, that I am a “fraud.” So I started to follow every popular developer on Twitter, read every technical news, and thousands of developer blogs just to convince myself that I deserve what I have and to feel more close to the title “great developer.”

This was not a healthy behavior.

But it helped me to discover that a lot of people I followed (I thought were 10X engineers) actually didn’t know a lot of things. They may know how to do some complex things that require a lot of different deep knowledge in a couple of fields and at the same time don’t know some primitive things. Like to know how to design highly scalable database architectures but don’t know how vertical-align an element with CSS.

Big thanks to those developers, like Dan Abramov (creator of Redux) for this article, they cured my imposter syndrome and showed me that it is okay not to know something.

Programming Is Not Hard If You Know How To Learn

When I started to learn JavaScript, it was hard. Because I learned the wrong way.

Read a lot of theory without the practice, no routine, no end goal. Chaos.

I thought it was normal to learn like this. Until I discovered deliberate practice.

It’s a purposeful and systematic type of practice (learning).

The difference between normal practice and deliberate is that deliberate requires focused attention and is conducted with the specific goal of improving performance.

After I applied a deliberate practice, I began to notice how fast I'm progressing with learning JavaScript. My knowledge started to stick for a long time, not just for 5 minutes after tutorials. I created the end goal, why I am learning JavaScript, and understand what I need to learn, and what I don't.

📌 Quick note: I’m creating a JavaScript course where I’m using deliberate practice to combine modern and practical JavaScript theory with a lot of real-world practice to teach you how to become a skilled JavaScript developer with knowledge of modern language features. Join here.

So here is what you need to perform deliberate practice on your own:

  1. Teacher: provides practice activities designed to help you improve performance.
  2. Perform at maximum effort: constantly being taken out of your comfort zone.
  3. Well defined and specific goals: not just “overall improvement.”
  4. To be in focus: give your full attention, no distractions.
  5. Do conscious actions: no autopilot.
  6. Instant response to feedback and modifying your strategy.

When you start learning a new language, technology, framework, whatever, stick to these rules to get big results as quickly as possible.

There is no “best programming language”

There is no best "something" in our world. Only best in something.

Let’s take cars. How can we choose the best car in the world? By speed? By safety? By what criteria?

It’s impossible.

We can only choose the best car in a certain category. Like the safest car. Or the best offroad car.

And if we look deeper, every category solves some problems.

For example.

Problem: We have children and we take them to school every day, we want our children to be safe on the way to school.

Solution: Buy the safest car.

Problem: We go camping every weekend, so we need some vehicle that can easily get us to places that are difficult to access.

Solution: Buy the best off-road car.

The same is with programming languages. Some languages and tools are better at solving some problems than others.

If we want to build an interactive website, we choose JavaScript.

If we want to go with ML/AI, we choose Python.

Remember, there is no best programming language, there is the best programming language to ...

So start with a problem first, then pick a language to solve it.

In the end...

If you like this article, share it with your friends and follow me on Twitter.

Also, every week I send out a "3–2–1" newsletter with 3 tech news, 2 articles, and 1 piece of advice for you.

📌 Subscribe to my 3–2–1 newsletter here 📌

Discussion

pic
Editor guide
Collapse
canu667 profile image
Canu667

Nice post! I'd like to really emphasize the need for good communication skills and an attitude that gets things done. In my experience, you need to be able to:

  • convince people to your ideas
  • similarly, get your point across, in a way that is understandable by all people involved
  • be assertive, rather than, manipulative - this is exceptionaly hard, when you don't deal a lot with people and you are not patient.
  • in the same vain, be a good and patient listener - don't get easily annoyed with vague answers, unrealistic expectations.

And I have to admit - my soft-skills are horrible and I hate communicators...

Collapse
shoaibkakal profile image
Shoaib Khalid

How to boost communication skills? any personal suggestion

Collapse
ksaaskil profile image
Kimmo Sääskilahti

My favourite book for learning how to get along with people is How to Win Friends and Influence People, it's old but still the best book I've found.

Collapse
canu667 profile image
Canu667

To be honest - just practice and keep a journal, where you write down your observations. That is all.
In case, you want some books I would really recommend "When I Say No, I Feel Guilty" by Manuel J. Smith. It has some role playing elements and you can get a feel of how an assertive person communicates. For me that was quite precious.

Thread Thread
nickbulljs profile image
Nick Bull Author

I use a journal every day in the morning and can confirm that it helps to improve communication skills in some way (better to structure your thoughts)

But it takes time to feel the result (not so efficient for me)

Collapse
nickbulljs profile image
Nick Bull Author

As I said somewhere in the comment:

"Don't have a ready-to-go framework of how to improve them, but I can say for sure, you can improve it like any other skill – practice, practice, practice."

Collapse
nickbulljs profile image
Nick Bull Author

Thanks for the kind of words!

Communication skills are highly underrated.

Don't have a ready-to-go framework of how to improve them, but I can say for sure, you can improve it like any other skill – practice, practice, practice.

Collapse
danytulumidis profile image
Dany Tulumidis

amazing post! Deliberate Practice is sooo important so become better and get more control of what you are doing.

Collapse
nickbulljs profile image
Nick Bull Author

Thanks, Deny ❤️

Collapse
stephendev profile image
stephenalion

Wow, your post gave me the courage again to start learning Javascript. I've quit the Udemy courses I followed because of 'Read a lot of theory without the practice, no routine, no end goal. Chaos.' Thanks for this!

I'm really excited about your Javascript course, can't wait!

Collapse
nickbulljs profile image
Collapse
ksaaskil profile image
Kimmo Sääskilahti

What a great article! How do you stick to Pomodoro in practice, do you use an alarm clock, a browser extension, a mobile app, or something else?

Collapse
nickbulljs profile image
Nick Bull Author

I'm using the Horo app on Mac.

There are a lot of Pomodoro apps.

Collapse
mohit789 profile image
mohit vishwakarma

great post!!!
I love the one part which is for Communication skill.
and I also face the same issue like low at communication skill can you help me out, that how can I be good at.

Collapse
nickbulljs profile image
Collapse
nickbulljs profile image
Collapse
gagansingh profile image
Gagandeep Singh

Thanks for sharing !!

Collapse
nickbulljs profile image
Nick Bull Author

Thanks, Gagandeep!

Collapse
workpebojot profile image
Edison Pebojot(👨‍💻)

This is so true to me

Collapse
chikodish profile image
Ankit Kumar Gupta

Thank you for sharing your knowledge. This is really helpful.

Collapse
nickbulljs profile image
Nick Bull Author

Thanks, Ankit ⚡️

Collapse
ajinspiro profile image
Arun Kumar

Nice one...! I'm sharing this with my juniors...

Collapse
nickbulljs profile image
Nick Bull Author

Thanks Arun!

Collapse
aleaallee profile image
Alejandro esquivel

I'm too lazy to work my social skills, on the first place I don't know how to improve them, in second place, I loathe socializing.