"Things I learned about Software while NOT in College" by Scott Reynolds

Published Mon, Jul 23 2007 6:51 | William

As usual, Scott creates a great topic and has great insights:

 "
  1. People talk a better game than they play - don't get too caught up in the latest and greatest, or if you don't speak patterns, or if you never programmed a C64, because at the end of the day everyone does what they need to do to keep getting paid, everyone has written and continues to write hacky code, and everyone could stand to learn a new trick or two.
  2. When you catch yourself saying "this will only be a problem if x happens, but the likelyhood of x happening is so low we'll never see it" you're gonna want to go ahead and reevaluate what you just did, and do it better.  I once said that about some number generating scheme that was hacked together.  Day ONE of the system going live there was a collision.
  3. The next version of technology x is going to make what you are currently doing easier/faster/more secure/more elegant.  The release after that will do it again, and the effect is multiplicative rather than additive.  See: Generics.  You have a job to do today, so do it with the tools available.  Waiting is folly."

 

With respect to #1, I agree but not exactly.  I didn't start out as a Computer Science major. By the time I took any > entry level courses, I had already earned my Master's degree and was about 8 years older than most of my counterparts.  I did more growing up in my 4 years in college than I did all of my life before that (a pattern which seems to repeat itself) so I had a slightly different perspective. When I started, I spotted this guy who was about 10 years older than me who was on the 20 year plan.  He was really strange looking with poor hygeine and drove a Pacer.  But he had a killer notebook (and this was when that was impressive) and talked a killer game.  I was in a group with him and saw that no matter what people recommended, he'd start talking about Assembly language stuff that negated it.  He made me very suspicious.  When it was time for him to do his part, he'd never have his stuff done and have some speil about reading registers and how he spotted issues with the compiler and blah blah blah.  He then took it upon himself to do all this crap no one ever mentioned and that we weren't asked to do. When we called him on it, he would get all arrogant and talk about how we couldn't see the big picture and didn't get it or whatever. The next semster I had a course again with him, this time instead of C++ we were using VB and Java. I remember the last semester he was constantly berating Java and VB talking about how they weren't real languages.  Someone challenged him and he said he trashed them b/c he knew them.  Well, I knew VBA from my work in marketing automating excel for statistical modelling.  And he knew squat. That's when I realized he was completely full of it - I mean, if you can't learn VB please don't tell me you are some uber genius programmer.

So I actually learned Lesson 1 in school - which is that with very few exceptions, the more people talk the less they know. I've worked and known more than a handful of people who played the "eccentric genius' role and people would always say "People that smart are always weird".  They would also say "He's really good in X and his problem is he's so smart and knows theory so well, he gets caught up in it".  X was always something like some obscure graphics API (something no one else knew so no one could call him on).  Any time I hear that someone is "Ivory Tower" or "Knows the textbook answer to everything but has no real world experience" my BS detector goes off - the only text book knowledge these clowns ever have is that they know how to use big words no one knows about or cares about. Similarly, when I hear "Well, when people are that smart they are always strange like him' the same thing kicks in. Sure, there are a lot of weird smart people. But there's way more weird dumb people and plenty of really smart people aren't weird in any real sense.  Sure, a little different sometimes  but in general, the uberwierd genius is usually just uberweird and only genius about pullng the wool over others eyes. Another tipoff is folks that "Used" to be some bigshot and used to work on 30000  Server clusters or whatever but are doing UI work on ASP.NET and don't know CSS or HTML - or some crap like that.   How many really smart people who are good at what they do do you know who moved down dramatically in IT over time?  Hmmmm?  Yah, me neither.  I don't mean to say everyone who had a better job at some point is full of it, but what I mean is the type who has done all sorts of amazing things in the past but who is painfully unimpressive now.  The type that 'used to make 200k a year' but now settles for 60k doing front end work on web sites.  At the end of the day, it's all about what you've done lately. It's all about what you can do now. And when you see a huge mismatch between history and the present, it's because someone is truth challenged.  Talk is cheap, especially in this arena.

Comments

# Andy said on August 1, 2007 1:41 PM:

In school:

1.) Whether something is correct or incorrect depends on the instructors interpretation of the subject matter not the actual correct answer.

2.) Professors base a lot of things on their opinions not any basis in fact.

3.) Math professors tend to be a lot more grounded and without bias then say, English Lit professors.

After school and after more than 10 years in the GIS, CAD and embedded systems industry:

1.) You will use every piece of Geometry, Trig, and Calculus you ever learned in school and still need to learn more.

2.) You will need to use every trick you ever learned for speeding up calculations in school because geometry is hard and if you don't know this stuff your software can literally take days to execute instead of seconds.

3.) Understanding how computers work is essential, especially where it concerns floating and fixed point math.

4.) You will use C, C++, and Assembler nearly every day of your career so you really need to understand them.

5.) Walk through every piece of a new systems design with as many people as you can find and be ready to listen to criticism because mistakes you don't fix at the design stage will become incredibly difficult to fix once the system has been coded.

6.) Developers who work on other types of systems such as medical, financial, web, etc. are never going to get what you do and won't get why you think certain things like pointers are important for developers to know. But you can learn a ton from them on how to design good user interfaces.

7.) Things developers think are intuitive are generally completely opposite from what a user will think is intuitive.

8.) Code like you will have to maintain it after totally forgetting what it does and how it does it. Because you will.

9.) You will very likely end up going back to school to take more math even if you minored in it.

10.) Keep the contact names and numbers of your math professors it can be a life saver.

# Bill said on August 8, 2007 4:20 PM:

Not surprisingly, I agree 100% with each of your comments Andy - great minds think alike

Search

This Blog

Tags

Community

Archives

News

My other sites

Cool Stuff

Book Stuff

Security

ORM

Data Access

Funny Stuff

Compact Framework Stuff

Web Casts

My KnowledgeBase Articles

My MVP Profile

Design Patterns

Performance

Debugging

Remoting

My Fellow Authors

My Books

LINQ

Misc

Speech

Syndication

Email Notifications