Tips, advice, and guidance for changing your career.
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.
As an aspiring software developer, you must immerse yourself in the software industry and its culture. You need to be able to speak the language of software, in addition to knowing how to code. Fortunately, the software industry has a culture of openness and sharing, so there are plenty of ways to learn about it. One source of information comes via podcasts. Our engineering team at Bloc assembled a Top 10 list that aspiring developers should follow, in no particular order:
Accidental Tech Podcast was created by three people, two of whom are developers. In the podcast, they discuss industry trends, capabilities of new devices, new products with great design, as well as other topics.
CodeNewbie features stories about people who are new to development and are now working as developers full-time.
Shop Talk Show is hosted by Chris Coyier and Dave Rupert. They interview notable developers, designers, and other industry leaders to discuss hot topics in development and design.
Software Engineering Radio targets professional software developers. Each episode focuses on specific topics as well as tutorials on software engineering.
Ruby Rogues is dedicated to the Ruby programming language. It features technical discussions as well as general concepts on Ruby.
This Developing Story was developed by Bloc’s very own Brian Douglas. As a former student and current engineer at Bloc, he interviews new developers to discuss their stories about learning and becoming software engineers.
Under the Radar is primarily for independent iOS developers. However, it hosts a lot of discussions about the day-to-day responsibilities of being a developer.
While short-lived (only four episodes), Reboot is worth listening to. The podcast, hosted by Thoughtbot, shares the stories of people who transitioned from non-technical careers to software development.
Release Notes’ features news and information about Mac and iOS indie software development. Hosts Charles Perry and Joe Cieplinski discuss topics, tricks, and tips for new developers focused on Mac and iOS platforms.
Mule Design’s Mike Monteiro and company host Let’s Make Mistakes. While it focuses more on design than development, it’s worth listening to for anyone who thinks about software.
While not all of these strictly apply to software development, their topics are interesting and each conversation can help you understand the industry as a whole.
If you look through the history of each podcast, you can also find other topics of interest or topics that pertain to a particular skill you’re trying to learn. As you listen, don’t be worried if you’re not familiar with all of the concepts they’re discussing. Listen to the context of each concept they talk about, and take notes on things you want to continue learning. You then have the ability to follow up by Googling or searching on Stack Overflow for more information. Several of these podcasts also have “Show Notes” associated with each episode, such as this Accidental Tech Podcast episode. They have links to articles with the topics covered in each show, and you can use those to continue your research.
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.)
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.
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.
Here are the main differences:
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.
Ask any VP of Engineering or CTO, and they’ll tell you hiring talented developers is getting harder. Meanwhile, ask one of the millions of underemployed millennials, and they’ll say they are willing to learn, but can’t get their foot in the door. Apprenticeship was once a commonplace feature of the American economy, but for the last 30 years it has been in decline. Apprenticeships are the critical link to closing the skills gap for employers and reducing unemployment for millennials.
To understand why apprenticeships can bridge the gap, let’s take a look at the marketplace for technical talent.
First, the gap between supply and demand for technical talent is widening. On the supply side of the marketplace for technical talent, we have universities. According to the Department of Labor, 400,000 new CS grads will enter the workforce between 2010 and 2020. In that same period, nearly 1.4 million new tech jobs will be created. That’s a shortage – a skills gap of – 1 million more jobs than graduates.
Second, even those students graduating in computer science, aren’t prepared for careers in software engineering. Universities care about helping students become job-ready. But that isn’t their singular goal. Many also seek to teach a liberal arts education and to publish ground-breaking research. Because of this, there is no singular focus on one goal. As a result, students graduate ill-prepared for industry. According to Brad Neese, director of Apprenticeship Carolina, employers are seeing “a real lack of applicability in terms of skill level” from college graduates.
For example, top tier university computer science curricula often include courses in advanced math, physics, compilers, and operating systems. When we surveyed engineers at top companies like Twitter, Facebook, Google, and Amazon, they told us they used less than 25% of their university education in their career. According to Rob Gonzales, co-founder of Salsify, “many ‘core’ CS courses really aren’t that critical for becoming very productive engineers. I’ve never had to write a compiler or operating system in my career, and the last time I thought about finite automata was 2001 when I was studying them myself.”
Meanwhile, few universities teach essential skills a software engineer will use every day. According to Mo Kudeki, a Software Engineer at Twitter, “Although I went to a top Computer Science program, there are software engineering topics that we never covered that are crucial to being a great engineer, like how to methodically debug something, and how to give and receive a good code review.”
All of these factors combined result in a tremendous mismatch between the skills with which American students graduate and the skills needed by employers.
While employers are hungry to recruit great talent, their appetite for growing that talent themselves has been declining for the past decade. According to Lauren Weber of the WSJ, apprenticeships in the US have declined over 30% from 2003 to 2013.
Furthermore, even those companies that want to provision such training may be unable to do so. Training programs require experienced instructors. According to Gonzales, “you must have someone to manage the program full time, including doing daily coaching, code reviews, design sessions, planning sessions, one-on-ones, communication outside of the group to gather requirements, etc. This person should be respected throughout the organization, as getting the program started and effective is going to be a bumpy road that will draw on company resources even beyond the coach.”
Unfortunately, the shortage of technical talent has left most companies without the bench strength to fill existing headcount and also train a large pool of junior developers. According to Marcy Capron, the founder and CEO of Chicago-based Polymathic: “Companies don’t have an infrastructure for ongoing learning. We really need a guide to mentoring junior devs. Hourly consulting firms can’t afford it because you can’t bill mentoring to the client.
So with universities failing us, and employers hungry but unable to grow their own talent, a new breed of apprenticeship-like programs have leveraged technology to deliver better outcomes, more affordably than ever before. Computer science bootcamps put students through compressed programs to prepare them for coding jobs. These bootcamp programs have found traction with employers and graduates alike. The first coding bootcamp was founded just four years ago, but Course Report estimates that over 150 bootcamps graduated more than 16,000 alumni in 2015 – a combined estimated market of $180M, up from $0 in 2011.
According to Western Governors University President Bob Mendenhall in the Washington Post “Neither accreditation nor regulation has caught up with the power of technology to impact both the quality and cost and accessibility of higher education.” And last month, Udacity raised $105 Million bringing their valuation to $1 billion, Dev Bootcamp was acquired by Kaplan, and Bloc recently announced a year-long Software Engineering Track, which includes a three month apprenticeship, before students start the job search. And now a slew of specialized apprenticeship programs are emerging.
Employees are also more open to non-traditional university education than ever before. According to a 2014 survey by Glassdoor, 72 percent of employees said they value specialized training over earning a degree. What’s more, 63 percent of respondents said they believe that nontraditional ways of learning new skills — such as certificate programs, bootcamps, webinars and massive open online courses — could help them earn a bigger paycheck. This growth for nontraditional skills training may be coming at the expense of graduate programs, with more than half (53%) of employees saying a graduate degree is no longer necessary to be offered a high-paying job.
As apprentice-like programs cross the chasm from early adopters to early majority, we may see see savvy millennials foregoing the traditional 4-year campus experience in favor of a leaner hybrid, pairing community college with a technical apprenticeship that gets them into the workforce and learning on the job earlier and with less debt.
With the hype around coding bootcamps reaching it’s zenith, we may see these programs coming full-circle, as they begin adding-back curriculum covering the computer science theory that they once eschewed.
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.