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.
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:
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.
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:
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.
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 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.
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.
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.
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.
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.
All computer science programs are difficult. This is primarily because the underlying material is difficult to comprehend. Computer science encompasses philosophy, math, science, and logic. All of these can be both very abstract and very specific. Your CS program will be incredibly difficult in this respect. You will have to stretch your brain to grasp concepts that you didn’t even know existed, but you will be glad to have learned them when you’re done. You will have to wrap your mind around something as concrete as binary numbers to something as abstract as encapsulation. These small battles of understanding one particular topic at a time will help you understand the overall picture much better when you’re done. It will take you a long time to win a small battle, but this is why wars sometimes take a long time.
If you know the enemy and know yourself you need not fear the results of a hundred battles. — Sun Tzu
We will never understand the entire picture, but understanding computer science is a big piece to that puzzle.
You will fail. You will lose some battles. You will not understand certain things. It will take you a longer time to understand certain concepts compared to some of your peers, but you might learn other concepts more quickly. Failure is an integral part of success. If you don’t fail, you can’t learn from our mistakes and push ourselves into the next stage. A sailor who ties a knot incorrectly that causes a sail to blow out does not stop sailing; that person continues to sail until that knot is tied correctly. Repeated failure leaves a more permanent mark in your mind than repeated success does. This is called progression. Success tastes much sweeter when you have repeatedly failed.
This is a great thing! Nerds are a great type of people. Don’t be afraid to assimilate with your fellow nerds. Most nerds are introverted, but don’t be afraid to talk to them. Most likely, they want to talk to you as well! You might make a wonderful new friend or study partner, and these connections might be helpful down the road as you expand your career.
As is the case in most of life, you will never be the best. That doesn’t mean that you can’t be the best in a certain facet. Strive to compete with your peers in a respectable, reasonable way. You will not be the best, but you can be the best in at least one thing. Find that thing, set an example. It might be asking more questions in front of an audience, or solving a problem in a graceful manner while thoroughly explaining how you solved it. Find your talent and harness it.
When confronted with a problem, most computer scientists will tell you that, “there’s a better solution”. The truth is, they’re often correct. For example, one could use an iterative search to search through a list, but a computer scientist would tell you you’re wasting your time. But the trick is that you can still solve any problem with brute force. Giving up is the only type of real failure that you can commit.
Your journey starts in the marina. Your journey ultimately ends where you started. Along the way, you will experience both rough and calm seas. The reward is the wealth of experience and knowledge you gain. Your mistakes, failures and successes along the way will mold your character and build you into a tougher, more resilient person. You will also obtain a cunning ability to solve not just math and programming problems but also anything that needs more efficiency. When you are done, you won’t even care about your “merits” because you will be so excited with the new knowledge you have at your disposal to give to the world.
I work hard for the audience. It’s entertainment. I don’t need validation. — Denzel Washington
If you only learn what a CS program offers, you might graduate with very strong theoretical and analytical skills, but only minimal practical skills. To maximize your chances of getting a great job, ensure you’re also studying popular frameworks, platforms, and languages. For example, many employers expect software engineers to be familiar with modern tools like Ruby on Rails, GitHub, AngularJS, Heroku, Amazon AWS, etc. The combination of a theoretical foundation with practical skills will make you invaluable to any team.
If you’re considering a CS degree, you might want to compare it with Bloc’s Software Engineering Track which builds upon CS degree fundamentals with things like mentors with actual industry experience, an open source apprenticeship, the aforementioned technologies, and a whole community of people rooting for you every step of the way.
Go forth, and conquer!
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.