So tell me...how much am I going to hate industry?

Hello, I'm relatively new to programming but I do have a solid foundation of knowledge in java, I am learning C++, and have a basic grasp of lisp. I am also an intermediate level emacs user. I'm 18 years old, I'm about to enter a B.S. program in computer science and I've been spending my summer familiarizing myself with emacs lisp, common lisp, C++, and the GNU development tools. I've convinced myself that not all things need guis, and that linux (or BSD)--not any IDE--is the best development environment. I have a few questions to ask about college and industry, I must ask these questions to decide whether or not the industry will be unbearable or enjoyable.

1) In college or in industry, am I allowed to use my own development tools, or will I be forced to use some over-bloated ide without useful home row keyboard shortcuts and nasty point and click interfaces instead? Will I be able to use make/gdb/emacs, or will I have to use eclipse?


2) From what I've heard, the emphasis in industry seems to be on simply pumping out as much software as humanly possible, as quickly as possible. It doesn't matter what the quality of the product is, as long as it runs. Is this true? Do developers really ignore even the most crippling of bugs? I would not be surprised to hear that Microsoft does, its negligence drives users to *nix systems like linux and OSX every year. But is this negligence really so widespread? I mean, there must be some companies that place greater emphasis on fixing bugs before the software is published to avoid issues later, right? I like troubleshooting and the idea of spending time finding the most efficient, concise solution to a problem sounds interesting. The idea of slapping down some sloppy code as fast as I can is pretty off putting.



3) I love learning. Any programming language that teaches me something unique, and interesting is welcome to occupy any available vacant space in my mind. That's why I've been spending so much time trying to learn lisp this summer (Couldn't get a job, started looking too late :P). I think, however, that sometimes languages become popular just because they might have potential, and become increasingly popular just because they're already popular. Java, python, and C#, I know, are the hottest languages right now. I think that some reputedly high quality languages like common lisp, haskell, and others are cast aside when they are really quite useful. Do these languages have a place in mainstream industry, or are they totally absent from it? Is industry really a slave to fashion? I feel like the "well it's newer and popular, and newer and popular always means better," mentality drives the technology field when it's not necessarily true.


3) I find learning about low level details the most interesting. What's really interesting to me is figuring out what's going on behind the scenes in a program and an operating system. I'm definitely looking forward to learning assembler in college. My question is about C++ vs C. C++ doesn't seem to measure up to C in the eyes of some famous seasoned programmers like Torvalds and Stallman. Why is this? Is C++ really sloppier or more complex than C? I know that C++ is said to be a super set of C but I also heard that that's not exactly true. Could somebody elaborate on this? Is there still a place for C in industry beyond legacy systems? If I'd rather learn about low level things, should I learn C over C++? I'm reading C++ primer now but I ordered Dennis Ritchie's book.

Sorry for the enormous text walls :) but I just gotta know! An answer to any one or any combination of these questions is greatly appreciated. Thanks for reading, and happy hacking!
Answering for the industry (not 'software industry' but real industries - heavy, financial, telecom, energy, etc)

am I allowed to use my own development tools, or will I be forced to use some over-bloated ide without useful home row keyboard shortcuts and nasty point and click interfaces instead? Will I be able to use make/gdb/emacs, or will I have to use eclipse?

As for editors, on every C++ job I've had so far, I've used vi. Some people use emacs (including the guy sitting next to me right now). I think Eclipse is approved for use in my company, but I don't know of anyone using it. Among many thousands of developers we have, someone must be.

As for toolchain, it depends on the target platform. My jobs have all been multiplatform, so when developing on linux, I use g++/gdb/valgrind. When on aix, for example, it's xlc/dbx/purify. Whatever gets the job done.

the emphasis in industry seems to be on simply pumping out as much software as humanly possible, as quickly as possible. It doesn't matter what the quality of the product is, as long as it runs. Is this true?

Sounds like a Dilbert plot. I haven't seen that in real life. Maybe that's what all those offshore sweatshops did when outsourcing was new and wild?

I mean, there must be some companies that place greater emphasis on fixing bugs before the software is published to avoid issues later, right?

All companies are compelled to fix bugs before production, since it costs so much less, although they do it to widely varying degrees. Some companies have formal code reviews, where each line you write is discussed at a conference table by half a dozen people, whole departments devoted to unit testing, regression testing, acceptance testing, etc. Some just review by email pass-around or (what I prefer) with one of those collaborative tools. Pretty much everyone who isn't a startup has a QA department of some kind, especially in the industrial C++ world, where the price of an error may be billions of dollars or even human lives.

Always ask about code reviews, QA process, about unit, regression, and acceptance testing, and about your responsibilities in that regard, as a developer, at an interview when you're looking for jobs. (in case you don't know, you're supposed to ask questions at interviews)

C++ doesn't seem to measure up to C in the eyes of some famous seasoned programmers like Torvalds and Stallman. Why is this? Is C++ really sloppier or more complex than C?

It'd say it's a lot cleaner and a lot more disciplined than C, which works against Stallman's bazaar development mentality. It is also a lot more complex, that's true. Torvalds just likes being an ass (he also hates C when it isn't being the dumb 'portable assembler' his kernel expects)

I know that C++ is said to be a super set of C but I also heard that that's not exactly true. Could somebody elaborate on this?

It's not true. They are different languages that share common ancestry but they have been evolving in different directions (despite all the effort that's made to keep their evolution in sync). C++ was designed so that old (very old, now) C code can be compiled in with minimal modifications, which was its key to acceptance back then. It doesn't make it C++ code.

Is there still a place for C in industry beyond legacy systems

Other than in OS development, I've only used C for legacy stuff. But I am sure microcontroller programmers will chime in, too.

If I'd rather learn about low level things, should I learn C over C++?

Wait for your assembly language course. Get access to several platforms and learn their assemblers along the one you're learning. Sparc/Itanium's sliding register windows are fun.

Last edited on
Hey, cool! thanks for taking the time to respond. I only know what I hear and read, obviously having no experience in industry myself. There are a lot of pessimistic people on the internet, especially the doomsayers like Stallman in the opensource community. I have another question about C++. In terms of performance, how does it measure compared to C? The C runtime is very small, right? Isn't C++ criticized for having greater overhead than C? I admit that I don't really understand what that means. I assume it has to do with C++ using more memory than C. Also, what languages do you find yourself coding in most often?
In terms of performance, how does it measure compared to C?

C++ is always equal or faster than C, when providing identical functionality. The keyword being "identical": there are cases when additional functionality, with associated costs, is used in C++ for the sake of usability or safety, e.g. streams I/O library.
In general, the two languages solve different problems, and it's not common to have the option of using one or the other, so it's not too useful a comparison.

what languages do you find yourself coding in most often?

at current job: C++, C, Python, Fortran in that order.
Last edited on
1) It really depends on what the shop is doing. If you're in a MS oriented shop, Visual Studio will be the IDE of choice. If you're in a Java shop, then Eclipse is the IDE of choice. Our shop uses both. I do mainframe C++ development and use the vendor's Visual Studio plug-in for developing host code. Edit, compile, deploy to host, debug all with a few clicks. I would never go back to command line tools.

2) Not the case in my shop. Absolute focus on defect free code. Defects cause financial loss and unhappy customers.

3) Commercial shops use languages for which they can find easily programmers. Trying to find a programmer that knows Haskell is impossible and then how many people on staff would understand the program? C++ provides plenty of opportunity for learning. I've been programming C++ professionally for over 10 years and am still learning nuances of the language.

4) C is generally considered "closer to the machine", although I would be hard pressed to find an example of something that could be done in C that can't be done in C++ just as efficiently and in a more supportable fashion. As for C++ being a superset of C, that is true. All C constructs work in C++. Keep in mind that the early C++ compilers actually produced C code as then used a standard C compiler as an intermediate step. Today, most C compiler produce object code directly without needing to invoke a C compiler as an intermediate step.

As for efficiency, C++ is every bit efficient as C. Where C++ is sometimes criticized is for "code bloat" when using templates. i.e. instantiating a template class specialied for <typea> and again for <typeb> generates two separate classes.





Is industry really a slave to fashion? I feel like the "well it's newer and popular, and newer and popular always means better," mentality drives the technology field when it's not necessarily true.
There's basically two factors at play, here:
1. Some companies and their sales departments are trend creators. This used to be the case with IBM, and is now the case with Microsoft. Notice, for example, how PCs didn't really catch on before IBM came into the game. Likewise, many companies didn't start using managed applications until Microsoft created .NET.
2. It's easier to find people versed in a popular technology than in an obscure one.

I think that some reputedly high quality languages like common lisp, haskell, and others are cast aside when they are really quite useful. Do these languages have a place in mainstream industry
Mainstream? No.
Using an uncommon language for a project has some inherent risk, and if the possible benefits don't outweigh it, it will just not happen. This doesn't mean that these languages are never used. Just that it's not very common.

Isn't C++ criticized for having greater overhead than C?
C++ follows the "you don't pay for what you don't use" design philosophy. There isn't an inherent cost to using C++ over C. The cost only comes if you use certain facilities. However -- and this is the key part -- the cost is rarely if ever higher than what you'd have payed had you done something equivalent in C.
C++ however does have things that are not possible in C, such as strong typing, and various other things that make mistakes that are common in C code, almost non-existent in C++ code.
1) It really depends on what the shop is doing. If you're in a MS oriented shop, Visual Studio will be the IDE of choice. If you're in a Java shop, then Eclipse is the IDE of choice. Our shop uses both. I do mainframe C++ development and use the vendor's Visual Studio plug-in for developing host code. Edit, compile, deploy to host, debug all with a few clicks. I would never go back to command line tools.


But do you have a choice? I personally love emacs because it is a great editor and navigating without leaving the keyboard home row is a lot faster than using the mouse and clicking around/dragging the code to change it. Keyboard macros and emacs lisp are other benefits. I think that most ides are criticized for having terrible editors, even though they might be great in every other way. I've experimented with eclipse and visual studio, but I'm a unix guy and I'm having a much better time at learning the command line utilities than at learning the gui ones. Plus gdb integrates with emacs to form an ide. I think it's just my preferred way of doing things. Will I have the freedom to choose?
Last edited on
I personally love emacs because it is a great editor and navigating without leaving the keyboard home row is a lot faster than using the mouse and clicking around/dragging the code to change it. Keyboard macros and emacs lisp are other benefits. I think that most ides are criticized for having terrible editors, even though they might be great in every other way. I've experimented with eclipse and visual studio, but I'm a unix guy and I'm having a much better time at learning the command line utilities than at learning the gui ones. Plus gdb integrates with emacs to form an ide. I think it's just my preferred way of doing things. Will I have the freedom to choose?


What I like about using an IDE, is that when you type the ( after a function name and mouse over it, the function definition pops up; Reduces time needed to go back to a reference. Also, when you type the . or -> after a struct or class name, a drop down menu of members opens, and gives you autocomplete feature. For example say a class named car, had a member named manufacturer; Here is what I would type: car.m <enter>. When you mouse over a definition, the IDE we'll show you the definition.

Other reason I like an IDE, is that you get more and better tools for debugging.

Will I have the freedom to choose?


It probably depends. I don't think you should worry about it though. They're just tools.
Last edited on
Topic archived. No new replies allowed.