9 ms·
Ask HN: Do CS students enjoy C anymore?
We hire C developers at OpenDNS. Most often, we hire them from some other company where they have been working for the better part of a decade.
They are computer scientists and they are very smart.
But we also like to hire students graduating from college. It's rare for us to find a CS graduate who knows C, let alone one who enjoys writing in C.
Apparently most CS is taught in Java and Python these days, with one or two courses in algorithms or operating systems. There seems to be only a few classes where C is involved.
Is this because teachers don't like teaching in C? Or because students prefer the speed of development of a language like Python or Java? Where are the students who do like C? Where can I find those guys (and girls)?
- rscott 16y agoI enjoy it and I graduated less than a year ago, though I am an EE, not CS grad. Perhaps look at the CE/EE crowd a bit more in depth. Where I went to school (large Big-10 engineering program), we were required at least one C course, with more as electives.
- _delirium 16y agoIt's been a long time since it had a large role in CS curricula outside of operating systems / embedded stuff, I think. The intro classes when I was a freshman (2000) were transitioning to Java, but from Pascal, not C. The industry-focused classes (software engineering, etc.) all used C++. I think I would personally have disliked C if college were my first introduction to it, because I associated it with curmudgeonly systems professors and a sort of harder-core-than-thou attitude. But for some odd reason I had already learned C in high school (I think I picked it randomly), and it's a perfectly enjoyable language to use, without the cultural baggage. You can even write things other than schedulers in it!
- tialys 16y agoI carry around my copy of K&R like it's my bible. Learning C really opened up programming in general for me. I love it. Here at school though, we're never required to write pure C code. We learn C++ (as it's own class! Yuck.) and use it for data structures, but other than that it's not required anywhere either. It's all Java and Python, and most people here can't be bothered to learn a new language. I've probably got more to learn about C before I'm at the level of the people you hire, but if you think you might be hiring in May, I'll be graduating soon! ;)
- adamrichardson 16y agoI am a CS student in my last semester and in my operating systems class we have been required to do all of our assignments in C, we also are targeting minix. This has really given me a love for C and made me much more comfortable with programming in any language. C skills are a must!
- Rantenki 16y agoThere are some people that enjoy being tied up and whipped too, and those who wear "hair-shirts" to show that they are noble for all their suffering. More than enjoying C as a language, you should find people who can identify when it is, or is not, the correct tool for the job. If you hire people solely because they enjoy C, you may find that "when all you have is a hammer, everything looks like a nail". Putting my money where my mouth is, I have written more C++ in the last month than during the previous decade, because I am doing a lot of node.js work. I am writing code in C++ that speeds up or makes possible the things I want to do in Node. Nothing more.
- arghnoname 16y agoSome Universities require more classes in C than others. You could go to the course listings of Universities you might like to recruit from and go after graduates from those programs. With one decent CS school that I am aware of, the University of Maryland used to require (until last semester or so) all CS graduates to take two lower level classes which are taught in C (with some asm). Now it is just one course. I don't know whether or not students enjoyed it, though I think it is unfortunate that they are dropping one of the two courses (actually combining both into one course.) I think part of why there is this move away from C is some students (rightfully) complain that they may never need to explicitly use it, and Universities figure they can teach the concepts with other languages. I believe that lower level languages should be taught, but I understand why not everyone agrees with me.
- BuckToBid 16y agoI just had an submission hit the front page the other day where I explained how moving from PHP/Apache to C saved my bacon. I'm 26 and have not been out of school that long. I would look for schools who start their students in C or even C++ right off the bat. I know some people who took intro to programming in Java and would never learn C now, not sure why.
- scumola 16y agoI've written a bunch of PHP, Perl, SQL stuff, but always down-shift into C or C++ (mostly C though) when performance or command-line tools need to be efficient. I wrote a multi-threadded crawler in C because using perl or shell scripts wrapped with xargs is not very efficient. I love working with C mainly because I grew up writing C code and I find it very convenient. I have a favorite debugger. I love using linked lists. I think that constructing a complex in-memory data structure to make a program run efficiently is an art form. Also, I believe that using BerkeleyDB is also a much better option for a database from a programming aspect. BerkeleyDB (like C) has been around for ever, it's fast, it has low-overhead, and it does things just as good as any other key/value database (if not better because it's so mature). Using older, more proven technologies is slowly becoming my overall programming philosophy. I'm not a new graduate, but I still feel that these methodologies are much better in many circumstances than the newer tools that are all the rage when performance and reliability are an issue. Sometimes, I even re-code regexps using pcre in C to make them fast if they're a bottleneck so I can squeeze some more performance out of my code. When I'm prototyping something, I still revert back to perl or php though - they're great for quick and dirty tasks still.
- staktrace 16y agoThe Software Engineering program at the University of Waterloo (where I did my undergrad and am currently doing my masters). One of their first-term courses (CS 137) is in C. They used to have Java, but apparently the powers that be decided C was a better language to get started with. Although for your real question - where to find a graduate who enjoys writing in C - I don't have a general answer. I know that personally I enjoy writing clean C more than most languages.
- sid0 16y agoAt my college every CS student is expected to pick C up on his own time. I knew how to program in C long before I entered college -- however, I really dislike non-GC environments in general.
- cprussin 16y agoCome to Virginia Tech. Our entire linux/unix user's group is C crazy, we have a resume CD, and most of us are pretty intelligent people.
- maukdaddy 16y agoWhen I was a CS undergrad at VT (1998-2000) all CS classes were taught in C++.
- jimmyswimmy 16y agoGo Hokies! I was there same time. Anyway to echo a bunch of others' comments, EE and CompE's like C. It's great for embedded work. If you find one of us who prefer programming to building stuff, you will be very happy with our understanding of C. On top of which we tend to like to write efficient code (i.e. fast and/or low memory footprint) because we are used to having K's of memory rather than M's or G's.
- tkahn6 16y agoYeah I'm at VT as well and a member of VTLUUG. My last technical interview was primarily done in C.
- catechu 16y agoStudents who've taken systems programming classes (e.g. Operating Systems) would be your best bet -- in my experience, most low-level programming is shafted to those classes, except in the cases where a professor arbitrarily requires C, which doesn't necessarily happen in algorithms classes either. But even better would be to find students who hack on open-source projects written in C (e.g. Linux-related efforts) -- that's much more representative of a graduating student's ability to be productive using C. There are a lot of students working on such projects, and it might be worth starting there.
- larsberg 16y agoMany universities now offer a course using the Computer Systems: A Programmer's Perspective book (http://csapp.cs.cmu.edu/index.html http://csapp.cs.cmu.edu/index.html). This is a fantastic book, focusing on nit-picky assembly and C-level work -- all the foundational stuff for an operating systems or compilers class, even if you never go on to one. Having TA'd this class the last few years, I find most students really enjoy it. In fact, I think most of the HN crowd would greatly enjoy the "bomb lab" (http://csapp.cs.cmu.edu/public/1e/labs.html http://csapp.cs.cmu.edu/public/1e/labs.html -- you can read the writeup but not get the source). The idea is that you have a binary and have to use gdb and some nice dumping tools to "defuse" a bunch of stages of the program, each with increasing difficulty. It's a fabulous exercise, and really makes students pick up a deep appreciation for stepping through assembly and data structures that are just lying around in memory.
- hello_moto 16y agoI used that book 5 years ago (2nd year system course). I love it (except the part where it teaches some weird language called HL or something...) I love the bomb lab exercise! LOVE LOVE LOVE LOVE! At my university, we split the book into two courses if I'm not mistaken. We moved away from a typical OS book (Albert S., Andy T., Stalling, type of book) to this. There are side effects though. The MOS, OS Concept, OS Concepts + Internals book have a typical path of teaching OS while this book merged the OS and hardware knowledge.
- raffi 16y agoI really believe that hacking is a good way to get students excited about systems programming and working at the systems level. I also noticed a stack smashing lab. Good stuff.
- hello_moto 16y agoDefinitely, it's more like a game for me.
- swolchok 16y ago
- gte910h 16y agoGeorgia Tech still teaches a 2nd year course on C: CS 2110 - Computer Organiz&Program An introduction to basic computer hardware, machine language, assembly language, and C programming. 4.000 Credit Hours 3.000 Lecture hours 3.000 Lab hours Course Attributes: Tech Elect CS, Engr, &Sciences
- jonafato 16y agoMy university uses Java as the main teaching language. A few courses down the line (OS, Security) tend to use C, but it does certainly depend on the instructor. It seems to me that instructors shy away from C when they know students will likely have little experience with it. They don't want to be bothered with teaching students what a pointer is because it will take away from the actual material of the course. That said, I personally enjoy using C when it seems to be appropriate. I would much rather write a piece of OS code in C and drop it into a linux distro than using Java to do something that would rarely be used in the real world. I've had problems with C that I wouldn't in a language like python, but if the task is better suited for C, I'd rather work through those problems and learn because of it. My personal opinion of students not learning C because it's hard is that they don't belong in a CS program. If you won't take the time to learn the best tool for the job, you won't do the job right, and no one will have benefitted because of it.
- wmil 16y agoThese days C is a hard language to learn. The best way to learn a new language is to start a small project in it. C isn't really appropriate for most small projects.
- barmstrong 16y agoIt's becoming less common just like programmers who love assembly language are becoming less common. The entire history of CS could be summed up as a move towards higher and higher levels of abstraction. They still expose you to assembly language in good CS programs as sort of a history lesson or to give you a deeper understanding of how it works underneath, but that doesn't mean people actually want to use it. C is of course nowhere near as far along that path as assembly language, but it's a spectrum and seems to moving in that direction.
- mdwrigh2 16y agoAs a Junior in CSC right now, and while I have to say the speed of development in languages like Python and Ruby really appeals to me, I do enjoy C development as well. Unfortunately I usually have to optimize for development time rather than anything else, so outside of a few classes (for example, Algorithms, were execution time was a competition), I end up picking the "highest"-level language. But I think most schools are avoiding C, outside of specific classes (whose goal is to teach C or something C related), because students get caught up in the complexity of C, and the difficulty of debugging it vs. a memory managed language, so they'd rather just avoid it and focus the class on the topic it's supposed to cover. On the other hand, I know a few people who want to solely work in C because it allows them so much control over how things work, and they're capable of understanding how each and every call they make will basically function. You typically have to look pretty hard for these people specifically, but I find the ones I know are some of the best programmers around. If you're curious about getting in touch with some (I know at least two that I would /highly/ recommend, are looking for summer internships), ping me at mdwrigh2@ncsu.edu
- meinhimmel 16y agoEngineering courses give a basic overview of writing in C, but that's about it at my school. I haven't taken those courses since I'm not an engineering major, but I helped my friends with the material. Most of my programming courses are taught in Java. I've brought it up to the faculty though about moving us away from being a Java school. The issue that they presented was that the teachers may not be as familiar with C/C++ as they are with Java. My reasoning behind all of it being that Java is not a good learning language since it adds too much abstraction to get a good idea for what your code is actually doing (i.e. memory). It doesn't particularly matter though as students who are interested in programming will learn what they want on the side. For your situation though, I'd avoid people who classify themselves as being a 'Java/Python/C programmer'. There are too many languages and too many problems to limit yourself to merely one or two languages. A good programmer will be familiar with at least a few languages and be able to pick up a new language/framework quickly. Basically it breaks down to simply finding someone who has an interest in programming. Also, I like C.
- metamemetics 16y agoYou could hire Computer Engineering instead of Computer Science majors, they usually all know C well even if they practiced it in relation to hardware\embedded systems. [at UIUC everyone does C++ Data Structures, but CS starts with Java, CE starts with C ]
- Pyrodogg 16y agoDitto. CompE graduate here, my C education was almost exclusive to microcontrollers. The only other class that focused on C was the operating systems class. Both were fairly low-level in their respective areas.
- smackfu 16y agoDid anyone ever enjoy writing C, especially data structures? Here is what I remember from college: ./program Segmentation fault.
- mdwrigh2 16y agoI actually had the option of using a few languages for my Data Structures/Algorithms class, and chose C. Granted, execution time was a competition and I'm a relatively competitive person by nature, so that influenced, but it really wasn't all that painful, and in fact direct control of pointers made some of the data structures easier to manage, in my opinion. Plus being on top of the rankings for efficiency is always nice :)
- epochwolf 16y agoI had fun dealing with input management using the standard library only. Without any directions on how it worked or what to use.
- tjarratt 16y agoThis is something I've forgot in the years I've spent working since University. There is a certain joy in hacking on data structures / input management and finding the exact patterns that will handle all of the error cases you've thought of. Anyone have any suggestions for priming myself to work on a problem without directions and finding a solution as you go along (exploratory programming)? The closest I've come lately is exploring the node.js API and working out a basic web server with auth, cookies, and some MVC structure.
- elbenshira 16y agoI found most of my segfault bugs by a simple "gdb program". It's scary at first, but it's usually not that hard.
- eqdw 16y agoGDB. God's gift to programmers
- timthorn 16y agoTry looking for Electronic Engineering grads. I may be a few years out of date, but it certainly used to be the case in my experience that they get more C level coding than those from the CS world.
- wickedchicken 16y agoEEs are taught C with Matlab as a distant second
- fshaun 16y ago"CS" is broad; targeting specialties within the program may work better. I used tons of C for operating systems and networking lab courses, but I had friends focusing on (for instance) HCI or AI who rarely touched it. Also consider looking at physics and aero-astro majors. Lots of embedded or algorithmic work, so I hypothesize lower level languages like C are more common.
- balgarath 16y agoLong-time lurker, this is my first post to HN. My school(Tennessee Technological University, graduated a year and a half ago) still requires a semester of C/C++...there were a couple other classes where you needed to know it to interpret the professor's example code, but were allowed to code in other languages if you wanted. I enjoy C, but feel more proficient in other languages as far as getting things done quickly. I guess I just don't use C enough to keep a good grasp of it. I think students would get more benefit out of being forced to only use C(and assembly?) for the first couple years. It would help them get a better understanding of what the higher-level languages have going on under the hood. I've been doing web development(Ruby) the past few years. I've played around with extending Ruby with C, but not much. If you are looking to hire, I might be interested...its about time for a change-up in my life.
- hendler 16y agoAs a teaching language, I did enjoy C. I didn't know C when I was studying CS, and until then I used higher level languages that did all sorts of inexplicable things. C was the one layer above assembly that made sense, and helped highlight when something was really a hardware issue versus an algorithmic issue. (eg. limitations of mmap and fseek in relation to database performance) For production, I wish I had the time or need to optimize code I write, but too often, a server upgrade and reconfiguration is sufficient. At least I depend on some one else writing something great in C (linux, nginx, etc). Been looking at GoLang and Clang to make the experience a little less painful.
- phamilton 16y agoComputer Engineers love C. We build embedded systems in it, write an RTOS, optimize code for cache coherency, reverse engineer binary bombs, develop for FPGAs. More C means less assembly. We love this stuff.
- davidu 16y agoInteresting. Noted!
- TimMontague 16y agoI second that. I didn't have an appreciation for C until I took a few college classes that focused on developing relatively complex embedded systems in assembly -- now I really, really like C.
- doki_pen 16y agoI learned C as my first language when I was young. I would never say that I was good at it. I've written a few Ruby extensions in C, but nothing I would be proud to show people. I've also hacked a few Linux drivers, but nothing to write home about. Very trivial stuff like adding vendorIds or applying patches that required some work. I like C, but I haven't invested much time in it because it seems that the job market isn't that good for C programmers. Maybe I'm completely mistaken, but it seems like I couldn't hope to compete with a lot of the guys who have been doing it for 10+ years. I wouldn't even feel comfortable applying for a position that was primarily C. That said, if someone offered me a job that was primarily C I wouldn't definitely consider it. And I'm sure if they have the patients, I would end up being a good team member. But web development is where my experience lies and it is where I will continue to pursue jobs. As a self taught programmer, the barrier to entry with web development seemed much lower when I was starting out. Again, that could be my own misconception.
- javanix 16y agoI loved C when I was in college. Unfortunately, the university I attended had a CS department that required both a lot of time, and Java for most coursework, so I didn't get to do it enough. Hence, applying for jobs with C in mind wasn't really an option unless I could impress upon someone my desire to learn it.
- Jach 16y agoMy college teaches nothing but C, C++, and Assembly. (Okay, they do have an Actionscript class for designers and encourage messing with Lua...) Fortunately for me I've drunk the high-level kool-aid in web design and application dev for a long time, have read about half of SICP, and so I really prefer Python (or another high level language) over C or C++. But I don't mind C... c89 bugs me with its quirks (I really like "for(int i = 0;)", c99 is fairly enjoyable, more so than C++. C++ is psychotic; I really don't know why you would start a new project in that language... In my side Python projects, if I need speed, I'll write that part in C and compile it to an SO and call it from Python. Nice and painless, easy to port by just compiling 32-bit, 64-bit, dlls and if I care Mac's thing, more enjoyable than pseudo-pythonic libs like pyrex. I'd suggest looking for computer engineering students if you want people that know C. I'm in the CE program here, but it's almost as much CS as it is CE.
- icco 16y agoI'm a computer science student at Cal Poly, San Luis Obispo. Our department is very focused on C, and we do a lot of embeded and Operating Systems level C. I love it as a language, and I think that is partially due to the amount we use it in our classes.
- davidu 16y agoGood to know. I'll up my recruiting there.
- elbenshira 16y agoI'm a CS student. Do I enjoy C? Yes, I enjoy C much more than C++ or x86. But why would I use C when Python or Java will suffice for most things? Of course, I pulled out C for OS and C++ for graphics and robotics, but most of what I do does not require being this close to the hardware. I find C to be an elegant language. But we have so many other things to worry about, like the algorithms, data structures, security, concurrency, etc. If a language can help me with things like memory leaking and segfaults, then of course I'll go with that language over C. I have so many other things to focus on.
- p4bl0 16y agoSo I don't need to write it. Thanks :-).
- InclinedPlane 16y agoPart of the problem is that colleges don't think of software engineering as important, because it's all about "computer science" (not that they teach that very well either). The result is that students end up missing out on a lot of important skills necessary for programming effectively. Skills that are more necessary in C because it's filled with so many different ways to cut off your own arms and legs if you aren't careful. If schools taught better practices and conventions to students they'd probably be plenty happy with C.
- vishaldpatel 16y agoI liked C! =). I finished my undergrad in 2006 - also went to community college before finishing my degree. I learned C in community college - it was a prerequisite to all other programing classes (unlike university, where I wrote all my algorithms assignments in python). We also learned C# later on in college, and there was always this, "this new thing is nice and shiny but C rocks" feeling among a lot of people in my class. Also, most of the people (since it was community college) weren't your typical, "I've always wanted to be a computer programmer/scientist/engineer" types.
- jbarham 16y agoEven when I studied CS in the mid-90's at the University of Toronto, taking a course in C programming was optional, either as part of a survey of languages course, or in the upper level OS courses where C is still the obvious choice. Otherwise, writing C programs has been called a "historical reenactment" (http://research.swtch.com/2008/03/rotating-hashes.html http://research.swtch.com/2008/03/rotating-hashes.html) and I think for most working programmers this is accurate. It helps to know some C or C++ if you're using scripting languages like Python or Ruby in order to wrap 3rd party C libraries, but wrapper generators like SWIG will do 99% of the work for you, and what little C code you might have to write by hand doesn't need to be particularly fluent or idiomatic.
- mgrouchy 16y agoI'm not sure where you find these people, generally you will find the small subset of students who do projects outside of class work generally work on the web because these are things that can be most easily shared with peers. In my university, we did mostly Java(that was the "teaching language" that is used), I only did 3 courses that were primarily taught in C and there were only around 2 more courses that required C. So what generally happens to most CS students is that they teach you Java in your first year and then any course where they tell you to use whatever language you prefer they choose Java, because thats what they are comfortable with and they have assignment/project deadlines looming, so they don't feel they have time to experiment in a new language. Your best bet is to hire workterm/Internship students whom you can Train. It might seem like a waste, but its a real cheap way to get an idea of how good the person is, you get them early enough to train some bad habits out of them(if they exist) and evaluate whether they would be a good fit for your company. They also may accomplish something awesome along the way? I did a 16 month internship before I graduated from University(which was really an 8 month extended to 16 month), most students like myself set up these internships in a way that after the internship they only have 1 semester of classes remaining, so they can ideally work part time with the company they internet with for that final 4 months and hopefully turn their internship into a fulltime Job upon completion.
- thwarted 16y agoI took C the last semester it was offered for CSC101 before the university switched to C++. That was 1994.
- _corbett 16y agoI first started programming in college (late bloomer) and learned lisp, python, java, ruby and a smattering of other languages in class/internships and have taught java at the intro level. Java is a difficult language IMO to teach as a first programming language as concepts are often obscured by syntax, and I imagine the same to be true to an even greater extent for C. I did a bit of lower level stuff for OS/algorithms courses in undergrad but first did C/C++ extensively during my Master's and now my PhD (and Objective C for side projects but that's another story). I love the C/C++ work I do as when I write in C/C++ vs. say python speed is the key issue so I'm doing much more work on algorithm design and parallelization. For a new grad if they are into the work and a partially seasoned programmer, they'll learn on the job if they don't hack C already.
- eqdw 16y agoMy university loves Java. C is taught in a few low-level courses but it's not typical. Hell, within 10 years I bet they stop even teaching pointers. I really like C. Sure it's not as sleek and sexy as Ruby (My uni uses ruby over python), but, it's fast, and it does what you tell it, and nothing more. I actually am really interested in low level systems programming, but unfortunately it's not easy to get experience on that short of being employed in it.
- deleted 16y ago[deleted]
- russell_h 16y agoWe (I'm a senior at Oregon State University) use C in classes more than any other language and I, for one, love it. I know a lot of students don't, but most of them at least have some idea whats going on. Also the ECE ("Electrical and Computer Engineering") students here (and probably elsewhere) use a lot of C, so that might be something else to look into, although they're mostly familiar with embedded environments. Maybe this goes without saying, but no one here (to my knowledge) gets very in-depth into a lot of stuff you might take for granted, for example I haven't met a single student (or many professors) who is familiar with mmap(). There are a lot of really smart students who could probably work out great with a few months of real-world experience and mentoring, but students who could sit down and work on production C code right out of graduation are probably less than 1 in 100.
- drdo 16y agoI find it very odd that CS graduates don't know C. I don't find it odd that people don't enjoy programming in C. At my univ the introductory programming course is taught using Scheme but there are plenty of course that use C, such as Algorithms and Data Structures and Operating Systems. Hell we even have a course that uses assembly (Computer Architecture). This is all on the undergrad degree.
- goalieca 16y agotry hiring electrical/computer engineering students. C is a high level language for us :P
- z0r 16y agoThere's quite a bit of C / C++ in the curriculum at Waterloo, although many of the courses that accept assignments in C++ also accept Java submissions so I don't know the actual breakdown of what students choose to submit most of their code in. I chose to write all my assignments in C (or very minimal C++) whenever possible. I might be a sick individual though.
- tseabrooks 16y agoI'm 26 and finished my M.S. in CompSci a couple years ago. All of my friends I graduated with from my under grad Love writing C and C++. Most of us ended up in jobs doing C and/or C++ for a living. I think a lot of this has to do with our 'upbringing'... We went to a super small university (1500 people) and we got to do summer internships and independent study course work with one of our professors writing/modifying embedded wireless drivers in NetBSD. This resulted in a group of students that were more proficient at reading and understanding huge bodies of existing code when compared to students I've TA'd and worked with. This also means we all enjoy working in C (Though honestly most of us prefer C++). We work in jobs like embedded GPS devices. Embedded development for Televisions. Jet engine test software. Embedded signal / sensor processing and integration. It's only now, later on in life, that I realize most of the other people in these fields with us aren't CS guys but rather CE or EE. tl;dr... Find a student, just 1, that is really into this and then find more students from his university... It's likely the environment / layout of the university's program is largely responsible.
- merijnv 16y agoMSc CS student here. As some others have mentioned, I love doing stuff in C. However, I'm also keenly aware of its pitfalls and shortcomings. As such I prefer to do most my stuff in higher level languages like Python and Haskell only dropping to C for speedy data structures (if profiling proofs it necessary) or for convenience when doing low level OS code. However, I know a lot of my fellow students have an extreme dislike for C and only wanting to program in languages like Java/C#, even languages like Python and Ruby seem under represented. The students who seem to appreciate systems level code and C seem to be a minority in my university. Which of course means there is more competition to hire these students when it comes to people looking for C developers.
- xyzzyz 16y agoThey teach quite a lot of languages at my university. You can choose between Pascal and OCaml for the first programming course. Half a year later, you are supposed to write middle sized projects in Delphi and Java. Second-year student learns C++, and then chooses between further C++, Python, C# or CUDA/OpenCL classes. C is used in Operating Systems courses, Oracle and PostgreSQL on Databases, PHP, Javascript (JQuery) and Python (Django) on Web Applications. Prolog, Smalltalk and Haskell are used in Compilers classes. Students use language of choice on Team Programming Project. These are all obligatory, one can additionally attend optional courses on Prolog, Dylan, Common Lisp and some other I do not recall now. So yeah, learning C better would take time needed for all these courses and thus would narrow one's view. From my experience, most people do not like to use C for anything other than Algorithms classes, and even then they are more likely to use C + STL than plain C. Those who do can take Advanced Operating Systems classes and tinker with Linux kernel, or Microcontroller Programming.
- leif 16y agoCome to Stony Brook, and talk to Erez Zadok. He is the creator of unionfs, he teaches (undergrad) Advanced Systems Programming in UNIX/C, and (grad) Operating Systems, and runs a lab devoted to (mostly) Linux filesystems. NetApp, Data Domain, and other high-profile storage companies (maybe you know Riverbed?) regularly hire his students for their knowledge of operating systems and C. His class is why I love C, and you'll find many more like me if you come talk to him.
- pyeek 16y agoOne issue I don't see raised in the comments so far is the fact that OO seem to be all the rage (at least when you're a college student anyway) and often you move onto C++ or Java fairly early in the curriculum. I love coding in C and my first job out of college was C for mobile devices. I have since moved to web programming and rarely use C directly (closest I get is Imagemagick with bindings)
- younata 16y agoFreshman in CS here. I came in knowing python and C. My uni teaches java for the first three classes (luckily I tested out of the first class), then we're taught c++. We have an OS class that (should, I haven't looked into it) uses C, probably c++. I personally love C. It's a much smaller language than java, the libraries actually make sense (reading input into a string comes with stdio, as opposed to having to import java.util.Scanner). I also feel that everything I'm asked to do in java, I can easily do in C with less code. However, this is because I'm more familiar with C than I am with java.
- mcarrano 16y agoI'm a student at Stevens Institute of Technology... As an introductory language, you are taught Java but when you move up to higher level courses such as Algorithms, Data Structures, etc you will us C. I've also taught myself C++ and I prefer it over C but I have no issue working in any language provided I learn the syntax.
- jhferris3 16y agoI'm a CS student over in Pittsburgh at Carnegie Mellon. While the intro courses are currently in java (and transitioning to an in-house pared-down C) Our 2nd year systems course is taught in C using the "Computer Systems:A programmers perspective" book (its actually written here), and our OS class is in C, while the other upper level systems electives use C++ for the most part. Come out to CMU and you'll find plenty of C lovers and systems hackers. Our OS class kicks your ass when it comes to OS level stuff and use of C/pointers/stuff. I don't know anyone who got B or better in that class and came out of it a novice with respect to C.
- strlen 16y agoLook for schools that teach primarily in C. At least when I was a student, Santa Clara University (Computer Science and Engineering department, then two departments: "Computer Science/Math" and "Computer Engineering") did that (with the exception of one Haskell-based course and several courses which gave students a choice of language to use). Not sure if it's still the case. My local community college (where I started) - De Anza College did that as well. I am sure there are many others, just they may not be the most well known ones. Not all the top graduates will want to go into systems programming, however. Great chunk of user-level systems programming (e.g., network services, distributed systems) is also being done in languages other than C. I suspect, many no longer view having real-world C experience (as opposed to just knowing it) as imperative for their career. That said, I am not sure exactly what level of C proficiency are you looking for. I am guessing, strong knowledge of UNIX Systems Programming (IPC, interfacing with the VM, etc...) and BSD sockets? You can only learn this through experience and/or working meticulously, through Richard Stevens' books (I _highly_ recommend the former, even if you don't intend to touch C again). You can't expect to hire people with that knowledge straight out of college, but you can hire students with "good C programming ability and strong understanding of operating systems internals, who are interested in learning systems/network programming" (to put in terms of a job description) i.e., they should know what producer/consume problem is, but they may not always know all about UNIX signals, IPC mechanisms and the Linux VM. [Edit] Others have suggested to look for students who took an operating systems course. That's likely the best bet.
- freshrap6 16y agoI think students aren't offered the opportunity to see what a language like C can do for them. Their are plenty of examples of cool webapps and mobile apps out there for them to see. C isn't sexy anymore. I enjoy C because I like working close to the machine level, without having to do assembly. Not a lot of people want to code up apps for hardware anymore. It's all about webapps and mobile apps right now, and this is what they see.
- andylei 16y agoharvard's intro CS class is still taught in C. most of the CS majors there who do systems related stuff write in and enjoy C.
- jchonphoenix 16y agoI go to Carnegie Mellon. I extremely enjoy C. The best programmers at CMU enjoy C. Granted, I'd rather program in Python, but I still really really like C as a language and use it whenever I can.
- zacwitte 16y agoI enjoy C because I like strongly typed languages, explicit code as apposed to ambiguous typeless languages. I haven't, however, found many companies hiring C programmers. I've been working for web startups in San Francisco for a while and have talked with a lot of developers at events and it seems to me that there is less and less focus on optimization in general, which is why there is less interest in C. The fact is that C becomes less relevant by the day. Rails and python developers are in high demand - C not so much.
- whimsy 16y agoI'm a senior CS undergrad at UCSC. C is used often here in upper divisions for Algorithms, Compilers, and Operating Systems at the very least. I suspect it's used anywhere that theory is deemed very important, because it forces you to understand the theory. Personally, I don't like coding in it, though I think it's very important to learn in it - it forces you to learn how to do many things at the level of memory management. Learning how to make linked lists in C taught me a lot, for example, and ensuring that my program had no memory leaks also taught me a lot. On the other hand, this is 2010 and there are programming languages that do memory management for you. Managing memory when you're doing relatively abstract stuff (in most cases) isn't fun OR elegant - it's just tedious. jdietrich talks about this some in another contemporary thread: http://news.ycombinator.com/item?id=1830120 http://news.ycombinator.com/item?id=1830120 Therefore, I prefer Python - I don't want to program embedded systems. -- Right now, I'm of the opinion that I ought to be language agnostic. However, I'm also of the opinion that I should know at least two programming languages very well: I should know one high level language to Get Stuff Done quickly without worrying about tedious stuff like memory management - in these cases, performance is a secondary concern; modern computers are very powerful, and it's much more cost effective to simply write it quickly. Compilers are much better than I am at optimization, and they can do a lot, so why not leave it to them? For this, I've selected Python; I'm working on getting familiar with its many libraries. I should also know one low-level language for things where performance is critically important, and it's worthwhile to take the extra time to calculate things like that. For this, I'm currently using C, but I plan on switching to Lisp.
- jlao 16y agoCurrent CMU student here. All students are required to 15-123 (Introduction to C & Unix), 15-213 (Introduction to Systems) and another low level systems course of your choice (which to my knowledge almost all require C and/or x86 assembly).
- jdoliner 16y agoI'm a very recent graduate and I enjoy using C. C was used in almost every class I took in college. Normally these days I use C++ but I still tend to default to Cesque solutions. It's nice having a language that you can fit in your head all at the same time (or pretty close). If you guys are desperate to hire C programmers I can give you a small tip that pretty much any CS undergrad from UChicago should have learned to like C by graduation.
- elai 16y agoAt my university, C is used when applicable, like graphics or OS courses. Some courses are Java, my compilers course uses C# (you make compiler for a subset of C#, c-flat, as part of course), others use a variety of languages. A lot of guys that are into iPhone development will know C from Objective-C. C is nice, but you feel the datedness of the standard libraries, some basic operations such as string manipulation and what not is more work and verbosity than it should be.
- Locke1689 16y agoApparently most CS is taught in Java and Python these days, with one or two courses in algorithms or operating systems. There seems to be only a few classes where C is involved. These are bad schools. I'm really not willing to compromise on this statement. Is this because teachers don't like teaching in C? Or because students prefer the speed of development of a language like Python or Java? Where are the students who do like C? Where can I find those guys (and girls)? It's because C and systems are inherently hard and cannot be made... not. When your libraries are limitless your programming exercises can be made as trivial as possible. I also always choose C if companies let me choose my language during interviews. I can fit the entire C language and its libraries into my brain all at once with no reference manuals. C++? I don't think I could get everything even if I had the specification and Bjarne himself standing next to me.
- adammichaelc 16y ago"These are bad schools." These are 95% of schools.
- vivekn 16y agoI am an EE student but with a lot of interest in CS . I personally am no big fan of C,despite the fact that most of the courses are in C . It is kind of cool when working on compilers or embedded systems but for anything else I would any day prefer something like Python or Haskell - the speed of development and the fun involved being the two main reasons.
- thedangler 16y agoI enjoyed it. Now i'm working for a web company and have lost touch with it. Really want to get back into it.
- dtwwtd 16y agoAt the University of Michigan, our classes are taught in C++ although the early courses teach C data structures before allowing us to use things like classes or the STL. There are a handful of classes taught using other languages (Java, Python) but for the most part we're all C/C++
- DTrejo 16y agoI had a lot of fun writing some MIPS assembly last night (I'm a sophomore in CS).