This is a slightly more structured view on my thoughts of how people become Software Engineers, the process and stages. What I've written is totally based on my own experiences or what I've observed other people doing and effectively I see it has having two segments, ABC and 123. The ABC segment is step by step and the 123 segment is expandingly (not a real word but I think says what I'm thinking) recursive.<!-- more -->
A) Ahhhhhhh, work, work, work!
In College or Uni. you get shown, this is a compiler, it takes this english like thing call "source code" and turn it into 1s and 0s. And of course if you don't know any better you buy that. Sometimes you might wonder, just how on earth does it do that and you'll get an answer akin to "Oh it's not important for now, just know that it does it". And later you're like hmmm ok but it doesn't do that, even the examples you showed me makes no sense, it does NOT do what you claim it does! ...only later to find out you forgot a semi-colon.
So you started off just want to make this thing compile. And until you do, your every day seems to be spent trying to please this "magical compiler".
B) Bitch I own you now
Moved on, you can make it work. And suddenly it is not enough to just work. You want it to do fancy things, you want it to sing and dance and tuck you in at night...
Now you're slowly involved in communities, on IRC, in forums, StackOverflow. The more you know, the more you realize how little you know. At this stage you're impressionable and every over hyped piece of Tech just gets you going! And I imagine it's almost like you're on speed.
[caption id="attachment_534" align="aligncenter" width="630"] Mashable[/caption]
I hardly have time for it but sometimes I take a step back and I look at what I've done, I look at what I've achieved and how little or much time it has taken. From the outside world, people tend to be surprised, in awe and often think I've done so well to be where I am (usually because of my age, relative immaturity blah blah).
But often I look at the same things and I just think, why did this take me so long, I need to do more, more, more, give me moreeeeeee. And I'll discuss this later (See Epiphany) on but this is not me being pessimistic, I think it is something else, something better and I hope to never lose it.
C) Consume, consume, consume
Your participation in these communities brings you ever closer to the real world, it makes you realize you're only at the start of this journey, in fact, you still haven't left the starting line yet. So now you're angry, you transform into the Hulk and instead of smashing you consume, consume and consume.
[caption id="attachment_530" align="aligncenter" width="600"] Taken from here [/caption]
As part of this you go into a cycle, very much like the ABC stages but this time it is cyclic. This circular status doesn't seem to do away either.
1) You start to think I should be doing what these guys are doing. You here talk of how optimizations are good and later how optimizing too early is bad.
2) You realize actually, everything that comes from other Software Engineers should be taken with a grain of salt (there are some communities where their advice should be taken with a whole bucket of salt, that aside...)
3) You further realize, well there is some truth to what they say. It is usually the case that we either exaggerate or underrate our peers and their work. So at this stage we distill and try to sift through ourselves and cherry pick the portions that are facts, being objective and neglecting the fallacies.
And so we end up in a situation like this.
[caption id="attachment_531" align="aligncenter" width="630"] Taken from here[/caption]
Now if you notice, as Software Engineers, we don't seem to break out of this circular state, what tends to happen is we start off with a 123 that is very narrow, as we master those 123s we branch out and widen our gaze, usually as a result of some experience we had within the previous 123 cycle. This goes on and on and the more you learn, the more you now realize, actually I know a fair amount now. Stop, stop, stop it I say! (Un?) Fortunately by this stage there is no stopping it, you've realized that there is so much to know that you won't know it all, but even without realizing you continue to know more and your state of 123s continue to expand.
It essentially goes into automatic mode. And the advent of Twitter in all its news sharing glory means you're exposed to new things to pop you into the next state of 123 without you having to do very much.
There comes a stage in one of the 123s where you have a sort of new age Tech Epiphany. Firstly, You start writing blog posts like this. Then you realize you're doing more reflection than ever before. As far as I know this is just another layer of the 123 maze, perhaps I've just not gotten to 2 or 3 yet so I can't tell.
None of this is about being pessimistic, the need for more or no more is just a driving feeling. Like an addiction, it gets you beyond the "I know what I like and I like what I know" stage, it makes you adventurous.
This is the stage where you start looking at the code you craft and you think, this is required, this isn't, this is not very elegant but making so means it won't be very efficient This is overly efficient this micro optimization isn't necessary and further complicates and bloats the whole thing. This feature was added "just in case" but the reality is that is highly unlikely to happen, in fact by then this library won't be in use or if it is it won't be in active development.
It is the stage where you start to see what is going too far and where to strike the balance between brittle and overly convenient software. Your whole thought process has evolved into another level of the 123 maze and with it the quality of what you craft. So your mind becomes more like this:
[caption id="attachment_532" align="aligncenter" width="400"] taken from[/caption]
This whole thing is very mechanical in a sense. The more weird and wonderful experiences you have the better it all becomes, the better you become. As I'm watching my story unfold, I wonder where I'll end up and if in 6 months or a year or two I'll look back on this post and just think "wow, I was such an idiot". I'm writing all this and hoping I'm not the only one who has observed this (that'd be very bad, either the world is going ape or everyone's experience has been totally different. In which case, how will we know who is right? We'll end up with this: