Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Half a year ago I had a look at available programming educations. I chose this one because unlike most of the choices: The majority of the courses seemed to be about something concrete and useful; the languages used are C++ and Java which are platform-independent; later courses include developing for mobile devices and a course on Android development, which seemed modern and relevant.

Now after two introductory courses we're just starting with C++, and my programming professor seems a bit weird. He's tested us on things like "why should you use constants" and "why are globals bad" in a kind of mechanical way, without much context, before teaching actual programming. His handouts use system("pause"), system("cls"), and getch() from some conio.h and iodos that are apparently ancient according to what I've read elsewhere.
I just did a task that was about printing the "ASCII letters from 32 to 255" (huh?), with an example picture showing a table with Windows' Extended ASCII - of course I got other results for 128-255 on my Arch Linux that uses Unicode, and this isn't mentioned at all. I feel that a university should be more careful about such things.

I was looking forward to learning from experts, in an academic, rigorous way (like SICP or something). I studied math for a while and every teacher and assistant there were really precise about every detail in the courses, but this is my second programming teacher that is sort of disappointing.
(EDIT: I'm not comparing programming to math, nor am I saying that programming belongs or thrives in the academic world.
I'm saying that professors I have had in my major and other subjects have been passionate, inspiring, up to date, and really picky about details in their fields; but my programming teachers have seemed sloppy and felt depressing, which didn't fit into my image of a professor at all. I totally wouldn't mind a professor using classic, timeless tools, but it seems to me as if conio, iodos et c are not simply old but actually bad practice, and that anyone who actually enjoyed programming would use something more modern.
I was apparently very wrong with these expectations and ideas, but that's what I meant to say anyway.)

Now, question: Is this what to expect from universities or Not OK, and how do I deal with it?
(EDIT: No, I'm not worried about not becoming a bearded arch ninja programmer instantly from a few courses, that's not the problem. It's both more efficient and more fun to teach yourself these things; I am doing this for the diploma. However I was still contemplating whether it could sometimes improve the learning experience for me and other students if I bring questionable things up, or if it's better to just accept whatever's being served. If there are things that the community would consider too wrong to be taught to beginners, and if there is a constructive way to raise these things without annoying the teacher. I think I know what to do now, thank you for all answers!)

More EDIT: It seems like I should have pointed out that this is not a computer science program, it's a relatively short 3 year software engineering program where you can optionally graduate after 2 years. I have another degree and have worked and done other stuff and want this diploma so that I can work with programming as soon as possible; I am not doing a 5-6 year master, I don't have these expectations of achieving some kind of überhood through this, and I am not somehow doing this instead of working. :P

share|improve this question
1  
Based on my own experience, You'll learn better, faster and cheaper studying programming on your own and getting help from forums. It's not uncommon for university syllabus to be outdated. In Russia, Pascal is still taught in some universities (though I like the language, and don't see that as entirely bad thing). –  W.K.S Jun 28 '13 at 9:43
add comment

migrated from stackoverflow.com Nov 3 '11 at 8:57

This question came from our site for professional and enthusiast programmers.

14 Answers

up vote 1 down vote accepted

I think there may be some confusion about what and why you're studying.

It appears as though you are studying an introductory computer science program. This is aimed at people with minimal experience who are learning the basics on how computers work at a low level.

It also appears that you are a semi-serious or professional programmer. You have been programming for 10 years, and are comfortable in 3 languages. It sounds like you know what you're doing at least enough to work as part of a team. Do you feel out of place in this course? Do the other students have a similar level of experience or skill as you do?

What are you intending to get out of this course?

Are you just after that 'piece of paper'? If this is the case then don't stop trying to get a job while you study. Apply for jobs, tell them you're a competent programmer and you're studying because you need the piece of paper to get a job. If they hire you then consider dropping out - once you have a professional job then you really don't need that piece of paper anymore. Accept a lower than normal wage, because it's better to be paid to learn (on the job) than to pay to learn at school - and you'll learn faster, too. After a year or two you'll be mostly up to speed, and then you can ask for a decent pay raise or you can go find yourself a another job because you'll have experience.

Or are you trying to learn something? Then stop judging your professor. Like a memorable high school teacher used to say 'SIT DOWN, AND SHUT UP.' It's almost guaranteed that the professor has immeasurably more experience and knowledge than you do and you could learn an awful lot from him. If he's going too slow for you then try to get credit for these introductory courses based on your prior learning and experience.

But are you in the right course? You could also learn a lot from the literature professor, or a history professor... not particularly relevant. Perhaps you don't want 'computer science' but instead want more practical, 'real world' skills. Try 'software engineering'. Look at other institutions for a more focused course.

Just like when you start a new job, a class or course of study can be very hard to review from the outside. You seem to be in a course that isn't giving you what you expect. Reconsider your options.

share|improve this answer
    
Uncommented downvotes - thanks for adding to the conversation. –  Kirk Broadhurst Nov 7 '11 at 0:57
    
Thank you, I have thought about this and think you're very right about these two options. The former is more true for me, and I will look for jobs while waiting to see if the courses get more interesting. It is actually a software engineering education, that I chose over computer science since I want to get up to speed sooner and learn through working. Perhaps that explains why I expected a bit more 'real world skills'. :) –  gaidal Nov 19 '11 at 9:18
    
Just a few remarks from my university past: I studied a course where we had the "programming 101" on the schedule, that part was annoyingly boring for me. But other courses were interesting (physics, mechanics, ...) so even if a lecture is boring that might not apply to the whole program and for the other parts it might be worth going through the pain. But I dropped out. Meanwhile I learned that sometimes that paper would have been beneficial even though the paper doesn't mean I'd be any better in my job (I have a nice job, good salary, ... so it's not bad ;-) ) –  johannes Nov 19 '11 at 16:14
add comment

Math and programming are totally different things. Math is science, programming is technique. In academic world, programming is something you have to know so that you could deal with the real stuff, the one that's actually interesting and matters - algorithms.

Who cares if the compiler is ancient and you use system calls? Who cares if you have Linux and not Windows? Well, the professors don't, that's for sure. And they shouldn't, really. Don't expect to become a professional programmer from courses in the academic institution. That's not what you go there for.

That's true that the compiler he's expecting you to use is ancient, and the assumption about the OS is anachronistic, and its problematic. You can raise it, and maybe it will be dealt with. But not because the course is incompatible with the industry, but rather because it causes an immediate difficulty to the students. Go find that old compiler now and have it running on your MacBook...

In general, academic studies shouldn't be wasted on learning C++ and Android, you should be learning the actual Computer Science stuff there. You won't get another chance for that. Android? Download Eclipse with the ADT and start working on it at home, like I do. Don't need school for that.

I think that it is not OK to expect technique development from the universities. Especially not the research universities. You can say that a place that only offers bachelors should be more industry-targeted, but research universities - want researchers. The professors are looking for prospective graduate students and PhD candidates, not excellent programmers. So I think you should set your level of expectations accordingly.

share|improve this answer
3  
I have one issue with your response: "In general, academic studies shouldn't be wasted on learning C++ and Android, you should be learning the actual Computer Science stuff there." -- Without knowing at least the basics one programming language, the CS stuff doesn't make sense, and is far too easy to apply the wrong way. –  Izkata Nov 3 '11 at 15:28
4  
@Martin and izkata - programming under DOS in C++ using compiler from the previous century doesn't mean you don't know programming. It just means you're using outdated tools - but if you need to implement RB trees - who cares? It's outdated for the industry, but the programs run and do what they're supposed to do - that's good enough. –  littleadv Nov 3 '11 at 16:58
2  
+1 well said! the university/college should focus on CS rather than some buzzword of today. Back then it was PDP-11/UNIX, today it is Android, tomorrow it will be something else - But pop() and push() will still be recognized with the stack and the NULL pointer will still need to be checked for nullity. –  yati sagade Nov 3 '11 at 19:27
3  
@littleadv - the OP wrote "that seems ancient according to what I've read." which suggests to me that he had to look elsewhere than the relevant handouts to find out that this is obsolete and non-portable. Sure, many if not all compilers have extra non-standard libraries, but if you're taught those without being told they're non-standard I think that's bad - and that counts for new stuff as well as old, and even for C++11 stuff since for the moment C++03 is the most recent widely and fully supported standard. –  Steve314 Nov 3 '11 at 20:19
3  
@littleadv - I never claimed the OP was told conio.h is standard - I suggested he may not have been told it was non-standard, and even then said "If they make it clear which are the non-portable tricks, that's probably OK.". The way I was taught even basic science is that you use standard terms, or if you must use non-standard terms, you define what they mean. In my school science lessons, even using centimetres was against the rules - they're not SI units. Using non-standard libraries seems, to me, to be no different. The meaning of code in computer science should be unambiguous. –  Steve314 Nov 3 '11 at 21:40
show 14 more comments

Computer science is to programming what physics is to carpentry.

If you want to become a carpenter, studying physics is not going to make it happen. It will teach you a lot of interesting things, that you might be able to apply to your work, but it won't teach you how to be a good carpenter. For that, you will have to learn the craft of carpentry.

Similarly, if you want to become a good programmer, you will have to learn the craft of programming. Unfortunately, there's no institution to issue certification of any sorts. So basically, this is something you will have to do on your own, with whatever helping people you might be able to find. For you this means repetition and reflection. Write a lot of code and then come back to look at it. Also take time to read other people's code. Consider participating in open source projects.

Universities don't care much for programming and even less for details that will change within the next few years. What you see at your school is that they have picked some programming environment (a bad one, but that's not so important) and now show it to you, so that they will have a reference frame wherein they can teach you various programming techniques. One can argue, that the reference frame is poor and that even the language is a weird choice. From their perspective it probably doesn't matter, because it's quite arbitrarily chosen.

share|improve this answer
2  
How about Physics is to Engineering? Programmers should understand CS principles to apply them when designing programs they way an engineer needs to understand physics to design buildings, airplanes and chemical processes. –  Jay Elston Nov 3 '11 at 14:36
3  
@JayElston: Physics is to engineering, what Computer science is to software engineering, which comprises analysis, design, planning, implementation, QA, etc. Programming itself is really more the art of getting the material to do what you want it to do, whereas engineering starts at figuring out what it is that you actually want to do. –  back2dos Nov 3 '11 at 14:52
    
I still like one of my professors' quotes "Engineering is the art of applying science to solve problems". –  Chris O Nov 3 '11 at 19:44
1  
@Chris: Perhaps, then, science is the art of creating new problems. –  JasonTrue Nov 4 '11 at 1:19
    
@JasonTrue: Well, one could argue that science is the art of creating better problems ;) –  back2dos Nov 4 '11 at 15:03
add comment

There's nothing wrong with learning 'DOS-style'. I'm sure many of the old-timers here started out on DOS, or even with earlier operating sytems, writing line-based programs, and have adjusted just fine. The computing world changes so quickly that I wouldnt get hung up on specifics such as which library was used for what.

Actually, I suspect the reason we have a world full of programmers who can tell you what dependency injection is, but struggle to answer FizzBuzz, is because a lot of programmers dont spend much time at that very basic level.

It sounds like this is an introduction to programming, so essentually, dont worry about it. Learn the basics, and you'll do fine. If you're interested in other platforms, explore them on your own. Thats the great thing about programming.

share|improve this answer
add comment

How you can deal with it? Download programming e-books or streaming videos, try the examples by yourself. Do not depend on your professors. Programming is highly learned on your own.

share|improve this answer
1  
Programming is like playing the piano. You need a master to teach you how to do things, and a lot of practice to do them well. I believe there is very few autodidact world famous pianists. –  user1249 Nov 3 '11 at 19:53
5  
What a strange analogy, there are certainly many highly skilled autodidact programmers. –  Slomojo Nov 3 '11 at 23:34
add comment

Well lot of universities have crappy programming professors. I went to one of the top grad schools in my country and pretty much learned squat in programming. I guess most unis are like that cause the really good programmers opt for better paying jobs(not teaching). You should take up a small project and try to code it yourself. You can get tips from a lot of forums such as this one. That might be a better way to learn in the long run.

share|improve this answer
    
Good advice, of course, I totally agree. It's just the diploma... :) –  gaidal Nov 3 '11 at 9:22
    
@gaidal : Yup! that's what i got out of grad school - the brand name :P (though i'd hoped for much much more when i joined) –  Jan S Nov 3 '11 at 10:30
2  
University is not about learning to program, but about learning the concepts of programming languages and, more in general, of computer science. When I had to do my project for operating systems at university, I was told: it is going to be in C, the book is in the library, go get the book and learn it. Programming is about practice and it is not the task of the university to teach you that. –  Giorgio Nov 3 '11 at 21:36
1  
About better paid jobs that's true. A friend of mine who is teaching at the university once complained: "We teach them how to program and then they earn more than we do, it should be the other way around!" –  Giorgio Nov 7 '11 at 21:33
add comment

I think that University should teach abstract concepts of programming languages, algorithms, etc and should not be the place where you learn programming: programming is a very practical activity and you can only learn it by doing.

During my study I learnt the basics of programming in Pascal, then I had one project in C (we had to learn the language by ourselves) and then I had a course on programming language concepts (procedural, object-oriented, functional, logic). It was folklore that on MSDOS you have conio.h or far pointers, which you do not have on a UNIX system. This was the stuff that we students would discuss over a beer, it was not something you discuss during the classes because it was not so important. University teaching focuses on the abstract, general knowledge and avoids going into the details: examples and details are presented just to illustrate the general stuff.

The example you gave about ASCII versus Unicode and the MSDOS conio.h library means just that every programming environment has its particular way of doing and organizing stuff. If you program in C++ on Visual Studio you will have to use other libraries, some of which are not found, e.g., on Linux. So if the course were in Windows 7 / Visual Studio some people might complain that it would be better to do it on Linux / GCC. But, IMO, this is not the point.

So, I think you should try not to get distracted by the details and concentrate on the general concepts that are being covered by the course. For example, that in most programming languages you will need some library to implement console I/O and that, given a programming environment, you will have to solve your problem with the tools you have at hand. Maybe this sounds quite obvious to you and you have the impression you're not really learning something because you already have some previous knowledge (this can happen) but I did not get the impression that you are attending a bad course.

share|improve this answer
    
Thank you, I will keep in mind then that you don't think it's enough to say it's a bad course. On a side-note, I didn't mean it ought to be in Linux, just that he could make an effort to inform students about the differences and that there is a standard. –  gaidal Nov 4 '11 at 1:32
    
I agree with you that it would be a good idea to inform about other systems. That also depends on the experience of the teacher: they might feel uncomfortable speaking about an environment they are not familiar with. E.g., I am at home with Windows and Linux, but I would avoid MacOS because, even it is may be a very cool OS, I have never used it. Maybe you could try and ask if they can give a short comparison between different C++ environments: just a few examples to get a feeling of what can be different and what remains the same. E.g. you could play with sizeof on MSDOS and Linux. –  Giorgio Nov 4 '11 at 6:13
add comment

The universities are giving the foundations. Once it's strong, you can build skyscrapers on top of it.I have learned BASIC, C and C++ during my college days. Later when I did project in Visual C++, I believed it's an entirely different world. Later I realized the difference between Framework and Languages.

Choose a right university where they give the focused development of your desired computing field. Which can help you later in your career.

share|improve this answer
add comment

Printouts full of system(""); is actually a pretty damn good thing! I'm shocked that people don't know anything about these functions nowadays.

system("pause"), and you get rid of all gotchas of getX functions. system("cls"), and you just saved one page of code. system("mkdir foo") and you just saved 2 pages of buffer allocations, path splits, _makepath_ss, 256 path limits, ton of error exits and so on.

Moreover the code is so simple a monkey will understand it.

 if(!system("mkdir foo"))
     //booo and exit`

The school of polymorphic perversions is what should be banned by law.

P.S.: Moreover, with all due respect, I'm having hard time accepting that people are taught C++ with exceptions and virtual everything as a GOOD THING, because it has more gotchas and landmines than you can imagine, and even Bjarne Stroustrup evangelizes exceptions as something super easy and safe, while in reality they are a nuclear landmine.

See analysis about Misra-C++ and JSF-C++. And http://blogs.msdn.com/b/oldnewthing/archive/2005/01/14/352949.aspx. I'm too lazy to find all the remaining articles today.

With all that being said, I'm c++ developer and I do enjoy a lot of features and the language as a whole.

share|improve this answer
1  
Not sure I'd agree that implicitly encouraging inexperienced developers to leap straight to system without any real idea of the gotchas is a good idea... –  deworde Nov 4 '11 at 9:03
    
@deworde: It's the same thing you write in a console, I don't think you can make stuff less error prone and safe. –  Coder Nov 5 '11 at 9:29
    
Yes, but when you write it in a console, you know (for example) where you are, who you're running as, what kind of machine you're running against and most importantly, WHY YOU'RE DOING IT. The program isn't necessarily aware of any of these things, and someone running the executable isn't going to know that they have to check them before running it. –  deworde Nov 8 '11 at 14:10
    
@deworde: Not exactly, command EraseFile will still inherit the process permissions, so it's equally easy to mess up with either command. –  Coder Nov 8 '11 at 17:00
add comment

My suggestion may sound out there, but hear me out... Switch majors.

In my experience in academia, the Computer Science major was a very low-level look at what makes computers tick. You started with a basic primer in C++ to make sure you know what a program was, and the basics of the memory and computation behind the program, and then you learned assembly, OS concepts, electrical engineering, digital design, etc etc. You get this degree and look for work with NVidia or AMD, or Lockheed; somewhere where they're making new hardware, which needs someone who can understand that hardware on a low-enough level to write the drivers and control software.

It sounds like what you want is a course of study that, at my university, was called Management of Information Systems. That's the course I followed; it taught programming in Java, VB.NET, C#, and some PHP and other web scripting along the way. It also required calculus (but not to the same degree as CS), accounting, finance, stats, business communication, O-O A&D, database design, and systems analysis. I got a BBA instead of a BS, and I had the basic tools to start work as a Windows or Web software developer.

What the "Computer Science" major prepares you to do depends highly on which university is offering it. It sounds like you're on an early path to get a very anachronistic, low-level look at computers that doesn't sound like what you're after out of your education. I urge you to look around in the university and find a course of study that's more focused on the type of computer work you'll want to get into after school.

No matter what, your course of study is going to start at very basic, "console-level" program writing. The language doesn't matter; what they're teaching you is basic procedural programming; how to think in small enough steps that the computer can follow you from step to step (because the computer takes nothing for granted, and can't follow most of a human's leaps in logic). From there, you will progress to object-oriented programming (instead of having one long function that does everything, it's much more maintainable to have several smaller code "objects", which represent the state and logic of real-world objects), then to event-driven programming ("Don't call us, we'll call you"; your program basically starts up, tells the OS to set up your initial graphic UI, and then sits and waits for the OS to pass in user input via a message loop), etc etc.

share|improve this answer
    
Thank you, yes I'll consider that. If I feel it's going in the wrong direction I can change later, basic courses should be compatible between universes. –  gaidal Nov 4 '11 at 1:41
    
Careful with that assumption; I changed majors from CS to MIS, and none of the math I'd already taken transferred because the business school had a completely separate math track. English, sciences, humanities, yeah that transferred. –  KeithS Mar 8 '12 at 18:51
add comment

Computer Science courses will not teach you programming. This is a walk in the park compared to some of the programming I've done on my CS course.

The fundamental problem with this, in my experience, is that there's pretty much nowhere that will teach you programming at an equivalent level, so you have no choice whatsoever.

share|improve this answer
add comment

I thought a lot of the answers to this question were disappointing. They went back to the tired old argument about CS vs Programming etc. That may be so, but it sounds to me like the course the OP is on isn't teaching either.

I was in the situation of having already worked as a programmer, and studied quite a bit by myself, before studying CS part-time at college. I shopped around carefully, but generally found the curriculum to be a waste of time. Also they wouldn't let me skip courses despite already having professional experience in the area.

In my experience a significant proportion of professors are pretty lazy and using an outdated curriculum. Honestly it sounds like you are wasting your time. I question even whether completing the diploma will help you find a job.

I doubt you can do much to change things about your course. You can either supplement it with study by yourself. Or just forget the whole thing, and study CS independently, and do some industry certifications as well.

I should add that I have no idea about the value of the diploma in your country's job market. If the diploma itself is valuable despite the content, then you may just have to put up with a curriculum that is somewhat lacking.

share|improve this answer
    
Didn't see this before. I'm glad to see someone say exactly what I was feeling about some answers (your first paragraph)! Yes the teaching is rather useless, I don't attend the classes anymore but just turn in the programs I need to write. I do it my own way (which is usually pretty bad, coming from CL to C++), encounter lots of things not in the curriculum, and ask programmer friends rather than the professor for advice. This way it's actually kind of fun. Still hope I can find a job before graduating though. –  gaidal Dec 2 '11 at 6:24
add comment

They have to cater to the students. Most students can't program. So they're not pushed to go technical there.

They have their own specialised areas of research too, but they're not teaching that. And anyhow many researchers are not good teachers anyway, so you could consider yourself lucky if they're teaching stuff you already know!

Anyhow, you don't seem to know what computer science is. It's not about what's practical for industry.

share|improve this answer
add comment

I would ask (and then insist) to return your assignments in standard c++. This is entirely reasonable since you are unable to complete the assignments otherwise.

As for the bad style; there will inevitably be some of this to begin with. Learning to use the standard io library properly requires quite a few advanced c++ features, in particular templates and iterators. I can see why a lecturer would get you using very simple io functions to start with. I wouldn't be afraid to ask about this though, it shows enthusiasm and a bit of light in your eyes. Your lecturer should be able to weave your question into a future lecture where you (hopefully) put right your early exercises.

I would leave it at that though. Even though c++ can be a platform independent language, it frequently isn't. Learning some Windows system functions is not a bad thing, particularly if you then train yourself into doing it by the standard. You will at some point come across conio.h when looking at other peoples code - and its good to know what it does.

share|improve this answer
8  
no, you are given tools to do the job, and it's your job to use those tools. If you have a job where all you have is a 15 year old XT running CP/M, demanding they accept your 64 bit Windows 7 code isn't going to work either, best get used to that as early as possible. –  jwenting Nov 3 '11 at 11:45
2  
@Ramhound A university should make it possible to complete the course without having to purchase expensive equipment (such as Windows Operating system). Its prejudicial. –  Tom Nov 3 '11 at 13:51
3  
@Tom, If I were teaching Photoshop I would expect you to buy Photoshop (which is very expensive) and I'd expect you to buy textbooks which are expensive, I don't see where this is different. And I'll bet there are lots of computers on campus he could use for the task without buying Windows (which frankly anyone studying CS should probably have both anyway, you never know where you'll end up, people programming the in the Microsoft stack of products don't tend to use Linux.) –  HLGEM Nov 3 '11 at 15:49
3  
@Ramhound Even if the professor hasn't explicitly said why he's using simplified dos based IO routines we can probably make a correct guess. As Tom mentioned C++'s io routines are relatively complex so hiding detail isn't unreasonable in an intro level course. The decision to use a windows based platform specific library instead of a *nix based one almost certainly comes down to the assumptions that most students are using windows not *nix, and that more windows users would struggle getting started with *nix than vice versa. –  Dan Neely Nov 3 '11 at 17:58
4  
@gaidal - rules are there for a reason. If you start working somewhere and decide that instead of proprietary library you're going to use standard because "standards are there for a reason" - you'll find yourself unemployed really quickly. Take this course as a coding standards compliance exercise. You're not going to like those always. –  littleadv Nov 4 '11 at 5:35
show 9 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.