I thought of this as well. My thought here on the different languages was to make the programmer's skill based on more than expertise in any one language.
If that's your goal, the languages need to be from different paradigms (maybe C + Assembly, Ruby/Python, and Haskell/Clojure, and then maybe Prolog and Factor).
If your goal is just to get someone to minimum competence so they can build something, it's better to stick with one language (or, at worst, just a web stack), at the very least so they don't get bogged down installing a bunch of tools for relatively little benefit. PHP and Ruby are both Algol derivatives, so having a person solve Project Euler problems in both and compare them won't likely reveal much more than trivial differences.
Also, unless they have a decent math background, 100 Project Euler problems is just going to frustrate and scare off people - some of those problems are pretty much intractable without Dynamic Programming; anyone who hasn't taken an algorithms course would probably take a long time to figure that out.
It has its uses, but W3Schools has been criticized for being inaccurate[1], and there's better documentation out there now (HTMLDog and Mozilla Developer Center have been mentioned[2][3]).
No mention of any compiled languages? Scripting languages are good for beginners, but to be a mature programmer you should have at least touched a compiler at some point.
Robot C (which is a compiled algol family language used to control lego mindstorms), is quite definitely a compiled language.
This is mentioned before ruby. Additionally, using the term scripting language pejoratively lump ruby or python in with lua, tcl, perl and awk scripts is a little rich these days.
And if I said that, your joke would even have a point. Instead, I pointed out the parent was incorrect, there as a compiled language on the list, of which I offered no opinion as to it's quality. It's definitely algol related, so is a reasonable transition to C/Java et al.
This was exactly the point of my post ;) Your original post is very similar to mine - they both don't make a valid point and they both don't contribute to the discussion (I also never said, that you said that). It is like the old programmer and manager joke...
A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts, 'Excuse me, can you help me? I promised my friend I Would meet him half an hour ago, but I don't know where I am.'
The man below says, 'Yes. You are in a hot air balloon, Hovering approximately 30 feet above this field. You are between 40 and 42 degrees North latitude, and between 58 and 60 degrees West Longitude.'
'You must be a programmer,' says the balloonist.
'I am,' replies the man. 'How did you know?'
'Well,' says the balloonist, 'everything you have told me is Technically correct, but I have no idea what to make of your Information and the fact is I am still lost.'
The man below says, "You must be a project manager."
'Yes, I am,' replies the balloonist, 'but how did you know?'
'Well,' says the man, 'you don't know where you are, or where You are going. You have made a promise which you have no idea how to Keep, and you expect me to solve your problem.'
I'm sorry, but after doing all the things in the list, you will not know anything about stack, dynamic memory, pointers and so on. You can never say you can program knowing those.
True. But my goal here is to get somebody to learn programming to the point where they could reasonably apply for a job. The question is, would you hire somebody who didn't know "stack, dynamic memory, pointers and so on" if they were willing to learn as needed?
Everyone claims in a job interview they're willing to learn as needed. You hire programmers because they know how to program and will be valuable from the start. Not some novice who did some rails tutorial.
This is pretty interesting to me. "stack, dynamic memory, pointers and so on" for the most part is not something I've had to think about while programming in the last couple years. For the most part I can ignore them, and I doubt any new developers that learn on the job would pay any special attention to these issues, but there is always a case that pops where this knowledge suddenly becomes very important, and having the background knowledge is important.
Let me give you an example. I got called in to diagnose a problem with a c# web service. They were getting constant OutOfMemory exceptions. The team's solution was to increase memory and then throw up their hands when it that didn't fix the issue. After looking at the code I saw that they were creating a 500mb string. They figured this was a-ok because they had 4gb of memory. They did not know what a string really is, even in a language like C# the memory has to be contiguous. If they had ever worked with C they would have known this and we could have saved time and money.
"Willing to learn as needed" needs to be reserved for things like specific frameworks, which can be picked up quickly if you understand the concepts they're built on and have done something similar. Pointers are a core concept, and in particular, they're one of the weed-out points of CS curricula.
Sure, you can get some things done without them, but they're critical for understanding bugs or performance issues that arise due to the underlying implementation, and likely to take more time to understand than things that usually fall into the category of "learning as needed on the job".
I added ROR at the end of the list, with an "assignment" of making a web app to organize contacts. Do you feel that by that time the programmer will have become bored?
It's pretty interesting when someone who doesn't really know a subject tries to teach it. You can always see what people perceive vs. what actually is.
Is 'learning programming' in quotes because it is sarcastic?
You don't program anything until the final exam, and the final exam is two relatively trivial tasks.
Just start with the final exam, and then build it out until you have something relatively substantial. Do all of the other reading and stuff as you learn.
28 comments
[ 0.42 ms ] story [ 75.5 ms ] threadIf your goal is just to get someone to minimum competence so they can build something, it's better to stick with one language (or, at worst, just a web stack), at the very least so they don't get bogged down installing a bunch of tools for relatively little benefit. PHP and Ruby are both Algol derivatives, so having a person solve Project Euler problems in both and compare them won't likely reveal much more than trivial differences.
Also, unless they have a decent math background, 100 Project Euler problems is just going to frustrate and scare off people - some of those problems are pretty much intractable without Dynamic Programming; anyone who hasn't taken an algorithms course would probably take a long time to figure that out.
http://w3fools.com/
[1] http://w3fools.com/ [2] http://htmldog.com [3] https://developer.mozilla.org/en-US/
Also link to Mozilla Docs instead of W3Schools.
This is mentioned before ruby. Additionally, using the term scripting language pejoratively lump ruby or python in with lua, tcl, perl and awk scripts is a little rich these days.
A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts, 'Excuse me, can you help me? I promised my friend I Would meet him half an hour ago, but I don't know where I am.' The man below says, 'Yes. You are in a hot air balloon, Hovering approximately 30 feet above this field. You are between 40 and 42 degrees North latitude, and between 58 and 60 degrees West Longitude.' 'You must be a programmer,' says the balloonist. 'I am,' replies the man. 'How did you know?' 'Well,' says the balloonist, 'everything you have told me is Technically correct, but I have no idea what to make of your Information and the fact is I am still lost.' The man below says, "You must be a project manager." 'Yes, I am,' replies the balloonist, 'but how did you know?' 'Well,' says the man, 'you don't know where you are, or where You are going. You have made a promise which you have no idea how to Keep, and you expect me to solve your problem.'
Let me give you an example. I got called in to diagnose a problem with a c# web service. They were getting constant OutOfMemory exceptions. The team's solution was to increase memory and then throw up their hands when it that didn't fix the issue. After looking at the code I saw that they were creating a 500mb string. They figured this was a-ok because they had 4gb of memory. They did not know what a string really is, even in a language like C# the memory has to be contiguous. If they had ever worked with C they would have known this and we could have saved time and money.
Sure, you can get some things done without them, but they're critical for understanding bugs or performance issues that arise due to the underlying implementation, and likely to take more time to understand than things that usually fall into the category of "learning as needed on the job".
You should go "holy crap, I can make such neat stuff now" and go do that.
1. Think of something useful you want to make and create it.
Also, where's HTML5?
You don't program anything until the final exam, and the final exam is two relatively trivial tasks.
Just start with the final exam, and then build it out until you have something relatively substantial. Do all of the other reading and stuff as you learn.