Eat. Sleep. Code: The Computer Programming Thread, Ver. 010

Too organized is my problem. I get pigeon holed into one thing. No room for creativity because there’s a ton of middle management and product managers to get in the way. Management just wants to get everything done by the book without any rigidity, and PM just want to get a ton of useless features into the software while not letting you fix the core, underlying issues.

Everything is organized, by the book, structured, planned… to a fault. No room for creativity, no room for great ideas because they don’t fit on your “roadmap.” Everyone just clamors to fulfill their current Business Objectives that their raises are based on, without actually caring about the end result. The end result ends up being a bloated mess, and nobody ever notices or cares because they’re too busy with their eyes on the horizon.

At least in my experience. The days when my boss could come to my desk and be like, “Say, let’s do a multi threaded loading thing since this data takes 30 minutes to populate, so we can let them work with the data in the meantime” and we are able to do it goes out the door. Instead you get a PM document, 3 review meetings, 4 spec review meetings, 2 time estimate and task developing meetings, and then 3 weeks to get it done. Meh not as cool to me.

Startups are where you go.

Of course where I am now, the paycheck is easier and bigger, but I’m less happy

My experience with big business all relates to Lockheed Martin.

  1. Endless tiers of bureaucracy.
  2. SLOC is used for cost estimates? What the fuck? LINES OF CODE == estimated money spent? Fucking making every engineer tear out their eyes every time they see SLOC. Also completely ruins any legitimate dissection of the problem into pieces worthy of cost estimates, because it’s not that people are not smart, it’s that idiots are allowed to set rules.
  3. Too many managers with nothing to do.
  4. Under estimate costs, over-run budgets ALL THE FUCKING TIME. <-- Legitimate business model for Lockheed Martin + government contracts.
  5. Pissing me and my co-workers off.

The happy middle ground between big and start up is where I work. It’s a small office in California, while the main office is in New York, or was, until the company was bought and now the main office is in Sweden (Saab is gigantic). Big means a lot of cash, which can help with long term planning, but small in the office and the type of work completed. I think that’s why Google is such a popular place to work. They don’t fuck around with bullshit. I heard Cisco campus was also pretty awesome.

The problem with many big companies is they don’t ever get the chance to innovate long term solutions, run by rules rather than rational thought, or something like that.

Anyways I’m a Research Engineer, so imagine what people do in grad school, that’s what I do, but a lot more professionally. I just spent the past three weeks working a little extra time each day so I could have tomorrow and this weekend to myself. Time for a beer.

Sounds to me that management needs to be operated by people who know something about programming/software engineering.

Engineers make terrible managers. Well 99% of them do, and good luck getting enough of that 1% together in the same company : )

The issue with small companies is that people are too free to do what they want. Want to fix a feature? Just go ahead and fix it. Let’s not put things through QA, let’s not test anything, just do a code hack and put it right in production. Like I said, small companies promote the “hero syndrome”. Everyone is going to save the day, but really they’re just patching the problem. It’s no mystery why smaller upstarts are generally poorly ran, or have poor business models. They have a great idea, but rarely have much planning and structure behind it.

The issue with developers is that the write code and think they can just forget about it.  They aren't thinking about all the support people, and the users who use these products in production.   I know oftentimes, developers don't want to fix their own mistakes and rather move on to the next cool thing.  But unfortuantely, there is a product that has errors based one how the software was designed.    You remember in school how they taught you about exception handling?   You know how many developers don't put any sort exeception handling in their code?   I read source code all the time with absolutely no comments in them.   Poorly written code is pretty common in smaller companies.  After all, in small companies is pretty much tunnel vision.  Get it to work, get it to work now, who cares if your code is maintainable and supportable.

I like structure. I think there is a benefit for break fix developers to only work on break fix stuff, and have back end developers only work on back end stuff. I certainly don’t see the point of having one guy do 6 things. IF you’re doing everything, then something is surely lacking. The shops I’ve worked in have very complex pieces of software, highly distributed, and talks to multiple applications. There is no way in hell some guy making the business logic should be also writing servelets. Makes no sense, and not even realistic, when you think about the overall scale of the application.

But I’m rambling. The good thing about big companies is that you learn maturity. That’s really important, and you learn how to be accountable (something that is definitely lacking at smaller shops). I’ve spent most of my career in big companies (a few fortune 500, one fortune 100), and they’re overall better. I’ve definitely have been with smaller or mid sized companies, and while they grow pretty fast, they are literally all over the map. I worked for one company, a decent midsized company, who sales force was way too aggressive. We wrote bank software, which was to ensure users got real time balances. Not only was the sales force pulling in big banking names, but they were promising them some ridiculous uptime percentages. Oh, did I mention that they were running these off of Petium III Xeons which were already pretty old at the time (2007!). Again, that’s what small companies do, try to appear bigger than they really are. Needless to say, that company is in the middle of being acquired, simply because it was so poorly run, and tried to expand too far out of banking with no real model to do so.

I think a smaller company is a place you go later in your career. At least at that point you know better, you’re more mature, and you have many years of good practice. Bigger companies are restrictive, but they’re trying to maximize resources. On one hand, there is a lot of red tape in bigger companies, but on the other hand you don’t want people just freely doing anything they want to software that generates millions in revenues. It’s a shaky balance. But at the very least in big companies you are accountable. You write bad code there, and trust me you’ll have QA and a support staff trying to get you to fix it. And since you go through all sorts of change boards, needing to have you code promoted and peer reviewed, you’ll think twice and do the proper testing before you try to put your bad code into a release. It’s REALLY hard to learn that importance of that in a small company.

So would you say then that it’s basically an ego thing when you work at a small company? My teacher always says to check your ego at the door, and I agree with him. I’ve already experienced that crap in class, and it’s a fast way to kill a team.

Not commenting your code is infuriating, hate that shit.

I can agree with part of what you’re saying, but not all. You’re generalizing smaller companies just as bad as I was generalizing bigger ones. It’s like one extreme versus the other, with the truth somewhere in between.

I didn’t get into programming so I could be a digital assembly line person, where somebody passes me my function from the right, I add my code to it, and pass it down the line for the rest of my life. That’s the sort of feeling that I get with being pigeonholed into just one thing. Am I a UI guy? Am I a servlet guy? Am I a sql guy? Do I do C++ or Java? I’m a programmer, damn it, I can do whatever is needed. Sure I have my core strengths, but it’s boring to be forced to only do what I’m best at. That doesn’t mean that I should be handling everything from the front end to the back end, but I firmly belive that I should be able to if needed. Maybe it takes me some time to get some traction in the new stuff, but I should be able to handle it.

As an example, the company had outsourced (bad bad bad) some software to a company, who was no longer pulling their weight in supporting it. This meant they had to give us the source code on it. My boss came over to me, dropped me the source code, and said basically “Think you can figure it out?” It was a web application, first one I had worked on commercially (school projects we made a facebook clone so I had some experience) but it used jsp and flash, neither of which I had ever worked in. A month later, I had it up, running, fixed all outstanding issues, and had learned a decent bit about JSP, tomcat, and Flash.

I have no desire to just be a replaceable cog in a giant company, since that’s all they’ll see you as. Keep your functionality narrow, so that you can be replaced on a whim. Great for them, terrible for the cog.

Of course I’m sure there’s examples of good big companies (googles) and terrible small companies (failed startups), and I don’t have experience with enough to claim to know it all, but this is just from my personal experiences.

I’d totally recommend going to a smaller company (I won’t say startup as the company I went to was well established already) where you have some freedom and flexibility first, that way you can learn some things and get involved in lots of parts of software, then settle and specialize later in something that interests you.

No it’s not ego. It’s just money. Small companies love to hire people right out of college. College kids love to get in there and just start coding away. I know I was the same way when I was in college. I use to love to just write code and get it to work. Things program design and analysis were boring to me, and I really didn’t see the point in them. Also other best practices models like Xtreme Programming made little sense to me. When you’re out of college, you really want to show the world what you know how to do. You want to be that guy who saves the day. The thing is, you just want to make stuff work.

The problem is just because something works, doesn't mean it's maintainable or supportable.  Again, as developers it's quite normal for us to not think about everyone our code affects.  Yeah I could have "made something work", but I may not have added any exeception handling.   Or I don't give any message back to the user stating what went wrong.    It just work, but what if there is an error?  Can your support staff actually solve the problem based on the error messages you coded into the application?    Or if the wrong conditions or met, does your code become unpredictable?  I see it happen a lot, people go under the hood, change about 3 or 4 things, and call it a day.   People build ontop of bad code, which was poorly designed.   It happens in big companies, don't get me wrong, but big companies can and WILL promote a new product and retire the old one if they really need to.

And yeah there is no room for ego. In the real world, you are one programmer out of many pretty much working on the same product. you need to be able to communicate with other developers, and people who deal with users in order to know how to go about writing your code. There are some really lazy designs in the real world. I work mainly with databases these days, and you even see poor designs in that world too. Coding, IMHO is only one part of being a developer. you need to have the right analytical skills to do so.

I know if this were 13 years ago and I was just getting out of college, I would just want to go somewhere and start writing code. Not commenting it, making it unreadable, and then justifying these things by saying “it work doesn’t it”. The ONLY reason I have the persepctive I do today is because of the maturity gained through big shops. I see guys who come from smaller companies, try to go at these large apps in corporate America guns blazing. It’s a culture shock to a lot of them, since they can’t just do what they want. And thank God they can’t. They think they’re God’s Gift to programming, but they’re developers greatest curse. Yeah, small companies can pump up your ego. But big companies will put you right in your place.

Also I will be the first to admit it could just be my current company that is terribly managed; in fact I know it is, and it could be miles better in other ones

I think there is a difference between a programmer and a developer. What you’re referring to are code shops, which are commonly outsources to India. A developer is someone who really analyze problems, get feedback from users, and help build requirements needed for the software. This role is broken up company by company, but usually a developer (or software engineer) needs to be highly analytical, and has to be able to interact with various stakeholders. You also need to be aware of different quality models (every major company has one). No you aren’t just creating a function and passing it off, you’re actually trying to get something to work.

A lot of my experience has been in really large enterprise systems with thousands to millions of users. In general the applications I’ve work with are pretty complex with a lot f moving pieces. In larger companies, writing good code is mandatory. If a developer leaves the company or moves into another roles of divison, you really need to be able to support this code. Before I got this job I’m at now, the application I worked on was like this:

A massive E-bill application which had:

A mainframe
Mainframe payment software engine
Mainframe Database

RS/6000 gateway

Linux servers
An Oracle database

Were talking about MILLIONS of dollars in payments and transactions all while trying to meet Service Level Agreements. Do you really want someone tampering with that sort of code. Let’s say you needed to fix a problem with payments (did I mention this is all done through the web). It’s really hard to isolate where the problem could have gone wrong with the really complex workflows in such a big application. And even when you write your code, who does it effect down and upstream? A developer answers these questions, and generally their code to written around these answers.

Now I never worked at IBM, so they may have the assembly line approach. But in a lot of companies, there is a big connotation between being called a Software Engineer or a Developer over simply being called a programmer.

Bad management exist in bigger companies. But management doesn’t have that sort of leverage.

I have no issue with how stuff is in terms of development in big companies. While it’s drab and boring to a lot of people, I think seeing how a company handles different situations that could come up in the SDLC is really neat.

But these days I’m more a business guy than a blue blooded programmer.

At the top level of corporate America is where things make no sense. I honestly don’t know what they’re thinking sometimes. I often think that they just go some college student who came up with some bottomline figures, but had terrible ideas on how to implement it. For example, my last company wanted their share prices to stay up. Despite the fact a lot of people were leaving the company, my company refused to replace anyone. That way their shares don’t drop any points. Only someone totally stupid comes up with ideas like that. And sometimes big companies get too concerned with shareholder confidence (like my last company). We destroy a whole development team for an app that’s responsible for 30% of your annual income? And senior developers leave but you replace them with kids right out of college? Okay so you can pay 50k for what was costing you 95k to 100k, but then the quality goes down.

I don’t excuse big companies, the management in questionable there sometimes.

Just to clarify, my company is currently being acquired by IBM, I don’t actually work for IBM yet and I don’t know what their management is like. I’m hoping it’s miles better.

In the situation you described, you don’t want people able to go in and mess something critical up, absolutely. But what I’m saying is not that the company should change their methods, but rather that I want to avoid a company and an environment like that entirely. There are plenty of jobs out there that don’t require such rigid rules, where a mistake doesn’t blow up into something huge. Those are the types that I enjoy more. There are types of environments that work for different types of projects, I’d rather just stay on ones where I don’t feel like I don’t matter.

As for dealing with customers, you’re crazy. The last thing I want to do is deal with customers. Thats for Product Management and my Manager to deal with. Give me the specs and the requirements and let me design and code a system that works. The main problem I see is that most developers I work with are stuck in this narrow minded view where they don’t see or understand the bigger picture, which leads to problems down the road. I think somebody who has a better understanding of the whole system, and then has intimate knowledge of their own piece, can better make their part better than somebody who has no idea how their code fits into a bigger scheme. That shit drives me crazy.

Netflix is an example of a company I wouldn’t want to work with. I’ve talked to people who were engineers there. (So this process may be out-dated by now)

  1. Run by marketing. We want this. We want that. Etc. Get it done yesterday.
  2. An engineer is given more work than can be completed and is told to do it in two weeks.
  3. Netflix products are a system of systems, but the engineers on each system are essentially not allowed to talk to each other or plan for the long term, so each engineer does what he or she knows best. (This is why streaming netflix uses nearly 100% of one CPU core on my brand shiny new intel core i7, even after the video has finished streaming)

This resulted in a set of systems, each using different languages and platforms to do somewhat over-lapping things, and now they all have to communicate and work in perfect harmony…

Netflix really needs to let the Developers manage the engineering parts.

Excellent point.
To be able to work on a very large project, an engineer requires experience with the entire system, or else very bad unexpected side effects occur.

And @Branh0913
I sometimes forget there is such a thing as a ‘programmer’ as opposed to a developer. It is a very important distinction. Getting a chance to breathe and design something correctly is well worth it.

It is unfortunate when some rules are in place such that several steps have to take place before a developer can work on something. Sometimes planning with other people is required, sometimes it’s not, and how much planning is important. Usually it’s just a meeting with your project manager or fellow system experts. I imagine using a chain saw to cut a small branch protruding from a bush, too much power for just a small task. What is always required, as you stated, is QA.

I have to go back to my Lockheed example. Someone up top said, ‘do this.’ So the managers get so caught up with doing this, they don’t stop to convince the person who knows the least, the manager on top, this is the wrong approach and a big waste of time. But it’s regulation.

There are people who work at Lockheed have these regular email battles. Seriously. They reply to all sending vehement messages, getting so caught up in little details, they forget what’s happening.

This is further exacerbated when someone says, “It’s not my department, let’s get the Linux script person to do it.” Or even worse, YOU want to do something, but you’re not allowed to fix it, because it’s not your department…

Sharing is caring.

EVERY company needs to do this. I work for an ISP (Windstream), and we released a product to help our customers connect to our PC’s, so we could service them. Then they decided they could make money off this, and a ONE PAGE app suddenly became 4 tabs each with several pages of info, most of which the average PC user doesn’t comprehend. This is the worst God awful piece of shit in existence. We are essentially beta testing it, and the entire point is it bombards our users with ads and popups asking them to sign up for more services.

Now most of my calls are to either fix this piece of shit, or because it just doesn’t work at all (click on Get Help Now button, which just redirects you back to the page that asks you to buy more services). I fucking hate it, everybody here hates it, and you can just tell somewhere a business guy was just telling them to add more features, blindly ignorant of what should or shouldn’t go in this program.

You’ll enjoy game development with that attitude, there’s definitely a lot of that, and even when I’m not working on all kinds of different stuff I’m in a room with all the people that are so there’s lots of talking(especially when hard problems come up). I’m currently the only programmer working on a project for an entire game that was made in unreal 2 visual studio 2003, I updated it to work with visual studio 2008 and am now fixing all sorts of bugs/adding features, all that without ever having TOUCHED any form of unreal script before hand. My original project was mobile development(never touched) done mainly with c#(barely touched) in the unity engine(always made my own engines before, or was part of the creation process). Even hobbyist game development(really especially hobbyist game development) will have tons of variety in what you have to do, game development is one of the hardest most involved forms of coding.

yeah big corporations are bloated by tons of process and bureaucratic red tape, and if you don’t work for a tech company, you have a business guy trying to manage software shit, which is a recipe for disaster.

LOL is all I have to say to that. jesus christ. and this is why its good to work for a startup company at least once in your life. its a free and fun lifestyle. pay is less but at least you don’t have to deal with crap like that.

That’d be the ultimate goal. Unfortunately I didn’t have luck out of college getting in to anywhere, since everybody wants in, and they’re super selective. I guess I didn’t have what it took after multiple different interviews. So I took a job at a smaller local company, loved every person there in my department, learned a LOT, made a ton of friends, and slowly have started to hate it since we were bought out and on the first day half my friends were fired so they could do the development in their Bay Area Office (and which they never were able to do properly). Ah well. Someday maybe. That’s why we’re doing our game jam project tomorrow : )

If you have a bunch of real coding experience AND you have hobbyist game development I’m sure you’ll be able to break in, I saw lots of jobs on gamasutra(which if I haven’t mentioned before everyone should take a look at) that actively said game industry experience not required.

Really?

I thought that Unity could only be used for free on a trial basis only. I’m going to need to look into this again…

I could be wrong, since I was using unity on a commercial game project and had the full version, but i was decently sure the free version wasn’t just a trial.