Learning on the Battlefield

I would tend to agree with this whole battlefield analogy. From my experiences from college then the past 7+ years in the field, I feel I didn’t become an effected developer until several years after leaving college. I even wrote about it on my blog 9http://www.billrowell.com/2007/03/08/what-did-you-really-learn-in-college/) a while back, reflecting about what I had really learned.

@Phil: “When hiring Software Engineers I look for a CS or IS degree. No degree, no job.”

And that’s why you miss out on some really good programmers working for you.

The best programmer I’ve ever known was a Russian immigrant who Americanized his name. He had a Soviet high school education, and no higher learning whatsoever. He was a legend at a very large corporation in Houston, so it wasn’t just me that thought he was good.

I myself don’t have a CS/IS degree (no college degree at all, actually - I entered the military right after high school), and I’ve been programming since 1986. Since I’ve sold commercially (including a library with source for other developers which sold more than 10K copies worldwide), I must do OK as well. I work primarily in Delphi, but also work in C#, C++, and ASM.

I actually have a pretty good reputation among Delphi programmers, and the company I currently work for typically requires a degree. They actually invented a new position in order to be able to get me here; the new position required the degree or X years of experience as an equivalent. If they were willing to go to those lengths so I could work for them, I must do OK.

When I was interviewing programmers for the above-mentioned large Houston corporation, I looked at the resumes for experience first, and then education. I did a phone screening looking for knowledge levels and an indication of their personality; those who were obviously not knowledgeable enough (like the guy who coughed a couple of times before answering each question in order to hide the sound of his keyboard as he googled the answer) or seemed a poor fit with the people they’d be working with, didn’t get an in-person interview. Neither did the gentleman who, about halfway through the 30 minute interview, flushed the toilet. :slight_smile:

I’ve had interesting experiences with college-educated people. I’ve met some who were really, really intelligent. I’ve also met people with Masters degrees who didn’t have the common sense you’d expect from a new teenager. I watched “Are You Smarter Than A 5-Year Old” for a couple of minutes last night, and saw a 3.5 GPA college graduate who thought that the sentence “In Oklahoma, Oprah met our ostrich Ozzie.” only contained one proper noun (Oklahoma), and that Oprah and Ozzie were pronouns. The 10-year old she was paired with at the time saved her. :slight_smile: How much is that 3.5 GPA worth now, and what does her college degree prove?

It’s the underlying intelligence that’s most important, not the degree. If the smarts are there, they can learn now what they need to and didn’t get to go to college to learn.

Reviewing what I wrote above, I’d like to clarify one thing:

I have no problem with the guy who was using Google to find answers; that’s actually good. The problem was that the questions he was looking for answers to were basic knowledge that every Delphi programmer knows; if they didn’t, they’d never get anything done. We hadn’t even gotten to any of the tougher questions.

But the courseware itself? Largely irrelevant in our field.

Depends on what you do. I was actually surprised how much I was able to use, for example when writing search engines or compilers.

As I said, some jobs require it, some don’t.

I think the main issue is that those of you who never got a cs degree actually don’t really understand what is being thaught there.

For example, Paul wrote:
“One thing that I don’t think has been mentioned enough is that CS courses tend to favour Open Source software, which means zero in terms of candidate suitability in a Microsoft house.”

I think that is a perfect example of somebody who simply does not understand what students actually learn. They don’t learn “open source software,” they don’t learn specific examples (“instances” :slight_smile: of technology. they learn concepts. It does not matter one bit to Microsoft whether they learned how to design and write, say, compilers using open source, or whether they used closed source to learn it. The important part is that they’ve learned it.

Anyway, my point is this: Most of the people here claiming that CS degrees are useless or antiquated or that experience gives you everything you get during a CS degree probably have no idea what students actually learn when they get CS degrees.

Any paper qualifications (degree included) only tells you the minimum of what the person has/could achieve. That means, it only tell this person can do/know at least this and this and this…

To know what’s the most the person can achieve, you still need to probe for some more; ie. interviews…

BTW, having basics such as bachelor degree helps in understanding the concepts along the way, along with having more broad understanding of the field. If the person in question dont use that to advantage, he/she can easily lose to someone who works harder to gain the knowledge. No suprises here.

In other words, as other poster have noted, there are many path to wisdom. Pick yours.

See Neumont University!!

Hi Jeff,

Good stuff, as usual. I did have some comments regarding the following quote:

“Higher education is still worthwhile because it teaches you how to talk to people. With a good educational background, you’ll learn how to read effectively, how to write coherently, and how to think critically amongst your peers.”

You can read my comments here:

http://tod1d.net/blogs/tech/archive/2007/04/04/Software-Development-University-of-Hard-Knocks.aspx

“With a good educational background, you’ll learn how to read effectively, how to write coherently, and how to think critically amongst your peers.”

Have you spoken to a college grad lately? I tend to disagree with the above statement.

hi jeff
I really like wat u said. Can u provide a little more details for a starter like me who only knows how to use loops in C language to write 10-20 line programs in compiler. I am currently in first year computer science Indian college, where only aim set by uneducated teachers is to clear all the exams and have above 75% attendance.
I can study from books, I can work hard. And I can also force my close uncle to allow me entry into his software compay. I am craving for success, I am getting sick.
The only thing that scares me about leaving college is

  1. I might miss the basic knowledge (as people say).
  2. I will get involved in same kind of work in the office and will be deprived of core knowledge to evolve as a real software creator.(I am not going to be mediocre).
  3. I have given a huge money as donation,(thats the only way in India) so failure will literally kill me.

I beg for your sincere and may be long advice.

The thing is complicated, but the thruth is that experience play a very important role.

And sometimes is better than a degree…

Buy the way, the article is very good…

Regardas,

thank you sir jeff

Computing is more and more like speaking; Necessary to get a lot of things done. Contributions are made on different technical levels. Just as effective human communication is done by battlefield commanders and movie scriptwriters very differently; Different computer users and programmers will make contributions very differently.

Some artists will start with Photoshop, move through scripting and invent something new from that vantage point. Others will follow in the path of Hoare and Knuth and invent algorithms. Computing is becoming multicultural in it’s own techie way.

The Warren Buffets and Mozarts of the future will be using computer languages and other tools. Just not necessarily the same languages and tools.

So there are no one or two right backgrounds.

Apparently, those who didn’t go to college insist that the things being taught in universities are useless in the battlefield. I think getting a degree (at least bachelor’s) then spend the rest of your life in the battlefield is the best way to go. If you go straight to the battlefield without a degree, you will end up trying to convince your peers that a degree is unnecessary until one day, you finally realize that a degree is important and you drop everything in order to get one.

University is an absolute waste of time and money. You learn outdated ways of writing software, from people who have worked mostly on their own and in university their entire life. I had a lecturer teaching about working on team projects when he had never worked professionally in a team. On another topic, the lecturer who taught data structures and algorithms was a biologist associate professor who had never written much code. And this is coming from one of the famed Group of 8 universities. I was a tutor while studying and learnt that there is not only no incentive for teaching students, lecturers specifically do not want to teach students! The reason being they get paid for doing research and publishing papers, not to teach. And you wonder why there’s more and more dodgy developers…

Learning from the battlefield from day 1 is the way to go. Nothing beats practical experience and learning from your mistakes.

My computer science degree was not from one of the top universities and I found it all rather easy. Fortunately, when I graduated I was able to get into a reasonable job which provided a stepping stone into my second job. That’s the one where I started to improve and so on.

I think my degree has helped in that, it covered a lot of different topics. I learned about hardware architecture, electronics, lots of different programming languages, different operating systems, networking issues etc. This gives a well rounded IT professional who knows around the IT area. I think focussing completely and solely on programming is fine but misses some important stuff that could be more difficult to learn in industry.

I do agree that getting internships and getting involved in open-source is good.

You seem to be using software development and programming interchangably - "software development only teaches you how to talk to your computer. Higher education is still worthwhile because it teaches you how to talk to people."
Programming only teaches you how to talk to your computer; to be a good developer, you’d better know how to talk to people as well. From that point of view, one of the major goals of modern education (socialization) dovetails nicely with one of the things that will separate a good software developer from the programmer in the corner cubicle with the fluorescent bulbs overhead turned off.

The only thing that I would add is try to find a job/internship where you will be challenged and learn. This is coming from personal experience where from the job aspect I haven’t learned anything that I didn’t know 3 years ago, but at the same time it allows me venues to learn the different languages without having a high outlay of money.

As for whether a person has a degree or not I really don’t think that should be a deciding factor. I majored in IT with a Minor in Comp Sci and honestly I didn’t learn to much except for how to drink and work within a group more efficiently. I don’t mean to bring up FizzBuzz again, but things like that I think are more beneficial to hiring then using if you have a degree you get looked at if you don’t you are SOL. There are plenty of programmers who are great programmers and developers who have no college and on the other side there are some people who have degrees but can’t program a Hello World application. Personally I think interview as many as you can without making decisions on if they have a degree are not, that way you have a better chance of getting the best fit.

@LKM
That is all so true. Once you learn the concepts languages are just syntax. If you get a person who has a strong understanding of software development concepts I would be willing to place money that you could have them play around with a language and within a short time that person would become productive in a sense that they are able to build small if not large applications in the language.

Ah yes, the battlefield, where we wage war against the 1000s of lines of code in the applications we maintain or create. The debugger is my friend and exceptions are my enemies. Send in the Asserts followed by the Debug.TraceLines. Unhandled exception, have no fear, stack dump is here.

CS Degree required? Maybe, it will get you in the door, but university in general is overrated. I don’t have A CS degree, although I have an engineering degree. I took a few CS classes, have 40 credits toward CS degree, but I doubt that I will ever formally get one. Real experience counts much more.

I think to be a good programmer you have to be smart and probably have an above average intelligence. You have to know how to solve problems that are sometimes complex in nature. Handling pressure is requied as well, because when you don’t know what your doing and trying to get something to work, it will be a pressure filled situation.

So, programmers don’t know what we are doing? Oh yeah, because many times you will be in the dark, coming up with a solution. Keeping with Jeff’s military theme, Adapt, Improvise, Overcome.

Start with simple small programs or chunks or program code and then move to more to complex systems.

Also, one last thing, don’t just write code, debug it as well. Test it, beat on it, performance test it, measure its complexity. This will help in the understanding or your code and others.

I have found (in my admittedly little field experience) that there is a distinct difference between university taught programmers and “I just started doing it” programmers. That difference is knowledge of basic underlying principles. The reasons why you would use a for loop in one instance and a while loop in the other. How to solve the basic building block problems and how to deduce the more elegant solution from the vast array of possibilities. No “How to learn insert language in 24 hours” will teach that sufficiently.

I have seen “real world” programmers who don’t know, and really don’t care because what they do “works”. It’s ugly, and brittle but it works. I argue that even though lives aren’t lost (most of the time) the reputation of the software industry is tarnished by things that “just work”.

Certainly you cannot learn to program by just studying the textbook, no more than you can do any field of engineering. But that does not preclude learning the basics before working with larger problems.