Ask HN: How to train my students to be Unicorns
I have a free dev bootcamp for exceptional people who have a dream of becoming a software developer. I only have the front end curriculum ready but wanted to get some input on what I might add for front end or back end. I don't have most of the books listed but the learning is a combination of the best books with the best online videos.
Thank you so much for you input. I really appreciate it.
1. Setup Workstation
2. Learn Linux or OSX at the command line
3. Learn vim
4. Learn Git
5. HTML
6. CSS
CSS Frameworks
L. Bootstrap Framework M. Foundation Framework
7. Javascript
Javascript Frameworks A. Angular.js B. Backbone.js C. Knockout.js
8. JQuery
9. Pro Developer Tools a. Yeoman b. Grunt c. Gulp d. Bower e. Coggle f. Balsamiq
BACK END
10. Node.js
11. Databases and Caching Technologies
12. Webserver, reverse proxies and load balancers Several people have written nice supporting responses with good suggestions. One person (that I have seen so far) has written a testing question. I don't want to discourage you, but sometimes with ventures like this, I think testing questions can be more valuable than the good answers to your original question. In that spirit, I hope you will allow me to explore some questions that might help you narrow down what you are doing. To reiterate what the other poster asked, "What do you mean by Unicorn" and I will tack on, "and why is that the goal?" You say you want to target "exceptional people". What do you mean by that? If a person is "exceptional", why do they need your help? What gap are you filling? Finally doing this kind of thing is often difficult and time consuming. What is your motivation for starting? How will you measure your success? How will you sustain your motivation over time? Now some advice: Like some others, I have started many projects. Some have lasted a weekend. Some have lasted for years. Quite a few projects (even ones that lasted for years) had very few participants other than me. This was OK for me because I enjoyed building stuff. None of my projects (so far) became super popular. That's pretty normal I think. Exceptional things are exceptional by definition. Making sure that you are OK just building stuff because you enjoy building it is a good way to make sure you don't get jaded. Having said that, if your motivation is driven by having a following, learn something from the lean startup guys. Do the tiniest thing that could possibly work and just go. See if you get any interest at all. Fiddle with the parameters until you start to get some interest. Don't build a whole big website and gamble on the all-or-nothing. Build it and your following together over time and don't engage in too much risk. I hope the questions I asked will help you narrow your scope and help you find the fastest way to deliver something and start testing the waters. Good luck! Thank you for taking the time to comment. My motivation behind this is to teach people who have a goal or dream to be a software developer that can't go to school for whatever reason and can't afford a bootcamp. By Unicorn I mean rockstar or be in the top percentage among peers instead of just being average. It has been hard to find quality people who have the motivation, passion and drive to be able to have the determination to teach themselves. What I meant be exceptional is someone that has tried and failed to teach themselves but is willing to give it another go. I should have used dedicated instead of exceptional. I have already done the Front end curriculum this past year and weeded out all the bad videos and books to find the best material. It would take a part time student learning at night about 9 months for the bootcamp. Thank you for your input. "Unicorn" is a term usually used by experienced developers who think specific job listings are asking for unreasonably broad skill sets. i.e. "I've been doing this job for 15 years and even I can't fill this Jr. Dev role." EDIT: oh god, I just glimpsed a future where asshat recruiters on LinkedIn have co-opted the word "unicorn" and are starting to use it like "rockstar". I can only look forward to the time when all recruiters are looking for "Full-stack ninja unicorns" to crush code. It will at least make for a useful Gmail filter to auto-send to the trash. Don't overload them. Present an easy to get started IDE and prepare some code that already generates a hello world in a GUI/browser. Then teach them a little fancy stuff like color changing, making a ball jump by pressing space, etc. If you hit a newcomer with vim and expect him to do something without giving him 2 years, then he will just think that programming is not for him. I picked vim because of all the plugin support and its long history. A person is going to have to learn an editor anyway so might as well learn the best. The learning methods I use for vim are just one book and several videos. I do not expect anyone to move on to the next learning topic until they feel comfortable and positive about learning vim. So if it takes a few months to learn vim they will retain the knowledge before they move on. Thank you so much for your comment. Look, I'm a huge fan of vim and use it 99.999999% of the time. But think about the first time you tried to quit from vim or to enter something, or to navigate while in command mode. That takes a huge effort. If you want to make your course about vim, that's also fine. A human brain can only take a certain amount of pain, though. This list is more than a 4-year CS program would hope to teach a dedicated student. It's not realistic to expect someone to go from learning how variables work to load balancing a server they wrote from scratch, in vim on a shell, in a bootcamp. Totally. Just getting enough context to know what you don't know is often unattainable for those who have been in the field for years. I have mixed feelings about bootcamp/codecamps, mostly because I think they are Web 2.0 University of Phoenix that preys on people that are in a disadvantaged state. My experience with people who have bootcamped is that they exist in an uncanny valley, some stimulus responses they react to, others result in a blank stare. Wanting to learn how to code so the IT guy can no longer fsck with you, great! Make awesome macros in Python for Excel, cool. Learn SQL so you can reduce your own data, all the more power. But to say that someone can learn "to code" in even three months is preposterous and potentially very damaging. Only use codecamps that take payment after you have been hired. I dont really know if bootcamp is the right description of the school. It really does not have a time limit and my role is more of a mentor than a teacher. I did the Front End Developer curriculum to weed out all the bad videos and books and it took me about 9 months doing it part time at night. I dont expect a student to move on to the next topic until they feel comfortable with the current one and can do it by themselves. What exactly do you mean by the term "Unicorns"? In my mind, rare and mythic creatures (and their human analogs) cannot be trained into existence. Sure you can take a group of people and show them how to do something, but the result would be closer to a squad of foot-soldiers than a herd of Unicorns. In The Valley, Unicorns are devs that also have some graphic design skills. In other places, they are often devs that also have deep domain knowledge. Like an elevator repair tech who also codes, esp useful for your elevator repair startup. Oh come on, you know you are kneejerking. That guy tries to built something valuable and is putting effort into teaching other people, and you are trying to argue some sort of mythology with him. @OP: My suggestion would be to start with something you are really good with and start building a community from there. The "JavascriptIsSexy" blog/curriculum might be an example of an approach like that. What he does really good is combining existing tutorial/services (codecademy, books, etc), spot their weaknesses and offers guidance on how to overcome these towards a more rewarding learning experience. Another suggestion would be to take a look at the various (in-person) coding bootcamps and see what structure they are following. You're setting yourself and the students up for a really bad experience. People have to experience repetitive text editing before realizing why vim would be valuable.
They need to copy and paste code and make file backups by hand to get a clue why git would help.
They need to try to build a big JavaScript application to appreciate why all the frameworks exist. Don't rob them of having to experience why all these projects were created and what problems they're trying to solve. Ignite the spark with some fun, playful basic stuff. Anyone who has ever lost or accidentally saved over a file should appreciate git. They might not appreciate the complexity of git, but they can see the purpose. You can find a lot by researching what other web frontend / basic backend dev bootcamps offer: https://www.google.com.br/search?q=programming+bootcamps IDK, maybe pull down a little on the frameworks and add another "traditional" back end language like python maybe? Or dare I say php since it's easier to pick up. Because all those frameworks look a lot of work for a bootcamp IMO. People can't go from learning command line and html to handling servers and complex frameworks in the course of a single camp. Hmm, are you advertising that this is a series on web development? Do these students have prior development education? I fear that you're agenda is bloated. * Vim deserves a class of its own. My personal experience is that it takes months of using Vim before it starts paying off. Your students will struggle with and be distracted by Vim. * Git is an invaluable, industry-standard tool for collaboration. Still, is it helpful for learning to code or is it also a distraction? Pastebin/Dropbox/etc. are sufficient for collaborative efforts when your students are writing no more than 100 lines of code a day. * Angular/Backbone/Knockout are all opinionated and assuming. jQuery is also too much "magic" for someone who just learned what a variable is a few weeks prior. These are just getting in the way. * Yeoman/Grunt/Bower are cool. But there is something much more intuitive about just manually linking in a .js file to learn about dependencies. * Gulp/Coggle/Balsamiq are similarly unnecessary. In general, I think you're trying to teach opinionated tools that will frustrate, distract, and mislead your students. There will be a lot of "wait, which one's Bower, again?" I hope I haven't been discouraging and unnecessarily critical... my doubts would certainly need to be revised if these students indeed had prior experience. My idea of a schedule for starting web dev: * Very short overview of how a web browser and a server communicate. * HTML: creating interactive elements for humans with textual markup. * Node.js/Sinatra/etc. (students might benefit from using Node.js here as to not be overwhelmed with languages later): code a simple server to respond to a POST. * CSS: modifying the visual representation of HTML elements for a better user experience. * JS: react to HTML element events. * Expand your Node.js server to respond with JSON instead of HTML, and rig your JS to asynchronously communicate with the server. * Throw in a simple JSON/SQLite database. Flat file databases are great. Make the tried and true to-do app. * Teach deployment (real-world servers). Git should probably be fit in here! * Bonus: a whole class on how to solve problems using Google. If your students are intermediate/advanced, ignore me completely. Thank you for taking the time to comment. You gave me some really good ideas. I thought maybe the agenda was kinda bloated too especially since this is just the Front End Development. If you add Back end development you would probably be looking at 2 years to complete. Luckily my bootcamp is free and you can take all the time you need and only move on to the next topic when you feel comfortable with the current topic. Vim - Here is what I have for vim and surprisingly enough is just enough to be proficient in vim. 3. Learn vim
a. Do vimtutor
b. Read Learning the vi and Vim Editors, Seventh Edition
c. Up and Running with vi
d. Venture Into Vim
e. OReilly - Mastering Vim
f. Vim for Advanced Users
g. Learning vim plugins Git - I use two video tutorials that will make anyone an intermediate person within 2 weeks. HTML - We do about 12 websites
CSS - We learn almost everything about CSS. It does take about a month just to do the videos and books.
Javascript - We learn it in depth with three of the top books and several videos. This is where most of the time is spent. We do not move on to JQuery until we are proficient in javascript so we do not use JQuery as a crutch. Bonus - We have the students sign up for HN, Reddit, and StackOverflow to teach them how to troubleshoot problems. Im running out of room here but thank you so much for your input. Maybe for a small backend project, you could use Ruby on Rails? RoR gives you easy JSON API capabilities, an app server, and an out-of-the-box sqlite3 db. I figured I'd throw it out there because for a beginner, all of these things would be wrapped into one application and it might be easier for a beginner to maintain; however, you'd need to call out that not all frameworks have everything that RoR has. And I'm not saying RoR is a 'best practice' backend approach, because I'd never use it as a real backend service, but it might fit in nicely with your bootcamp! How long is the boot camp ? Supposing is not very long I won't teach any framework, but I would let them discovered it. After they manage the CSS I would make them build some simple page, and I will let them know that there are some CSS framework already done... Similarly for the Js part, teach them how to inject html in a page first and finally let them know about framework... Also I will cover react.js, not because is particularly cool or new or hot, but because is a completely different approach, actually closer to the CSS / front end way to code... Also, I won't really teach them vim... Maybe sublime is a safer bet... Why Vim? Edit: downvotes, so .. it's the only thing I've not personally used in his list, I've been using nix environments for over 20 years and never got beyond <esc>:q! (or whatever it is). It seems the author considers it an important tool for being an accomplished web-designer - enough to have it as a prereq - so I'm interested in the OP's reasoning. I am of the same opinion. I can use Vi / Vim enough to get basic stuff done on a server, but I'll stick with eclipse for doing my main development. Having a reasonably intuitive interface means I can concentrate more on the code and less on trying to remember strange key combinations. You're not going to train an unicorn teaching technical stuff. This can be learnt easier and better using the internet. Looking at that curriculum if my newphew wanted to learn programming, I sure as hell wouldn't send him to your bootcamp. You can't seriously expected anyone to learn 10 disciplines in one go. Encourage them to participate in open source projects! They will learn from some pretty awesome developers, and also contribute to the greater good :) This is a lot of work. How long is the bootcamp? The bootcamp really does not have a time because it is free, and what they are really getting is a mentor who can help them and guide them to all the best resources. I put together the curriculum after searching for the best books and videos and it took me 9 months. It would be awesome if you would include ReactJS for the people who lean towards app development. How to get in touch with you?