The Codesmith Program

Codesmith is a center of Software Engineering Excellence, and a selective and tight-knit community of engineers you keep for life.

Codesmith students (known as Residents) have built some of the most prominent tools, used by thousands of developers - React Monocle, Reactide, WebDSP and applications deployed at scale - YouDescribe and Veritas Prep Offline.

Your Background

Each admitted resident has shown enormous potential in five capacities that make an excellent engineer. Residents come from an exceptional and eclectic range of backgrounds from PhDs to software engineers, from Stanford Computer Science graduates to self-teachers.

Pedagogy

Residents become engineers, not technicians, through a deep understanding of advanced JavaScript practices, computer science (algorithms & data structures), OOP & functional programming. We place analytical problem-solving and technical communication at the heart of the program - the most valued capacities of a software engineer. The curriculum centers on the most valuable contemporary technologies - React, Redux, Node, build tools, and machine learning.

Students ask the questions "Why?" instead of just the "How?" - Codesmith residents learn how to learn, making them lifelong learners and adaptable to the constantly-changing world of technology and software engineering.

Career

The program focuses on preparing graduates for positions as mid/senior developers with whiteboarding and advanced technical interview practice, resume and profiles development, and interview and networking strategies.

25% of graduates receive offers for Senior Engineer positions and above, and about 70% receive offers for Mid-level Engineer. Graduates are transforming healthcare at Heal and Impact Health, mental health at UCLA, and drone technology at Airmap, while others work on large systems at the top technology companies in the country.

Support continues upon graduation, with bi-weekly check-ins and after offers, negotiation support. Residents also participate in postgraduate education in advanced software architecture and Machine Learning (6 week program).

Graduates have access to a network of hundreds of companies throughout the US with graduates working in LA, SF, Seattle, New York, Boston and SD, and in China and the UK.

Projects and Research

Residents of Codesmith build projects that aim to push at the frontier of technology - open source tools and libraries for developers or applications deployed at scale that make an impact in society.

Remember, open source software forms the roads and bridges, the infrastructure, of the applications and experiences we love - we depend on it at Codesmith and we should all be contributors. It’s hard to identify the ‘typical’ Codesmith project - as each person at Codesmith tackles distinct new challenges, but recent projects have included:

Engineering Community

SoCal React and LA Node are monthly meetups that we organize to keep up to date with the latest developments in React and Node and bring the community together. React and Node power significant applications from Facebook and Instagram to Uber and Netflix. We bring together leading engineers with the Codesmith and wider engineering community.

As part of contributing at the highest level to the engineering community, Codesmith residents speak at meetups and mini-conferences to the wider developer community. Recent talks have covered:

  • From hero to zero: Avoiding common pitfalls hampering react application performance
  • Parenting in Node: Leveraging child processes to optimize CPU intensive tasks
  • Cache Me If you Can: Caching strategies for building scalable node backends
  • Talking to the cloud: Communication strategies for distributed technologies.
  • Changing tides: Visualizing real-time data streams.real-time data streams.
  • Abstract Syntax Trees: The unsung data structure behind transpilers, code injection and intelligent parsing
  • Polarizing: The positives and negatives of building Electron Applications

Past topics of discussion include multi-threaded isomorphic React, hunting performance issues in Node, using GraphQL with React, and visualizing application states. Beyond showcasing recent developments in React and Node, these meetups have become a space for the wider engineering community to build connections and exchange ideas.

Guest Speakers

Annie Flippo
Annie Flippo
Sr. Data Scientist
AwesomenessTV
Adam Lichtl
Adam Lichtl
Founder
Delta Brain
Tasneem Minadakis
Tasneem Minadakis
Engineering Manager
Uber
Gavin Doughtie
Gavin Doughtie
Sr. Software Engineer
Google
Sarah Raasch
Sarah Raasch
Sr. Front-End Developer
PuppySpot
Steve Foote
Steve Foote
Sr. Software Engineer
LinkedIn

Guest speakers play an influential role in the Codesmith community. As a community that encourages intellectual curiosity in addition to engineering excellence, Codesmith invites guest speakers who are excited to discuss the far-reaching possibilities of software engineering. In the past, guest speakers have led discussions on the role of software engineers in developing self-driving cars, innovating aerospace engineering, and improving artificial intelligence.

JavaScript (ECMAScript Features)

Codesmith is about engineering, and Javascript is the vehicle with which we teach it.

JavaScript became the standard language of the web decades ago, and it has evolved tremendously in terms of popularity and power ever since. Today, JavaScript is used to create websites, servers, mobile apps, games, desktop apps, and even interactive toasters through the Internet of Things.

JavaScript was designed to deliver incredible user experiences. The language is "event-driven" and built for user interaction. It allows applications to respond to clicks, mouse movement, characters typed, internet connection, window resizing, and so many other "events" in an intuitive way.

In addition to its interactivity, JavaScript is meant to be flexible. It is a full-stack language, incorporating both frontend and backend technologies, which is a major reason for its appeal. Additionally, if other developers use your code in a way you didn't intend, or your users don't interact with the application as expected, JavaScript does its best to intelligently figure out what to do instead of immediately throwing errors and breaking the application (as happens in many other languages). JavaScript is the go-to language to build an application that will interact with real people.

Topics Covered: Callbacks, higher order functions, closures, scope & execution context, object-oriented programming.

Codesmith ProjectQLegance dynamically builds up object-oriented methods based on structure of data on remote server.

Resources:

Front-End Development

Front-end development is the structured application of design and programming to enhance the experience of a user. Often seen as the bridge between the designer and the back-end, the front-end is increasingly at the heart of the user-experience and, more specifically, how an application feels.

The number of front-end technologies have skyrocketed over time. Because of this, tools and libraries are constantly changing. This has made fundamental principles increasingly important in order to adapt to and anticipate emerging technologies.

The goal of the front-end curriculum is to prepare developers to mediate between frameworks by being equally proficient in industry-leading technologies as well as front-end principles.

At the core of the front-end curriculum is responsiveness, performance, and accessibility. Surrounding these principles are approaches to DOM manipulation and single page applications. Codesmith residents implement architectural patterns such as the model-view-controller and examine design patterns including composition in React and two-way data binding in Angular.

Topics Covered: Single-page applications and Front-end structure, React, Angular

Codesmith Project:Reactide is the first dedicated IDE for React web application development. Since launching, Reactide has gathered over 7000 stars on GitHub.

Resources:

Back-End Development

Connecting your application to a source of information or business logic is an essential part of the development process. To be familiar with how to access back-end data like databases (like SQL or Mongo), or third-party APIs (like Google Maps API) is only part of the skillset needed to engineer a well thought-out application.

Back-end development requires engineering a robust and scalable layer on the web server that interfaces with both the client and the back-end data. Server-side controllers that are written properly provide more freedom to engineer several different front end views that reflect different needs of different users.

Residents build full-stack projects regularly, and gain practice developing back-end layers that address all real-world concerns. Concerns to be addressed in the design of the server controllers often include security, modularity, scalability, efficiency and stability.

Being a layer in between the front-end and the hardware where data is stored, back-end engineers often must work with many other departments, such as front-end engineers, DevOps engineers, and DBAs (database administrators).

Topics Covered: Servers (Node & Express), Databases (MongoDB & SQL), Authentication & Authorization

Codesmith ProjectNile.js is a peer-to-peer live video streaming library designed to handle scaling. Since launching, Nile.js has accumulated over 1400 stars on GitHub.

Resources:

Computer Science

Many Software Engineers get by with memories of their computer science studies in college, but struggle to bring the knowledge to bear on problems they face as engineers.

Yet a sure footing in computer science, and their core components, algorithms and data structures, enables you to successfully build beautiful and efficient software.

Designing algorithms is a process of achieving increasingly effective ways to solve a problem. Residents develop algorithms to solve some of the most prominent challenges in software engineering including sorting, path-finding, and searching.

The efficiency of your algorithm, data structure, and programming paradigm choices can be the difference between a product’s success or failure. This means:

  • Choosing and designing algorithms that optimize for time/space complexity trade-offs using Big-O notation
  • Understanding object-oriented programming principles: inheritance, abstraction and encapsulation and the distinct implementation in JavaScript with the prototype chain

Topics Covered: Data Structures, Algorithms, Time Complexity and Big-O Analysis, Object Oriented and Functional Programming

Codesmith ProjectVeritas Prep On Demand reduced server load from client requests for video file transfers by implementing a queue to throttle streams. Veritas Prep On Demand was a client project built for Veritas Prep, is the largest privately-owned test prep and admissions consulting company in the world.

Resources:

Machine Learning

With the exponential growth of data generation in recent years, Machine Learning has quickly become an invaluable tool for building next-generation software solutions. The Codesmith Machine Learning unit includes an immersive introduction to the python programming language, gaining familiarity with common machine learning and data science libraries, and developing a deep understanding of the underlying concepts used daily by Machine Learning Software Engineers. The Machine Learning unit is designed to allow residents to build intelligent data driven applications.

Topics covered: Generating matrix representations of data, graphing libraries for data presentation and introspection, building powerful predictive machine learning algorithms from scratch

Resources:

Exercises:

Technical Communication

Technical communication is one of the main predictors of success for students at Codesmith as well as software engineers in the professional realm. We recognize that coding, at Codesmith and in the software engineering world overall, is very rarely an individual endeavor.

At Codesmith, residents are consistently working in pairs and small teams, and this makes the ability to clearly, accurately communicate ideas, expectations and problems vital. For this reason, developing technical communication skills is a principal focus of ours and we achieve this goal in a number of ways:

Pair Programming

The most common method through which we practice technical communication is pair programming, and Codesmith residents can expect to spend literally hundreds of hours pairing with others in their cohort. The benefits of pair programming extend beyond an extra pair of eyes to find bugs in code. By pairing with a partner you are constantly exposed to new approaches and techniques and are challenged to talk through your own code in a way that is clear enough that another person can do the typing. In a short time, Codesmith residents truly do talk the talk.

Presentations

In addition to pairing, technical communication is developed through a number of presentations that all residents give during their twelve weeks in the program. Residents give a Tech Talk on a topic of their choice and present the projects they create throughout the program. This culminates in our Hiring Week, during which students present their final Production Project, and a related Tech Talk, to an audience that includes developers, engineers, and representatives from dozens of local companies. By the time students leave Codesmith, they are not only well-prepared to build incredible tools, they are able to describe the what, why, and how at a professional level.

Project Management

Building powerful applications and developer tools requires more than just technical ability. Project management is the art and science of planning out projects, monitoring them throughout the development process, and assessing their results. Without effective project management, teams are likely to run into many avoidable conflicts in the development process.

Throughout the project phase, Codesmith residents get extensive practice with project management. Starting a new project, one of the first steps is to break the project down into many smaller tasks. Residents use scrum boards to assign these tasks to team members, track their status, and assess the overall progress made on the project.

Because these projects involve multiple people working on different portions of the project, good project management places an emphasis on daily standups, a proper Git workflow, and code review. Residents conduct daily standups to brief their partners on what they have accomplished and any hurdles they may have in completing their current tasks. When a task is completed and ready to be merged with previous code, students employ strategies for minimizing conflicts that may slow down production. And before new code is merged, project partners conduct a rigorous review to ensure the code is accomplishing what it is intended to do.

Effective project management takes time and dedication - not only from the project manager - but from all team members. However, this effort pays off in end result and in the time it takes to reach it.

Deployment

When a software product is production ready and has been properly tested to confirm as such, the final step is to deploy. Deployment is the process of making a software product available for use.

The source code must be prepped to show only what the authors of the code are comfortable sharing with the public at large. This often means bundling and minifying code to simplify distribution while obscuring code structure.

Whether the product is a user-facing application or a developer tool, the product must be hosted for distribution. Depending on the product, suitable hosts can range from Raspberry Pi to Amazon Web Services. Servers hosting deployed products should be fault-tolerant and ready to restart automatically upon encountering runtime errors. Protection of the host can also come in many other forms such as proxy servers.

Codesmith production projects made in the immersive program are very often developer tools and are always deployed to the public as open source projects. Residents of the immersive program receive instruction on choosing a proper host and preparing documentation to enable other developers to gain familiarity with the API of their tools.

Career Development

The path to becoming an engineering leader involves more than just technical preparation. Codesmith students begin the career development program in-tandem with the production project phase during the senior portion of their curriculum. The career development program rounds out the full skill set students need to join powerful, effective teams tackling and building interesting things post-graduation.

Throughout this program, students receive individual guidance from both their peers and the Codesmith team in the areas of resume development, interviewing, whiteboarding, online profile development, and application outreach. The support continues after a student's cohort ends, with graduates coming back for on-site check-ins and mock interviews. Even after landing their first position post-graduation, if graduates are looking to move positions or companies in the future, the Codesmith team is always there to provide guidance and support.

Career development never ends, and once a student, residents are forever a part of a community that will constantly push them to be better, to be more impactful, and will support them along the way.

Precourse & Pre-Codesmith

In the weeks leading up to Codesmith, admitted residents are required to complete precourse assignments designed to accelerate their JavaScript growth and learning. The precourse is done remotely through GitHub, with weekly office hours for guidance. The precourse introduces residents to the pace of learning at Codesmith, and ensures that everyone is ready to dive into the program on Day 1.

The precourse takes students through basics of CSS and HTML to more advanced JavaScript functionality with Ajax and complex parsers.

JSHP Community

Over 90% of admitted students attend our free weekly workshop “JavaScript the Hard Parts” in preparation for the technical interview. These free workshops, taught by Codesmith Lead Engineers, go under-the-hood of concepts that are essential to all successful JavaScript applications.

Most importantly, they allow you to immerse yourself in the Codesmith community, improve your technical communication and problem solving abilities by pair programming, and meet fellow learners and builders.

JavaScript the Hard Parts is held every Thursday evening at Codesmith HQ, and streamed worldwide.

Admissions

To apply you must complete a coding challenge and questions about your experience. You may also apply through the special challenge available at JavaScript the Hard Parts sessions. If you are successful you will be invited to interview for the program.

The two interviews assess your potential in the five areas that make an exceptional engineer.

  • Analytical problem-solving - How do you use code as a tool to reason about about new problems you face in the technical interview
  • Technical communication - Talking through your code precisely and clearly (a huge part of what makes an effective engineer)
  • Non-technical communication - Will you be thoughtful and supportive of others through the tough hours and work
  • How you handle hitting a block - How do you debug, take feedback when you hit a block in your understanding (we make sure you hit a moment like this in the interview)
  • JavaScript experience - This is surprisingly not the best predictor of growth-rate but is the 5th most important factor

The first interview is non-technical, the second is technical. In the technical interview you work through coding challenges with an engineer on the team. We're interested in seeing how you tackle problems and communicate your ideas.

We realize that the Codesmith admissions process can feel intimidating but we have created numerous free public classes to help you prepare - you can find them all here.

Apply

Admissions Resources

We are assessing for five capacities in applicants:

Technical communication, problem solving, JavaScript and programming knowledge, non-technical communication and engineering best practices (Read more here on Quora)

Top resources for technical communication, problem solving and best practices:

Top resources for JavaScript and programming knowledge:

More introductory resources:

Traditions

An important aspect of life at Codesmith are the activities that aren’t associated with JavaScript. Staff and students bond through relay races, bonfires, camping trips to Joshua Tree, and biweekly breakaway meetings to chat, to name a few. Longer lunches incorporate kickball, basketball, and yoga as well as trips to nearby gyms.

The end of each cohort culminates with a graduation celebration, and alumni are frequently on-site for larger Codesmith alumni social events and advanced workshops.

Alumni Community

The Codesmith Alumni Community is a community for life. Codesmith graduates are working everywhere from Los Angeles to Boston to Shanghai, and their accomplishments and success continue to grow every day.

Codesmith Alumni are able to take advantage of this network of like-minded software engineers via an Alumni Slack channel, an Alumni-only workspace at Codesmith HQ, cross-cohort reunions, exclusive invites to new Codesmith programs and initiatives (like the Machine Learning Beta program), and unlimited hiring support throughout the course of their careers.

Tuition

The total cost of the program is $17,200. A deposit of $2,200 is required shortly after acceptance, and the remaining $15,000 is due before the start of class.

Financial Aid

Your financial situation should never keep you from achieving your goals. Codesmith has partnered with Skills Fund to make this possible.

With Skills Fund, Codesmith students may borrow between $2,000 and $15,000 for the program with 3 and 5 year payment terms available and 2-month post-graduation payment grace period.

You can qualify for a loan with:

  • No income or employment used in underwriting
  • One fixed universal interest rate for all students (regardless of your credit score)

Learn more at http://codesmith.skills.fund/

Scholarships

Codesmith is committed to strengthening and growing a broad and deep community of software engineers from all backgrounds, and the Codesmith $100k scholarship fund is an important part of this commitment.

Women, minorities, and veterans are severely underrepresented in the technology community. Codesmith offers scholarships for talented people from underrepresented backgrounds.

To apply for these scholarships you must identify as a woman, under-represented minority (defined as African-American, Hispanic/Latino(a), Pacific Islander or Native American).

Plan to apply for a scholarship and Skills Fund loan? Your requested Skills Fund loan amount can be downward adjusted as needed prior to your first day in program. If you receive your scholarship after your tuition financing has been disbursed, you can apply your scholarship to your loan balance at anytime without a prepayment penalty.