Six-month-old web site Codecademy claims you can learn programming through its online tutorials. The free modules on JavaScript are now available. The site also allows anyone to post their own programming courses. The site has good funding, but question is: can you really learn programming this way? One blogger enthuses that Codecademy’s approach “looks like the future of learning to me,” while another slams it saying “Seriously? Wow, bull**** badging and sh**ty pedagogy wins the day in ed-tech investing.” What do you think?
It can work to some point, WEB design/prog is quite easy to learn with books+tutorials. But as soon as you get to C, algorithmic and optimization, forget about it.
Programming can be two things, craftsmanship and engineering. Not both at once. Both can give results, but only one of them scale.
Because nobody has ever optimized JavaScript </sarcasm>
I’m sure it can help people who don’t know anything about programming get a taste… which is probably enough. I know my brother in law is having a blast with his first steps into ‘programming’, and maybe afterwards he’s interested in learning a real language… If not, he’s at least learned a new way of thinking.
Nothing lost there, right?
Yeah I think that’s the point of this kind of website. I tried some lessons and it’s a nice introduction to programming, showing you the very basics idea.
Now, maybe you can learn to program this way, but you won’t learn to do software engineering or computer science using this website.
Anyway I think they’ve got an interesting concept and maybe Codeacademy can be use in schools to give a taste of programming to non-techies.
I know some basic coding already, C/VB/PHP but mainly used Delphi… So I did try the javascript and I actually completed it all. Some of the examples weren’t the best and left me wondering what the heck, and I did draw upon my past in other languages to complete the tasks.
So I’m not sure if its suited to total beginners to the world of coding but for getting existing coders into a new language, its a very good primer that’ll get them up to speed on the basics quickly.
I cut my teeth on Basic on Apple IIe Basic.. Then I moved on to programming calculators (Never had a computer growing up). I would fill up entire notebooks with programs I was doodling on in class before I finally took the time to input them slowly on graphing calculator. Now I primarily program in C++ for work. I think people just make programming into something way harder than it actually is, computers are very simple devices. You can move from memory to register and vice versa, do a math operation, a conditional branch and that is about it. Though from studies I have read, for some people programming is very difficult to impossible to learn whereas others pick it up naturally. Hopefully this site will help people discover which they are early on as a taste of possibly pursuing a career in programming. As far as computer science/software engineering goes, think it is a blessing wasn’t taught these methods in school and had to learn them on my own. I often question how much value you get from a person who teaches programming for a living vs. someone who actually programs for a living.
The hard part is not to write code, the hard part is to write good code.
Anyone can kick a football against a wall but that doesn’t make it easy to become a professional footballer.
I often question how much value you get from from a person who teaches sexual education for a living vs. someone who actually has sex for a living.
Edited 2012-04-14 10:51 UTC
I agree with you completely on your first analogy, but the second is faulty to the point of being flamebait.
There is a lot of merit in completing a degree in a field you wish to work in, especially any kind of engineering. At the same time, no amount of education can take the place of in-the-field experience. Rather, I feel the two paths compliment each other, and when you combine real world experience with the discipline and knowledge gained in school, you have the best chance of being a great engineer.
Of course, it was being used to illustrate the faulty logic in the post I replied to.
I’ve been trying to write a response to this and I keep starting over. This touches on a raw nerve for me because a number of people I’ve worked with didn’t think my job consisted of anything more than knowing a computer language. There’s a lot more to it, working as a professional software developer, than knowing Java, C, Ruby or PHP. None of it is secret, but there’s a rigor to a formal education that’s missing from a lot of self taught coders that I’ve met. I’ve seen self taught coders get stumped on what, for most well educated CS graduates, would be a straight-forward matter of language parsing, or even simple finite state machines.
I say this as someone who taught himself C++ on a Mac 6100/60 in the mid 1990s. Long story short, the formal education is why I can think problems through on several layers. I think it’s possible to get rich just knowing some PHP and having a great idea. I also think it’s possible for self taught coders to absorb, over enough time, the same information I got in a class room setting. I just don’t think, for the average person, those are likely outcomes. If you are serious about developing software, then you should get an education in computer science from a decent school. If you want to scratch the itch, or think you have that great idea and just need to get a prototype, then feel free. Just don’t confuse that with what a solid education brings to the table.
Edited 2012-04-14 03:16 UTC
Mod’ed down? The hell??
I mod’ed him down because he assumes that having a formal education makes you *better* than someone else without one. I kind of see some sense of superiority and arrogance in his post. Don’t assume that you are better than a self-taught programmer just because you have a formal education.
How many times have I seen CS graduates moving to Finance or trying to get them to hire self-taught programmers because they didn’t know enough of their craft to be able to complete a job?
Heck, I still get calls from people that are in their last year of Computer Science and they still come and ask me about Regular Expressions and for some help with their work, etc.
College is important and our society values it a lot, but it doesn’t make you automatically better than anyone else for having one. That’s overrated.
Edited 2012-04-14 05:39 UTC
He’s entitled to that opinion. Feel free to argue against it.
How many times I have seen self-thought programmers f–k up incredibly due lack of understanding of basic principles of program design? A lot. Does that prove anything? Maybe, maybe not.
Edited 2012-04-14 05:29 UTC
And why would you generalize?
There are many resources out there about program design and data structures, I think it’s up to the developer to educate himself, it’s the developer’s responsibility.
Just because some self-taught programmer screwed something doesn’t mean that all of them are equally as bad. The same can be said about CS people, it’s all relative. Mistakes also happens a lot in software development, the good thing is we can fix the mistakes, learn from them and move on.
Do you know Miguel de Icaza? The creator of GNOME and Mono, he is a self-taught programmer and doesn’t have a CS degree. Yet he proved to be very successful with his projects.
Edited 2012-04-14 06:05 UTC
It’s never about the degree. It’s about having the required background knowledge to actually really understand what you’re doing, and not just think you’re a programmer guru just because you can complete some online coder page. One way of gathering at least some parts of that knowledge is by getting a relevant degree, yes, but not the only way, I can understand that. Still, we all can already well see the results of making everyone and their neighbors believe they can be programmers in a fortnight.
Perhaps that’s a question you should ask yourself.
So what you are saying is that nobody will ever be successful as a professional software developer without college education?
Maybe you should read what I wrote.
Then here’s another post you can mod down, because I’m just going to say that while having a higher education doesn’t necessarily make you “better”, preaching that no or less formal education can make you just as good is exactly as a generalized opinion as the one you’re protesting against.
And forgive me, but experience – and not just mine – will probably easily prove that self-taught “programmers” are generally (yes, I said generally) usable as generic everyday coders, not engineers in real big complex demanding projects. And that’s a big difference, and yes, it really has a connection with getting a degree. Not just with the paper, that’s nothing, but the background, the insight, and maybe some experience that you might gather while trying to get it. Harsh? Maybe. Live with it.
[edit: some spelling]
Edited 2012-04-14 07:32 UTC
I know 3 self taught programmers than understand things such as Database Optimization, Threading and OOP much better than I do.
I actually think your 1st couple of years in the industry actually matter more. The first place I was coding was a VB.NET shop that was run like call centre.
It basically untaught me all the good things that I should do in University.
The reason I titled this “It depends on the person” is that you can get the understanding of networks, operating systems, databases, computer architectures, formal language theory, and analysis of algorithms, even if you don’t go through a formal CS education.
“I also think it’s possible for self taught coders to absorb, over enough time, the same information I got in a class room setting. I just don’t think, for the average person, those are likely outcomes.”
What underlies the idea behind Codecademy is that knowing to code is the bulk of developing software. It’s a common belief held by a lot of people. Know a language and then keep writing software and you’ll be a good software developer. It does happen with some people, but not often. It may make you a good coder, but coding up the solution is sometimes the next to last step in a much larger process, and sometimes not as important as the analysis that goes behind the code. It’s a little like saying all there is to being a chemist is mixing reagents.
Knowing how to code doesn’t provide the mathematical tools to analyze algorithms to determine what algorithm may or may not be best, given small n, usually sorted large n, or why you need to randomize the order of the input array before you sort. Or for that matter, understand things like space/time tradeoffs. Most people are not likely to pick up a book on analysis of algorithms. They’re not likely to pick up Knuth’s books, nor are they likely to innately develop the mathematical skills that most people find very challenging.
Some people might read the above as saying people who are self taught will never learn these skills. If you take the time to actually read what I wrote, you’ll notice I didn’t say better, or that it was impossible to pick up these skills. Having a formal CS education doesn’t make a better person, it doesn’t make you smarter, taller or better looking. But known how to code does not make you a software developer than swinging a bat makes you a baseball player. There’s a lot more to software development than just slapping code into an editor.
Edited 2012-04-14 14:25 UTC
phoehne,
That’s a well rounded and respectable view.
“Knowing how to code doesn’t provide the mathematical tools to analyze algorithms to determine what algorithm may or may not be best, given small n, usually sorted large n, or why you need to randomize the order of the input array before you sort.”
I’m stuck contemplating whether you meant that literally or if your just alluding to quicksort’s choice of a pivot point? Some implementations pick the median of three random elements, which seems like a better idea than randomizing the input list. But I’ll wait for you to elaborate.
I’ve found many degreed CS professionals who have troubling thinking out of the box. For example, many seem to be programmed to believe O(Nlog(N)) sort algorithms cannot be beat. I’m not sure why they overlook non-comparison based algorithms like bucket sort. Sorting on an absolute basis can easily yield O(N) algorithms.
Bucket sort gets dismissed because people were told or assume that a memory slot needs to be allocated for every possible value a variable could hold, such that a 16bit variable needs 64K slots, 32bit needs 4B slots, 64bit needs 2^64 slots, however it’s possible to create a sparse bucket sort with O(S*N) efficiency, and because S is a constant based on sizeof(int) it might be considered O(N) as well.
I caught one of my professors off guard when I sent him my own bucket sorting variant that sorted arbitrary strings. The key is that every single string of similar length takes the same amount of time to insert regardless of the number of strings already inserted. This is possible because the string doesn’t have to be compared against any other strings. I wouldn’t have learned about that sticking with the curriculum.
Not to downplay merit in a university education, but be aware that it comes with the risk of group think: college students are more often taught to copy knowledge rather than to create it themselves.
Edited 2012-04-14 21:05 UTC
I think he was doing both. He literally meant some programmers don’t know how to analyze algorithm’s, and he was alluding to them not know how quicksort works.
It’s the rare person who has the passion to really hone their craft. Most people are satisfied knowing a few basic things or doing enough work to get a piece of paper.
I’m going through a CS program right now, and I’m constantly amazed, and appalled, by the other students who dismiss the classes as bullshit.
Sounds like someone has a huge chip on his/her shoulder!
Title of the original post: “I think it depends on the person”
Your response: “he assumes that having a formal education makes you *better* than someone else without one”
I thought he was being rather conservative in his appraisal of a formal education. Nowhere is he saying that you must be formally educated to be a good programmer, but rather that a CS degree brings a certain way of thinking that presumably could be gained elsewhere as well. And he definitely said nothing about being “better” than someone else. The arrogance is your own.
Disclaimer: I have no CS degree.
I like it myself
They all work pretty differently, some are more prone to learn from graphics, some other are sound based, some other are more literal. Provided the information is available, whatever is its form, it might match some people. And cross-checking informations from various sources helps improving the learning curve.
Otherwise it’s like saying khanacademy is of no worth at at :/
Kochise
Actually, I would seriously question the utility of KhanAcademy itself.
But first things first. There are too many things to talk about, so let me begin with the original article-related stuff.
Computer-related education is in a very annoying spot. It is pretty much unlike any other mathematical discipline. Whereas in other disciplines, knowledge of the simpler material guides your ascent into the deeper material, computer science looks more like two islands of trouble. And what trouble they are.
*Derailment: Looks like the difference between metals and semiconductors and insulators to me right now. Damn Solid State, stop derailing my conversations!*
Let us not cheat ourselves: computer science *is* two bits (pun intended). Learning a programming language is clearly fundamental, and that forms the first island of trouble. On the one hand, programming languages are too easy — far too easy — that we can simply teach ourselves. Most languages try too hard to be beginner-friendly, and this is not a blessing, I can assure you.
On the other hand, programming languages are basically impossible to teach. It is not for the lack of trying: beginning lecturers tend to start off with absolute zeal, only to crash and burn right off the bat. They can only seek consolation in the fact that the situation had been thoroughly documented. We know of the double-hump in education (and like the derailment, the band-gap in computer science is particularly wide). We even know that the three trouble points are assignment, pointers & recursion, and concurrency. I refer you to the existing literature for elaboration; they certainly do a much better job than I can.
So, what do most of the universities do in the face of such a discrepancy? They simply give up. There is no point to teach programming languages since the ones who would get it would have already learnt it themselves, and those that do not get it have to learn it themselves anyway. And so much of the university education in computer science focuses on the other island of trouble. That explains why there are the hordes of CS professionals (professors, even, I hear) that cannot code to save themselves.
But we had better progress onto the other island of trouble. The obvious first problem is that a good chunk of this second island is dependent on the mastery of the first island, and in fact, mastery of many different programming languages. But we cannot belabour the chicken-and-egg problem too much; the others are severe. The second problem here is the sheer size of it, and by this I mean the UN-partition-able chunks — most of the time, in other disciplines, each bit you learn allows you to go further and be more productive. Although it is much frowned upon, you can and may drop out at any point and use all of the stuff you have been taught. Computer science, on the other hand, has huge chunks of things that may only seem to have scholastic interest, but when you learn the whole shebang, it clicks together to give you something really incredibly useful. If you dropped out in the middle of the process, you *will* be bewildered by the huge bit of inapplicable knowledge you learnt at the end.
*Yes, I managed to stow away all the engineering knowledge without mentioning it.*
Oh well. But you could have already known that. It is pretty much obvious on hindsight. But that lessens its truth no bit. I can only hope that you “obviously see” the next bit too. In varsity, they spend a lot of time teaching you “industry best practices”. I shall not even begin on the dubiousness of that claim. Of more interest right now would be to steer you to the experimental finding that people just freaking don’t learn that way! And like all the beginners, I was both oblivious and over-enthusiastic, and made the exact same mistake. The lesson is this: if you just keep showing people the good stuff, they will go back and continue with the nonsense they are doing. Not only do you have to show the absolute horrors that shaped the curriculum in the first place, you have to really go out and entice them to work with you, produce a model of their own, and then cruelly, conclusively, definitively and, most important of all, non-condescendingly show how their own work is inferior to the prescribed medication. If they are allowed to argue with your prescription, you have already failed. Let’s not even consider the herculean task of being non-condescending — some of it can be so crude, you cannot even start criticising without sounding condescending; and it isn’t even your side — your listener can just arbitrarily decide that your nice words are condescending, and au voir.
* And when that happens, you really have to take Simon Cowell’s “someone has to tell them the truth” stance. And to console your certainly broken heart, if you get mistaken, it is most probably not your fault (truth), and if you manage to never get it, then you are certainly doing it wrong. *
All that, and I still cannot start on the topic at hand. I have to tell you about how the curriculum is actually mainly mistake driven, and how this is actually important outside of academia. Quite a lot of tertiary education is about the details, the boring stuff and the core modules that I am nowhere near sorry about. Any respectable work-related training has to have that! Walter Lewin noted that it is basically impossible to get an engineering-related education in MIT without watching the Tacoma Narrows bridge. All of these disasters are part of the curriculum, and they are downright boring in many cases. But if you are certified, and if something awful happens due to your negligence, then you can be rightly sued. You won’t be able to deny that you are aware of such-and-such a problem’s possibility. That is the real reason why, even though you may well be more capable at DIY than the person you hire, the government still mandates that certification be provided. Law basically needs that to work properly.
Now, how many self-taught programmers would have the requisite spectra of knowledge about all these annoying issues? Is it even likely at all, given how boring they can be? Even without that, by just not being certified, they are already a liability to the company, not the other way around. So there: A point to criticise self-taught programmers with no discrimination at all. And before you snipe be for snobbery, mind you I am self-taught myself, and my profession is as in physics, not computer science.
Finally, I can start on the fundamental problems I see in KhanAcademy and Codecademy. Just like how the proliferation of choices is always better for the consumer, I support their existence. I merely want to point out to the people that think that all knowledge can be presented in that manner that it is not just a bad idea. It is more devious than a delusion from my PoV.
Look, just the easiest thing I can complain about such schemes is what they pride themselves upon: their extremely fast feedback loop. Do this, see that, learn. I have yet to see any respectable education system that seeks to go this way — indeed, a large part of the education system is to try to slow down the feedback loop. As you progress further into any deep field, the amount of information you have to simultaneously manipulate gets bigger and you have to absorb them slower. Nature certainly gives long term consequences. A fast feedback loop encourages not just ADHD, but an active dislike of proper understanding, and in fact an absolute disregard of edge cases, subtleties. The scheme is tends to also link with rote learning! And for goodness, edge cases *is* the single biggest driver of the CS curriculum, if you will.
I’m only on my first argument against *academies and I’m already out of characters. If you want more, ask me for more. Till next time.
Hmmm, let’s try to check your theory ! Read this from the very beginning :
http://learnyousomeerlang.com/
If you actually are able to code some sample code at the end of the show, then online tutors for self-teaching are of some kind of usefulness.
BTW, thanks for you long and constructed answer, I didn’t expected so much.
Kochise
That is a good resource — I have already begun a bit on that, but I decided I’d rather finish with SICP.
But that is missing the point — I point out that it is certainly useful for students to have yet another resource, but ultimately I don’t think it is a force for greatness.
Maybe I can put it this way better: Things like Khan Academy pulls up the poorest section of the community by giving them lessons at all. However, it is not going to help teach the really difficult topics because it would entail long discussions of complex topics, something that they have rightly avoided. In that sense, it may even hinder the slightly better section from actually learning more.
Bertrand Russell had even stuff to say about lectures, let alone video lectures. I think video lectures of the Lewin style is a lot more useful than Khan Academy style lectures. But he has a point — books are still the premier route to disperse knowledge in a complete and comprehensive manner. Working out examples, asking tutors and hard work just cannot be replaced.
Similarly, that is not to say that I am against lectures. I have first hand experience in the massive difference between great lecturing and horrendous smothering in affecting productive learning.
So, more to the point, that I can learn something from such stuff does not imply much about its suitability. And as I have already said, how is it going to be suitable for disseminating engineering concepts properly? Sure, if you just reproduce books on-line, that is going to work, but seriously? In fact, I think that engineering concepts is something that lectures can do a lot better than books, to the contrary of what Russell thought.
Khan Academy is something I can specifically gripe on and on about. But I’ll bash it too much. Trust me in that I really can show a lot more about how it is lacking from the educational standpoint. Frankly, I’m pretty scared of the hordes that think that it is doing a good job. They don’t even know how bad it is.
Better than nothing, and gives hunger for more knowledge…
Kochise
I think, that looking back, I (actually that was a few of us kids) learned most of my basic coding knowledge by myself, before school or anything else. But, coding does not equal programming, and knowing programming languages does not equal programming knowledge and/or algorithm knowledge. Going further, basic algorithm knowledge does not equal knowing mathematical and numerical math knowledge, very necessary very frequently. And I could go further.
What I want to get to is, you can teach a programming language in a variety of ways, including online courses, but you can’t teach how to code or program well in such a way. The ones who might argue otherwise, well, those are the ones I wouldn’t hire to better programming jobs. They are the code monkeys, and they are a dime a dozen.
So what I think is, “the future of learning to program?” – no. It should be “learning programming languages” and be done with it.
All the fuss in recent years about trying to commoditize and undervalue real programming skills is a somewhat disturbing trend, the results of which are quite easy to see with the rise of ridiculously crappy software flooding people from everywhere you turn.
l3v1,
“…The ones who might argue otherwise, well, those are the ones I wouldn’t hire to better programming jobs. They are the code monkeys, and they are a dime a dozen.”
Do you realize how pompous that attitude is? If anyone has a different opinion on the matter, it must be because they’re unqualified? Wow…where does such prejudice come from?
I happen to disagree with you, computer science and programming can be learned in the pursuit of a degree or on the job or at home, it doesn’t matter as long as one has a strong commitment and desire to continue expanding one’s understanding. There isn’t just one path to becoming an expert.
Just because you can’t learn at home, it doesn’t mean others cannot. You see what I did? It is insulting to be brushed off as unqualified just because of a brazen assumption.
Moving on..
“All the fuss in recent years about trying to commoditize and undervalue real programming skills is a somewhat disturbing trend, the results of which are quite easy to see with the rise of ridiculously crappy software flooding people from everywhere you turn.”
I won’t deny this, I see it every day and dammit it pisses me off. Clients push so strongly to reduce costs that they turn a blind eye to how it is affecting their products. I compete in an industry where there’s so little regard for quality that it has become difficult to make serious use of the skills I most take pride in having.
What a great answer. In few short sentences, you summed up everything there is to say about the subject. I tried to mod you up, but don’t see how. Instead, I’ll make an effort and post my first comment here
Loreia,
Your first post is to commend my post… Wow, what a great ego boost for me
Here’s to cheerful future conversation topics. [Alfman raises glass.]
And that comes after years of reading OSAlert.
I strongly believe that access to knowledge should be free. After that, it is up to each individual to decide how much time and effort he/she is willing to invest in learning.
I do have university diploma and I don’t want to downplay importance of formal education, but I think that programming is way too dynamic for classical education with semesters and grades and professors. Most of what I know about computers I’ve learned on my own AFTER university. So, the best way to become a programmer is to:
1. learn basics of coding (loops and functions can be learned on your own on web sites, by reading downloaded PDFs or by buying and reading book)
2. after that start a small project of your own. It is important to learn how to solve problems by helping yourself with Google search and local library search (any serious programmer has a TON of PDFs on his hard drive)
— University will give you this too, albeit in a more formal and strict way, but really important stuff is nbr 3. —
3. and finally, join a “real” project (at work or by joining some open source community) to see what collaboration is, which standards and conventions to follow, to have your code reviewed and so on.
After several years of experience doing number 3. you can call yourself an experienced programmer, with or without a piece of paper that says “this guy graduated in out University. It is the best University in the world. Please give him a job.”
Diploma may be an indicator of someone’s knowledge, but any serious job interview I’ve done focused on my knowledge, skills and previous work experience. With time, I adopted the same approach.
BR
Loreia
Loreia,
Your first two suggestions are strait forward.
“3. and finally, join a ‘real’ project (at work or by joining some open source community) to see what collaboration is, which standards and conventions to follow, to have your code reviewed and so on.”
“After several years of experience doing number 3. you can call yourself an experienced programmer…”
This last one can be a catch-22 at times, since employers often don’t want to give experience to those who don’t already have it. Many employers are strict about counting only professional work experience too.
Lucky for me I have experience, but I face a different problem. The market segregates us into sub-categories like embedded programming, database programming, or web development. For me, it has been surprisingly difficult to transition my experience in one role into gainful employment in another role. Referrals for new work are more of the same.
I have mostly learned programming through books and tutorials on the web, so I guess I can try to give a balanced view of it. Beware though, that will be a bit long.
The main advantage of learning programming at school, as I see it, is that you will also acquire a lot of other knowledges that may also prove useful when you take part of a programming project. Like, how to manage large projects, how and when to delegate work to other persons in a team of programmers, how to design good GUIs, and so on…
This does not happen when you learn programming on your own. Most programming courses will teach you how to translate thoughts into code and how to avoid common mistakes, nothing else. Now, learning, say, UI design, is not terribly difficult in itself if you have a good book or website at hand. The difficulty, however, lies in figuring out that you need to learn it without having messed up pretty badly first. And thousands of crappy GUIs out there are here to teach us that this is not easy.
This weakness of self-taught programming, however, also becomes a strength if it is managed properly. Computer science degrees, like most other degrees, tend to include everything and the kitchen sink, with few ways to focus on what you’re interested in until very late in the teaching process. And this is a good thing when you don’t have a clear view of where you’re heading later, like many young college students. And HR people also like it because it allows them to put a clear label on you without being familiar with your area of knowledge. *But* when you know very well where you’re heading and what you want to learn, this inflexible and highly generalist system becomes a PITA very quickly.
Let’s say that, like me, you hate and despise computer networks and web programming with passion, and that neither your job nor your hobbies force you to learn about it instead of leaving it to skilled professionals of that realm. Isn’t it great to be able to skip it entirely and focus the subjects that you like, in my case OS theory and the design and implementation of good code and user interfaces ? Now, try to find a CS course that lets you do that. I don’t know of any myself.
In some cases, CS courses can even completely fail to achieve your goals. As an example, more and more schools choose to teach very high-level languages like Java or Python on the behalf that this is what is most likely to be useful in nowadays’ jobs. However, by doing this, they conveniently ignore the fact that while it is fairly easy to switch from a low-level language to a high-level language, the reverse process is less pleasant than being trepanated by a zombie mad scientist while a legion of rats is eating your legs. Programmers who have been taught Java in college only to face Motorola 6809 assembly at work, I feel for you.
—
To sum it up : Programming is not very hard to learn without a teacher (unlike, say, foreign languages). But one has to remember that writing good software involves more skills than just coding mastery, and to acquire these skills as needed. In contrast, academic courses will teach you pretty much everything you need, but along with a bunch of other boring stuff which you may well know you won’t need later. If you choose to go the self-learning way, I suggest you take a look at CS programmes in colleges to get a broad view of what you should learn and not forget everything.
And for the mandatory OS metaphor, academic CS courses are like Mac OS X (a bloated mess of features, most of which you won’t need, but in which you know that you should get pretty much everything you want, in a cohesive package that has been tested to work by many people), whereas self-teaching is more like Arch Linux (a minimalist package to which you only add what you need, but which requires more time and willpower to get fully working and may well turn out to be an unusable FrankenOS in the end).
Edited 2012-04-14 10:59 UTC
The author of second article’s expectations are unrealistic. She would probably say the same thing if she sat down and tried to read a book. Even learning a programming language doesn’t happen overnight, especially if its your first language.
Also, I don’t see why she is complaining about codeacademy getting a big investment when it is free for her to use. If anything that invest is going to help them improve. At least she didn’t have to pay to use it only to find out that after going through the lessons she still doesn’t know how to program.
Ultimately, the difference between a good programmer and a poor one is Passion.
If you want to be a really good programmer, you need to enjoy it, you need to work hard to learning new stuff and trying out new stuff, open to experimentation, and you need to be committed to making great software for your customers or clients.
On topic: websites like codeacademy.com & rubymonk.com allow you to dip your toes without too much effort. This way, you can figure out if you like it or not, and if you enjoy it, then you are free to take the plunge by installing all the stuff on your system, buying books or taking a course etc.
Who cares if it makes somebody a guru coder or not, it’s probaly not meant to make you a professional coder.
Back in the 80’s computers came with a manual which included how to program in BASIC. Turning on a computer allowed you to start coding at once. These days you don’t get a manual, let alone (easy) access to a programming language. Even the most stupid users back then could at least write the 2 famous BASIC lines involving the PRINT and GOTO statement.
Just being able to code a little bit at least gives you some insight that computers don’t do stuff by magic, but by code. Too many people seem to think computers are alive and some days can have a bad mood. They don’t: what a computer does has a reason and that reason is created by code.
I did a lot of coding back then, because I wanted the computer to do certain stuff (or just out of boredom). Now I don’t because now whatever need I have someone is bound to have put up some freeware that does what I want.
My first computer was a TI-99/4a at five years old, which came with programming guides and within a week I had a great little infinite-racer type game coded in. I borrowed heavily from the source materials but I made some significant modifications once I understood what the simple code was doing. I also had access to Atari, Apple, Commodore, TRS-80 and Amiga computers growing up, with programming tutorials for their various versions of Basic and other simple languages.
Yet despite such resources back then, I will never be a programmer by trade, no matter how much education and trial-and-error I go through. I’m terrible at math beyond general algebra and geometry; trigonometry and calculus are simply above my abilities. Does that make me stupid? Of course not! My talents simply lie elsewhere. Sure, I can bang out the occasional Bash script or PHP script, but those are more about logic and task-oriented concepts, things I am great with.
I have found that my true talents lie with hardware hacking, statistics and databases, creative and technical writing, and general problem solving. That means I’m a great bench tester, computer/electronics repairman and general IT go-to guy. But ask me to code you a new app component for your project and I’d be lost. I have reached the pinnacle of my programming abilities from real world experience, and no amount of education would help me become a better programmer.
So you’re un untalented crappy programmer, just like me.
I also don’t think we’ll ever become clever coders, but fixing stuff like trigonometry can be done:
http://www.khanacademy.org/
I helped me relearn the basic sin/cos/tan stuff.
Read my “Human’s brain” comment above, and the answers…
Kochise
Ah, Khan already showed up here.
I’m very happy with Khan Academy. I have a lot of interests, but not all at the same time. Stuff I find very interesting I may not be some interested in a few days later, because something else may have become more interesting. With Khan I can just switch to whatever I like at the moment.
In school you had to sit through stuff you didn’t like at that moment in time, even though years later you wished you paid more attention.
So with Kahn I can learn when my brain is more receptive to certain subjects.
It may not make me an expert on any subject, but at least today I’m smarter than I was yesterday and I’m getting a foundation I could use for real courses.
In college, I was a tutor for Java, PHP, Ada, and C. I saw two kinds of students.
The first kind of student was “tainted” by VB and Javascript and Python and Lua other such languages that are pooh-poohed – or mostly useful for hacking game interfaces. They were always doing things the hard way, doing things that would make a Proper Code Idealist blush. But they solved problems. When they asked me questions, they asked how best to break up problems, or how language A or library B handled case C. They didn’t ask me to teach me the basics, they asked me to show them something they didn’t know.
The second kind started learning programming when they bought their textbooks (if they bothered reading them). They never asked how langauges did things, or how to solve problems. They wanted to know why their Class Herp implementing Interface Derp didn’t perform Function Gerp when they hadn’t implemented the function in the first place. They wanted to know why the compiler didn’t ‘just know’ things, and why they had to specify it. Unlike the first group, they followed coding best practices, but they wielded them like a magical talisman because their professor told them it’d work better that way – or like a golden ticket because their professor told them they would be graded on that. When they asked me questions, they asked me to repeat what had been told to them in class.
Codeacademy, and other sites like it, caters to the first kind of student. They’ll have nasty habits, to be sure. But in the end, everyone who is a success in programming is self-motivated and doesn’t wait around for permission from some magic guru to learn something.
Speaking personally: Hopefully, these students will also have the funding and freedom to be able to spend four to eight years of their lives working with other like-minded hackers, aggressively and single-mindedly seeking out new ways to expand their abilities and solve harder problems, the experience of those who have gone before making their path as painless and navigable as possible. But even if they don’t go to college, it’s that self-directed drive and impetus to learn that will determine their success.