Ask HN: Non-technical founder -- how do I become a better coder?
The only experience I have coding is AP Computer Science in high school. I received As both semesters learning C++, but I don't remember much.
I have at least the next seven months more or less full-time to devote to creating a start-up. I have no pretensions that I will become a world-class coder in this time (although that would be nice), but I'd like to learn more just so I can spot talent, become conversant in technical concepts, and maybe even code a little for my company on my own.
What languages would you recommend a beginner focus on? What books should I be reading? I'm interested in mobile platform development, as that is the focus of my start-up.
Thanks for your time. If you have any other thoughts, please do share.
12 comments
[ 3.5 ms ] story [ 21.3 ms ] threadAs for web development languages / frameworks that are beginner-friendly and well supported, I don't think there's much competition to Rails. However node.js has definitely been gaining momentum recently (would allow the entire app to be coded in javascript :P) and if you go that route definitely check out coffeescript (or even clojurescript, which is what I'm interested in, but that's more of a leap :P).
Personally I'm going to use my next personal side project to learn http://chicagoboss.org :P
What is the practical difference between Rails and node.js? Is one harder or more transferrable than the other? Is one better for certain kinds of web development than the other?
I'm basically interested, I guess, in compiling the greatest base of practical, current knowledge in the next few months. I figure after that I can pick up more obscure knowledge as I go.
As for certain types of web development node.js is definitely more suited for apps that do a lot of real-time stuff (like chat.)
I think what helped me most was paying for development, and then scouring over the code to see what I could learn, while playing with features and Interface builder until I was able to make progress.
As I said, I'm still far from productive, but it at least makes sense.
I once toyed with the idea of building a place for freelance dev's with extra time on their hands could fill their hour gaps by teaching people to code, but that's still on the back burner for now.
Mastering a simple language can also be like the first 50% of your goal. While Python is not exactly the same as something like Objective-C, it has many of the same concepts (classes, containers, C-like language features, etc.). You will quickly become comfortable with relatively complex programming tasks, and you won't be bogged down by tangential stuff like compiler errors, Interface Builder, simulators, or who knows what else.
Don't be afraid to start building things that you may not need yourself. For example, you may have no reason to build an interactive shell that acts like a calculator, but it's a tiny project that would slowly introduce you to a few Python library functions and language constructs. It's also pretty obvious if a calculator is behaving correctly. When that works, you should ask yourself how you might extend it; for example, if you wanted the calculator to write its results to a file like an adding machine writes to paper, search the library for functions that deal with files and try to learn those too. Do this for awhile until you have a few generations of the thing and you've learned a few diverse things.
Only then should you try to map what you know to a more powerful environment that is more closely aligned with a mobile platform. You will find that once you're very confident in one language, a 2nd language such as Objective-C isn't too bad. It's a lot of different syntax and a whole new standard library, but you will find both the language and the library to have similarities (e.g. you can teach yourself NSDictionary by remembering how Python dicts work, or NSArray by remembering Python list capabilities). Yes, you still won't learn it overnight, but it will be easier than starting from scratch.
And since you have a working prototype in another language, you can then see what it would take to map this to the new environment. For example, pull up a template project for the iPhone, and try to make a very basic calculator app by making buttons perform the actions you used to receive from the command line in the Python version.
http://ocw.mit.edu/courses/electrical-engineering-and-comput...
Seven months isn't much time... hit the ground running by doing some guided "build this app" tutorials, go through them a couple times each till you understand the code, tools, and processes that you are working with. Also try to find tutorials that go along the lines of your idea, so maybe you can fiddle with the learned code and adapt it to what you need.
I'm not in mobile stuff, so I can't suggest anything specific.
Learn Python The Hard Way is good for getting your feet wet in programming though.
Pair programming is a great scenario for this because it tightens the loop - you feel more free to attempt things which you're not certain of and it's much easier to find out what you did wrong.