on Tuesday, April 12 @ 8:22pm
Software developer positions are highly desired. Just as astronauts, Supreme Court justices, and Hogwarts professors must have a variety of skills and knowledge, software developers have a combination of technical knowledge and soft skills. This post explores the skills that many companies look for.
To be effective, software developers need to know how to use modern tools:
– version control software (like Git) – issue trackers (like Jira and Pivotal Tracker) – web computing services (like Amazon AWS and Heroku) – database programming software (like SQLite and PostgreSQL)
The knowledge of these is critical to the duties of a developer. Without knowing the tools that modern teams use, it may be difficult to collaborate with team members, organize source code, or prioritize tasks.
Software developers are responsible for implementing new features. As part of this process, they’ll need to work with developers and engineers on their team to select a specific approach. Debate, disagreement, and discussion are common, so negotiation, conflict management, and compromise skills are very important. While the computer programming part of the job is critical, software developers are expected to be team players who contribute more than simply churning out code.
Great code should be understandable and maintainable, but it should also perform efficiently. To write performant code, software developers need to understand how data structures, algorithms, and complexity relate. Different structures for storing data (like queues, graphs, trees, hash tables, etc.) can improve the way data is organized. Algorithms can provide different ways to search or sort this data, and different algorithms are preferred for different use cases. Complexity measurement, analysis, and optimization allows us to describe, measure, and improve the performance of a solution for a given problem.
Combined, these skills allow software engineers to write code that runs faster or takes up less space. Everybody hates to wait, so this work can vastly improve a user’s enjoyment of a product. Great performance can also help a product survive longer because it has a good foundation.
Software engineers are given a wide variety of tasks from small but critical bug fixes to architecting a major project. While issue trackers like Jira and Pivotal Tracker can help organize these tasks, engineers must comprehend the tasks and their relative priority, consider co-workers and customers whose work depends on these tasks, and organize their workflow accordingly. Critical thinking about task and workflow management is an important part of software development.
Whether it’s previous jobs, open-source software contributions, or your own personal projects, software engineers are expected to have practice working with large and complex code bases. This helps them understand how different parts of a program work together, which enables them to effectively add features and understand the cause of bugs.
When starting a new career, you want to give yourself every advantage. If that career is in software development, then learning computer science fundamentals is that extra bit of oomph you bring to each interview. Most bootcamps eschew these fundamentals for more pragmatic skills. But as these bootcamp grads expand the talent pool, recruiters start to see a lot of the same credentials.
To help our students stand out, we’ve included Software Engineering Principles in our new CS-degree replacing program: the Software Engineering Track. We included the following topics after consulting with some of the best engineering companies in the world, including Twitter and Google. Read on to learn why these four skill-sets are critical to every software engineer.
The Data Structures section challenges students to build and apply hash maps, linked lists, stacks, queues, trees, and graphs. Interviewers test for knowledge of data structures because these constructs are the most commonly employed tools in software development. We dissect these structures to reveal how they work, and thus provide students the insight necessary to optimize their use.
Some data structures perform better than others, and each applies to specific scenarios. Using the wrong data structure can hinder performance, and relying on an unsuitable data structure can lead to illegible code and wasted effort. In one example, students build two versions of a favorite film organizer, each powered by a different data structure. This project demonstrates how choosing the right structure improves performance and utility.
Algorithms act upon data to sort, calculate, or otherwise manipulate information into a desired form. For example, given a set of 10,000 numbers, return the five smallest. We can devise infinite ways to perform this work, and each way represents a unique algorithm.
Students study known algorithms as well as their complexity to understand the performance cost of each. Complexity analysis goes further to assess the value of any piece of code: both the number of operations required as well as memory consumed. This is a critical skill to have, chiefly for those students hired by firms that work with large data sets. The cost of a small oversight is minimal when operating on 12 pieces of data, but enormous with 12 million.
Databases provide the storage backbone for nearly all applications. Frameworks such as Rails help abstract the database from the developer with Object-Relational Mapping (ORM). While beneficial to the seasoned coder, these abstractions can hinder a beginner’s understanding of how modern software reads and writes persistent data.
During the Databases section of the Software Engineering phase, we instruct in the Structured Query Language, more commonly known as SQL. We use SQL to build an ORM by creating tables, inserting data, accessing rows, and performing other common framework operations. Students will also learn how to support object associations and protect their databases from malicious injections.
For companies like Facebook, their database structure is critical. Facebook users across the globe access millions of data elements every second; a poor query or mal-designed schema can translate to countless dollars lost every day.
With a working understanding of Rails, data structures, algorithms, complexity, and databases, students will build a new framework. The Software Engineering phase requires this because it removes the last metaphoric road block that separates an amateur from a professional.
After completing this project, students are no longer mere users of a framework, they are its marshals. They understand how frameworks operate and need not assume how Rails brings their applications to life. This section empowers the idea that nothing is beyond a student’s understanding.
Comprehending framework design is critical, especially for employees at GitHub. GitHub once ran on a forked version of Rails which they modified to suit their product’s needs. Without the requisite knowledge, creating and maintaining a custom framework is extremely difficult.
At their core, Bloc’s Software Engineering Principles address the gaps of knowledge between a web developer and a software engineer. By dismissing the “magic” of software, students acknowledge that beneath every shortcut and library, more code exists. Students armed with this knowledge are more valuable to future employers, coworkers, and projects.
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.
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.
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.
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.
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.
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.
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.
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.