

Ask HN: from zero to development - DeusExMachina

I friend of mine would like to learn iPhone development, but she is starting from zero since she does not know how to program at all (she studied communication and multimedia design).<p>I was thinking about teaching her, because I've thought for a long time to enter into the teaching business and this is an occasion to gather some information on how to do it having a student that did not pay for the course and can forgive me some mistake.<p>She wants to learn iPhone development, but I think this applies to learning any platform from ground level. What do you think it's the best path to teach development to a complete starter? Should I go the path I followed long time ago (learn how to program in a basic imperative language, learn OO paradigm, learn proper development on the target platform) or there is some better path, maybe mixing the steps? I understand that although the path I followed lead to good result, I started learning programming 15 years ago when the landscape was a lot different and I had a different commitment.<p>I would like to keep the level of interest and fun high from the start, because if I follow a more academic path I fear her enthusiasm could wear off (and this will be helpful in the future to have satisfied customers). Any advice/experience on this subject?
======
jacquesm
I've tried this with mixed results. It all depends on the willingness of the
'subject' to bite through the boring bits before getting to the good parts and
your ability to make the boring bits interesting. Hint: computing factorials
is not interesting :)

Programming is best taught when aiming for a goal. So if her goal is an iphone
app then that's the 'hook' you could use to make the boring bits more
interesting. Keep that functional iphone app at the end of the tunnel as the
way to motivate and you stand a chance of doing a good job here.

Finding out what motivates people is the key to teaching, if someone is hard
to motivate or you're not good at figuring out what motivates them it will be
an uphill battle. But once you have the motivation on your side you will
progress quickly.

~~~
skowmunk
Very well said, in a succinct way.

Depends on the person (subject),

Goal,

Motivation.

------
thelittleguy
You don't need a college degree to get started, but I do advice to start in
the iphone platform right away. Considering your friend is into multimedia
design already, I would advice her to start by creating simple iphone games in
order to learn programming. Just take a look at the open-source cocos2D for
the Iphone:

<http://www.cocos2d-iphone.org/about> I'm using it myself as well, and it's
completely free.

I don't know if she's is into game making already, but I do know from my own
experience (I'm a Game Designer & programmer btw.) that creating a game IS the
best way to learn how to program, also the most rewarding.

Here's how I would advice her to start:

0\. run all the examples from the cocos2D engine on your iphone/simulator

1\. learn how to create a calculator with it (using self-made buttons)

2\. display an image(arrow) that moves+rotates where you tap it to go

3\. re-create pong: <http://www.youtube.com/watch?v=LPkUvfL8T1I>

4\. re-create frogger: <http://www.youtube.com/watch?v=2VcS77kFRSk>

5\. re-create tetris: <http://www.youtube.com/watch?v=keeSEJG4XzU>

6\. learn how to integrate menu's + transitions on top of your game

7\. expand your knowledge with SqlLite and create your OWN simple game,

and show the source to your friends and collect feedback on how to make it
better.

Recreating tetris is the hardest part, but after that she'll have a solid
knowledge of how programs work - and she can use this knowledge to go any
direction she wants.

PS. If you need some help with getting started, just reply to my post.

------
exline
I taught Introduction to Programming at a University after I graduated. It was
an great experience and I believe I might return to teaching later in life.

The biggest issue for you will be unlearning what you already know. Since you
will be dealing with someone starting at zero, you will have to teach things
you take for granted. Simple things like for-loops trip up a lot of people.
Keep that in mind when you are teaching her, that you might be using concepts
or ideas that you didn't think about, but she doesn't understand yet. I would
move as fast as possible to working on an IPhone, simple hello world aps, so
she can get the visual feedback.

I also would not shy away from the right way to do things, even if it is more
complicated. As an example, Java was the language we taught at my school. Not
knowing any different (not unlearning what I knew) I had my students properly
define every class in its own file. This is just the right way to do things.
Turns out all the other teachers would use a single class with private classes
nested inside. My students had a small leg up on all other students, even if
my best students were not even CS majors.

~~~
pilom
Can you talk more about your days teaching. This is something I would love to
do but I know my Alma Mater would never let me do anything without a PhD.
Where did you teach? What expectations were there for hours? What
qualifications were they looking for?

~~~
exline
It was at San Diego State University. The course was CS106 which was
introduction to programming, a requirement for CS students and some EE majors
and some math majors I believe. Technically I was a guest lecturer. I got my
first job as a programmer through one of my professors. He was pretty well
connected with several companies in San Diego.

SDSU was switching most of its courses to be taught in Java. They also had
MSCE certification courses and were starting Java certification courses. I had
just landed a new job at a local java shop. My old professor was looking for
professionals to teach the new java courses. I was a pretty good developer and
my name came up to teach the course (which paid pretty well.) But he decided
that I need some teaching experience and got me to teach the intro to
programming course to give me the experience. I know he had to pull a few
strings to make it happen since I was not a grad student and not exactly a
seasoned professional.

It turned out to be a great experience. I really enjoyed it. The pay was
horrible. After preping for the lecture, grading, office hours and the
lecture, I think it worked out to ~$12/hour. Quite a bit less than I was
making as a regular developer. So I only taught the one semester.

I know of another guy I used to work with who was a horrible developer. I mean
really bad. I believed he had a masters degree. But he taught extension
courses at UCSD. I think the extension courses have a lot less restrictions on
the requirements. From there he ended up teaching full time at another
college, can't remember where. It was another small one in San Diego. This
might be an option to allow you to teach if they offer extension classes.

------
ThomPete
There is a good full course from Stanford here:

[http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewiTunes...](http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewiTunesUCollection?id=384233225)

------
ezrider4428
If someone can take a big, complex problem and disseminate the root causes
then they can learn how to program.

I would start with something that she is familar with like the design and work
backwards into the code. Use as many analogies as possible, try and find
similar relationships to things that she is used to.

------
skowmunk
well.. if this helps.

I have seen lawyers become programmers, Mechanical engineers implement ERP
systems across countries, people with masters in biology enter and thrive in
programming.

It all depends on how much you or your friend spend time in learning and
trying out things in programming, that is, if you really like it.

Given the same inherent intelligence (which I correlate with creativity),
performance or excellence depends on the accumulated knowledge, so keep
accumulating that knowledge - practical and theoretical, from books,
experience, the net, talking to others, degrees, certificates, from whichever
and every way you can. It all adds up.

Good luck

------
grigy
Before starting with iPhone development I would have her to get a CS degree or
at least some of the standard courses.

~~~
grigy
When giving -1 please leave some comments. I strongly believe that without
understanding the basics of programming one can't become a good programmer. So
it makes sense to spent some time and pick these courses.

~~~
dagw
Well I didn't downvote you, but I still very much disagree. Having a solid
foundation in CS is quite unnecessary for hacking together an iPhone app, and
even if it was, going back to university is very ineffective way of quickly
getting the necessary skills.

If, for example, you gave a list of what you considered the most important CS
basics for an iPhone developer it would be far more helpful than simply saying
"get a degree". Then the person who was asking the original question could
build a curriculum around just those parts.

~~~
grigy
Agree. If the author agree with the idea of getting degree then we can figure
out what subjects are required. By the short answer I just wanted to let you
know my opinion, that it's very hard to get into programming without spending
some time learning these subjects.

~~~
skowmunk
I don't mean to gang up on you, but if it helps in breaking your self-imposed
constraints on yourself -

to become an expert in something, or even understand something, one doesn't
HAVE to go to a university.

There are lots of university grads who are experts in nothing.

There are lots of experts in this world who became experts in different areas
even when they never put a step in college.

Agreed.. university education, is definitely one of the many ways to
accumulate knowledge. Its just that, its not the only way.

