Ask HN: Non-technical founder -- how do I become a better coder?

4 points by sliksal02 ↗ HN
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 ] thread
Mobile development (in my experience) is generally a bit harder to get into that just standard web development. You could try something like PhoneGap or just plain web-friendly mobile development first to see if that works out well enough, but if you go native you'll have to fully learn Java / Objective-C (for the android and iphone, respectively.)

As 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

Thank you. I will definitely check out PhoneGap, but if it's just a cute substitute for learning Java/Objective-C, I figure I might be better served by learning the latter.

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.

The main practical difference would be that the rails ecosystem is just much larger in general (i.e. more community support, ready-made plugins, documentation, what have you.)

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'm a front end guy trying to learn mobile, and my experience has been that iPhone programming has a steep learning curve. I bought every book on the market, and memberships to sites like Peepcode and Think Vitamin, and still barely feel competent.

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.

Even if you've done C++ before and want to target mobile, I'd still recommend starting with a forgiving language such as Python. Python is simple so you can be immediately productive. It has lots of documentation, it's easy to search the web for examples and even if you won't use it for mobile it will remain a valuable skill.

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.

Thank you. Can you recommend any books I should be reading on Python? I'm more inclined to just read the Beginner's Guide on the Python Wiki, but just in case I'd be missing out on a key resource, please let me know.
Focus on the languages that you like AND can solve your problems. Depending on your platform (iPhone, Andriod, Winphone) and application will limit what language(s) to use. Read what others are using on that platform, feel their pain/jubilation.

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.

Whatever language you learn there is only one way to be better coder that is coding lots of coding
I am learning python right now, and Dive into Python 3 is an absolutely incredible resource: http://diveintopython3.org/

Learn Python The Hard Way is good for getting your feet wet in programming though.

How does anyone become a better coder? You code.

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.