Alan Skorkin, a software developer, writes about programming practice, Ruby, bash, URLs, and the culture of software development.
HN commenters recommend it as follow-up reading, mainly the post on why developers rarely use state machines and the one on bash shortcuts.
"What you fail to realize" <- ?
First, I believe there is a cultural difference between Canada and the US. In Canada, a Master's degree is typically not a professional degree and you usually cannot buy a M.Sc. Typically, half of the credits come from courses and the other half (often even more) comes from your thesis. I don't know about the situation in the UK, the author's country of origin.
Second, I TAed and taught programming, algorithms, and software architecture courses for undergrads, Master's and Ph.D. students so I'm well aware of the advantages and limitations of higher education. I saw students in an advanced architecture course who did not know what a thread was or who had never written a single SQL query. Well, they learned it in my course.
The graduate students that I described aren't rare. At least 75% of the Master's and Ph.D. students in the SE lab and PL lab at my university match that description. Maybe they would have a hard time building a web application in a day, but I think they have demonstrated that they can learn pretty complicated things and that they will learn how to solve your particular technical problems.
I felt the article was really about "degree snobbery", meaning that the author promoted snubbing people with degrees. I understand the frustration of people without degree who need to prove every time that they don't need one. But I don't believe that having a systematic negative bias on candidates with a degree is wise either. Honestly,…
The core problem is definitely the support of custom types. I agree, if you refuse custom types everything gets a lot simpler.
Here's a very simple example of marshaling comparing Marshal dump and load in Ruby using YAML, vs. custom JSON marshalers: http://www.skorks.com/2010/04/serializing-and-deserializing-objects-with-ruby/
Note that the post shows a tree structure in YAML because Marshall gives it to you for free (synonymous with Java serialize behavior). But the post punts on implementing the same tree in JSON, probably because it's messy and complicated.
Nothing about that looks simple to me. For example, the JSON class label "A" has to be interpreted by something to actually instantiate an A Object. YAML is a bit better-- it at least defines that there is a Ruby class instance being marshaled -- but it doesn't help you if that class doesn't exist the same on client and server.
Pretty soon this leads to madness in production systems where the server evolves "A" (v2) among a sea of separately evolving clients "A" (v1, v1.1, v1.2). Then versioned class annotations get introduced, followed by attempts to differentiate between serializable and non-serializable fields, deep and shallow serialization, etc. etc. Pretty soon, your JSON marshaling isn't so simple anymore.
Fantastic bit of research and write-up.
SSRF is going to be the major story for the next couple years. I've seen them all over the place and they are much harder to block since they exploit multiple protocols and the properties of URLs have many arcane rules that aren't known to most programmers.
Reading this a while back really opened my eyes to how complicated it was, even if I'd already learned (the hard way) most of it:
http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/
I have been looking for apps that teaches keyboard training geared towards computer programming, and this looks like a good start. Congratulations!
Would be cool to have a few tests where you can train typical bash and vim commands and see the ideal finger placement. Extra credits for emulating things in e.g. bash like: ctrl+a and alt+u etc. For command shortcut inspiration see for example: http://www.skorks.com/2009/09/bash-shortcuts-for-maximum-productivity/
Anyway: Good job! :-)
There's an older (but still interesting) post about case in Ruby here[1] and another here[2] with some extra insight into the MRI implementation. Having learned Ruby before most of the other stuff I play with these days, I always second-guess myself when using a switch/case construct in my code.
[1] http://www.skorks.com/2009/08/how-a-ruby-case-statement-works-and-what-you-can-do-with-it/
[2] http://www.daniellesucher.com/2013/07/ruby-case-versus-if/
What's missing in the other comments is that you can't call private methods with an explicit receiver, for example my_object.private_meth or even self.private_meth. On the other hand, public and protected methods can be called on self.
See this blog post for more info:
http://www.skorks.com/2010/04/ruby-access-control-are-private-and-protected-methods-only-a-guideline/