Does anyone else think that this article is a Satire? I think it's actually an appeal to common sense. What I read is the author is sad that programming is not moving in the direction of an emergent engineering discipline, sad that popularity, not reason, drives the acceptance of languages.
More people need to do this. It seems that among adults, the most effective message you can send is "goodbye". Sad, but, in my experience, true. Even then, some people will never learn.
The ironic thing to me is that in order to enforce the idea of an Internet Bill of Rights, you have to throw anonymity out the window. How do you defend an anonymous user in court?
It's not a bad idea, but how do we defend the anonymous users?
I used to be able to allow only session cookies. Now I get asked if I'm cool with cookies every time I visit a ton of major websites, and the only way to stop the message coming back? Allow persistent cookies. Ugh!
Do you actually believe that he's being honest? Sounds like he's puffing up to try and discourage them. When you're up against people who bring you into the legal ring, it might be a bad idea to show them that you're penniless.
So we should believe what he says in public instead of what he says in private? Lets be honest here. He's lying. It doesn't matter which statement is a lie. That is a massive statement of his character.
I have my own ideas about how to do this, and I'm glad someone is moving in this direction, but I must ask, is this a stepping stone in a grander vision? Enemies of software development today are:
1. Code Comprehension: Can new people quickly understand a complex code base enough to implement significant features.
2. Fault Diagnosis: When is the last time you spent less than 50% of a project's time on debugging?
3. Code Transformation: Have you ever actually tried to factor a mega-function into separate functions? How about creating a set of concrete classes when you realize that your hierarchy abstraction breaks down under new requirements. Now do all that without introducing new bugs.
These are the hard problems, and it excites me that people are thinking about how to solve them. This tool will not solve all those problems, and maybe one tool shouldn't, but nevertheless I hope people will start thinking about the entire development process and how to improve all the tools of our industry.
Java + a good modern IDE like IntelliJ are far from the last word on all these questions, of course, but they're much better than you might guess if you have't worked in that world for a while. I was astonished at how powerful the combination of a simple, statically typed language and a good IDE can be. You can almost completely stop thinking of code as a bunch of text and start thinking about it as an organically evolving structure.
The tooling around dynamic languages is almost laughably primitive and limited in comparison.
> The tooling around dynamic languages is almost laughably primitive and limited in comparison.
Around most dynamic languages, there are exceptions like Smalltalk which has excellent tooling including the automated refactoring and the best development environment around. Let's not forget, tools such as automated refactoring and xUnit type test tools originated in Smalltalk.
> Sure there is. You just need code tracing and full test coverage. You can't do it from the source alone, sure, but that doesn't mean it can't be done.
The analog would be driving to New York from Bangalore. Sure it can be done if I arrange a car; have money for the fuel, food and stay; have all the papers etc etc. But that doesn't mean it is in any way comparable to flying to New York while watching a movie and sipping wine.
Renaming a method in the public interface is always a pain - your test coverage and code tracing can numb down it a bit, but it's going to be there. Some of it is because public interfaces are a constant for all practical intent and purpose; most of it is because of the case I listed above.
I think I might not have made myself clear - given an execution trace of a test suite with full coverage (or just something which exercises every code path - it doesn't have to be a test suite, but you've already got one of those so you might as well use it, right?), you could build a tool to make a rename refactoring fully automatic in a dynamic language. At the point of use, it would be identical to a static language rename, it would just work in a different way. It's a fairly obvious idea, so I presume this has been done in the past, but I don't know of any examples offhand.
The only gotcha is where you're eval'ing a string, but that's going to be nasty however you cut it.
I have the same feeling working with C# and Visual Studio with ReSharper. It's impressive how easily I can navigate the code base, refactor with confidence and learn APIs as I go.
The developer of Smalltalk Agents called it while C# and dotnet still were new. Smalltalk lost as a language, but as set of expectations for dev environments, has been winning. LightTable looks to complete this.
Let me rephrase. Dynamic languages aren't conductive to a subset of re-factoring - the cases which involve renaming identifiers or changing types throughout the project.
They invented those too. Indeed they're listed at the link I provided.
It seems strange to argue that what gave rise to a thing isn't "conducive" to it. Actually, it's more than strange, it's a contradiction in terms: http://dictionary.reference.com/browse/conducive.
I completely agree with the above. I spent my PhD building prototypes and tools for the above. Check out what we have done at: http://www.architexa.com.
Would love to hear your thoughts (see my profile for my email address). And feel free to get in touch for a free license of our software.
I'm with you on the 'I'm glad someone is moving in this direction' vein, but to me the "Enemies of software development today" are much broader than you suggest. I am pretty strongly of the view that the fundamental line between 'developer' and 'user' (aka. 'programming' and 'program') needs to be broken down.
This sounds nice in theory but I don’t think it’s an interesting goal. I’ll go further: it’s been the goal all along but doesn’t have traction.
SQL was designed as a “business” language, for end users (what we now call information workers). Didn’t happen. There have been many promises of “visual” languages, just drag and drop components and you have an app.
The issue is not tools, but the fact that programming is a logical business. The best programmers are logicians – they have a robust mental model of a problem to be solved. The coding (and the tools) help, but they ain’t the thing.
Basically, being capable of manipulating Illustrator does not an artist make.
In fact, programming has been moving in the other direction: more people I know use Ruby on a command line than Visual Studio’s design surfaces.
The frontier is in end-user UI. Progress is when we allow users to be more ambiguous, less logical, and still give them what they want.
Thanks for the response. After your first sentence I was looking for something to disagree with. But actually I agree with you on pretty much every point you make here - I am just slightly unsure how this disagrees with what I said previously.
My guess (from your second last para. especially) is that you think I am advocating more 'dumbed down' high-level visual languages/ides/etc. which I really don't mean to - at least not like the ones of the past. To me these tend to really fail at what I want because they tend to: (1) have a very limited scope of functions (2) have pretty fixed interfaces which simplify certain tasks, but also make others much more complex than a simple command line or similar (3) not make it easy for you to transition to other environments [to learn something with different or lower-level functions].
To me, many of the subtleties of implementation (such as the points I just made above) often actually matter a lot more than the big words (like 'visual programming', 'IDE', 'UI' etc.) that are bandied about far more often.
I guess its my fault for trying to be terse. I think it is very difficult to discuss these things in message-board format because different words mean very different things to different people. In the end I think we are probably looking at the same goal from different directions.
The implication is that the Great Firewall will see a GET for google.com/search?q=[any of those characters] (or equivalent) and not let you get to google for a minute afterward.
Presumably, they're characters that are either in sensitive personal/place names, or they're part of commonly used and politically significant euphemisms or idioms.
There's also possibly a punitive element of this: in addition to whatever issues they have with some search terms, the Chinese authorities may have decided to be trigger-happy with the banning as a punishment to Google for ceasing its cooperation on search filtering.
In this specific case, the character is the last name of the former President of China and chairman of the Communist Party, Jiang Zemin(江泽民, http://en.wikipedia.org/wiki/Jiang_Zemin)
Heartless verdicts like this make my blood boil. There is no way he caused that much damage industry profits, and now his life is basically ruined. How can a judge look himself in the mirror knowing the gavel that came down so unmercifully was his own?
Here are some courses that changed my life: Intro to Abstract Math, Non-Euclidean Geometry, Symbolic Logic, Music Theory, Theory of Computation, Computer Architecture, Compilers, Computer Graphics, Animation, Performance Evaluation, Critical Thinking, Linear Algebra, Elementary Physics. I was a different person after completing each of these courses. I spent about 40k total for a Bachelor's and Master's degree in Computer Science. For arming me with needed skills and establishing a broad foundation that permits me to think outside a narrow discipline when it's called for, I'd say it's worthwhile. Anything that accomplishes this is good. Right now that's college.
I concede some schools are a better value, and some majors are not going to make you financially successful. I think that should be the discussion.
One of the kids in the video says "[In college], I was challenged in things I am not interested in, but not in thins I am interested in." That's the whole point. Stepping out of your comfort zone may even be the single most important life skill. If you cherry pick the stuff you want to work on, you will never learn something new. College is a good place to learn how to hammer through "uninteresting" stuff.
I don't believe there is a definitive answer to that. Everyone is different. Some learn better in the classroom, others learn best on their own, and I'm sure there are a million variations in between.
And that's the whole point. Government has decided that there is one answer and put its financial and bully pulpit thumb on that scale. That's how it creates most of its bubbles.