Ask HN: from zero to development
7 comments
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.
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.
Very well said, in a succinct way.
Depends on the person (subject),
Goal,
Motivation.
Depends on the person (subject),
Goal,
Motivation.
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.
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.
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.
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.
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?
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.
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.
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/viewiTunes...
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.
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.
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
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
Before starting with iPhone development I would have her to get a CS degree or at least some of the standard courses.
Writing simple code doesn't require a CS degree, it requires the right type of mind in the student, the right kind of thinking ability, and a good teacher. With those, simple code can be made to run quite early.
Good structure can be imparted by an occasional coding partner. Writing your own code, then having someone partner and mentor with you for an hour or two can help you see what's good, what's bad, and what's ugly. The ways of designing interaction and structure can most easily be imparted in a few informal sessions based on real working code than it can in huge lectures with disinterested lecturers.
Using libraries can most easily be done with someone to help you read the manuals and documentation.
On the way, awareness of data-structures and their implications can easily be picked up, especially when something runs too slowly and your mentor helps you re-write your code using a quicksort instead of a bubble sort, or a trie instead of an unsorted list.
And in six months you can have both, a working app and a good knowledge of the underlying CS ideas.
Yes, you're missing the course on compilers, parsing, NLP, AI, optimisation and complexity theory, but you have a working app and solid foundations to learn more.
You don't need a CS degree if you are the right student, and have a good mentor.
Good structure can be imparted by an occasional coding partner. Writing your own code, then having someone partner and mentor with you for an hour or two can help you see what's good, what's bad, and what's ugly. The ways of designing interaction and structure can most easily be imparted in a few informal sessions based on real working code than it can in huge lectures with disinterested lecturers.
Using libraries can most easily be done with someone to help you read the manuals and documentation.
On the way, awareness of data-structures and their implications can easily be picked up, especially when something runs too slowly and your mentor helps you re-write your code using a quicksort instead of a bubble sort, or a trie instead of an unsorted list.
And in six months you can have both, a working app and a good knowledge of the underlying CS ideas.
Yes, you're missing the course on compilers, parsing, NLP, AI, optimisation and complexity theory, but you have a working app and solid foundations to learn more.
You don't need a CS degree if you are the right student, and have a good mentor.
But people don't born with right mind. It's the hours and hours spent on solving problems make the right mind. Aren't you agree? What university gave me is how to think and learn.
No, I don't agree entirely. University is not the only way to get an ability to think and learn - some people seem to have it before they go to university, some people don't have it even if they have gone to university.
Perhaps for some people they do acquire it while at university, and even then it's correlation, not causality. What university gave me was access to materials and mentors, and a motivation to acquire both. I already had the ability to think and learn - I don't think I got much more of either from university, I just had the materials to apply them to.
So if someone wants to learn programming, and has the motivation, and has the stick-to-it-iveness, and the drive, and the patience, then all university will do is require them to take more than they need, at a pace that might not suit them.
A mentor is better if you already have the right mind-set.
Perhaps for some people they do acquire it while at university, and even then it's correlation, not causality. What university gave me was access to materials and mentors, and a motivation to acquire both. I already had the ability to think and learn - I don't think I got much more of either from university, I just had the materials to apply them to.
So if someone wants to learn programming, and has the motivation, and has the stick-to-it-iveness, and the drive, and the patience, then all university will do is require them to take more than they need, at a pace that might not suit them.
A mentor is better if you already have the right mind-set.
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.
> When giving -1 please leave some comments.
Agreed!
> I strongly believe that without understanding the basics of programming one can't become a good programmer.
Well, there are more ways to skin a cat. You can start by picking up some of the basics by practicing them with something that actually interests you. The 'basics' of programming can be taught in context, in stead of just by themselves in isolation. That way they are directly applicable, easier to remember and likely not quite as arcane as they would seem otherwise.
What are the basics of programming anyway?
Some would say 'recursion', others would say 'assignment', 'sequence', 'iteration'.
But to explain those in a vacuum is very hard to do, there is no shared terminology.
> So it makes sense to spent some time and pick these courses.
It makes sense to spend time on those courses once enough background has been established to begin to parse those courses. We computer people hardly realize how our speech is permeated with jargon and assumptions about knowledge pre-requisite before you can take the next steps.
A CS degree for someone that wants to dabble in iphone apps is over the top, a course is not to be compared with a one-on-one session with a dedicated teacher like the OP, concepts can be explained in context.
I could teach you electrical theory, semiconductors, the various physical laws and so on. Or we could go and build a working radio. Which one of the two do you think would interest a beginner more? Then, after you've used that beginners interest and motivation you can casually introduce some of the theory and how that applies to the subject matter.
I'm not sure if that's the 'proper' way to teach a subject, but it seems to be pretty effective.
Agreed!
> I strongly believe that without understanding the basics of programming one can't become a good programmer.
Well, there are more ways to skin a cat. You can start by picking up some of the basics by practicing them with something that actually interests you. The 'basics' of programming can be taught in context, in stead of just by themselves in isolation. That way they are directly applicable, easier to remember and likely not quite as arcane as they would seem otherwise.
What are the basics of programming anyway?
Some would say 'recursion', others would say 'assignment', 'sequence', 'iteration'.
But to explain those in a vacuum is very hard to do, there is no shared terminology.
> So it makes sense to spent some time and pick these courses.
It makes sense to spend time on those courses once enough background has been established to begin to parse those courses. We computer people hardly realize how our speech is permeated with jargon and assumptions about knowledge pre-requisite before you can take the next steps.
A CS degree for someone that wants to dabble in iphone apps is over the top, a course is not to be compared with a one-on-one session with a dedicated teacher like the OP, concepts can be explained in context.
I could teach you electrical theory, semiconductors, the various physical laws and so on. Or we could go and build a working radio. Which one of the two do you think would interest a beginner more? Then, after you've used that beginners interest and motivation you can casually introduce some of the theory and how that applies to the subject matter.
I'm not sure if that's the 'proper' way to teach a subject, but it seems to be pretty effective.
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.
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.
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.
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.
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.
I think the importance of a degree is very dependant on what your goal of getting into programming is. If your ambition is to one day be a senior engineer at a cutting edge software firm, then yes, a CS degree is probably time well spent. If on the other hand your ambition is simply to learn how to hack together handy utilities to make your current (non-programming) job easier then a CS degree is probably a complete waste of time.
Programmers come from all kinds of backgrounds. Some are still in high school (no college). Some dropped out from college (no degree). Some went to college, but for something completely unrelated to programming (me).
Would I be a better programmer if I had studied it in school? Almost certainly. But I tried taking a CS class, and it was so dry, so inapplicable, and so poorly taught (or, granted, I might not have been the best student), that I walked away from it thinking that programming was nothing I wanted to be associated with, ever. Instead, I got into front-end development. In time, I realized that to execute on the ideas that I had, I'd need to learn web programming — something my school didn't teach. SO, over time, I taught myself.
To sum up: If his friend is excited about getting started programming, I wouldn't steer her towards getting a CS degree any more than I'd steer someone interested in music towards getting a music degree, someone interested in running to a kinesiology degree, or someone interested in writing to getting an English degree. People have interests and passions, and they should explore them outside of institutional structures like universities.
Would I be a better programmer if I had studied it in school? Almost certainly. But I tried taking a CS class, and it was so dry, so inapplicable, and so poorly taught (or, granted, I might not have been the best student), that I walked away from it thinking that programming was nothing I wanted to be associated with, ever. Instead, I got into front-end development. In time, I realized that to execute on the ideas that I had, I'd need to learn web programming — something my school didn't teach. SO, over time, I taught myself.
To sum up: If his friend is excited about getting started programming, I wouldn't steer her towards getting a CS degree any more than I'd steer someone interested in music towards getting a music degree, someone interested in running to a kinesiology degree, or someone interested in writing to getting an English degree. People have interests and passions, and they should explore them outside of institutional structures like universities.
Actually I don't hold a CS degree either but I started programming at 12 and it took so many years to become a programmer.
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.
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.
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?