After getting feedback from alumni and employers, Canadian coding bootcamp Lighthouse Labs has added a computer science unit to their web development and mobile development curriculums. The program lengths have also increased from 8 weeks to 10 weeks as part of the bootcamp’s ongoing goal to remain relevant and competitive. We asked Lighthouse Labs Co-founder and Chief Education Officer, Khurram Virani, how the team chose which topics would be most useful to students, how computer science knowledge will help bootcamp grads on the job and in interviews, and why he suggests people learn to code before trying to understand computer science. Read the post or watch the video!
What prompted Lighthouse Labs to add computer science fundamentals to the web and mobile development curriculum?
At Lighthouse Labs we look at two major things when it comes to the health of the bootcamp, which are data and community. We collect a lot of different data about the program – we call ourselves data-driven, and community-driven education. While we are continuing to see our bootcamp grads find jobs, and get great feedback from employers, when we talk to our community – employers, students, graduates, mentors, and instructors – the one common thing we hear about how we can improve, is to have some time spent focused on computer science topics. We, and bootcamps in general, are nothing if not evolving through feedback – that’s what sets bootcamps apart from other traditional education. We’re nimble and agile, and evolve based on feedback as quickly as possible.
Do you see job listings requiring computer science? Why is it important for web developers to know some CS fundamentals?
When it comes to job descriptions, there isn’t necessarily a roadblock saying “hey your students don’t know any computer science, we’re not going to hire them.” I think bootcamps in general are doing a great job of setting expectations for employers, of what bootcamp is about and what it’s not about. But at the same time, there are occasions where there are technical interviews that involve some computer science questions, and bootcamp grads are limited from being able to pass those interviews.
Computer science knowledge is important so that students understand why and how things are working. It helps you better communicate with others on how that stuff works, and may move you from being a consumer of that innovation, to being a contributor to that innovation.
How long is this new computer science unit and what does the computer science curriculum cover?
We are changing the length of the entire bootcamp from 8 weeks to 10 weeks. We are adding a study week in the middle of the program in week 5, right after they finish their first big group project, which is focused on computer science. It’s a week where we ease off on the gas a little bit; instead of doing a usual 60 hour week, students are expected to do a 30 hour week, and get a little bit of a break.
The topics we cover are focused on computer science concepts which are very realistic and applicable to both iOS and web. We cover introductions to software design principles, advanced data structures like trees, algorithms, and algorithm complexity. These are things that come up a lot in interviews, but are also important for being able to evaluate the performance of code. We also get into unit testing, which is partly in computer science, but also partly in the applicable side of computer science.
CS majors study for 4 years at college. How did you decide which topics to cover in the one-week Lighthouse Labs computer science curriculum?
We had three major goals. One is computer science concepts, which actually translate well and improve performance on the job. The second goal was to allow graduates to better meet expectations from colleagues who may have a computer science degree, or developers they talk to at a meetup. And third, is to help them perform better in technical interviews that happen to be computer science focused. So we looked at those goals on a Venn diagram, and any CS topics that intersected on all three things were what we considered, then we shortened the list further from there.
Can you give me an example of a computer science topic you decided not to include and why?
Something that would potentially not be as valuable, is linked lists – a concept which falls within data structures. Although we are teaching trees as an introductory data structures concept, we decided to exclude linked lists in the interests of time – it may help more in the interview, but not necessarily also on the job. I learned about it in my computer science degree, but its application is a lot more rare, it’s a bit more obscure. Another example is graph theory. That concept did satisfy our Venn diagram, but it was just too advanced, in terms of what graphs are as data structures and how they are applied and traversed. It’s the underlying tech for many different databases like social networks, yet we decided to leave it out with understanding, that this is something that students can return to in the future. These 30 hours are not the be all and end all when it comes to computer science. We encourage students to keep learning after they graduate.
Why have you created brand new content rather than using existing computer science content to teach Lighthouse Labs students?
In our original ideation, we were expecting that we would be able to leverage a lot of existing online content, free courses, videos, and perhaps books. We spent a considerable amount of time vetting existing content, but it ended up that 80 percent of our content for both teaching and evaluation is homegrown.The content that already exists teaches computer science from a very academic lens. There are plenty of good courses from established universities like MIT and Stanford, but they are not the best introduction to compsci in our opinion, especially for the personality and goals of a bootcamp graduate. We wanted to focus on applicable computer science and how to teach students real-world concepts rather than abstract things.
How are you teaching this curriculum? Are you doing lectures or projects?
It’s a combination. Everything we are covering, even though it’s abstract comp sci concepts, we are doing our best to make it applicable to real-world things. We are staying away from lectures, instead providing content in video, written, and project format. We have a custom-built learning management system called Compass, where students can access exercises, and quizzes after a reading, which are part of the experience in our bootcamp. Then for the projects, students have to make certain automated tests pass, and things of that nature.
Students are not required to be on campus in that week, so the content is written in a way that they should not require too much assistance from mentors, but if that need arises they can contact us via Slack.
How will this computer science knowledge be useful to Lighthouse Labs grads in their jobs? Does a junior developer really use or need advanced computer science topics?
I did a comp sci degree, and I use maybe 20 percent of the things that I learned. The other 80 percent I’ve forgotten or it takes time for me to recall. So one could argue it was perhaps a waste if I’m not applying it to my job, or career. But it’s not as black and white as that because having a deep understanding of what you’re doing gives you a certain level of confidence. So I think the confidence alone is a good enough value for our 30 hours of computer science training, if nothing else.
Will Lighthouse Labs grads be better at their job in first 3 months because they have the computer science concepts? I don’t expect it will be extremely drastic, because ultimately it is only 30 hours of content, and there is only so much you can learn that is applicable. We tell our students that becoming a developer is a 12-month journey, and Lighthouse Labs is really the first two months of that journey. So our goal in bootcamp is to introduce students to what they don’t know, get them comfortable in most of it, and feel confident that they can continue to learn. It’s about learning how to learn and knowing what to learn.
Are computer science fundamentals the most important takeaways a student should have from bootcamp? What other important takeaways should students and instructors strive for?
In my opinion, computer science content is important and is something students should continue to learn thereafter, but it doesn’t rank highest when it comes to what I suggest students focus on. One of the big things I feel that students should learn at Lighthouse Labs is process. If there is only one thing you could learn from bootcamp, then master the process of learning a new language or framework, and you will be set. Chances are that when you get a job you will end up working with a language, framework , or architecture that you did not learn in bootcamp. If you know the process, then you can pick up those new technologies very quickly.
Another takeaway that I like to emphasize is the importance of being humble. I’m a firm believer that learning is a very humbling experience and if you’re not humble, you’ve essentially stopped or stagnated your learning. So the more we can throw at students, the more humbling we hope the experience will be. They need to be aware of what they don’t know and all the work they still have to do to get to their eventual goals.
The other side of being humble is the ability to work with existing code that you’ve inherited that isn’t the most ideal code. I look back at code I’ve written a few years ago, and see that wasn’t my best work, and that’s a good sign that I’m continuing to evolve as a developer. That is how you grow as a developer. But I find that junior developers get caught in this criticism of code, “Oh I’ve got a new job and the codebase is a mess.” I think that shows a level of inexperience and immaturity in the fact you’re lacking context as to what constraints caused the code to be written that way, and how things have evolved in that company. Instead of criticising the coder or the code, realize that improving existing code that isn’t perfect is part of the experience of a developer. Those are things I'd like our students to embody.
Do you think it’s a bootcamp’s responsibility to provide that computer science knowledge? Do you think all bootcamps should be doing it?
I think university computer science degrees ought to focus on real-world and current industry technologies, but they focus more on theory. I think similarly bootcamps ought to focus on those real-world technologies and do, but should also incorporate the theory. Let’s call it an 80-20 rule where we focus 80% of the time on applicable and real technologies you’ll need to know on the job and how to use them, then 20% on the theory, so that students appreciate what they don’t get from a computer science degree.
We’ve had our fair share of computer science students taking our program after graduating, and other students who finished our program, then enrolled in a computer science degree. If a student is really interested in computer science, and is able to do a degree and a bootcamp, I think they would be better off. Of course, there are the constraints of the real world and financing, and time. So the more shortcuts you can find, the better. That’s my philosophy. We encourage our students, give them resources, and free computer science content, that goes way beyond what we teach in our 30 hours. I feel there is a symbiotic relationship between computer science programs and bootcamp programs, and not one or the other is better for someone, it really depends on your goal. In an ideal case do both at some point in your career.
We’re at an interesting crossroads in the bootcamp industry. How do you think bootcamps need to evolve in 2018? Is this curriculum change that step for Lighthouse Labs?
Absolutely, just like our students, our programs have to evolve with time. At Lighthouse Labs we have constant conversations within the curriculum team, and within the general organization, about how we can better deliver education. Are there better ways we can deliver the content we already have? We’ve had discussions with bootcamps that have been in that situation, and then we look at ourselves, and ask are we making the same mistakes that were made there? So that’s something we’re constantly looking at, not just in changing our existing program, but also thinking about other programs that could help students keep learning throughout their journey, help them specialize within other topics, or help them get better at being web and full-stack mobile developers.
What is your advice for people who want to start learning about computer science fundamentals on their own, before or after a bootcamp? Can people teach themselves computer science fundamentals?
When it comes to computer science, it’s one of the more difficult things to learn on your own. Any theory is harder to learn on your own, because of the abstract nature of it. A lot of computer science content we found online was very focused on math and computational theory, and less focused on showing why you are learning it or how it is applied. My suggestion for people who are looking into getting into programming is to learn to code first. There’s a reason we don’t start with computer science at Lighthouse Labs. I suggest you find a project to work on where you can feel empowered and excited to apply your skills, and as you evolve, you can start dabbling in some of the more applicable computer science topics as you encounter them.