7 Things I Wish Someone Told Me Before I Started a CS Program

on Friday, April 1 @ 4:29pm

It will be difficult

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, but you will also succeed

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.

You will be working with analytical people, AKA: you will be working with nerds

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.

You will not be the smartest person in your program, but you have the ability to be better than the smartest person in some way

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.

The key to succeeding is to never give up

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 is your reward

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

Computer science programs focus on theory over practical application

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!

More advice on changing careers

The Modern Computer Science Degree

Coding Bootcamps and Computer Science degrees are popular routes for students to launch careers in software development. Coding bootcamps average 12 weeks in length, and teach practical skills like building web applications from scratch. They prepare students for a job as an entry-level web developer, intern, or freelancer. Computer science programs average 4 years in length, and teach a wide range of concepts in programming, algorithms, advanced math, statistics, and general electives which may not correlate with computer science.

Coding bootcamps and computer science programs are the two most prevalent ways to start a career as a software professional. But coding bootcamps lack computer science fundamentals, and computer science programs often lack practical experience, and are extreme commitments in time and expense. The gap between what you learn in a coding bootcamp and computer science degree is why we created the Software Engineering Track.

software-engineering-job-critical-skills

Bloc’s Software Engineering Track teaches practical skills and combines them with advanced computer science topics and open-source software development. It teaches you everything you need to be a professional software engineer, and leaves out everything you don’t. We know this because we built the program after consulting with companies like Google, Facebook, and Twitter. After consulting with top engineering teams, we developed this chart to represent the programming learning curve:

Programming-Learning-Curve

We believe that 2,000 hours of focused study and practice are essential for becoming a software engineer. This chart shows where you’ll be after graduating from a coding bootcamp — which is between 500 and 1,000 hours — but it doesn’t explicitly illustrate why our Software Engineering Track is more effective than a computer science degree. Let’s explore four reasons why Bloc’s Software Engineering Track prepares you for a career in software engineering more effectively than a computer science degree.

For more information on why coding bootcamps often fall short, [read this blog we wrote about the topic](NEED URL).

cost-and-time

Time is a Feature, When It’s Focused

A computer science program is four years worth of full-time study. This roughly totals to 6,000 learning and study hours. Thousands of those hours are unlikely to directly help you once you get a job though. A computer science program forces you to take electives, and advanced classes on artificial intelligence, history of computing, and theory that are not easily translatable to working as a professional software engineer. It’s not that these are bad things to learn – they may provide some useful life lessons – but they are not essential for becoming a software engineer. Bloc’s program includes 2,000 hours of learning and study hours, and every single hour is meaningful in becoming a software engineer.

Spending one year learning everything you need is a better use of time than spending four years learning many things you don’t. There’s plenty of time to learn new things in life, but when you’re paying to learn, the topics should be directly related to the outcome.

Avoid Life-Altering Debt

Computer science programs range in cost based on factors like residency, school, and financial status. A four year degree can easily reach into the six figures. For this reason, many students are forced to take out loans with interest rates between 4% and 6%. This is life-altering debt that will likely take years to pay off.

Bloc’s Software Engineering Track is not cheap — $24,000 is significant amount of money — but with reasonable payment options this amount should not be life-altering. In fact, financing as low as $750/month is available, which allows you to pay for the course after getting a job. Also, Bloc offers a tuition reimbursement guarantee that if you are not able to find a job as a software engineer with a starting salary of at least $60,000, you’ll be refunded in full. No computer science program offers such a promise.

At $24,000, Bloc’s program is a fraction of the cost of many computer science programs, and offers a tuition reimbursement guarantee on top of that. Your investment in Bloc is much smaller than it would be in a computer science program, and also much safer due to the reimbursement policy.

Return on Investment

ROI is a financial acronym that stands for “return on investment”. It explains what you’ll earn as a result of an investment. Not only is Bloc’s program a fraction of the cost of a computer science degree, but it also employs you faster. After one year, you’ll start earning a full-time salary as a software engineer. The return on your investment of $24,000 will be greater proportionally to that of an investment in a computer science degree, and it will also come quicker. The ROI you realize from a smaller investment and earning at a faster pace can have exponentially positive results over decades. But most importantly, you’ll also start a career doing meaningful work. Software is eating the world because it solves real problems. As a software engineer, you’ll be able to positively impact other people’s lives through software, and the value and satisfaction you realize will be incalculable.

mastery

Path to Mastery

No matter how great a computer science program, coding bootcamp, or our Software Engineering Track is, it will always pale in comparison to the experience you have working as a professional. The lessons you learn in a classroom setting will never match what you learn when you’re on the job. The apprenticeship model – which we employ in the Software Engineering Track – is an improvement over the classroom, as it provides training and lessons in a practical setting, but even it doesn’t match the effectiveness of learning on the job.

To become a master at something, you have to practice a lot, and you have to practice in realistic settings. There is nothing more realistic than practicing your skills when you are being paid to do so. In this respect, you want to be careful not to spend too much time in a classroom.

The final phase in the Software Engineering Track is an Open-Source Apprenticeship, where you work on open-source software with other professional engineers. In addition to learning through practical work, you’ll build a remarkable resume of open-source contributions. After the Open-Source Apprenticeship, you’ll get a job solving real problems for a real company four times faster than you would with a computer science degree.

For more of our thoughts on learning and mastery, [read about mastering software engineering](NEED URL).

Time, Money, ROI, and Learning

We aren’t so extreme in our views that we think computer science degrees should be abolished. They do serve a purpose for aspiring robotics and machine learning engineers, and they do many things well in general. But we feel strongly that they can be improved, and the Software Engineering Track is what we built to prove that. In a shorter period of time, with less of an investment, a safer investment, a faster return on your investment, and more effective learning, you will have a better outcome with the Software Engineering Track, and you’ll start the path to mastery sooner than you would by enrolling in a computer science program.

If you want to learn more about Bloc’s Software Engineering program and how it prepares you to land a job developing software, join us at an online info session. We’ll dive into the curriculum, what it’s like to be a Bloc student, and details about our 100% tuition refund guarantee.

The Modern Computer Science Degree
Don’t Learn to Code in 2016

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.

Don’t Learn to Code in 2016