- Introduction - What to Do After The Coding Academy
- Step 1 - Learn The True Fundamentals
- Step 2 - Create a very simple C++ application
- Step 3 - Translate that C++ Application into a Web Application
- Step 4 - Understand the Internet
- Step 5 - Understand your environment
- Step 6 - Go HAM on a Web Dev Framework - but be well-rounded too
- Step 7 - Practice Being Systematic
- Closing Remarks
Hello everyone! For about 5 years now I've owned and operated a development shop, and in that time I have had the privilege of seeing many developers grow their skills (both professionally and personally) as they entered the workplace. However; I quickly noticed some trends from individuals coming from Coding Academies and Bootcamps.
While teaching our young padawans, I quickly learned that there is a lot of information missing from most Coding Academy curriculums. I chalk it up to the programs being so short and attempting to cram so much knowledge into their brains at a time. Most people gain the knowledge of "what is" software development, but lack the wisdom of "how to" use it.
If this is you (or one of your team members) - you're not alone. It's nearly impossible to become a full-fledged software engineer in 3-6 months, although places like NYDCA would like you to believe otherwise. And perhaps that is why they shut down. But fear not; there is hope! Coding Academies are a great start to your journey so long as they are followed by the right mentorship and guidance on where to go next.
So, I'd like to provide exactly that - mentorship and guidance on "What to do next". I hope this article will graduates, as well as Senior Devs and Managers out there tasked with training them. We're all in this career together, so let's help each other make it an amazing one for everyone.
P.S. If anyone has additional items you think are useful; I'll update this article to be a culmination of best practices/wisdom.
You may have thought you learned the fundamentals at your coding academy; but alas you actually learned the fundamentals of web development. What you did not yet learn is the fundamentals of the "how" and "why" of computer science. Questions like "What is an IP address?", "What is a var (under the hood)?", and "How can I step-through debug this problem?" are never asked nor taught, so it's up to us to fix that.
To get this understanding I'd recommend traveling to the past so that you can understand the future. Scripting languages are NOT the place to learn fundamentals; however, C++ is built on the fundamentals. You'll probably never use this language again - but I DO want you to take 2-3 days to go through the following tutorials. I promise they'll be beneficial - so here's the steps
- Download Visual Studio Code
- Take yourself through this C++ tutorial
- Complete chapters 0, 1, 2, 4, 5, 6, 7:
- While completing the Chapters answer the following questions:
- What did you learn from this chapter?
- What questions/difficulties did you have during the chapter?
- What questions or things do you want to try, at the end of the chapter?
I'd recommend the following:
Create an application that
- When launched via the command line, says "Hello, what would you like to create? "1: A Dog", "2: A Cat""
- When the user types "1" and hits enter, a Dog class is created.
- In the Dog Class Constructor, have a print function "I am a dog, I am born"
- In the Cat Class Constructor, have a print function "I am a cat, I am born!"
- Abstract Dog and Cat class to be part of an Animal class, and inherit from it.
- Complete some other small changes to reflect what you've just learned in your tutorials
Now, create a Web Application using the technology you've been taught at your coding academy - but instead of the command line, have a GUI through a web browser. Either an Angular Application or a Rails Application will do just fine, then answer the following questions:
- What are the differences?
- Which parts were easier? Which parts were harder?
- Have a friend introduce an error in both - but not show you where. Now, try to debug the error on both. Do you see a difference in debugging?
Most people don't understand what the internet actually is; and it's truly magic.
Did you know there is all this hidden data in every packet that's sent over the web? Do you know how your ISP works? Well, to get started let's read this Stanford whitepaper on what the Internet actually is.
This step is a controversial step and is best done on an old crappy computer you don't use anymore. If you don't have one - make sure to back everything up on your current system.
- (Assuming you're creating an Angular App) Download and install Homebrew, Node, NPM, Bower, and Grunt.
- Try to install and run A MEAN Stack sample app
- Uninstall the current version of node, and install an older version. Play with versioning through NVM
- Try to run the same app.
- Now, do the same thing on someone else's computer. Doesn't matter what type - there's learning on all OS :)
You may or may not have issues - guess what; version dependencies are a BIG BIG challenge for a lot of developers. 5 people with macs may all have different environments - and that's not even including all the variations of Windows / Windows + Ubuntu / Linux distros.
- (Bonus) Wipe your computer - and re-install everything. That's the controversial part, but often when you're doing development and you don't quite understand filepaths and chmod/sudo consequences you'll mess up your dev environment. You can spend hours debugging it, or you can wipe and restart - your choice.
Now, you must be thinking to yourself "There's got to be a way to standardize environments". Yes, there are plenty of ways. A well-known approach is a tool called Docker. I'll let you read up on the rest.
I personally love the Angular + Ionic combination for Web & Mobile apps, but there are a ton out there. React.js is awesome and I'll be at the Vue.js conference in Amsterdam in February. Once our interns at OpenForge are done with the above steps (and some 1-1 sessions), we ask them to start completing some online courses through Udemy.
- First, I'd take a quick debugging class here to learn about Chrome dev tools
- Second, complete the entirety of this Angular 7 course. It covers a LOT
- Third, take appreciation for my array numbering to the left <-- If you know your basics, you know why I did this :)
- Fourth, practice creating a MEAN stack app and deploying it. Here's some links
PAY ATTENTION TO THIS - This is the most important piece of advice I can give you.
When you're working on a feature, debugging, or any type of development - commit after every meaningful change. Do NOT wait for the feature/bug to be finished.
Computer Science is a science, and science is systematic. We try, measure, and come to conclusions. I promise you that if you break down large commits and large problems into super small ones; you will accomplish tasks 10x quicker and be happier for it.
I hope this is helpful - it's been the 'time-tested mother-approved' formula for us for a couple years now.
If anyone has anything else to add (or recommends modifications) I am all ears, please comment below!