Our Elite Summer Coding Program is unlike other coding programs out there, and we wanted to share some insights on what to expect from the program. In short: it's an elite program and it will be tough! Here are the major items to expect for our summer program.
The number 1 point about this program is that it is an elite and challenging program. We have a year's worth of curriculum, so even if you think you're a top-level programmer, we are confident that we have projects that you will find challenging.
EVERYTHING about this program is designed to help you become a better software engineer. Being a great software engineer is not just about hard skills or technical skills; there is a huge component of "soft skills" such as:
- structured problem solving
- creativity and thinking out of the box
- successfully working on a team and delivering a project on time
- scientific and mathematical thinking
- resilience and determination
The first two "Quests" in the program are tough, but they lay a foundation and toolset that you will use over and over again.
The first three weeks and our Bootcamp C are about covering the major principles of coding and software engineering. You may find some of these exercises a bit mind-bending and difficult, but once you have these down, all other projects will build on these concepts in increasing levels of difficulty and complexity. These principles also help you learn other languages a lot faster.
Frustration & Resilience In Your Work
Undoubtedly, one of the biggest reasons why this program is so much tougher than others is that answers are not provided when you're frustrated with a problem and you will have to develop resilience.
In a traditional learning system, if you have a problem or question, you can ask a professor or teaching assistant, and they will explain a concept or help you get to the answer. With our program, answers are not provided by a professor or TA, because in the workplace, answers are not provided! In a job, you're expected to be resourceful, to continue problem-solving when your code doesn't work until it does work, and to manage your emotions even if you're frustrated.
In terms of experience, learning at Qwasar and learning in a classroom are very, very different! You'll likely find that you get frustrated when you're stuck, that you'll wish you had the answer, and that you'll wonder when and who to ask for help. The other side of the coin is that you'll feel awesome when your code does work and when you solve a difficult problem or better grasp a concept (such as pointers or pointers of pointers).
Learning resilience is a key part of becoming a great software engineer (and problem-solver): you just don't give up until you find a solution. Since we give you project after project and problem after problem, you are continually faced with problem-solving opportunities, and thus opportunities for both success, frustration, and resilience.
Manage Your Own Learning: Taking Responsibility
Unlike most other programs, YOU are responsible for your learning. It's up to you to identify:
- what you need to learn in each project
- new vocabulary and concepts that you need to research
- learning resources available online (feel free to share with fellow learners!)
We do this because you are adults and we think you're more than capable of being responsible for your own learning, but also because in the workplace, your boss will expect you to figure things out if you don't know them.
A large part of software engineering jobs is about figuring things out: trying, testing, applying knowledge from one area to another area, and so we expect you to do the same.
In a traditional classroom, a professor will generally tell you what you need to know or what you need to learn. This can be good, but it does not reflect what really happens in the workplace. You need to be confident in knowing how to learn something new on your own.
Being given a project or exercise to code can feel like being thrown into the deep end and it's sink or swim: how do you even begin?! Being responsible for your learning helps you to practice identifying:
- what you do and don't know
- how you can find out relevant information or terms
- how to apply your new knowledge and actually write code
Our best advice is to continually think about what you've learned, what you don't know, new concepts or vocabulary, and to try writing code over and over again.
Strong Fundamentals in How a Computer Really Works
When you understand at a fundamental level how a computer works, you automatically have a strong foundation for understanding all programming languages, both low-level and high-level.
Further, when you know how a computer really works, you will be much better at debugging, and certainly more capable than your colleagues who have only ever studied higher-level languages or algorithms.
Imagine that you have to build an enterprise level application that will be used by millions of people and that needs to be fast. You will face trade-offs between speed, memory, processing, aesthetics and user experience, architecture, and so much more. You need to be able to identify what are the most important elements, why, and which languages deal with fundamental issues differently, and thus which would be the best option to achieve a great result for your enterprise application.
Why C Programming? To Make You a Great Software Engineer, Not Just Average.
C programming is so fundamental, and also so unforgiving. It's used in building operating systems, but is also used in developing applications. It forces you to be detail oriented, structured, and allows for very little errors. It develops great discipline in your as a coder, which is one of the elements that sets you apart from an average software engineer.
GeeksForGeeks sums up well one of the major benefits of learning C:
"Most of the theories related to computers like Computer Networks, Compiler Designing, Computer Architecture, Operating Systems are based on C programming language and requires a good knowledge of C programming if you are working on them. In the modern high level languages, the machine level details are hidden from the user, so in order to work with CPU cache, memory, network adapters, learning C programming is a must."
Translate that into getting a job as a software engineer, and it's not difficult to see how learning C programming will help you be a better software engineer and employee (as well as a better job applicant!)
Weekly Projects and Exercises
Each week, you will have a software projects and exercises to complete in the Qwasar platform. You will get a login to the platform, our online chat, and you'll have an Integrated Development Environment (IDE) available that you can use.
The projects start off small and become more difficult and complex. You'll cover C libraries and eventually end up with printf, a blockchain project, and the infamous Core War competition.
Here is an example of one of the projects called MyBlockchain:
Here's an example of an exercise called Rcapitalize in the Qwasar platform:
Notice the "Run Code" button - this runs your code and is essentially an autocorrection system: your code returns the expected outcome, or it does not.
These exercises are similar to ones that you will encounter during technical interviews, so the point is not just to practice, but also to help you think about structured problem solving.
Exercises can be done in 5 different languages.
Virtual Meetings, Live Code, & Presentations
Finally, we'll have daily virtual meetings, similar to stands-ups or Agile meetings, as well as occasional live code sessions and special presentations from software engineers in industry.
You are expected to attend daily virtual meetings and checkins, and we strongly advise attending live code sessions with some of our software engineers. We may also ask some of YOU to lead live code sessions, as these are great opportunities to practice talking and coding as you would during a technical interview!
(Here's a live code session from one of our cohorts that we did at the end of April, 2020)
Additionally, we will have occasional presentations from software engineers in Silicon Valley speaking about their experience in coding, the workplace environment, and technical interviews/the job application process.