Gain the knowledge necessary to build software that works in a reasonable amount of time.
- version control
- unit-testing
- build automation
- continuous integration
- Design and document the architecture of an application that will take 2 weeks or more to implement
- Create a simple web application with a html frontend and a server backend
- Create a simple console/terminal application that reads from stdin and outputs to stdout
- Create a portfolio of classic 'interview' problems and publish on GitHub
- Contribute to a larger project: author a change on a branch, issue PR, work with author to merge
If you're not sure what kind of web and console applications to create, consider starting with something that manages lists of items and allows you to show and edit details of those items. The web application should store the items in a database.
One way to do this is to implement a Trello clone. A nice thing about this approach is that there are many open source 'TODO' applications out there you can use to see how other people solve this problem and create good user interfaces. The console application could interact with the list manager application via an http API. It may be fun to specialize this list manager to track players' progress in a competition (leaderboard), items with pictures for a charity auction, or a workout tracker.
If you will build your first app in a work setting, consider building a tool that will make your own (team's) work more efficient. This could mean taking a process that is currently handled in a spreadsheet or via email and implement it in a web application instead. An example of this might be importing raw test results, analyzing them, and generating reports.
At the end of this experience, you should be comfortable discussing UI design, 'master-detail views', web services, data sanitization and persistence, and other concpets that make the professional tech world go round.
Thanks to Ashley McNamara and Lukas Ruebbelke for inspiring this guidance.
- Git & GitHub - Udacity
- The Smallest Distributed System - Meyer
- ACM Software Engineering Code of Ethics and Professional Practice
- Out of the Tar Pit - Moseley & Marks
- Introduction to HTTP (by HttpWatch)
- Representational State Transfer (REST) - Roy Fielding
- Implementing Stripe-like Idempotency Keys in Postgres - Brandur
- Comparing Version Control Workflows
- The Design of Everyday Things - Norman
- The Inmates are Running the Asylum - Cooper
- Clean Code - Martin
- Debugging Rules! - Agans
- Selections from Code Complete: A Practical Handbook of Software Construction, Second Edition (McConnell)
- Part I - Laying the Foundation
- Part V - Code Improvements, particularly Ch 20 The Software Quality Landscape
- Design Patterns Explained Simply