Teaching scripting postpones students discovering CS is not for them = Good
cs.uni.edu
cs.uni.edu
>> With all due concern for not wasting students' time, this is a problem we in CS should willingly accept.
Or, programming skills are good for you, even if you dont do it professionally.
Code being in a scripting language means that the "operations" data center folks can tweak and poke it. Need an extra parameter passed in or a magic constant changed? Just do it. But compiled code is no exaggeration often an order of magnitude harder to maintain. A whole chain of change requests must come into being, from whoever found the need back to a "developer" who has the right tools and environment and access to the source and even knowledge of what and where the source is. (We don't see that kind of problem at the scale of a YC startup or a well-managed Google-size tech behemoth, but organizational tech knowledge is a gigantic problem for companies whose primary problem domain is not tech. Like say a bank or medical provider or retailer.)
I've written significant amounts of code in SQL stored procedures when C# (we're a Microsoft shop) would be a more appropriate platform, simply because my company's culture is that SQL is accessible and open to the business analysts and managers while C# really has a walled-fortress image. It grates on my sensibilities but "scripting" really does save effort in the long run simply thanks to greater transparency.
Back to the original article, it's really just saying that a scripting language has lower barriers to entry and maintainability, which is absolutely true.
The characteristic you're describing is "delivered as executable source code" rather than "needs a compiler".
I'm currently dealing with a project (GForge) that delivers some of its PHP code encrypted. Painful.
You could also ship Python projects as .pyc files.
On the other side of the fence, you can also use interpreted C without a compiler: http://en.wikipedia.org/wiki/Ch_interpreter
(But I agree with the main idea - if the project is delivered with executable source code, it's much easier to customize!)
kb
I think you have it wrong there T-Hawk.
That's really good for maintenance for the reason you've stated.
Calling them such does them a disservice. They're just as "general purpose" as Java, say. The distinction made in this post seems to be more about the problem domain and using a realistic language to tackle it rather than the language itself.
then again, i barely remember a thing from my entry-level stats course.
Personally, I always liked the linguistic aspects of CS--parsing, lexing, compiling and language semantics from the basic theoretical level through the practical aspect (e.g. how they relate to best practices, optimization, and design patterns). But when it comes to the fastest way to implement a sort, you shouldn't come bothering me.
I won't doubt that low-level algorithms are important, but a pure disinterest in them makes me a pretty poor C programmer.
You mentioned web development: I'm sorry but the majority of what's called web development is writing WordPress themes or Drupal modules, and most of this work is leveraging some API in tedious and uninteresting ways. Create this content type, do this when you save it, make this form, validate it like that, blah blah. A person who writes a plugin in WordPress to do the Nth most routine thing in the world (say, list posts in a particular order, for example) -- something that I have to do from time to time, just like anyone else who writes web-based software -- is merely connecting tubes. (Something I wrote elsewhere.)
The point is this: to be a programmer means a specific thing, and it means more than stringing together statements in a language.
My mom who can write `SUM(A1:A10)` in Excel is not a programmer, even though she can do some fairly complex things in a high-level language.
And most kinds of contract web dev out there is writing the exact same functionality for the Nth time (or integrating someone else's plugin for the Nth time), by typing out the correct sequence of API calls against a commodity CMS. Or the frontend equivalent: embedding some off-the-shelf Javascript slideshow or a Facebook like button.
If this is programming then we have a linguistic deficiency, because it's not even in the same category as the kind of work that goes on at the most innovative startups.
You're correct that lots of web development is simple. However, a very large assemblage of simple components is not simple, and lots of web apps are very large. For example: one of the first web projects I worked on was a game written in PHP and MySQL. At first, it went much faster than expected, as writing a basic CRUD app in PHP is very simple. However, as it grew, it turned into an unmaintainable mess, and I got my first lesson in some basic coding standards.
My friend had a good distinction - there's "difficult" projects and "complicated" projects. Something that is difficult might require some clever algorithms and maybe more time spent with a pen and paper than at the keyboard/ Something that is complicated requires a lot of coding, and thus a lot of effort spent in organising that code.
I agree. That was the sentiment I was trying to express.
I can create useful products that are a step past trivial, but not engineering masterpieces.
It's not about superior/inferior. It's if it is part of CS. Running cable isn't. Writing scripts generally isn't. That's it.
Sure, there's other things. I could think of a few bad analogies for recursion, pointers, algorithms, and architecture; but architecture is often badly taught, and the rest are probably easier to grasp if you can do the first step - solving simple problems.
Do you see why this is a silly thing to say?
If you're a professional web developer that is creating web sites that need to be reliable, need to interact with other computer systems, and need to be performant even under heavy load, you will if anything find that your operating systems and computer architecture courses were merely the beginning of what you really needed. You need everything you can get when you're trying to make a web page that doesn't take 4 seconds to load. Learning another language isn't really the hard part of the problem.
I was debugging performance problems in high performance websites before I ever began to try to fill in some of my severe holes due to not having taken CS. Thus I can say from first hand experience that a little quantitative thinking is enough to debug many real life performance problems. Absolutely no knowledge of operating systems and computer architecture required.
Maybe these days anyone can just take memcache and use it off the shelf. But the class of solution that memcache represents (or Cassandra, Thrift, node.js or XYZ...) is one that will not typically occur to a non-CS person. There's no basis for even understanding it.
As someone involved in hiring, I look for people who possess the capability to engineer solutions to my problems from scratch, starting with nothing but a solid basis in CS (even if they won't be doing that every day). I don't want just another tube connector (someone whose experience is primarily in leveraging APIs to write trivial but tedious code).
Both, and more. If you have a math background (as I do), it is not hard to pick up enough practical knowledge to be usefully dangerous. Here are a few examples.
Let's turn on internal database tracing just for one web page so we can figure out why certain requests are slow.
What traffic can we move to read-only copies to reduce load on the main database?
We're going to do an Oracle 8 to Oracle 9 migration, let's track every single database request for a day, and then do them again later against a test database at full speed.
At the start of each web page our database driver pings the connection to verify that it is still good. This functionality is essential for failover to work correctly, but due to an internal locking issue it is causing Oracle severe trouble under load. Fix the load issue without compromising our ability to fail over properly.
Ah, there's the resolution then. I would never argue that a strong math background is not easily converted into a very effective computer programmer with little further experience. Please do not go around telling people that they "don't need experience" based on that result; they will not hear "I can get a math background" instead.
What you say sounds obvious, but please let me remind you that you've almost certainly seen people who could not leap directly to those conclusions correctly. I can name names of people where I work with years of experience who still engage in "flail at the problem blindly until it seems to go away". In fact just the other day we observer one programmer created a perfect loop; patched a bug, created a new one, patched that, created another new one, another programmer jumped in to fix that, and then the original programmer patched yet another fix resulting in the exact same source code we had at the beginning of this process, only with another new line. (I am not sure what the degree status of this person is but it doesn't seem to have taken.)
(And I would agree you can learn a lot without formal training, but at some point you're still going to have to learn what that formal training covers. You also have to learn more anyhow.)
That said, I agree that the lack of a CS background leads to holes that need to be filled in the long run. But that is something that can be addressed down the road. It is not a prerequisite.