Learning on the Battlefield

One must really want to become a great developer to invest so much energy in such a small, meaningless part one’s life.

Anyone here ever considered what’s the cost?

My view resides with those who see college as a filter…
(I agree with the ‘research’ aspects as well,
but I’m not hiring the research folks for what I need).

If you are developing some software and dont know what the head of a queue is, then you need to learn the terminology.

If you went to school, but didn’t ‘succeed’ well enough to graduate,
then you’re fighting the establishment too much, or you’re not able to
learn stuff, or you have no discipline.

If you never went to school, you could still know the basics, could still learn stuff, and still have discipline. I’ve hired and worked with such folks with great success… but not often.

You know, for some reason I thought you were advocating a career in the military as a programmer…

I can learn from university what I can not learn from the “battlefield”.

I couldn’t agree more that the only way to really learn is by doing. And failing. Failure is the ONLY real teacher. I think that R. Buckminster Fuller once said that “The purpose of Engineering is to fail as quickly and spectacularly as possible”.

I just came back from a training seminar. I “won” enough software books to fill almost a linear foot of shelf space. I won’t read them. I may, just may, refer to them if I run into a problem. If I want to learn something in a new language, programming paradigm or methodology, the best I can do is read enough about it to just dive into it and start working. I am not afraid to throw away code that is not beautiful. I have written less code overall by throwing away already written code than I would “save” by patching poor code with more poor code.

“Just Do It!” isn’t just for sneakers.

I went to school for Economics and Drinking.

Been working as a programmer since I was 15, though. Persistence and determination pays off.

“Just get out there and wing it” is somewhat contradictory to another recent post you made http://worsethanfailure.com/Articles/Guest_Article_0x3a__Our_Dirty_Little_Secret.aspx

Perhaps I’m fortunate that my lecturers actually worked for software companies so they knew what was actually useful. Granted that real world experience is what counts, but having a guide was important.

I have to say that you are right Jeff. Learn to do by doing is extremely important for a programmer.

I was taught through a college where the classes were designed to teach us through code. Instead of simply learning advanced theories like binary trees in a classroom, we coded it. In order to code it, we had to learn it. Not only that, but we had to do a large percentage of our class work in groups. This brought in the social requirements of working as a team.

When I finished school, I came to work with an excellent ability to learn and adapt. I am not coding in a language that I learned in school and I was able to start coding the second day of work without any difficulty because I already learned multiple languages in the classroom. Our classes forced us to work and learn as teams in many different situations, coding many different types of problems and languages. You learn as a team and you excel as a team.

I have yet to find a single University where this method of learning is used. I may not have a degree, but in many ways, my education far surpasses anything taught in the universities I have looked into.

When hiring Software Engineers I look for a CS or IS degree. No degree, no job. Next I look at personality and social skills. If I don’t think they can fit in with me and my team then no job. Finally I look at experience (I include certifications in this category) and compare that with the position’s requirements, salary level and the expected learning curve. I am much more flexible on experience since I know that with the degree they already have the basic skills they need to do well in the work place and it is just a matter of good management and mentoring (i.e. this goes back to personality and social skills) to bring out the best in them.

Absolutely agree with you.

At this time I’m 17 years old, student of Moscow Aviation Institute, and I already work as programmer (part-time).

Dunno about US, but here in Russia higher education decent only in theoretical fields. IT classes frozen in time, in end of eighties probably :). We study ancient artifacts like FORTRAN and pascal :).

Most of graduates don’t have a clue about where to start.

Conclusion: you can not taught one how to code, one should learn it. I mean ‘If you want to learn programming, you should program’

Most of people think it’s hard, but it’s hard only without passion.

Sorry for my poor English :).

while i understand the need to get on the battlefield (a poor comparison im my opinion - i hardly think my work has anything to do with a war mindset), there’s nothing wrong with a little bootstrapping. read relevant journals and books. get certified. keep a project idea journal.

you’ll be surprised how far a little ingenuity will get you.

I have to agree with both;

I am sure most places have the self taught person who “wrote Pascal while you were in diapers” and could care less about that “extensibiwhatis” mumbo jumbo. This is the way I have always done it.

And then there is the old straw about the recent PhD Graduate that thought he was doing a great job making a database schema normalized to the umpteenth degree in Oracle, when the requirements called for about 4kbytes of data persistence that could have been put in XML…

Don’t neglect one for the other, but then I guess that could be applied to many things in life…

Hey Jeff!

Thanks for sharing with us these ideas. If I can add my 2 cents, I wrote a post (a while back) about tips on how to become a valuable software engineer (programmer, developer, etc.). Hopefully it can help students and current professional developers. Here’s the link: http://www.brianonsoftware.com/2007/03/06/10-tips-to-become-a-valuable-software-professional/

Thanks!

P.S. What’s going to take to hear you on DotNetRocks one of these days? :wink:

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

Sadly Phil, this is the attitude that most people take when hiring their employees.

What separates the CS or IS degree holders from college diploma holders? A piece of paper.

I’ve heard of only one job interview where the ability to learn was one of the things tested. They sat the guy down in front of a computer, gave him a book about the company’s proprietary programming language and gave him one hour to code a task in that language.

This is what separates the men from the boys. When you can sit down in front of a computer, learn a new language, analyze the problem given, and code a solution for that problem in one hour, you are a programmer. No piece of paper (a degree or diploma) will ever tell an employer if a person can learn and adapt. The only thing a degree or diploma can tell you is that the person can memorize facts for an exam.

You simply can’t beat on the job experience. Even working with teachers who don’t code regularly get lost in the business of theory. Don’t get me wrong theory is good to know and can be extremely beneficial but I’ve noticed many teachers have lost their edge in terms of a ‘working professional’

The best teacher is your peer who is better than you and who writes inspiring code and shows you the way.

Hobby programming is nice but you won’t lose sleep if you never get around to finishing your project and how many of us never finish?

I don’t care how, but you must get your foot in the door somewhere even if the pay is shit and get to coding. And when you hit your first wall of not knowing how to program something your boss asks for…well only the strong survive…and if you’re a survivor then you are a programmer. Because to program is to survive.

-R

There are two kinds of programmers: Those with a degree and those without one. They don’t do the same work. For the stuff we do where I work, we would quite simply not consider somebody without a CS degree from a prestigious university.

The CS degree gives you the theory. Work experience gives you knowledge of APIs and experience. For some programming jobs, you only need to latter two. For some, you need all of them.

cwiz wrote:
We study ancient artifacts like FORTRAN and pascal :).

This is a perfect example of somebody who does not yet understand. You don’t study a language. You study concepts. The language often does not matter at all. In fact, it’s probably a good thing you see a bit of FORTRAN and Pascal (or Oberon, or Eiffel) to learn about the history of procedural languages. That tells you a lot about why we do the things we do the way we do them. In the same vein, you’ll proably not learn (much) about functional programming or about logic programming if you aren’t forced to do so when getting your CS degree.

I find that academic research runs 5-30+ years ahead of industry. Even stuff like relational databases took a decade to move from some “ivory tower” paper to a commercial product (paper in 1969 to the product that became Oracle in 1978). Now, SQL and relational databases are everywhere. It wasn’t always that way. Our profession has a very short memory and part of that is because of the “use and discard” mentality, where folks over 30 tend to be discriminated against. Functional programming? That is ivory tower academic stuff that is only starting to become known outside of CS departments - more than 30 years after being “discovered.”

Do you learn how to use things like “source code control” in school? Most likely not. Less than half the companies I have worked for as a developer in the past decade have used source code control. Why learn something that half the companies in the US won’t use?

Theory is important for understanding how one can get better. It isn’t a replacement for actually going out and “doing it.”

Don’t confuse “talent” with “skill.” When describing the difference, I use a sloping line, of the “y = ax+b” sort. Talent increases the slope of the line, while skill represents the y-axis. A talented person who practices not at all will have a very low skill (y-axis measure), while someone who has low talent, but practices very vigorously will end up with a higher skill level than the talented person. Learning actually has a second order component where the more you learn, the faster you learn more - like an interest rate. Richard Hamming gave a speech on this two decades ago, and it is still true today:
http://www.cs.virginia.edu/~robins/YouAndYourResearch.pdf

As an analogy, I like to point to the club band scene. I play guitar (not in front of others), so I can tell who has better chops than another. You can see who has had “classical” training almost immediately. There is an upper level that self-trained guitarists can reach, while one who has had formal training can reach much higher levels of skill.

I agree with Jeff in my case I specialized in networking but by turns in life I ended up as a System Developer and yes sometimes the lack of experience can get you in tight spots but if you get mentored and you prepare yourself on the “fly” you can end succesfull intern or employee. That both of them it has been my case.