11 ms·
I don’t agree with this perspective: why do entry-level students have to understand the internals behind compiling their code, and weird edge-cases like misspel
by armchairhacker 5y ago
I don’t agree with this perspective: why do entry-level students have to understand the internals behind compiling their code, and weird edge-cases like misspelling import? In my experience this is actually the stuff that hinders learning and confuses students.
The author claims that students won’t be able to do real-world programming without learning this esoteric stuff, but actually this is the exact stuff they don’t need to know: full teams can and have built huge java projects just by using the intellij project wizard and maybe a tiny bit of Gradle from stack overflow. Actually students can solve most of the author’s problems by spending 5 seconds on Stack Overflow.
I’m not saying that these more esoteric details are completely useless. Learning e.g. the difference between char and UTF8 “character” is actually pretty important so that emoji inputs don’t crash your website. But this is stuff that should come in later classes, particularly for students who are interested in those details. Not everyone needs to know it.
In fact my experience is that some colleges have the exact opposite problem: they teach students old tools and techniques which are tedious and not actually used much later on. Like writing code by hand and deducting points for syntax errors, or using some outdated framework e.g. jQuery. When I saw the title my first thought was literally “yeah stop making students use eclipse, they should be using IntelliJ!”
- tomc1985 5y agoMy first real uni programming class was Java and we used BlueJ. I tried to set up Eclipse but I was so freaking lost. And I've been a computer nerd most my life, just not a programmer at that time. I am so glad we were set up for the simpler IDE, learning your first couple languages is hard enough as it is.
- deleted 5y ago[deleted]
- SPBS 5y agoI pity the student who only knows how to hit the compile button in the IDE and not `javac`. That's a terrible thing to inflict on a beginner, everything will seem like a mystical black box to them with no way forward when they hit encounter their first compilation problem.
- irl_chad 5y agoI’ve been programming in Java for about 10 years now. I would consider myself an expert - I’m not just some guy who built crud apps, I’ve gotten messy with Java. I came up programming for minecraft servers - lots of interesting challenges there. The only time I have ever used javac was for fun. Not once professionally.
- kaba0 5y agoI have yet to write java byte code manually, but a high level understanding of them do make me a better developer in my opinion. It’s not about the number of times one uses it, but knowing about the underlying abstraction.
- FpUser 5y agoI spent bout 3 years in the 90s when I needed to mess with Java code. Would not dream about going through all those giant piles of enterprise code without IDE.
- saagarjha 5y agoIt’s good that we don’t throw people directly into a professional environment when teaching them how to code, no?
- FpUser 5y agoI see no point in wasting time. I learned programming on my own. Started with machine codes. But I grabbed every tool that can help (including IDE) as soon as they appeared. Programming to me was / is a tool I use to make products. I see no point in suffering for the heck of it. Instead of fucking with 10 miles long command line and remembering every squiggly thingy I think it is better to explain to students how computers really work instead.
- saagarjha 5y agoIt's nice to learn how tools work internally, so you can fix them when they break. Once you know how to do that, it's fine to graduate into something that does the work for you.
- fredgrott 5y agoyour factual proof?
- yeetman21 5y agoHow is JQ outdated?
- thrower123 5y agoThe big problem seems to be that universities are running into this iPad generation of children who do not know the basics of how computers work and are organized, because apps have veneered over all of that detail. It's not uncommon to see astronomy and biology professors lamenting that their students don't understand file directories, or realize that a file can be opened by different programs.
- zelphirkalt 5y ago> When I saw the title my first thought was literally “yeah stop making students use eclipse, they should be using IntelliJ!” I disagree with this point. Universities should stop driving students into the arms of proprietary software vendors. Eclipse does the job and works well enough, with a license, which does not limit students later on. If they learned Eclipse, they will be able to learn other IDEs later on, if the job requires it. Of course it would be good, if somehow for a low cost in frustration and time, students could learn about what it all translates to on the command line.
- atomicnumber3 5y agoI disagree but from a different angle than the other person: IME a major barrier to students being able to complete assignments was basic mastery of syntax. Now, you might think, but of course, they're students. But I saw this as the main barrier at ALL levels and in all classes. People who could understand algorithms and linear algebra being unable to write a counting for loop that iterates over an array without looking it up and carefully copy pasting it. There's just an innate familiarity with the text of your program and how it translates to an AST that you MUST command. And having tools that can "did you mean" auto-fix things doesn't help, especially with imports, when almost languages have non-trivial import systems. I obviously encourage teaching modern IDEs but I think we would do students a disservice if we didn't make them use a fairly plain text editor for most learning. I started with BlueJ which provided a "compile" button and syntax highlighting and that was about it, and I was then later (after having stopped using bluej of course) confused by people who were using eclipse but couldn't get their imports working right. Maybe that's my main point actually: none of these tools are good enough that they let you actually not understand the underlying system. They're just time-savers/auto-completes, which can confuse newbies.
- moonchrome 5y agoStrongly disagree with "full teams can and have built huge java projects just by using the intellij project wizard and maybe a tiny bit of Gradle from stack overflow." I wouldn't want to work with someone who doesn't understand how build systems work. Specifics are irrelevant but knowing how to work with one build system means you don't have some vague textbook picture of how it works but you actually had to see it how it glues together. IDEs are nowhere near good enough to abstract that complexity away and it's a big part of day to day work.
- watwut 5y agoIntelliJ looks better but do less for you. Eclipse by default compiles the whole project for example and by default shows all compilation errors. With IntelliJ you need to look for these.
- dmitriid 5y ago> With IntelliJ you need to look for these. Erm what? Click "build", and IntelliJ shows all compilation errors with their locations
- watwut 5y agoIn eclipse, you dont have to press anything. You have prominently "problems view" where they are all listed as you type essentially. You dont have to expand nodes and errors are sorted all on top. (And you can filter them in millions ways, easily, make multiple copies of the view with different filters if you want.) Then you see them in package/project view too. Each package, project and file with error has red icon with it. IntelliJ does not show them in project view at all. It shows them only after you pressed "build", so you need to develop the habit of pressing it constantly. Oh, and the console shows exactly one error. The others are hidden in separate view view, inside collapsed nodes and you have to click multiple times to see them.
- dmitriid 5y ago> IntelliJ does not show them in project view at all. It shows them only after you pressed "build" It does better than that: it shows them directly inline with your code, with all the tips and hints and refactorings to make it work. When you change something to be incompatible with existing code, it will immediately show a handy link inline to display all the places across your code that depend on this code and are now problematic. There's a problems view that has an overview of all problems in the current file and in the entire project (but true, a single overview of the entire project only appeared sometime in 2020)
- tsimionescu 5y agoIntelliJ also does on-the-fly compilation and checking, at least if you enable it - which may be a performance problem for huge projects, but definitely not for students.
- LogonType10 5y ago>why do entry-level students have to understand the internals behind compiling their code It's a good primer before they write compilers in their latter years in a CS degree.
- hibbelig 5y ago> I don’t agree with this perspective: why do entry-level students have to understand the internals behind compiling their code, and weird edge-cases like misspelling import? TFA doesn’t say that. It says to teach entry level students about control structures and such, and then, after two semesters or so, to teach them about those internals.
- KronisLV 5y agoThis post resonates with me: i never really learnt much about javac and haven't needed it in about ~5 years while working with Java daily - for the most part, working with Ant/Maven/Grade is enough and is actually more important to know, whereas javac errors during build can mostly be addressed with a quick StackOverflow search. Knowledge about the lower level stuff is probably nice to have, yet not really needed to be productive in a professional capacity within the industry, unless you're not using any sort of a build system (a red flag, if you expect to manage dependencies easily), or are doing something more advanced and specific. It's like using a Linux distro daily but not really knowing how to or caring for compiling your own software - when the Wi-Fi drivers fail to work in new hardware that'll probably become relevant, but otherwise not necessarily. However, i'd also like to go into the opposite direction and warn against the dangers of not introducing students to higher level tools like IDEs and linters properly. I was one of the unfortunate few who were also taught Java in university and had to write it on paper, as well as in Eclipse/NetBeans. The problem was that none of the staff ever introduced us to the actual capabilities of the IDE, or told us about alternatives like the JetBrains products, or talked about readability or refactoring at all (neither in Bachelor's, nor Master's courses in CS). Thus, i saw some students write code without readable indentation, comments or understandable variable names, treating the entire Java language like some pseudo assembler and happily ignoring any and all of the IDEs suggestions to fix errors or improve the way their code was written. Not only that, but they were also not familiar with any of the refactoring tools, even the more basic ones like extracting a variable or a method, or renaming variables, or even code generation capabilities like getters/setters, equals/hashCode, toString, constructors/builders and so on. To them, these IDEs were just like using Vim at a very basic capacity - knowing how to enter the insert mode and not much more, thus gaining no actual benefit from the tool in the first place, though actually working in the industry would probably teach this to them, due to the necessity to follow code style guides or refactor code in legacy codebases.
- kelnos 5y agoCompletely disagree. > full teams can and have built huge java projects just by using the intellij project wizard and maybe a tiny bit of Gradle from stack overflow. I would not ever want to work with anyone from those types of teams. They are the kind of programmers who have a very narrow range of abilities, and whenever they see a problem outside those abilities, they get completely lost. > But this is stuff that should come in later classes, particularly for students who are interested in those details. Not everyone needs to know it. Yes, they do. They absolutely do. There seems to be this mindset that's starting to infect software development that pushes the idea that people can be good at programming computers without actually knowing anything about how those computers work. I just do not understand how anyone could seriously believe that. My experience over the past 20+ years tells me that people who avoid learning about these topics are generally just not good at their jobs, or at best can do a decent job of things, but then completely freeze when they encounter something outside of their narrow comfort zone. > In fact my experience is that some colleges have the exact opposite problem: they teach students old tools and techniques That's lame, but has nothing to do with the point you're trying to make.
- einpoklum 5y ago> > In fact my experience is that some colleges have the exact opposite problem: they teach students old tools and techniques > > That's lame It's not lame, it's fine. It is just fine, and usually better, to teach basic concepts using a simple tool - even if it is not fashionable or up-to-date.
- kelnos 5y agoI think the parent's point was that some people teach using old tools that no one uses anymore, while teaching with the current-generation tools would be just as easy to teach, but would be much more useful. Agree that teaching old techniques can be useful in the cases where the current techniques build on what came before.
- tomohawk 5y agoVery much agree. IDEs can be great, but in the hands of someone just learning they encourage a cargo cult style that becomes a barrier to actually knowing what you're doing. I've had to work with people who are still stuck cargo culting thing 15+ years into their careers. Not fun. Relatedly, they can also assist people who to get just enough success (in the cargo cult sense) to get a degree, when they would be much better off in a different field. It does them (and their future team mates) a disservice.
- eterevsky 5y agoWhat you are calling "esoteric details" are the basic building blocks. Understanding them gives you a mental model that helps you solve the problems when they arise. And it's really not that difficult to grasp.
- vijaybritto 5y agoMe and my entire batch vehemently hated how we had to configure confusing development environments before actually writing a line of code. That is a huge deterrent and only a few of us liked this profession since then. All those misspelled import errors and command line tools help make it far more easy than configuring an intimidating tool like eclipse/jetbrains.
- barrenko 5y agoTo this and comments below - We dance around it all the time, but there is no way around inherent technical complexity of this field. I started out with Python and Project Euler, went through JS and web apps "ELO hell", picked up some C to understand lower levels, ended up with a microcontroller - then went all the way up to category theory and Haskell / Scala coding. If you ask me if I know how to code, my answer is all the more resolute - It depends. More practical personalities will definitely manage better in current landscape. But the sands are always shifting.
- namelosw 5y agoBoth of you have made great points. A better idea might be two-pass learning: The first pass: Something pure like Structure and Interpretation of Computer Programs, but more approachable for freshmen. And a more beginner-friendly language like Python is preferable. The key is to: 1) Focus on the idea of computation without any distractions. 2) Be less scary. I remember how I gave up C++ several times when I tried programming all by myself when I was a kid. A decade later I decided to try again, and it's fun because it's JavaScript and I can make useful stuff from day 1. The second pass: Something like Computer Systems: A Programmer's Perspective. It goes down to the implementation rabbit hole, don't skip the essential details and tools, making the students well equipped to deal with real-world problems.
- abzug 5y agoItem 1 already exists: https://composingprograms.com/ https://composingprograms.com/
- zelphirkalt 5y agoI took a look, because I thought: "Do they even touch on recursion and all the things, that SICP does using Scheme, which usually in Python are inelegant or cumbersome? Lets check recursion." They do have the examples at https://composingprograms.com/pages/17-recursive-functions.html https://composingprograms.com/pages/17-recursive-functions.h... but no where one the whole page is the word "overflow" or "stack" even mentioned. Almost as if one does not want to mention, that recursion is a bad idea in Python in cases, where you do not know about recursion depth, because of the limitations of Python itself. So the book is teaching an approach, that often might not be a viable good solution, simply ignoring the problems of the chosen tool. On the surface the book looks like good teaching material, but these problems need to be stated, so that beginners know about them. Don't get me wrong. This is already a much better learning experience than with most C/C++ tutorials, but it definitely leaves things to be improved.
- tasogare 5y ago>Like writing code by hand and deducting points for syntax errors We like to discuss the gap between university and enterprise but for once both a totally (ironically) aligned: interviews in big companies are like this, with a whiteboard instead of a sheet of paper.
- vector_rotcev 5y agoYou have written exactly what I think about this, but more clearly than I could write it down. Every rebuttal and complaint against this seems to centre around how the moment someone touches an IDE they become a gibbering idiot who is unable to ever learn anything else, as if it is impossible that the next course could be about how the programs they've been writing are all processed and put together by the tool chain. I once spent a very frustrating and miserable day in the computer labs at university unable to make a program work, and got zero points on that homework, because of a missing bracket. Did I learn anything about programming? Or how computers work? Did the application of anything I'd previously learned about computer science or programming work? No. I learned nothing. I had no time for that, because none of it was relevant. I'd simply missed a bracket very early on in the program, wasn't experienced enough to see it, and that was that. I did learn something critical though, later on, from a friend: "here, use this NetBeans program and turn on 'syntax highlighting' and check out how it points out 'syntax errors' just like how a word processor highlights spelling mistakes". And from then on I could actually learn programming, and later on that semester we learned about javac and putting stuff together on the command line and big O notation, and all the rest of that good stuff that people have moral panics about not starting with. It's like everyone's decided to have absolutely zero concept of time, or parallelism, or that students spend more than 15 minutes in their entire life studying before being ejected into the workforce to spam tech debt everywhere. They're taking multiple courses in parallel per semester, followed by more semesters of more courses, followed by more years or more semesters. There's time to learn more than one thing, and space to not have to learn it all in the same place, and a student studying one thing at a time when they're starting from zero is not mutually exclusive with them becoming a skilled programmer who enters the workforce and writes quality code to create useful programs.
- sputr 5y agoI think the key problem here is that most people here are programmers and have forgotten what it means to NOT be a programmer. Moreover, most are thinking that all who are thought programming are going to become professional programmers - like the class success rate of a 100% is a given. But unfortunately, no. Most intro into programming courses are dealing with the issue "how to get these people over the 'hump' and not quit" and nothing more.
- bbarn 5y agoIMO this is all about curriculum structure. By all means, introduce students to coding using the easiest, most engaging method possible. To me, that's seeing something big, visual, and getting right into the code as soon as possible, like using an IDE with a mostly working sample project they just need to finish something easy in. Thing is, a good course should then, at some point, force the learner to understand what's happening under the hood, or at the very least, be interesting enough to draw them to want to understand it. I don't really use eclipse, but the Visual Studio example, it would be as simple as looking at the output window after hitting "run" and walking through what the IDE is actually doing in the background.
- rglullis 5y agoWhat kind of students are you talking about? University students that want to an education in Computer Science or training in software development?
- gefhfff 5y ago> When I saw the title my first thought was literally “yeah stop making students use eclipse, they should be using IntelliJ!” Exactly the same
- peoplefromibiza 5y ago> Actually students can solve most of the author’s problems by spending 5 seconds on Stack Overflow. The problem is that those students will end up in the workplace one day and someone in the team will have to help them solve problems that are out of the scope of the project and could be worked around by knowing the proper tools anecdotal example: I spend at a least 4 hours a week helping colleagues fix Jetbrains shenanigans that could be non-blocking if only they knew basic mvn or git CLI