

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

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.<p>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.<p>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.<p>Thanks for your time. If you have any other thoughts, please do share.
======
makecheck
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.

~~~
sliksal02
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.

~~~
blakerson
Also check out MIT's OpenCourseWare since they use Python in lower-level CS
classes. Here's their non-major Intro to CS class, which comes with videos
(YouTube or iTunes U), code, and a book or two in PDF form:

[http://ocw.mit.edu/courses/electrical-engineering-and-
comput...](http://ocw.mit.edu/courses/electrical-engineering-and-computer-
science/6-00-introduction-to-computer-science-and-programming-fall-2008/)

------
saiko-chriskun
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

~~~
sliksal02
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.

~~~
saiko-chriskun
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.)

------
LarryMade
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.

------
Kishin
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.

------
glimcat
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.

------
parthshah
Whatever language you learn there is only one way to be better coder that is
coding lots of coding

