Ask HN: how can I prepare myself for a web startup (while still in college)?
-------------
WHO I AM:
I'm a liberal arts major with two years left in my degree. I've always been interested in entrepreneurship (and have done various little non-tech projects over the years) and have a few ideas I'm dying to implement. I have a background in computers, but mostly in IT, not programming.
-------------
WHAT I KNOW:
HTML, CSS, basic JavaScript, basic Java.
-------------
WHAT I WANT TO DO:
1. Be able to design, build, and manage a (fairly simple) web application entirely by myself. My ideas are not technically complex; most of them are database driven, and the majority of the work is in the design and content. As in craigslist or Wufoo, not Google. 2. Know the fundamentals/theory of CS and programming in general.
-------------
WHAT I don't WANT TO DO:
1. Learn super-complex mathematics and CS theory
2. Spend too much time on topics that are not related to modern web application development
3. Get a job as a developer in a large company somewhere
-------------
WHAT I'M DOING (TO LEARN THE ABOVE:)
I am not a CS major, but I am taking 2 CS courses this semester (OOP with Java and a foundation IT course). Next semester, I plan to take: "Data Structures", "Intermediate Programming with Java", and "Database Management Systems". After that, I'll be taking as many CS courses as I can.
I have also made an all-around CS "curriculum" for myself, which is composed of online course materials. At the moment, the plan is:
1. Stanford Programming Methodology (Introduction to Programming w/ Java)
2. MIT Introduction to Computer Science (Introduction to CS w/ Python)
3. MIT Structure and Interpretation of Computer Programs (principles of computation using SICP)
4. Stanford Programming Abstractions (abstraction, OOP, data structures, etc. using C++)
5. Stanford Programming Paradigms (Advanced memory management features of C and C++, brief survey of other modern languages)
6. Stanford iPhone Application Development (tools and APIs required to build iPhone apps)
7. Various tutorials/books/etc. on Ruby/Rails (what I plan to build my sites in).
-----------------
MY QUESTION TO YOU IS: WHAT SHOULD I BE DOING?
I'd like to stress that I don't want to be a software engineer (as a career); I'm mainly interested in entrepreneurship, and coding is but one skill I need to accomplish my goals.
I want to be able to design, build, and manage a web application on my own, and if/when it grows large enough, hire someone who is technically superior to me to manage it (while I then focus on the "business" aspects.)
- Does that curriculum align with my goals? I get the feeling that parts of it may be too low-level (Paradigms) or irrelevant to my goals (iPhone Development). Would I be better off jumping right into Rails after I get the fundamentals down? Or will the wide-variety of languages ultimately help me more?
- Should I try to get an internship at a startup? Or would I be better off just building my own little projects?
- Do you have any suggestions for learning materials?
-------------
Thank you very much for the help, and sorry for the length.
11 comments
[ 3.1 ms ] story [ 30.3 ms ] threadWe've no clue what the world would look like 2 years down the line. One thing we'd be certain of -- insane amounts of competition. The most important thing you'll learn right now is 'STARTING' with limited information. If you can couple that with an insane drive to 'COMPLETE', you'd be prepped & ready.
---------------
Since you mentioned 'web apps',
Get into action, the 'lean startup' way: [http://www.amazon.com/Lean-Startup-Entrepreneurs-Continuous-...]
- list a few target markets/niches you'd like to work with
- research them online/offline (forums, meetup groups etc.) & dig out their pain points
- build landing pages (unbounce.com) around your MAGIC SOLUTION to their problem
- get enough folks to sign up for your landing page (might cost you about 100$ worth of adspend)
- the inspiration you get from having actual folks that need your Magic Pain Solver would drive you to complete your product
- you'll relieve them of their pains by forcing yourself to build this ASAP, or you'd hire someone
- you'll have learned a ton about the essence of entrepreneurship through this experience
---------------
Basically, you're connecting a pain-point for an small-enough group of people, that communicates amongst themselves regularly (the market), to a transaction (business model).
And please, start Right Away.
Check out chapter 6 from 'Getting Real', by the folks at 37signals. [http://gettingreal.37signals.com/toc.php]
The problem I had starting out, was following an exact process for going from an idea to a Minimum Viable Product. Most importantly, I had trouble getting past my designs (PSD) being messy.
-----------
Since you have an idea already:
- figure out what features your minimum viable product should contain
- throw out a whole bunch of those features, till there's just a few main ones, and you feel a little uneasy
- turn those features into screens (paper mockups). as few as possible.
- go from paper mockups to PSD's (photoshop). use dribble, themeforest, forrst, etc. for inspiration. especially the 'minimalist' designs
- or you could just use one of the 'admin themes' from themeforest. or 'bootstrap' by twitter.
- chop the PSD to css/html. This is where it becomes (sorta) 'REAL'.
- since you know basic java, I'd recommend you use php (almost similar syntax, and tons of help online) to hack together your first app
//---EDIT---
I see you're interested in Rails. Personally, with history in c, c++, dotnet & java, rails just seemed a little 'off'. Since you're familiar with java, I'd highly recommend GRAILS: http://grails.org/ as a viable/quicker alternative to rails.
//---END EDIT---
- don't stress about languages and platforms just yet. I'd spent weeks trying to figure out which framework would make me sound more technically proficient to a third party(investor perhaps?). The right answer always is, whatever gets the job done ASAP.
- consider using facebook/twitter for user account management. makes a lot of stuff easier
----------
One thing I'd fix going back, would be rewiring my process to having the PSD chopped first(and played with), before writing any server-side code.
1. Follow a Ruby Rails getting started article and create a blog app.
2. Open a heroku account and deploy your app to the cloud.
You may experience a few hiccups along the way, but it will give you the outline of how modern web apps are deployed and managed these days.
Just define your MVP and at each point along the way ask yourself "what do I need to learn to complete feature X?" and then dig that information out online and implement!
(1) The time it takes you to develop a solid product/prototype will decrease.
(2) The quality of the product/prototype will increase.
(3) You will be able to tackle more technically challenging ideas (I think a lot of the juicier ideas go beyond the difficulty of a trivial web app).
(4) Good software developers will be more likely to partner up with you if they know you are a good developer.
(5) Your ability to come up with good solutions to technical problems will increase. You'll start thinking, "how long will it take me to automate this?" instead of, "I need to go hire a person to do X". Your technical toolbox will almost always have a good tool for the job.
(6) What happens when you fail? Startups are always in need of good programmers.... However, I've never seen a job description asking for a mediocre programmer who is also an ideas man. It's possible that you'll need to get money from a day job and work on your startup ideas on nights and weekends. Being a good programmer is a good way to get a good paying day job.
The way to accomplish the above: program every day! Take all of the programming intensive courses that you can (the ones you listed are good), but you need to program more than just the projects. You don't need to overdo it on the quantity of languages at this point. I would focus on JS, Java, and Ruby (look into debates about learning languages and see why it's important to learn languages from different classes (scripting, oop, procedural, functional, etc...) I think C/C++ are very good to learn... but since you're already on the java track, I'd just keep going.
If you code for 2-3 hours a day, you'll improve immensely. Make sure to go back and refactor your old code. It's a good exercise.
Finally, if I have not persuaded you, I'll answer your well defined question :P. Take the programming courses that you plan to take and simultaneously hit ruby on rails (scratch your online curriculum except for #7). 2-3 hours a day (min) of JS, CSS, HTML, and RoR. Find a website (e.g. twitter, facebook, hacker news) and clone it using your RoR stack. Get them to look visually similar and have the same functionality. Don't quit at 90%... try to copy everything exactly (the main functionality at least). Once you can clone these popular websites in no time, you're ready! Just be prepared for a lot of struggling in the beginning.
Start your hacker news clone today.
Build a network. Get to know meet people who are better than you (skill-wise) or at least have the same interests and also share what you know. Try different events and meetups.