Since the job market sucks and I'm having trouble finding a job, I'm stuck with loads of free time this summer. So I thought I'd give a swing at learning to code for the iOS platform. Now before you guys go off on blah blah Apple sucks blah blah closed platform blah blah. My mind has already been made and the reason is because I want to update my favorite Twitter app for the iOS called Natsulion for iPhone. The Developer has made the code
freely available, and is fine with people making changes, and releasing their own version.
So my question to you is, what is the best way to learn a programming language by yourself and are their any good places or resources to learn how to code? The only experience I have with programming languages is Visual Basic back in 9th grade, a good 5 years ago, and HTML/CSS/a little of JavaScript. Does anyone here have any experience with Coco
a, Mac OSX dev, and iOS? Tips and help are appreciated.
Comments
How do I learn to be a carpenter? Get some tools and wood and start carpenting.
How do I learn to sing? Start singing.
How do I learn to program? Just start programming.
Our culture of school has really got people into this state where they can't do things. We believe that we always have to prepare and learn to do things before we do them. In some cases, like SCUBA, there is definitely some mandatory pre-doing learning activities. For something like programming, no such thing.
If you're going to code for the iOS, you need a Mac. I assume you have one. Install the dev kit. Open the code in XCode. Read the instructions. Just start doing it. Everything you need will be at http://developer.apple.com.
Thanks.
If the lectures are not complete enough I have the older course which I downloaded from iTunes and the site (If you want that I'm not sure of the best way to get that too you, it's over 11gb). It is a very good start on iphone programming.
What do you think a carpenter's apprentice does? They get taken out on real jobs to do real carpenting. It's basically just an opportunity to carpent, because nobody will hire you to learn.
The singing teacher will have you sing. You'll also have recitals quite often, because you need to sing in front of a real audience.
In school you do fake learning. You read about science, and maybe even have a few labs, but you're rarely doing actual science for real unless you're a grad student. You read about match, and solve prepared problems, but you rarely solve real problems with math in school. You do it outside of school while playing games involving numbers or handling money.
Most programming instruction has you do fake programs. They have some BS programs that aren't actually for real, they're just examples. Make a web page that says hello! Make fizzbuzz. All these sorts of tutorial programs aren't actually real programs you would ever write in the real world. In all my years of undergraduate study, I only twice did projects for class that were for real. This is why there was such a gigantic divide between the people who coded on their own, and those who only coded for school. Almost everything I really know about computers I learned on my own trying to use my computer to do things for real.
If you want to be worth a pinch of shit in the game, you train and train and train and train. I could put you, as you are, on the field for a hundred games, but if you didn't train, then I'll still whoop your ass up and down the street at every single fundamental skill in the game that isn't warming a bench, and then tie it all up in a nice little bow, when my trained and seasoned team eats your hundred-game-no-training team for a light snack.
Most of the game Can only be learned on the field? Are you high, or just arrogant and ignorant?
I don't care how many games you've played, if you haven't trained, you're absolutely useless, because you lack the fundamental skills you need, you lack the ability to use these skills proficiently enough to be of use to anyone, you lack the ability to react fast enough to any given situation, you lack the ability to react correctly without thinking about it, you lack the physical fortitude and attributes that training improves.
I haven't played in two years, and despite the previous skill I had, and you'd be hard pressed to find a team that would do anything more than put me on a bench till I'd trained enough, and Qualifying for the rams again, forget it. Now, I wasn't a Carpenter's apprentice, but I worked briefly as a Painter's apprentice, and worked alongside carpenters and apprentice carpenters, and briefly as a mechanic/fabricator with apprentices working under me, so I'm pretty clued in on how it works - which, to the complete lack of surprise to one and all, pretty much nothing like you think it does. You think a carpentry apprentice is just taken out on jobs and does same same carpentry as anyone else, just with a little more supervision right off the bat? Then you'd be in for a rude shock if you'd ever set foot on a worksite for more than twenty minutes and a quick look-around. Christ, as a first year apprentice, you're nothing more than a shit-kicker who gets all the make-work jobs and simple, easy shit so that you can learn the fundamental skills - there's that term again - of the trade. You're fetching Tea and coffee for the bosses, picking up lunch for everyone, you're being sent on errands to fetch tools and equipment, lugging shit about, sweeping and cleaning, and doing simple things, for example, sawing some wood down to size, sanding things down, setting nails and putting glue where you're told. The only person below you on the ladder on the site is the work experience kid, if there is one.
You know why? Because, if you hand a carpentry job to a first year apprentice, he's going to make an absolute dog's breakfast of it. Maybe, you hand the job to a third(depending on the job) or a fourth year apprentice, you'll end up with something like what you're looking for, hell, they might even do a good job of it - because they've spent two and a half to three years, eight or more hours a day, day in, day out, learning the job, and the skills needed.
Oh, and before I forget - For the entire apprenticeship, the whole four years, you're filling out paperwork, studying learning materiel, doing homework, and taking tests, and being interviewed and tested on your knowledge, and having your skills tested. A mate of mine from when I was working at D&R; Automotive, Tommy, He was a fourth year apprentice, and he failed a test on automotive electrics, by barely two percent - literally one question took him over the line from Pass to fail - and it extended his apprenticeship another eight months before he was able to take the test again. Finally, something you're actually NOT talking made-up shit about. Yes, a singing teacher will have you sing, so you can practice the Fundamentals - funny how they keep coming up - and so that they can find your weaknesses, correct them, and so that you can learn to sing well, rather than just being another barely-worth-karaoke warbler, or just another Joe average who can sing a few songs REALLY well, but as soon as you hand them something else to sing, they sound like a half-strangled cat protesting someone attempting to turn it into a completely strangled cat.. And yes, they have recitals, because that's a part of being a good singer, rather than just a technically proficient singer - If you can't sing in front of an audience, then as soon as you're on stage, then you're a singer who can't sing, which is even less worth than set dressing your razor arse is surrounded by.
And, time for the fun "How YOU know, smartass?" part, I've been in the theatre since I was eight, and have been out a grand total of three and a half years. Along the way, I learned how to sing opera. I do a pretty mean Sweeney Todd, and my Phantom ain't no slouch either.
Much of High School is, while I think Fake learning is a little bit strong, Certainly not all it's made out to be, and certainly not a comprehensive course. I can't speak on university, because the most university I've attended was showing up to do my Radio show on Leeds Student Radio and hitting on the occasional Student. But the problem is, unlike you seem to think, that doesn't mean that you learn most things by just leaping into them - If you were dropped right into high school, without having been taught to the end of the primary school level, you're going to fail miserably, because you don't have the fundamental skills or knowledge you need, such as reading or writing.
If you hand a novel written in Japanese to someone who doesn't speak any Japanese, it's not going to teach them Japanese, because they don't have the fundamentals of the language, and all the symbols are meaningless gibberish, no matter how many times they read it, or, more accurately, look at the symbols.
If I hand you a rifle, and tell you to strip it, clean it, re-assemble it to my satisfaction, you won't be able to do it, because you don't have the knowledge you require and if I drop a rifle into your hands, set a target 1000 yards away, and tell you to get at it, and from where you are, hit the target, the only way you're hitting that thing is luck or cheating, even if I gave you a month to do it. Sure - you might learn to compensate for bullet drop. But, will you know how to compensate for wind speed and direction correctly, or temperature, humidity and weather? Will you even know how to properly pull the trigger? Will you know when to fire in the cycle of your heartbeat, or how to hold your breath correctly when you fire? Of course you won't, because you don't have the skills and knowledge you require, and you can't learn them by just shooting.
As I said before, Scott, I'll take your word for it in regards to programming, at this point - For all I know, your very next post, You know more than me on the topic, and have hundreds upon hundreds of hours more experience. But don't make the stupid, stupid mistake of thinking that this applies anything close to universally. Give advice on programming - you're a smart(if somewhat arrogant) guy, and when it comes to that field, you know your shit forwards, backwards and upside down - but either work on picking which analogy you use better, or don't bother.
But the analogies he chose to show that point were extremely poor, and in fact, damaged his point rather than supporting it, and then he chose to argue back over those points. To change it to food for no reason other than that I'm hungry - Sure, he has a perfectly cooked prime rib-eye, but if that prime rib is served buried half-way down in a whole wheelbarrow of manure - it's a very good steak, I won't deny, but I'm still not going to eat it, because it's buried in a large pile of horseshit.
As a purely personal point - You think Scott wouldn't do the same to me, were our positions reversed? Goddamn right he would - as much as I've observed, Scott doesn't dance around a point, if he thinks you're making a bullshit argument, he'll say so, even if your core point is correct. I possibly was a little harsh in the way I worded it, but frankly, that's the way I talk. I might be a little more observant of societal niceties than Scott seems to be, by most accounts of his manner, but I don't see the point in pissing about and patronising him or coddling him with my words. I respect him enough to speak my mind to him, rather than messing about with niceties that he doesn't care for anyway.
I also got my degree by doing lots of programming, with electrical engineering tied in wherever possible, and most of it was basically just writing my own versions of common API. Those things are fairly useless in the real world because they've already been done. But the fact is I'm still programming. That itself is not useless. In the exact same way, I did countless 2-5 page essays during grade and high school. In my profession, will I ever have to write a 5 page essay about anything? Probably not. But it still helped me become a very competent writer.
As Nine said, everything is learn -> practice -> apply. And if you really want to be good at something, unless you are a goddamn genius, you have to learn under someone who has more experience. To Scott's point, luckily programming is one of those things where you can learn on your own, so if you want to learn it, you are fully able to.
Ok, so I go in a batting cage. I hit off a tee. I learn to throw, and play a lot of catch. Put me on a field, still suckage.
You might know the rules of the game on paper, and have the fundamental skills mastered, but you have to go out and actually play for real. Otherwise you'll be doing stuff like throwing to the wrong base. Running when you should stay put. You won't understand the psychology of what kind of throw pitchers are going to send your way in different situations.
I'm not talking about mastery. I'm talking about learning. Going from zero to something. Obviously if you've got nine guys who already know how to play, then training to throw harder, run faster, and swing better will put you on top. That's not what we're talking about here. We're talking about not knowing how to do something at all, and then learning to do it. The fastest way is to just do it and fail and learn from the mistakes. I'm not saying book learning is useless. I'm not saying practice or training of fundamental skills is useless. I'm saying the fastest way to go from zero to something is to actually do it, for reals. Even if you do it just a handful of times, or even once, that experience will give you a context for book learning, practice, and training, making them all the more valuable.
Don't think about someone who wants to be a carpenter, think about someone who has never seen a hammer in their lives, let alone know how to swing it properly. They shouldn't be reading a book about carpentry. They shouldn't get a plastic hammer and nails. They shouldn't watch videos of hammering. They should pick up a hammer, some nails, some wood, and make a bird house.
The students who were going to make just one pot studied, planned, and prepared like crazy. They worked so hard on that one pot, and they turned out alright.
The students who went for quantity made a lot of really shitty pots. However, by the end of the semester they were making pots that were superior to the pots of the students who were making one pot.
All the students had the same amount of time, one semester. Studying, preparing, reading, planning, they are all well and good. However, they are no replacement for doing. Got one guy who never wrote a program in his life, but read every programming book and put him up against a guy who never took any formal instruction, but has written 100 programs. Who's going to write something better? Take a guy who's studied running like crazy and put him up against someone who just runs every day without thinking about it. Who's going to win the race?
I'm not saying learning and such has no value. You people need to learn to read. I'm just saying that there is no substitute for doing. If you want to learn to do something, start by doing it as much as possible.
You know what's more useful than being able to understand the psychology of what kinda throw a pitcher is going to send at you? Being able to read his movements, and react fast enough. If you can do that, you can tell exactly what the pitcher is doing, before the ball even leaves his hand. You know how you do that - Not by playing in the game, where your focus is hitting the ball, but in training, where you're improving yourself, and you can do it over and over again till you have it. Think about it - In an average game, you'll be up to bat somewhere in the region of eight or nine times, usually for little more than one to five minutes a time, and you'll get one hit in, and most likely you'll face no more than three pitchers at most. In training, if you want, you can bat just once, but for four solid hours - the equivalent to roughly forty eight turns at bat, and without the worry of that you HAVE to hit it, or being struck out, or walked, and you can take as many swings as you like, and you can face as many pitchers as you have people on your team who can pitch. If you want to put the pressure on, you can make it into a competition. If you just want to practice form, you can just practice form. But you're still getting far, far more benefit than you are by playing a hundred games, if you're not training. Nor was I - I was pulling apart your fundamentally flawed argument, while recognising that your core point was good.
However, again, Do not make the mistake of thinking that this method applies to everything, or even most things - To go back to the example of the rifle, No matter how many times you screw up the shot, it's not going to teach you to fire between heartbeats, with your breath exhaled and held, or how to squeeze the trigger steadily, rather than pulling it hard, because it's something that would be non-obvious if you don't have the experience or a good teacher.
The thing is, on one level, you're entirely right - some things, the best way to learn them is to do them, fuck up, figure out how you fucked up, and do it again. and again. and again. But that doesn't even apply universally within a single field. To jump back to baseball, playing a hundred games isn't going to teach you by trial and error to throw optimally, it's going to teach you to throw how is comfortable and familiar to you.
Even within programming, this applies - Sure, the best way to learn python is to screw about with python, but that assumes you already know know a base level about what you're doing. If you wanted to teach, say, my sister to program(who is a very average "people who know about computers are wizards doing magic" kinda person), you wouldn't just throw her into practising programming by writing code, you'd teach her the very basics first. No, they shouldn't. What they should do is seek out someone, and say, "Hey, can You teach me how to do this?" or maybe "Hey, can I watch you while you do this thing, so I can figure out how to do it?" - To bash away at when you know nothing is a bad way to learn, because as TechParadox said, you inevitably try to re-invent the wheel, and make a hash of it.
I'll give you an example from my personal experience - When I was still learning some of the more complex stuff as a mechanic, I'd do stupid shit like that all the time. I fabricated a custom tool for cleaning out the gaps where piston rings go, and frankly, felt like a jackass when the tool I built didn't actually work as well as the method that's traditionally used - Break a piston ring in half, wrap one end in some cloth or tape, and use that - It's non-obvious, but perfectly sensible and obvious to someone who has the right level of skills and knowledge - the piston rings are sharp, perfectly sized for fitting into and filling that gap, and are softer than the pistons themselves, so there is minimal risk of damage to the piston.
Learning things, especially things that you don't know anything about is not dropping a pre-fab wall down and propping it up - It's more like building a wall out of bricks, you start with a strong base, and you keep piling on the bricks and mortar, till you have a half decent wall.
Also, whoever made up that story doesn't know bloody much about pottery, beyond what they saw through their eyeful of tears while watching that scene in the movie Ghost. Yeah, sure, you might have some students who make a shit-load of pots, and some of them might come out with superior quality pots.
However, far more of the people who actually sat down and learned about the process from books before they made a decent enough pot are going to pass the test, because they're not going to have pots that crack and break in the kiln, because they know how long to put them in there, they're going to have pots that have superior use for the application, because they know what type of clay you want for an outdoor decorative pot, Vs a pot that you make to keep pens in on the side table. They're going to know how they should correctly apply and bake glaze to make waterproof pots rather than a porous clay pot that lets the water thorough.
They're going to make an average pot, but they're going to know what to do to make a pot that's not a pile of shit once you put it to use - though, they won't make as well formed of a pot as the students who busted their arse at the wheel and made as many pots as humanly possible in the time, but it will, in the end, work better.
The student who is REALLY going to make a good pot is doing BOTH - busting their arse at the wheel, AND building up their knowledge of the subject. THAT student is going to make a very well formed pot, that is going to be just right for the intended use, because they both have the hands on skills to make a damn fine pot, and the knowledge to make a pot that's not going to fail at the intended purpose because they used the wrong clay or glaze. No, I'm sorry, that's just not right.
Let me give you an example that relates to you specifically.
You've mentioned before, that you can't replace the battery in your car, and that even if you learned the theoretical, you couldn't bring yourself to actually try it in a hands on fashion. But if you reverse the problem, and you just went out and tried to learn it by doing, even at the first thing you do in replacing the battery after you have access to it, you've got a 50/50 chance of blowing your electrics by pulling the wrong cable from the battery terminals first, and even if you do it successfully, you have every chance of screwing it up when you put the terminals back on in possibly the wrong order, or the next time you change the battery, or another time ten times down the line, because you don't know WHY you did it right the first time.
Say you Change the battery on Rym's car down the line, and for whatever reason, his car is different to yours, and you do it as you would yours, you pull the wrong terminal and blow out his electrical system. You don't understand why you screwed it up, because while you have the practical skill, you don't have the knowledge base to back it up - and in all likelihood, you'll be ten times as frustrated when it doesn't work, because it's always worked before, and you don't know why it didn't this time, so you have a much greater chance of never bothering to do it again, thus turning the entire exercise into a complete waste of time.
But if you pick up the knowledge, AND do the practical learning, then you'll do it right EVERY time, and trivially, because you know not only the practical skills of how to do it, but the correct order to do it in, and why it's done that way.
Like I said - Your core point is mostly decent, but your argument is terrible. Practical learning has great value, as does book learning, but they're both worse than useless compared to the two of them combined.
As for that We need to learn to read, I say in return, that you need to learn how to think about what you read. I've told you why what you're saying is wrong, and at length - though I'll admit, I started purely with the analogies you chose, because they were extremely poor choices to illustrate your point - but all you're doing is re-stating your point, with what I said twisted around like a circus contortionist so that it seems to support your point, without actually thinking about why they were poor analogies to pick in the first place, or why, in light of that, the conclusion you propose might be flawed.
That said - even the students who made many pots were doing so in the context of a class, and it seems reasonable to assume that those students were exposed to at least some demonstration, theory, and critique. Experimentation and prototyping go a long way towards mastering a skill, but that does not mean they will take you anywhere on their own (at least, not very quickly). If you do any sort of rapid prototyping in software development, there's a very important feedback phase where you get someone (who is either your target audience or the person giving out the requirements) to tell you what works and what doesn't.
I took two semesters of ceramics as part of my humanities requirement in college. I had never sat down in front of a pottery wheel in my life before that class. The first time I tried throwing anything on the wheel it was a hot mess. I scrapped so much work back into my clay stock it wasn't even funny. One day, about halfway through the first semester it finally clicked and all the instructions my teacher had poured out made sense. It was akin to that moment when you 'get it' when you're learning to play a rhythm game, or the first time you're able to ride a bicycle without wiping out. My hands were able to get the clay to do what I wanted it to and my feet were able to control the wheel. I was able to crank out bowls, pots, and all kinds of vessels with minimal trouble. I still have a whole box of the stuff I produced in storage in my parents' garage somewhere (provided they didn't throw it out - I should go dig that stuff up and start using it.) Even though I had reached a state of competency with the wheel, I knew I still had a long way to go. If you sat someone down in front of a wheel who had only read theory (and possibly watched videos) on the process but never actually handled a wheel and told them to throw a pot, you'd be lucky if you got a lump of clay with a dent in it in the center of the wheel, much less an actual pot. If you put someone in front of a pottery wheel with absolutely no prior knowledge and gave them all the clay they could ever want, they'd be lucky to generate something that even remotely resembled a pot in a year's time, much less a semester.
I can see where Scott was coming from in his original point. If someone wants to learn how to do something, they shouldn't just sit around wringing their hands and wondering where to start. They should go pick up a book on the subject and learn more about it. They should seek out local instructors or college classes where they can learn the processes and techniques required. But if all they try to do is go it on their own and learn from their mistakes then their chances of frustration and, ultimately, failure are high. Scott just happened to pick bad examples for stuff that one can "pick up and go" and then be able to do competently without outside instruction.