[HN Gopher] CS631 - Advanced Programming in the Unix Environment ___________________________________________________________________ CS631 - Advanced Programming in the Unix Environment Author : AlexeyBrin Score : 191 points Date : 2022-10-09 13:32 UTC (9 hours ago) (HTM) web link (stevens.netmeister.org) (TXT) w3m dump (stevens.netmeister.org) | divbzero wrote: | The course is quite opinionated, in a good way: | It is essential to be able to efficiently use a text editor, and | doing all your writing / coding / text processing in one of | the common editors available on all Unix systems is good | practice. vi(1)/vim(1) and emacs(1) are popular choices. | | My college instructor encouraged the use of _emacs_ in | particular. I eventually migrated to _vim_ but appreciated the | instructor's core message that text editor + CLI feels less | magical than a full fledged IDE. | nverno wrote: | Same, the professor used Emacs in only programming class I took | in college. Seeing what he could do with Emacs left as much of | an impression on me as the rest of the material, and I've never | considered another editor seriously since. | weatherlite wrote: | After 10 years of writing software for a living I still don't | get this. Why vim/emacs and not Intellij (for instance?). What | do you mean magical - I want a powerful tool to help me edit | code... | treeman79 wrote: | Vim mode in intelij rocks | waynesonfire wrote: | > I want a powerful tool to help me edit code... | | Then why would you use Intellij and not vim/emacs? | emoII wrote: | Please educate me - since I feel like writing Java without | IntelliJ is like riding a bike without wheels, what does | emacs/vim do better? | HL33tibCe7 wrote: | Tbf I'm a heavy vim user but I'd still 100% use IntelliJ | to write Java. It's different to most other languages in | its verbosity, and the fact that (imo) it doesn't slot | nicely into Unix conventions in general. | [deleted] | pjmlp wrote: | One would think Sun understood what UNIX was about. | ninkendo wrote: | Sun never really integrated Java into its UNIX | environment very well, IMO. My memory of that time is | spotty but I don't recall any of their UNIX tools | actually being written in it. (Likely because the startup | time is awful, which is bad news for any CLI programs | which need to execute and finish quickly.) The Java way | of doing things and the UNIX way of doing things are | worlds apart. UNIX prefers small executables that do | simple tasks, mostly with text, tied together with | scripts, where Java (at least at the time) preferred | pure-Java libraries assembled into larger applications | with graphical interfaces. Sun never seemed to square | that circle, and Java felt like a second-class citizen on | Solaris. | pjmlp wrote: | Forte IDE was written in Java, the IDE used for Solaris | development. | | There was a research implementation to write Solaris | drivers in Java. | | https://dl.acm.org/doi/10.1145/1215995.1215998 | | The Sun network computing thin clients had plenty of Java | into them. | | The classical UNIX does one thing well myth was hardly | followed by all major UNIX vendors. | ninkendo wrote: | I mean sure, IDE's are an obvious choice for Java. But | the rest of the usages of Java in SunOS I would consider | token at best. | | One thing I never understood was why I couldn't just | write some Java, compile it [0], and hand the result to | someone else on a Solaris system, and have them run it. | | Sure, they may know how to run "java -jar myapp.jar", but | why was that necessary? Why couldn't it be a standalone | executable, that didn't require the end user to know in | advance that it was written in Java and to invoke it | accordingly? | | Every single bit of Java software I ever used on Solaris | always had some sort of shell script wrapping it. I never | understood why the operating system couldn't just | natively execute Java code... they literally wrote the | entire operating system, language, compiler, toolchain, | etc, and the end result wasn't usable without arcane | wrapper scripts and JAVA_HOME conventions and so forth. | Windows managed to make it work with .NET (they were just | .exe's like everything else), I always thought like Sun | could have done so much better with the end-user | experience with running Java software. | | [0] for any loose, reasonable definition of "compile". | I'm not saying it can't be byte code, that's fine... I | just don't want to have to care. I should be able to copy | it to /usr/bin and just run it without having to invoke | "java -jar", or use some weird self-extracting shell | script trick. And I shouldn't have to care about whether | the person I'm distributing it to has Java installed, | because it should have _always_ been the case that a | given SunOS machine should have a working Java install... | the same company made the OS and the language for | chrissakes, every SunOS installation should have had it | as a mandatory component. | willbw wrote: | I honestly mean this with no disrespect but having written | code exclusively in vim in the terminal for several years | and the same in IntelliJ, I am confident that either: - you | don't have to write Java full time, and/or - you don't have | to work in a large Java code base, and/or - you haven't | been exposed to IntelliJ's features and how they can save | you time | | I love vim, I really do, but IntelliJ is a Java-specific | IDE and there is absolutely no way that vim or emacs or | vscode can compete on features. You can refactor code in a | split second in ways that are just not possible in | vim/emacs. IntelliJ has an understand of the structure of | your Java code that vim simply doesn't have and will never | catch up to having as its a general purpose tool and | IntelliJ is a specific tool. Its vim mode is also pretty | good. The only downside of Jetbrains IDEs is that they can | be slow when indexing large projects and they can be slow | in general. But I would still 10 times out of 10 choose to | make a commit in IntelliJ over vim for a Java project that | is non-trivial. | | If you write Java I would (as strongly as possible) | recommend giving IntelliJ another go and looking into its | refactoring and other features. | hoistbypetard wrote: | This thread is about a course on Advanced Programming in | the Unix Environment. After looking at the content of the | course, I'd argue that there's an implied "Systems" | between "Advanced" and "Programming". (Indeed, this | course is taught using the famous book whose title it | borrows, and is heavily C oriented.) | | Java is neither common nor especially well suited for the | topic of this course. | | So while I share your opinion on IntelliJ as a Java IDE, | I would not recommend it for UNIX systems programming. | And even the IntelliJ-derived Clion, which is (IMO) | decent for that, leaves something to be desired when it | comes to learning the topic. | nuclearnice1 wrote: | One difference might be the pedagogical vs the productive | perspective. | | Perhaps the magic of a full fledged IDE is thought to obscure | some of what is essential to the subject. | weatherlite wrote: | I vaguely remember hearing something like that when I just | started uni and they had us all working on Emacs. I can | attest it added zero value to me...but that's just me. | alpark3 wrote: | I'm assuming the rationale is that for someone who's doing | complex system-level stuff on unix/linux they should be able | to change things deep in the weeds instead of pulling the | entire code out to IntelliJ or an IDE. | chrismarlow9 wrote: | For coding in your normal day to day? Sure use intellij. For | trying to debug some deep level production only issue where | every second of downtime means big money lost? You'll want to | know vim/emacs.. | | Edit: I'll also add that once you learn vim or emacs you'll | be far more efficient manipulating text. Sure you could add | the bindings to intellij, but I think that's admitting the | point is valid. At a point it becomes like a real time meta | language where you edit lines the way you would | algorithmically. | weatherlite wrote: | Yeah I can see that's possible sure. Though if I have | access to the code I just use Github but sometimes I guess | that's not possible. Still quite rare though no? | chrismarlow9 wrote: | In some places it's rare, in some places it's a daily | occurrence, and sure you should work towards stability, | but the reality is you have to fix this thing now with | what you have. There's also the fact that even if it's | rare I still have to know it. And if you don't use it | often you will forget it. And then why learn two tools if | I can do everything with 1? With intellij I can only do | day to day, with vim I can do mission critical and day to | day. I'd also argue that a seasoned vim user can get | things done incredibly faster than a seasoned intellij | user. | 533474 wrote: | Experienced emacs users will beg to differ. It is as capable | and arguably, more easily extensible. I must admit, it is not | for everyone. As your anecdotal 10 years experience, I have | the opposite opinion but I think it is fair to say that both, | Graphical IDEs and emacs/vim, have their merits. Having | transitioned from Graphical IDEs -> vim + plugins -> emacs + | evil + configs + org-mode. I will never go back to my old | self, I've never been as productive and free. | scruple wrote: | Same trajectory here. I started with vi(m), used a handful | of IDEs along the way, but vi(m) was (is*, if I'm in my | terminal and just need to edit a config file or look at | some data file, and sometimes even just for reading source, | I default to using neovim) a mainstay, and I also | eventually landed on Emacs with evil-mode. I still use an | IDE frequently for graphical debugging. I find it's the | best way to approach thorny problems, but I jump in and out | of the IDE quickly. I don't hang around in it and write | code, almost as a rule. | misnome wrote: | Sooner or later, in many lines of programming, you are going | to find yourself remoted in to a server somewhere that only | has the basic tools. That's probably not the best time to try | to learn an editor. | anta40 wrote: | Perhaps "magical" = increased complexity, like you can't just | build a standalone source file. You have to setup a project | first, configure the required build XML, add your code files | to that project, etc etc then finally compile it. | | with editors like vim/emacs, it's much simpler, like typing | `vim test.c` and `gcc test.c -o test`. OK it's simpler, | assuming you already have the toolchain installed properly. | In general it's true, a few lines of apt-get/homebrew/etc get | the job done. | | BTW, I have nothing against IDE. As a Android developer, I | won't ditch Android Studio for any editor. But for quickly | navigating or building non Java codes, I'm happy with vim + | Makefile/scons/etc. Or VSCode, if I'm not in the mood of | running full featured IDE. | NoraCodes wrote: | > learn to develop complex system-level software in the C | programming language while gaining an intimate understanding of | the Unix operating system | | I would have loved to take a course like this in college, though | I didn't have the chance. I do think [Rust In | Action](https://www.manning.com/books/rust-in-action) is a good | introduction to some of the same concepts, if anyone is, like me, | yearning for grad school while having to hold down a job. While | it doesn't use C, I think it teaches systems programming in a way | that's easily applicable to any language. | BaculumMeumEst wrote: | > While it doesn't use C, I think it teaches systems | programming in a way that's easily applicable to any language. | | If it's teaching systems programming in a way that's applicable | to any language, it's probably not teaching systems | programming. | NoraCodes wrote: | I'm not sure what you mean. There are many systems languages | out there these days: C/C++, Rust, Zig, and even Go and Nim | for things like file systems and networking! | Icathian wrote: | If you haven't heard of Georgia Tech's OMSCS, give it a look. | There are some excellent systems courses available. | | https://omscs.gatech.edu/specialization-computing-systems | ambrose2 wrote: | Can you take any of them through a MOOC platform such as | Coursera, edx? | Icathian wrote: | The lecture videos and syllabi are up on the gatech | websites for each class, but the project materials and such | are not publicly available as far as I'm aware. | NoraCodes wrote: | Neat, thank you so much! | 0x445442 wrote: | > Students are expected to have a good working knowledge of the C | programming language, have written non-trivial programs before, | and to be able to competently use a Unix system with a command- | line shell interface. All coursework will be done exclusively on | a Unix system from the command-line. This is not an introduction | to using Unix! | | My son just finished an undergrad CS degree at a major university | and I don't think he'd meet this pre req. | throw827474737 wrote: | > My son just finished an undergrad CS degree at a major | university and I don't think he'd meet this pre req. | | Wow, that's somehow sad : - | | gavinray wrote: | Anecdotal experience: | | I used to work out of a space provided to my employer by a | university, as part of their startup accelerator program | | It was on-campus and there were students also in that space, | so during lunch and breaks I got to know many of them | | In my experience, students about to graduate from the CS | program had near-zero tangible skills and lacked the ability | to build basic applications, in any language. | | This was in the USA, FWIW. I think our CS programs are pretty | trash at most universities. | | One of my current coworkers applied after graduating and | failed the interview and was only able to pass after paying | thousands to attend a coding bootcamp. | 0x445442 wrote: | Well it wasn't MIT but it wasn't DeVry either. My guess is | his curriculum is pretty representative of the current state | of things. | dingosity wrote: | There's some debate about the role of practical instruction at | engineering colleges. One one hand, you have people who say | "no. we shouldn't be teaching basic skills like C programming." | Their point is a university level education is supposed to | teach people how to think about the concept of computability | and algorithm analysis. They will frequently say things like | "we are not a trade school!" The other side of this debate are | people who are like "Meh. It's embarrassing our grads can't | write a C program." So they teach them Python. | | Either way, the only way you're going to graduate knowing C | programming is to realize it's something you want to do and | spend a bit of your own time learning it. | | And then they completely fail to teach concepts usable as a | gigging coder. | | I think if you ask the academy "what are you teaching young | software engineering students?" the response would be something | along the line of "We're teaching them knowledge and skills | that will be useful for being a grad student." | | It would be cool if there was an organized course teaching kids | the basics of version control, what continuous integration and | continuous deployment are, what agile methodologies are | supposed to do (as opposed to "agile is whatever is in the JIRA | manual"), the basics of logic programming -- you'll never use | prolog but you'll be rewriting it in C++ or C# a couple of | times, the basics of functional programming -- you'll never use | lisp, but you'll be pretending function pointers are the same | thing when you're writing that big C++ program, software | project estimation, how to invert a binary tree -- you'll need | to know this for a google interview and how to actually design | data structures. | _dain_ wrote: | in a scientific degree you still get taught how to use lab | equipment and how to do physical experiments. that doesn't | make it a trade school. i don't see why CS has this aloof | attitude to actually teaching students how to do stuff. | closeparen wrote: | _Systems_ is legitimate academic CS. It is different from | modern business or web application development in important | ways, but it is at least hands-on-keyboard edit-compile-test | cycle work, not math. You should should understand how an | operating system, network stack, database, etc. works by | having implemented significant parts of them in homework. | That is part of the virtue of having a CS education, as | opposed to a trade education. A CS education with only math | is at best incomplete. | | And to bang on my usual academic CS bugbear on HN: algorithms | is _one class_. It might be the most important class, or the | only class in the intersection of _all_ CS experiences, but | each person 's experience includes like 15 other courses. | Some, perhaps even most of those should be systems. And | systems classes should include substantial C programming. | black3r wrote: | That's kind of the point of splitting CS degrees into general | undergraduate basis and specialized graduate level. In | undergraduate you have to learn the basics of everything and | can start to specialize on projects or bachelor's thesis if | your uni has one, then you finish your specialization during | graduate studies. You can be a very good software developer | without ever touching a command-line interface or having a | working knowledge of C these days. On the other hand if you | want to become a C/Unix developer, there are enough courses and | projects available for you to learn. | | Also I'm fairly sure you can start a course like this even | without matching the prereqs, it's just gonna be a bit harder, | but university is all about challenging yourself... | 2devnull wrote: | "You can be a very good software developer without ever | touching a command-line interface or having a working | knowledge of C" | | No disrespect but that isn't true. Touching the command line | is required for sure. | verisimilitudes wrote: | UNIX sucks. Of course, enough time has passed that people | expect a mathematics degree to come with diarrhea from the | 1970s for stupid reasons. | icedchai wrote: | What would you prefer? | verisimilitudes wrote: | Lisp and Smalltalk existed before the C language, and don't | have its damning flaws. Ada's also much nicer. As for the | operating system, there are currently no good such systems | that aren't very old. I use Emacs to largely avoid the UNIX | sh. Ideally, a university would have its own operating | system, but I suppose that would be too hard, in comparison | to accreting another layer of shit over UNIX. Something | such as Alan Kay's VPRI would be best: http://vpri.org | | I didn't go to a university to learn anything about | computers, fortunately. | anthk wrote: | Today one of the best "Not really Unix, but close" it's | called Guix(SD) and it's bound to Scheme. And without C, | forget about having a kernel and a Scheme compiler. | | The best env to complete SICP it's, paradoxically, a Unix | like system written in C with an Scheme DSL to set up the | system declarativelly. | 0x445442 wrote: | > Ideally, a university would have its own operating | system, but I suppose that would be too hard | | Actually that's exactly what Nicklaus Wirt did with | Oberon. | hdjjhhvvhga wrote: | So? This is a specific course with specific requirements. Many | unis today don't teach C nor require students to be familiar | with Unix, but if you think about writing server-side software | it's an excellent introductory course. | turndown wrote: | I'm not sure - I took an operating systems course in C that | used command line only for submissions, and of course if you | didn't run a *nix locally you had to SSH in and work in a | terminal environment for the entire course. This was three | years ago. You could nitpick about what "non-trivial" means, | but I'd say most CS degrees require some non-trivial work(to | them). | ghostpepper wrote: | Just because they have experience in C and (hopefully) some | non trivial work over the course of the entire degree doesn't | mean they have non trivial experience in C. | | I'd love to hear what the author considers nontrivial but I'm | going to guess it has something to do with pointers, and | familiarity more generally with the memory model of C. | 0x445442 wrote: | Yeah I guess it's the non-trivial bit that needs | clarification. My son shelled into nix systems and wrote | some c++ code that made system calls. It's just the way the | prereq was written leads me to believe a good portion of | his time in this class would be spent on learning things | ancillary to the main content. | chucksmash wrote: | Honing in on what is meant by "non-trivial" is a good | point, because it will really mean different things when | talking about different audiences. | | I took a few undergrad CS courses during some downtime | recently and found them blindingly, disappointingly easy to | the point where I found myself fading the (prestigious) | school that created the material. They felt completely | trivial, as did the assignments. | | On the other hand, I'd be willing to entertain the argument | that I've not yet written a non-trivial program in my ~10 | years working. | kwant_kiddo wrote: | looks cool but this sentence "and all OS that belong to this | family, such as Linux, the BSDs, and even Mac OS X" triggers me a | bit because MacOS is the only one of those OS' listed that are | certified UNIX. | | Technically Unix is trademark, you have to pay to be Unix. | pjmlp wrote: | Which also implies meeting certain certification tests | criteria, it isn't only just money. | [deleted] | gauddasa wrote: | I recommend to use UNIX(r) in the course name as the text book | consistently uses. | lapser wrote: | I believe this course (or something close to it) was taught in | the University of Kent when I was there between 2009 and 2013. | Really got my Linux game up to the point where I could switch to | it fulltime. | neilv wrote: | The course home page almost looks like it could've been for a | Unix programming course 30 years ago. | waynesonfire wrote: | excellent, wouldn't expect anything less. | hulitu wrote: | Because a modern programming course page must have 30 MB link | to 3 analitycs pages and have Facebook and Tiktok tracking and | buttons. Nevermind that the main info is 1kB. /s | neilv wrote: | I was unclear; I meant the content of the course. | tester756 wrote: | I think it's good - loads quickly, straight to the point, | materials are available easily (links to yt) | gauddasa wrote: | The moment I read APUE, the website apuebook.com flashed into my | mind. I've been following Stevens and Rago book since their first | edition which was late 1990s. | stefanos82 wrote: | > Letter grades will be given as follows: > > * 90% - 100% of | total available points => A > * 80% - 90% of total available | points => B > * 70% - 80% of total available points => C > * 0 - | 70% of total available points => F > > Within each letter grade, | there are +/- grades given at the discretion of the instructor. | (Exception: there is no A+) | | ...what? O.o | | They don't offer a grade 'D' anymore? | mb7733 wrote: | Common in grad level courses that 70% is required to pass | bink wrote: | In my experience in undergrad "D" meant "you can get credit | for this class but cannot use it as a pre-requisite for other | courses". So that makes sense for graduate level courses. | atsushin wrote: | I took this class while I was in grad school! Ended up dropping | due to reasons but the instructor was great. I'm pretty sure the | course materials are up on YT as well. | prezjordan wrote: | I took this class during undergrad! It was really enlightening as | a web developer to actually...write the server ___________________________________________________________________ (page generated 2022-10-09 23:00 UTC)