5 ms·
> ... it insulates the student from the javac command line program, and the command line environment itself Such a misguided article. The Java language has (qu
by dvt 7y ago
> ... it insulates the student from the javac command line program, and the command line environment itself
Such a misguided article. The Java language has (quite literally) nothing to do with `javac`. In fact, there's a lot of other compilers out there. Taking a Java class should not focus on the intricacies and weirdness of Java compiler command line interfaces. It seems pretty amateurish to argue in favor of it. Case in point: back in high school, I learned C++ using a Borland compiler (and I haven't touched `bcc` in the 15 years since then, even though I've written plenty of C++ in the meantime).
> ... imports and file naming requirements.
These, again, are (compiler) implementation details and should not be part of a generalized Java curriculum.
> And of course, mathematics is the foundation of computer science.
Stuff like this can be misleading and even though not completely wrong (discrete math, logic, metalogic, mathematical logic are sorta' kinda' similar), it's just wrong enough[1] to lead people astray.
[1] https://www.scott-a-s.com/cs-is-not-math/ https://www.scott-a-s.com/cs-is-not-math/
- deleted 7y ago[deleted]
- agumonkey 7y agoit's a regular issue, the more layers between the actual tool (JVM) the less you will need to master, but at the same time the first thing you'll learn is to forget how to use javac or any compiler and just import projects configs or let tools infer stuff for you. In my personal case, knowing about classpaths the hard way was my only path to salvation. Otherwise I was blindly tweaking IDEs project configs without any idea what was happening.
- Nightshaxx 7y agoThe point of the article is the very concept that the compiler and the Java runtime environment are not the same thing (which an IDE obfuscates to some extent) is what he wants students to learn early on. (And details like that). This leads into a lot of important concepts around how programming languages are seen by the computer.
- dvt 7y ago> ... how programming languages are seen by the computer Learning a programming language has nothing to do with how it's seen by a computer. That's a different class (a class on compilers, maybe). You can even turn Java into Javascript if you want to[1]. The fact that the compilation/transpilation flow here is Java -> Java Bytecode -> JS is meaningless in the context of learning Java. [1] https://github.com/google/j2cl https://github.com/google/j2cl
- ptx 7y agoBut learning Java is only useful in the context of programming computers, for which you need to know practical things like files and compilers, which I think is the point of the article.
- grawprog 7y ago>Learning a programming language has nothing to do with how it's seen by a computer. Learning the syntax of a progaming language might not have much to do with how it's seen by a computer but it's important if you want to learn how to use a language properly. If you don't know how Java(or any language) works fundamentally, the code you write may work, but it'll likely be more inefficient both in terms of program and programmer speed. Debugging sessions will be more frustrating and take longer and generally the quality of the programs you write will be lower compared to programs written with a language's quirks and peculiarities taken into account. Which you learn by understanding how a language works. I'm not saying they should be able to write a Java compiler or interpreter, but they should have a decent idea how they work at least fundamentally. It's harder to learn this when it all happens at the push of a button and you never learn to appreciate that button because you've never had to do it yourself and if something goes wrong with that button for some reason, you won't understand how to fix it or work around it.
- Nightshaxx 7y agoYou have completely missed the author's point. The issue is not "how can we help students learn to code" the issue is "how can we help students understand the systems that they are coding on since that affects how they code" Knowing Java runs in a VM very much affects how you have to code. Sure, when you are learning in a 100/200 level class it doesn't, but by the time you graduate if you don't understand the implications, that is bad. Why not make a very simple change early on that gives context for students later on? We shouldn't be teaching students that Java runs in a virtual machine in a 200/300 level class, by that time we should have moved on to why that matters. Forcing students to continually use java/javac will make them start learning the concepts on how a computer actually processes their program. It makes them think a bit more about it and the concepts are not foreign when they learn it in a full class. The IDE just turns the whole process into a single button with little context.
- dahfizz 7y agoI strongly disagree. A lot of my peers in college were very bright and could write great code, but they were absolutely useless as developers because they didn't know any tooling. They couldn't compile, run, test, or source control their code if the professor didn't set it up for them. Yes, tools change, but the knowledge from one tool is almost always transferable. Once you're comfortable on the CLI and understand the concept that Java source is compiled to bytecode and then run on a VM, it's easy to switch to a new compiler. If you only want to know the absolute bare minimum, go to a boot camp. People go to college to learn, and being comfortable with tools is an essential part of being a developer that students need to learn.
- sarakayakomzin 7y ago>A lot of my peers in college were very bright and could write great code, but they were absolutely useless as developers being a useless developer doesn't make it not computer science. not all of computer science is software development.
- deleted 7y ago[deleted]
- kqr 7y agoIn particular, command line compilers have been used virtually the same way since the first command line interfaces, so knowledge of javac is definitely transferable. IDEs change more frequently.
- shawnz 7y agoI agree that many developers are not very adept with tooling, but is that because they don't use the CLI? Or is it just that they aren't interested in those parts of software engineering? Eclipse is a tool too, and not a simple one either.
- 1test456 7y agoThe author is specifically talking about students. The emphasis at this stage plays a key role in whether they'll have that interest or not. Knowing is a prerequisite to developing interest.
- saagarjha 7y ago> > ... imports and file naming requirements. > These, again, are (compiler) implementation details and should not be part of a generalized Java curriculum. In Java, these are language details. You cannot write Java without following them.
- NOGDP 7y ago> Such a misguided article. The Java language has (quite literally) nothing to do with `javac`. In fact, there's a lot of other compilers out there. Taking a Java class should not focus on the intricacies and weirdness of Java compiler command line interfaces. Eh, javac is the reference implementation and the language specification makes several references to it, it's also by far the most widely used. It's also good to understand what goes on behind the scenes in your IDE because the IDE is even more removed from the language than the compiler. C++ is somewhat different because it does not have a reference implementation and has a somewhat more diverse set of implementations. Though I think it's still very useful know your way around the gcc or clang command line. > These, again, are (compiler) implementation details and should not be part of a generalized Java curriculum. Imports and naming are not implementation details... they are defined in the specification.
- gentleman11 7y agoAs a former student who had to use eclipse, I think the ide dramatically slowed my understanding of what was actuay happening in my projects. A command line and a few commands however really makes things simple and clear. The only thing you need an ide for is autocomplete and refactoring, and in a small project like you have in school, it’s simpler to use a text editor imho and you can fully understand your project that way too
- asveikau 7y agoThe thing is, early in their study, students are learning that compilers exist at the same time that they are learning a language. They should become familiar with a compiler, and in the case of Java that it generates class files, that they pass them to a JVM, to inform them of the state of the art of tooling architecture, or even to help them imagine that they could change some pieces or swap them out. Using the tools directly serves to re-enforce all these concepts. They can get to know other tools for that same language like in your Borland example, sure. But if you didn't know the compiler existed, you would be in trouble. And in C you will also want to understand the preprocessor and linker.
- kace91 7y agoI think there's great value in learning to use a lightweight editor, a compiler or interpreter, the command line, etc. I also think that Java is perhaps the worst possible choice for that. It's a language created with the "build once run anyway" mentality that tries to abstract away the system, it's the poster child of languages married to an IDE, and verbose to the point that forcing people to write java code without autocompletion features probably violates the Geneva convention. At this point in time if you want your students to learn about tooling it would be more useful to teach them to use chrome's JavaScript console than to teach them to use a Java compiler through the command line.
- aww_dang 7y ago>verbose to the point that forcing people to write java code without autocompletion features probably violates the Geneva convention. I'm happy to use just emacs. The naming conventions make it easy enough to remember. I've never been a fan of heavy IDEs. Maybe that is just me as a solo developer/entrepreneur, but I don't think that I am the only one. Once you decouple yourself from the IDE and all of the bloated enterprizey (ahem spring) frameworks, it is actually pleasant to work with. Most of that stuff is superfluous when you have a command of the environment.
- patrickthebold 7y agoI think there's a bit of personal preference. As a student I hated IDEs, because I couldn't tell what was actually happening. To this day, I avoid using and IDE or other tool for git/version control, because I can't tell what it is doing. There's more typing with a text editor and javac, but it's much simpler to understand IMHO. All of this must be understood in the context of first year programming. For my class, there were no libraries that one needed, and at most 10 or so java files to compile. The classpath would never need to be more than the working directory.
- dcre 7y agoI thought it was obvious that the author means javac as a stand-in for the general idea of compiling and running code from the command line rather than having an IDE do everything for you. Her arguments apply to any Java compiler.
- fergie 7y agoOnce students finally graduate they might be unlucky enough to land a job as a Java developer. Here they will live and breathe continuous integration where its essential to write build scripts that can be exported to other environments, and the only way to do this is to use command line recipes.