School VS Self-Taught Programmer Part 2: Soft Skills

Posted by : on

Category : General

Introduction

In the previous part School VS Self-Taught Programmer Part 1: Knowledge, I explored the differences in acquiring knowledge between formal education and self-teaching. In this second part, I want to address a topic that is often overlooked in the debate between getting a degree and being self-taught: the development of soft skills.

Contrary to popular belief, soft skills are crucial for a programmer. Efficient communication with your boss, clients, or co-workers; effective task scheduling; accurate time estimation; the ability to work within and lead teams; and handling stressful situations are all essential skills as important as coding proficiency.

Software development involves more than just coding. Many skilled programmers find that coding constitutes only about 50% of their job or even less. This is not time wasted. When we code, we are creating something that adds value for others. Our efficiency in understanding requirements, incorporating feedback, communicating with colleagues and end-users, making accurate estimations, meeting deadlines, and resolving complex problems—whether internal or external—greatly affects both our productivity and that of our team.

There’s no point in being a 10X programmer in a team of fifty people, that has so low communication skills and hard to deal personality, that decreases everyone else’s productivity by 20%. An believe me, 20% is nothing, some people can decrease the productivity of a team with poor leadership to a crawl.

In this discussion, I’ll examine aspects that are rarely considered in the debate between formal education and self-teaching.

Things That You Learn And Don’t Need, Teach You How To Deal With Things That You Don’t Like

If you remember, in my previous post, I talked about the 5% of the knowledge you will need, you get it in school. I also talked about knowledge that has nothing to do with practical things but is there to help you learn things faster in the future. The truth is, that in any CS degree, you will also get knowledge that won’t help you anywhere, ever.

You know this, as you try to read courses that you will forget just after the exams are over. These mandatory courses might be crucial for those pursuing academic careers or fields like hardware, but they may not be relevant to your specific interests.

This experience doesn’t have to be entirely negative. In real life, you’ll encounter tasks at work that you dislike or that seem irrelevant but still need to be completed. There’s a significant difference between scheduling time for tasks you enjoy versus those you don’t. It’s easy to procrastinate on tasks you find unpleasant. For instance, if you’re a freelancer who enjoys coding but dislikes accounting, you’ll still need to handle that accounting work. Similarly, you might dislike wading through legal jargon, but it’s part of the job. Every profession includes mundane, time-consuming, and tedious tasks that must be addressed.

This reality applies whether you pursue formal education or self-teaching. No one can provide a one-size-fits-all solution for finding the motivation to handle these tasks; you’ll encounter various opinions and subjective advice, but ultimately, you’ll need to discover what works best for you. In formal education, view these less enjoyable tasks as an opportunity to develop strategies for managing them in the future. While you can also learn to handle these tasks directly in a job, remember that failing in a job can have far greater consequences than failing in school.

Teamwork, Choosing A Team, Working Within A Team

Working effectively with others is a crucial soft skill that every programmer must develop. The productivity of a team is significantly influenced by the quality of communication among its members. As with other skills, you can learn how to navigate team dynamics through experience, but the consequences of failing at work are often far greater than those encountered in school.

Have you ever been part of a team where only two out of five members are fully contributing? Managing this situation doesn’t have a straightforward answer; it’s subjective and depends on your personality and the specific circumstances. Gaining experience in such situations is valuable, and it’s beneficial to practice in environments where the stakes aren’t as high.

This skill isn’t just about working within a team; it’s also about learning how to select the right team. At university, you might initially choose team members based on who you enjoy spending time with. However, you’ll eventually realize that different people excel in different roles. This doesn’t mean that your friends aren’t good teammates, but rather that they might not always be the best fit for every project. Over time, you’ll develop an understanding of who is best suited for various activities—whether it’s socializing, having serious discussions, partying, or collaborating on work projects.

You’ll learn that not everyone fits neatly into one category, that things are not black and white. Some people may be fantastic for socializing but not ideal for team projects, while others may be great collaborators but have vastly different interests outside of work, and that’s ok. This nuanced understanding is valuable.

The experience you will get, in learning to recognize the characteristics of people that will make your communication within a team easier, is also something that you can get during formal education, that the cost of failure is lower compared to real-world job situations.

Bad Teachers And Experiences Are A Good Thing

Bad teachers exist everywhere, and higher education is no exception. Sometimes, they may be poor educators, unpleasant individuals, or simply people you find difficult to tolerate. While being in such a situation is frustrating, it can also serve as an opportunity to learn how to handle challenging circumstances or at least make compromises until you can transition to a better environment.

The issue isn’t limited to teachers. In the workplace, you might encounter a boss or manager who is ineffective, difficult, or simply unpleasant. Learning to manage your emotions and respond professionally while seeking a better job is challenging. No one can teach you this skill; it’s something you must develop yourself. Until you gain the necessary experience, you may make mistakes and regret your actions or words in the heat of the moment.

As before, although dealing with difficult people may seem like a negative experience in school, it is an inevitable part of life. It’s better to face these challenges and gain experience on how to deal with them in an environment where the stakes are lower and the consequences less severe than in a job, where poor handling of such situations could impact your salary, job security, reputation, or even your career.

Deadlines, Managing Your Time, Scheduling

Another challenge self-taught programmers often face is managing deadlines, making accurate estimates, and efficiently organizing their time. This struggle isn’t permanent; over time, everyone learns to make realistic estimates, meet deadlines, and develop schedules that help avoid burnout.

Avoiding burnout is one of the most frequently asked questions in software development, and the answer is that you must find what works for you personally. You’ll encounter various opinions, and while each may be valid for the person sharing them, they may not apply to you. Discovering what works best for you requires more than a short-term project. A 2-3 month period may allow you to “push through,” but your methods during this time may not be sustainable in the long run.

Different people have different productivity patterns: some are most productive in the morning, while others work better in the evening. Some prefer to code first thing after waking up, while others need to handle daily tasks before coding. Some can code for ten hours straight, while others take frequent breaks or naps.

Don’t assume that a method that works for a short period will necessarily be effective for decades. Formal education, with its structured environment and extended duration, can provide a different perspective on time management and productivity. With exams and projects, you gain practical experience in estimating task durations, scheduling work, and meeting deadlines. Eventually in four years, you get the experience you need on how to estimate the time each task will take to complete, when you should schedule your work, how you prefer to work, what makes you better at honoring deadlines and generally what works best for you and how to maintain productivity.

As before, this is not something that is exclusive to formal education, but it is something that cannot be self-taught as long as you are teaching yourself, as there are no real consequences for missing deadlines. This is something that if you don’t get the necessary experience in school, you will get it in you job, where failing to meet deadlines can have much more serious repercussions than in an educational setting.

Networking With Fellow Students

Networking with peers is beneficial at any stage of your life. Meeting people with similar interests, discussing code, and discovering job opportunities often happen through socializing with like-minded individuals. However, there is a challenge: at any meetup or networking event, everyone tends to present themselves in the best possible light regarding their programming skills. While it’s understandable that many job opportunities arise from such connections, it can be difficult to gauge the true abilities of everyone you meet.

People often strive to showcase their skills impressively, making conversations feel more like reading a LinkedIn profile than engaging in casual dialogue. And we all have seen that linkedin profiles, can be a contest at exaggeration.

One thing that may be common in every country for students of higher education, is college life, partying. Especially in the early years, not many people will be thinking about their future job and instead will be thinking about having fun. However, among those students, there are always a few whose idea of fun is staying up all night coding rather than hanging out at a bar. Even if that’s not your idea of enjoyment, staying in touch with these individuals is likely the best networking move you can make. They are genuinely passionate about coding, preferring to spend their nights building something rather than engaging in social activities. These are the people you should keep in contact with—not only because they might offer job opportunities in the future but also because their passion and opinions on coding are highly reliable.

Out in the real world, when people have to deal with the problems that life throws at you, it is hard to create close connections with like-minded individuals. The responsibilities of a job, limit everyone’s time and energy, making it harder to casually build relationships compared to the opportunities available during college life.

Is The Question Legit Or Because Of Laziness

The debate between formal education and being self-taught can vary greatly depending on who is asking. Often, it boils down to the question: “Do I need to navigate the challenges of higher education, or can I take a shortcut and start working after just a few months?”

You can indeed begin working after a few months of learning to code, but there are no shortcuts. Everything you can learn from higher education can also be gained through work, but you cannot bypass or avoid essential experiences. This is why being self-taught can be more challenging. It’s not just about the technical skills you need to acquire; it’s also about gaining experience in areas not directly related to programming. Gaining that experience is much harder to do, while managing job responsibilities, paying bills, staying employed, and learning things about coding while also honing your soft skills.

Higher education may present difficulties such as dealing with tasks that aren’t directly related to your work, meeting deadlines, working with people you may not get along with, or handling problematic teams and burnout. These are not issues you can avoid by going straight into the workforce. On the contrary, there are no shortcuts, you can’t just “jump over” things, the only thing that will happen is that you will have to learn to deal with all those in parallel with your work.

Conclusion And A Personal Story

Formal education provides experiences and teaches you how to handle challenges that you’ll inevitably face. While not everything about it is ideal, and you might encounter some negative experiences, these are valuable learning opportunities. Your formal education is not the end of your learning journey; rather, it serves as a foundational job. Although you won’t receive a salary, what you gain is that it can, if you let it, teach you things you will need to know outside of subjects directly related to coding that you will need at your job. You don’t get paid, but this is balanced by the easier to deal consequences of failing until you get it right, in contrast with a real job, where consequences hurt much more.

If you are a student, and you complain about things that you don’t like, remember: Higher education is not supposed to be perfect, it is an emulation of the real world that you will have to deal with. For every bad teacher there is a bad boss. For every hard to communicate fellow student there is a hard to communicate coworker and for every time you didn’t feel like reading and went out to have some fun there is a deadline that you won’t miss because you have the experience now to go out but not over do it, or procrastinate.

Finally, I want to share a story from my student years and how that mirrors reality. One day, a teacher says that he will give us homework for next week, but one week should be enough time to do it. After that, another teacher, on the same day, tells us the exact same thing. We told him that we just got another homework with the exact same deadline an hour before, and he replied that we are right to complain, there should be more communication between the teachers, but because he has a trip abroad, he can’t do differently so he will give us the homework. At the exact same day, the teacher after the last one, comes inside and says that we will have a test next week with all the things in his course we have been taught so far. When we explained to him that we already have two homeworks for the next week that weren’t scheduled, he was very polite and considerate. He told us that he understands our problem, that we are right and this shouldn’t have happened as it is too much work for anyone for a week. Unfortunately, there was a conference in two weeks and he would like to have finished grading the tests before that, as he would be very busy during the conference, so the test will happen next week.

At that moment this might seem horrible, and make you angry. Suddenly you find yourself with so much work to do, instead of the teachers actually communicate and scheduling their exercises and tests in three weeks instead of one. Still you try your best, you get some experience from it and move on.

After some years, I was working as a freelancer. The same exact thing, happened with three of my clients. Suddenly on the same day, each one called and told me they needed a job to be done that was urgent. All of them were polite and considerate and told me that they were sorry for telling me that late, but it was very important to them. Still they would understand if I didn’t have the time to do it (and that they would search for someone else as all of them really needed their job done). The only reason I didn’t panic and knew that I could do it, is because I had the same experience years before. I knew how I should schedule my time, when and how much to work and when to rest, how good is good enough and how to keep my emotions in check to avoid procrastinating or a burn out.

No one can teach you experience, experience cannot be taught, you have to gain it yourself. If you have the opportunity to gain experience in a low-risk environment, such as during formal education, you should seize it. The key is not choosing between formal education and self-taught methods, but rather integrating both. It is formal education AND self-taught.

If you think that formal education is enough because you were taught a few things and got a paper that says you are amazing, you are mistaken, self-taught programmers will surpass you in no time. On the other hand if you think that being self-taught, can be a shortcut and that you will avoid certain situations that are not needed, you are mistaken again. You will have to gain the knowledge of coding while gaining experience at the same time on how to deal with the situations you thought you avoided. It will be a lot harder than having a formal education, in an environment that consequences hurt a lot.

Thank you for reading, and as always, if you have any questions or comments you can use the comments section, or contact me directly via the contact form or by email. Also, if you don’t want to miss any of the new blog posts, you can subscribe to my newsletter or the RSS feed.


Follow me: