7 Traits of Effective Software Engineers

on Wednesday, March 23 @ 3:35am

If you’re considering a career as a software engineer, then you may have heard how difficult it is to learn. But the right mindset can give you a significant advantage when learning and working in the industry. Software engineers who embody these seven character traits are valuable employees and productive contributors.

Curiosity

It’s what killed the cat, apparently, but that cat was a rock-solid engineer. Great engineers take responsibility for learning and exploration. They do not depend on their superiors to give them explicit direction for a new challenge – their curiosity guides them to reach their own conclusions.

At my first job as an engineer, I worked on an Android game. In the middle of working on a new feature, I noticed that some background tasks consumed an inordinate amount of time. After some investigation, I discovered that we relied on an Android API that took 50% longer on average to complete when compared to a simpler Java counterpart. I reported my findings and as a result, we swapped one for the other in all cases.

An engineer who seeks out new information and investigates the product may discover something new in the process. More importantly, the more versatile an engineer, the more valuable they become. Learn to serve your curiosities and feed them with research and experimentation.

Grit

All engineers require mental stamina. As a new engineer, you won’t solve the most challenging problems during your first attempts. In fact, you may have to spend days, weeks, or longer looking for a solution before finding one that meets both business and product requirements.

If you give up readily, you may not find yourself working on anything interesting, or anything at all. Engineers love solving problems and most refuse to give up until they work them out. Grit is what keeps engineers from throwing in the towel.

In 2014, the popular blogging platform, Medium, encountered a problem rendering underlines in Chrome. The author, Marcin Wichary, states that what was thought to be a one-night project turned into a month-long effort. After brainstorming seven approaches, the team settled on one and Marcin implemented it. Fixing something as seemingly trivial as a proper underline required incredible tenacity and the product is better for it.

Communication

This one is a no-brainer, but if you want to be a part of a functional team, you must communicate. If you’re shy or quiet, that’s fine. You can make up for shyness by communicating effectively in writing.

At Bloc, we rely on asynchronous communication – one out of every six employees works remotely. We use email, Slack, and GitHub to facilitate feedback and discussion. In these messages, we try to use as few words as possible and get to the point fast. This keeps our co-workers focused and eager to read and respond.

Your team needs to know what you’re working on and if they frequently ask for clarification, they may stop asking altogether. By communicating frequently and in brief but descriptive messages, your team will look forward to speaking with, and hearing from you.

Attention to Detail

Despite being another predictable member of this collection, attention to detail is vital for engineers and thus worthy of mention. If an employee at McDonalds applies two ounces of special sauce to your Big Mac instead of two and a half, will you notice?

As a software engineer, if you mistype even one line of code, it can crash an entire application. Details comprise software, and companies hire engineers to craft those details well. If you are someone that looks solely at the big picture, you have to learn to zoom in.

At Bloc, our students rely on our custom curriculum to learn the software trade. If we mistype a line of code or introduce a grammatical error, the student’s ability to learn the subject is significantly affected. We use grammar tools like spell check, linters, and Grammarly to draw attention to pain points.

Divergent Thinking

Some call this, “thinking outside of the box,” but saying that would be yet another cliché and this post has reached its limit of those. When solving challenging engineering problems, the best solutions often come from adopting a new perspective.

If everyone took a crack at a problem from the same angle, they would ultimately arrive at a similar solution. But a diverse team whose approach varies among its members will generate more ideas and non-conventional solutions. You and your team will benefit if you broaden your ability to see things that others overlook.

To allow team members to share new ideas and solutions, we occasionally hold hack day events at Bloc. These hack days, like hackathons at Facebook, permit anyone in the company to work on anything. Thus, people who rarely interact with an aspect of the Bloc product can build new features or solutions that the dedicated team had not yet thought of. For example, our hack days helped us design a new payment flow, student portfolios, a student glossary for recruiters, and so much more.

Modesty

Engineers collaborate, even when managers assign a task to just one engineer on the team. Team members review each other’s code before deploying it to production, and during these reviews, they may criticize or recommend significant changes to code written by their colleagues.

Engineers open to receiving critiques and feedback receive more support from their teammates, and the engineers that receive more support make bigger contributions to the product. More importantly, the product suffers if an engineer deploys code without revising it to meet the expectations of their peers. A good engineer is modest and willing to consider a different approach suggested by their team.

At Bloc, we have a thorough review process both on the engineering and curriculum side. Before we published this blog post, it received editing passes from two individuals that looked for quality content and prose. I was responsible for accepting modifications and including content suggested by my peers; the post is better for it.

Wolf Pack Membership

It’s common for some engineers to isolate themselves and work without consulting their teammates. The industry refers to this proclivity as Lone Wolf Syndrome. Lone Wolves, much like the animals after which we’ve named them, do not survive for long. Wolves hunt in packs, and engineers must collaborate.

To be a productive engineer: seek help when needed, express yourself when overwhelmed, offer to help when you see peers struggle, and in general, engage with the group. No one on your team is excited when one person goes off and returns with unwanted or otherwise broken code. Acting as part of the team builds better relationships and trust among your co-workers.

If you believe that your personality is set in stone or that you’ve grown fixed in your ways, we recommend you read this article from Psychology Today. Those who study the mind believe that personality is flexible and with concerted effort, anyone can alter their disposition.

More advice on changing careers

Should I Become a Software Engineer or a Junior Web Developer?

The software industry uses words like hacker, programmer, coder, developer, engineer, and architect to differentiate between similar-but-not-identical skill sets. These terms are poorly defined, which causes ambiguity, and their appropriate uses are still debated today:

Bloc offers two related Tracks for students who desire to learn these skills: a Full Stack Web Developer Track, and a Software Engineer Track. Since the definition of these terms can be ambiguous, let’s be explicit about what we mean. (Others may use these terms differently.)

fst-vs-set

If you graduate from the Full Stack Web Development Track, you’ll be able to develop and maintain web apps. You will learn two programming languages, how to create databases, advanced styling techniques, and more.

But there exists a class of problems not covered by this Track. As an example, consider this question: “Given a list of cities and the distances between each pair of cities, what is the shortest possible route that visits each city exactly once and returns to the origin city?” It’s called the Traveling Salesman Problem because a salesman must travel through many cities and make the best use of their time. There are many problems like this.

For example, Airbnb might want its users to create search queries like “Given a city and a list of Airbnb rentals, what is the cheapest way to rent Airbnbs for three straight months, using only Airbnbs that have a dishwasher, a washer/dryer, or both?” A junior web developer may not be prepared to write code to efficiently answer that question. A software engineer grad is armed with techniques and skills that make them capable of solving these open-ended and complex problems.

Here’s an analogy outside of software development: a Full Stack Web Development Track graduate is like a construction worker who builds bridges. Bridge-building is highly skilled labor, requiring lots of practice and knowledge of different materials, approaches, scenarios, and designs. A great bridge-builder can adapt their approach to different types of gaps, different weight requirements, etc. But ultimately this person is combining existing tools to construct something, not designing something new.

A Software Engineering Track graduate is like an architect or civil engineer. This person understands the theory behind everything – not just which metal to use where, but why: how to measure it and prove it. This person also understands at a more fundamental level how the sausage is made: what goes into the metal alloy, or how the specific curve of a support beam is important. They are uniquely qualified to design new bridges, and make more creative, iterative improvements on existing bridges.

The former will likely always be employable, at least in areas with bridges. But the latter is indispensable to society: without them, we can never evolve. Ultimately, graduates of the Software Engineering Track can solve harder problems, handle more complexity, and create more robust software.

Now that you know the difference, consider which track to enroll in.

Which Bloc Track Should I Choose?

Given your hard work and diligence, Bloc Tracks will change your career and your life. All Tracks teach professional-grade software development skills, include dedicated one-on-one mentorship from an industry expert, and come with exclusive access to Bloc’s Employer Network and Career Services team. Each Track follows the tried-and-true Bloc approach of building real software, starting with carefully sequenced and technically rigorous curriculum and transitioning to independent work at the end.

In the Full Stack Web Developer Track, you learn the critical skills for modern web development, including Ruby on Rails, JavaScript, HTML, and CSS. You practice these by creating a variety of web apps during your course. Graduates of this Track are qualified to work as junior web developers.

Here are the main differences:

fst-vs-set-chart

Compared to the Full Stack Track, the Software Engineering Track (SET) covers more advanced topics, and requires one thousand hours of additional work. Both are premium experiences designed to help you get a specific outcome: new skills and a new job. SET’s length provides its students with enough time to master the advanced skill set. Whichever direction you go, a Bloc Track will teach you to write outstanding software, improve your career, and enrich your life.

Should I Become a Software Engineer or a Junior Web Developer?
Impostor Syndrome for n00bs

New coders, does this sound familiar? You’re finally getting the hang of programming. But then you overhear a conversation about a language you’ve never even heard of. Oh no! How could you call yourself a programmer if you’ve never even heard of Haskell? (How many programming languages are there?)

Easy, tiger. Impostor Syndrome is setting in hard. You feel like a fraud, even though your accomplishments show otherwise. Maybe you have successfully coded your first app but you feel like you’re pulling one over on the world by calling yourself a programmer. Or perhaps you enjoyed dabbling in Codecademy, but you could never actually make the switch to becoming a developer. Feeling this way is not only normal, it could actually be a signal of greatness.

Learning to program lends itself tragically well to Impostor Syndrome. There is so much to learn about programming, it’s impossible to be proficient in every aspect. Do you know how many people know everything there is to know about Ruby? Zero. Not a CS grad, not your smartest developer friend, not even the guy who created Ruby in the first place.

Rest easy, you’re not alone. No matter how experienced you are, you will always hear other developers talking about a new concept that you have never heard of. You may feel like you don’t belong in the conversation, but you do. Frame it as an opportunity to learn and become a better developer, and remember, everyone feels this way.

I can’t think of a group more prone to feeling this way than bootcamp students. The beauty of programming bootcamps is that they allow people with little to no programming experience enter and succeed in the field. Thus, if you called yourself a developer before you enrolled, you really would be an impostor.

At the most recent Bloc Career Talk, Bloc students shared their experiences with impostor syndrome. Hillary, a student in the Rails course, shares her experience:

I started as a technical analyst at a company that created a proprietary application that worked alongside SharePoint. For the first few months I imagined myself getting fired daily. Six months after starting I was promoted, and three months after that I was promoted again to a managerial position.

Hillary says she’s feeling impostor syndrome all over again as she sets out to land her first developer position, despite crushing her course and having four completed projects under her belt (way to go, Hillary!).

Okay, so there’s a name for this rotten feeling. Now what? As with many struggles, your first step is to recognize the issue. It’s only overwhelming and soul-crushing if you believe you’re the outsider. Think you really are the only person that feels this way? Try voicing your misgivings about your developer skills to a community of developers—I’d bet a lot of 1’s and 0’s that you’ll hear many others feel the same.

Once you realize that it’s a common struggle among beginners in any subject, the problem shifts from an internal judgment of yourself (“I’m just not a programmer”) to an opportunity to expand your skillset (“I have a lot that I can continue to learn”). The key to persisting through this forest of self-doubt, hopelessness, and anxiety is to accept what you don’t know, and challenge yourself to master it.

Then you can focus on progressing in your work to prove to yourself that you’re no impostor. If you’re facing an overwhelming problem, which is likely what led to all those “impostory” feelings in the first place, break it into tiny steps. Whether this is fixing a bug, writing an app, or getting to the end of your foundations, it will feel more manageable if you break the problem into pieces and celebrate the small wins.

At Bloc, students can connect and commiserate with fellow students on this topic and others in our Student Slack Community. During our Career Talks, students also get to fire their burning career switch questions at our captive Director of Student Outcomes, Courtland Alves.

This blog post is based on the recently hosted Bloc Career Talk covering Impostor Syndrome. Career Talks are bi-weekly seminars that facilitate discussion among Bloc students about the career search process.

Note: I struggled the entire way while writing this. Who am I to think I’m a writer? #impostorsyndrome

Impostor Syndrome for n00bs