Linked by Howard Fosdick on Fri 13th Apr 2012 20:21 UTC
In the News 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?
Thread beginning with comment 514181
To view parent comment, click here.
To read all comments associated with this story, please click here.
phoehne
Member since:
2006-08-26

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

Reply Parent Score: 5

Alfman Member since:
2011-01-28

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

Reply Parent Score: 2

Flatland_Spider Member since:
2006-09-01

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.

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.


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.

Reply Parent Score: 1