Don’t Learn to Code in 2016

on Saturday, April 2 @ 1:26pm

If you want to fail at something, make it your New Year’s resolution. “I will get in shape,” “I will be a better friend,” and “I will learn to code” are all unattainable goals. Goals in general are misguided and formless ideas. Achieving something is the result of many small steps performed consistently, not the result of an intangible idea.

I’ve worked at Bloc for three years, and have seen many students learn to code and change their careers. I’ve also seen students fail. I believe most students fail because they focus on the goal of learning to code, rather than the steps for learning to code. If you want to become a developer in 2016, don’t make learning to code your goal. Instead, complete small tasks related to coding, and do them consistently. Each of the tasks below requires only 10 minutes. To kickstart your new coding habit, do at least one per day. I’ve outlined six tasks, so even if you do all of them in a day, you’ll only spend an hour.

Sign up for GitHub and Watch a Repository

GitHub is where developers collaborate on software. You won’t be able to contribute code right away, but there’s no reason not to sign up for a free GitHub account. A GitHub account allows you to follow developers and source code (known as repositories, or “repos” in GitHub). Pick a few repositories and follow them by selecting the “Watching” notification, shown below:

watch-repo

You’ll receive emails when developers update the repositories you watch. Read the updates and focus on the narrative – you won’t understand the code yet – just read the comments and get a sense of what the developer is trying to do with the code they submitted. Here are a few active repos you can watch, though the actual repo isn’t as important as becoming comfortable in GitHub, and learning how developers collaborate.

  • Twitter Bootstrap – The most popular HTML, CSS, and JavaScript framework for developing responsive, mobile first projects on the web
  • jQuery – A JavaScript library that makes it easy to program dynamic web site interfaces
  • HTML5 Boilerplate – A professional front-end template for building fast, robust, and adaptable web apps or sites
  • Ruby on Rails – A popular web application development framework

Codify Your Twitter Feed

Most prominent software engineers, developers, and designers use Twitter more than any other social media platform. Following them is a great way to learn about the software industry: trends, lingo, open source updates, hiring trends, etc. Unfollow Kim Kardashian, Justin Bieber, One Direction, and other people who don’t even tweet for themselves. If someone tweets their inane political ramblings – unfollow, pictures of their meals – unfollow. You get the picture; eliminate the noise in your Twitter feed. Once you’ve pruned your list of followings, consider following these prominent developers and companies:

  • Chad Fowler – Author, CTO, speaker, and early Ruby evangelist
  • Dave Thomas – Programmer turned publisher of one of the most well-respected technical book brands, The Pragmatic Bookshelf
  • David Heinemeier Hansson (DHH) – Creator of Rails, CTO at Basecamp
  • GitHub – The world’s most popular code collaboration tool
  • John Resig – Creator of jQuery
  • Kent Beck – Author of Test-Driven Development, programmer at Facebook
  • thoughtbot – Well-respected development and design consulting firm, and prolific open source contributors
  • Yehuda Katz – Prolific open source developer, Rails contributor and Ember creator

This is a small list, but once you follow them you’ll receive recommendations for people like them. Spend 10 minutes per day reading their tweets, and you’ll start to learn about the software industry and how developers think and speak. The purpose is not to mimic them, it’s to understand them.

Ask a Question

I’m always surprised at how much I can learn when I simply ask the right person the right question. No matter if you’re a total beginner or an expert, you will always have questions when learning. To receive a good answer, you must ask a good question; yes, bad questions exist. A question is bad if it’s not asked thoughtfully. A thoughtful question provides context, is articulate, and has a defined scope. Here’s an example of a bad question:

I have a Ruby array of two fruits, and I can’t seem to access an element successfully. What does “nil” mean?

That’s a bad question because it’s impossible to answer without more information; it lacks context. How are you trying to access the element? Which element are you trying to access? Are you getting an error? If so, what’s the error? Does nil refer to the problem you’re having or something else? Ask a bad question like this, and you’ll get a bad answer.

A good question looks like this:

I just started to learn Ruby. I have an array consisting of two fruits: fruits_array = [“apple”, “banana”]. I’m trying to access “banana” by referencing fruits_array[2] but keep receiving “nil” in my irb. Why won’t it return “banana”?

This is a good question because it’s written well and is grammatically correct. It also provides adequate context: “I just started to learn Ruby,” “I’m trying to access by…,” “I keep receiving nil…,” etc. This question provides all the facts someone would need to answer it. It’s an easy question to answer for an experienced developer, which makes it likely that someone will answer it and answer it well.

There are many great places to ask questions. Quora is built for asking questions in general and Stack Overflow is built for asking technical questions. We’ve written “Getting Help on Stack Overflow” at Bloc, which provides details on using Stack Overflow. Once you have a GitHub account and have codified your Twitter feed, you can ask questions on those sites as well.

Write a Blog Post

Writing is one of the best ways to improve your coding skills, because it forces you to clearly articulate your intent. Coding forces you to articulate your intent as well, only to a computer instead of a person. You write for people, you code for computers, but you use the same thought process for both.

Write 100 words (less than half a page) about anything you’d like. The only constraint is that you must try to clearly articulate your thoughts. Medium is a great platform for writing, and integrates with your Twitter account. As a separate task, read Writing to Learn by William Zinsser. It will open your eyes to the power of writing.

Write Code

At some point, of course, you’ll actually need to write code. There are many places to write code – none better than a simple code editor on your laptop – though as a beginner you may want an easier place to start. Sign up for a free account with Codecademy and Codewars. Codecademy has tutorialized, in-browser courses that teach you the basics of programming syntax, while Codewars will challenge you to solve puzzles (called “katas”) with different programming languages. Both are great places to practice writing code.

Read Code

Reading code is an under appreciated practice. It may not be as exciting as writing code, but it is equally, if not more important. GitHub and Codewars are great places to read code. You don’t need to understand all the code in a GitHub repo or Codewars kata; start small and pick a class, method, or single line of code. Use the Rubber Duck technique to explain the code to yourself. By reading code you’ll expose yourself to new patterns, syntax, logic, and approaches that you would not otherwise know. Tutorials can only teach you so much, reading code will take you much further.

10 Minutes a Day and Free!

All of these small tasks are free – they don’t require subscriptions or memberships. You won’t learn to code by doing these tasks consistently, you will code. Please, don’t make a grand resolution on December 31st – instead, commit yourself to small tasks and you’ll succeed in 2016. After you’ve created habits out of these small tasks, you may find yourself wanting to take your coding journey to the next level and change careers.

At that point, consider Bloc’s Software Engineering Track, where you’ll learn full stack web development, computer science, and open source software development with an experienced mentor. We guarantee you’ll get a job after you graduate, or we’ll refund your entire tuition.

I may not love New Year’s resolutions, but I do love New Year’s Eve; friends, college football, those tiny hot dogs… it’s an amazing night. Happy New Year, and I hope you find success in 2016.

More advice on changing careers

Best Podcasts for Aspiring Software Developers

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:

  1. 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.

  2. CodeNewbie features stories about people who are new to development and are now working as developers full-time.

  3. 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.

  4. Software Engineering Radio targets professional software developers. Each episode focuses on specific topics as well as tutorials on software engineering.

  5. Ruby Rogues is dedicated to the Ruby programming language. It features technical discussions as well as general concepts on Ruby.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.

Best Podcasts for Aspiring Software Developers
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?