7 ms·
There's nothing wrong with an IDE per se -- but it's a smell when a language is so verbose that it effectively requires a machine to help you write it, which is
by mseebach 11y ago
There's nothing wrong with an IDE per se -- but it's a smell when a language is so verbose that it effectively requires a machine to help you write it, which is definitely the case for Java.
It's just a smell, it's not disqualifying, because, as you correctly state, rare are the times when you can't just run the IDE. But I think it's a perfectly fair point that the language you can write effective in vi is -- all other things being equal -- better than the language that requires an IDE.
- threeseed 11y ago> but it's a smell when a language is so verbose You call it a smell I call it functionality. Get back to me when Go is at version 9 with decades of features added and then you can talk about verbosity. And this idea that you need an IDE to code Java is pure and utter rubbish.
- vanderZwan 11y agoIn short, the IDE should be a productivity enhancer, not a crutch.
- malnourish 11y agoWhy? I hear a similar argument for things in the physical world ("well what if you lose your phone, how will you navigate then?") but this isn't an analogous situation. You won't be programming Go in a world where your IDE doesn't exist.
- ryanong 11y agoNo but when the GPS tells you to drive into the lake, you shouldn't drive into the lake.
- arihant 11y agoWell, Java isn't verbose. Certain codebases have gotten verbose because they are being maintained for years (decades?) with extremely functional tools. Give a Go team IntelliJ and 20 years, and then we can compare Go and Java codebases. > But I think it's a perfectly fair point that the language you can write effective in vi is -- all other things being equal -- better than the language that requires an IDE. I would have to disagree with this point as well. To me, it feels like suggesting that computing is better with punch cards. Because, it is then also a fair point that a way of computing that can be done without a computer and editor is -- all other things being equal -- better than the way of computing that requires a computer and editor. I think that thinking this way will also help numb the next leap in methods of instructing computers, and performing computation. Whether that involves a programming language or not.
- qooleot 11y ago"Well, Java isn't verbose." Maybe its just the code I've read, but its generally much longer than other languages to accomplish the same thing. A bunch of little things add up, such as "extends" instead of ":" for inheritance. Naming things is often longer - maybe its not the language core itself, but a counter example is python coding standards keeps them much shorter. With Go, there's duck typing to not have to declare obvious types (such as for strings). The goals of the programs in enterprise java apps probably differ by an emphasis on readability and not writing speed. I.e. lambdas are written quicker to write, but maybe a reader would understand a strategy pattern's goal quicker.
- joshuacc 11y ago> With Go, there's duck typing to not have to declare obvious types Not a Go developer, but I think you mean type inference, not duck typing.
- stonemetal 11y agoNot really, Go uses duck typing for interfaces. You declare an interface to require functions X, Y, and Z. Any type that has functions X, Y, and Z suddenly implements that interface whether you want it to or not.
- joshuacc 11y agoAs I understand it, the correct term for that is "structural typing." Duck typing is similar, but applies exclusively to dynamic languages. See: https://en.wikipedia.org/wiki/Duck_typing#Structural_type_systems https://en.wikipedia.org/wiki/Duck_typing#Structural_type_sy...
- arihant 11y agoJava programs got that way not because of language, but because teams of thousands of developers managing same codebase for decades. Explicitness and non-magicness are extremely valued in that environment. Imagine you're refactoring a code written by employee #12340 that was written 10 years ago. With Go, you'd go file after file decomposing the program to finally figure out that if he just used a word to implement an interface, you only had to read that file and a javadoc. Long class names are still easier to look than signatures of functions. Java emphasises abstraction. Go emphasises composition. Both have its uses, but what I was refuting was people claiming that Go is better than Java which I think is extremely uninformed conclusion.
- yokohummer7 11y ago> it's a smell when a language is so verbose that it effectively requires a machine to help you write it The funny thing is that this feature also explains what Go is. Go relies heavily on the various tooling just to overcome the deficiencies of the language. It's just that they didn't choose IDE as a primary target, but instead various ad hoc tools. For example, when I find the unused imports being a hard error inconvenient, a typical suggestion from Gophers is "just use an editor plugin that automatically handles that". This is exactly the same attitude that can be found in the IDE lovers. And that's why I don't like Go anymore. In the name of the simplicity of the language, they concentrate on building more and more tools, rather than fixing the language. I'm pretty sure if Go acquires generics someday, it will have the form of code generation, which is proven to be awkward. (I heard "go generate" already does a part of that?)
- sagichmal 11y agoThose "various ad hoc tools" are literally the UNIX philosophy applied to language design. It's cool if you don't like it, but call it what it is, and realize you're really objecting to a whole ethos, not just a single instance of it.
- Cthulhu_ 11y agoNot to mention that most IDE's (Eclipse, IntelliJ) are more frameworks to tie together various ad hoc tools into a sorta-unified UI, often even calling the underlying Unix-style binary.
- lobster_johnson 11y agoThe example the parent picked — unused imports being an error — isn't an instance of Unix philosophy at all. Unused imports flagged as an error is great for production code, but infuriating during developing, when you need to work with a lot of tentative code, the most basic of which involves printing. Having to add, remove, then re-add "fmt" or "log" just to keep the compiler happy is not a Unix-philosophical issue around language design, it's just an unnecessary strictness. Go is "opinionated", but it tends to err on the side of impracticality, a kind of distorted, prematurely-optimized YAGNI that disrupts developer efficiency in the name of simplicity. "go get"'s obstinate simplicity is firmly in this category. Go gets a lot of stuff right, of course. And the tools — the "go" tool, compiler toolchain, gofmt, debugger, godoc etc. — are clearly good Unix citizens, of course.
- ryandvm 11y ago> but it's a smell when a language is so verbose that it effectively requires a machine to help you write it Meh. People say the same thing right before starting a Node project with Sublime. Then they proceed to write an unmaintainable mess of JavaScript. With only the original author knowing who calls what, what gets returned, interface definitions, etc. I have yet to find a language that doesn't benefit from a capable, intelligent IDE.
- adrusi 11y agoAn IDE won't save you from writing a mess. For that you need good programmers, not good tools.
- royjacobs 11y agoIf a professional craftsman is building a house I'm sure he prefers using power tools to having to screw all screws in manually.
- cwyers 11y agoYeah. Good tools won't make a bad craftsman good, and that's as true for programming as it is for carpentry and plumbing. But that doesn't mean that good tools don't help good programmers.
- adrusi 11y agoPrefers it, sure, but a great craftsman could build a better house using only manual tools than I could using any tool I want in the same amount of time. Also note that a carpenter building a house probably wouldn't choose the most powerful tools (tower crane, etc) even if financials were taken out of the equation. It doesn't make much sense to compare go's standard toolchain to building a house without power tools. What an IDE gets you over a more unix-like toolchain is integration, nothing more. They have all the same capabilities, but an IDE is designed to make a specific prescribed workflow seamless. There simply is no good analogy for this, carpenters don't have a universal tool that acts as a nailgun, drill, power screwdriver, wrench and saw at the same time.