Since the time of BBS’s and up until the social media of today, people have been exchanging opinions using digital tools. My first encounters with discussion forums was positive and I’ve always been an eager participant in countless exchanges of opinions.
These days when most dialog happens in the context of 140 characters (or there about) I feel that something has changed. We no longer exchange opinions and listen to differing points of view. Countless “discussions” on Twitter look more like those debating religious topics. The parties involved only continue the discussion in a hope to convince the other side of “what is right”. I have seldom seen a twitter debate where a participant has said: “OMG you’re right! I see your point clearly”.
Did we see that in the old days of the bulletin board systems? I think the answer to some degree is yes. The old systems had a focus on content and discussions, whereas the new breed of systems have a focus on publicity, visibility and popularity. These characteristics does frame how we discuss in social media. The incentives are different and this makes for a different climate.
In the end it makes the culture of software developers even more focus on trends, hype and the next big thing. All of which are good thing, however it becomes a problem when all focus is on things that are still to come. While the present gets little attentions.
You can see this trend influencing Open Source development. Everyone is trying desperately to create The Next Big Thing, while few bother to contribute to existing software. This has been adressed in the front-end community where jQuery has reigned supreme for a long time. Developers would rather focus on creating new libraries solving similar problems, as opposed to contributing to jQuery. I think this behavior is due to the change in how we communicate with each other.
I’m not saying that there should be no focus on pushing things forward and doing new stuff. I’m not saying it’s always best to contribute to existing OSS projects.
What I am saying is that the way we interact also shapes what we create and how we collaborate.
So my former employer Opera Software has filed a lawsuit against me in Norway for 20 million NOK ($3.4 million), claiming breach of contract and that I must have given Mozilla information that I wasn’t allowed to that has caused severe damage to the company. I strongly disagree with their…
I spent the past two weeks not checking Twitter nor Tumblr, because I was on holiday on the amazing Seychelles. Needless to say, in paradise there is no need for that shit.
Funny thing is that now that I’ve returned back I don’t check them very often either. Perhaps I realized that these services are more like time wasters than something that provides vale to my life. However, the irony of me talking about this and posting it on the same services is not lost on me. Oh, well. Let’s get on with it shall we?
The first record of me interacting with a computer was a picture of me when I was three years old playing the game Pyton on a Tiki 100. I have always known what I wanted to do in life, I wanted to be a programmer and create things using computers. School was just an endless wait before I finally got to do what I wanted at the age of 19. That was when I finally got to Molde College where I could learn to program.
I am very much blessed to be able to make a living doing something I would do as a hobby if it wasn’t my job. I love what I do. However that doesn’t translate into loving my job. My job is the thing at a point in time that pays the bills and enables me to provide for my family. It is a business relationship where both parties benefit. My love is for what I do, which is being a programmer.
The creator of the Solid Snake game, Hideo Kojima, said something I can relate to which was something like “I dislike all the work needed to create something” (not an exact quote and I can not find the original post as it was some ten+ years ago). That is exactly how I feel, that sometimes there is an enormous amount of work required just to get to create something :)
I like writing. It helps me think, helps clarify my thoughts. I even think writing about coding has made me a better programmer. It has certainly made me think in a more structured way about my coding style. I just wish I took the time to write more often. I think you should too. And when you…
Great post! You should think before choosing methods and techniques.
I attended a great communityu conference in Bergen called Booster conf. They have a lot of students helping out as volunteers, which is a really great thing. Providing them with an insight into our industry is something that is really cool.
During the conference there are a series of Open Spaces and today I did something I’ve been thinking of doing for a while. I suggested giving some subjective advice to students. This was largely triggered by discussions during lunch related to working in fucked up organizations and projects. I just thought that they need to get a heads up on what to do, so they don’t end up wasting their talent and their opportunities. The session was really great and I think it wasn’t all “grumpy old guys telling war stories”.
The future of the world does belong to the young, hence the quote in this post. Only problem is that they’re very seldom aware of this fact (I know I never was). Especially when you’re a young IT-student there are just so many opportunities out there just waiting for you.
Look beyond what you see around you. You can reach for jobs and careers beyond what is in your near proximity and what you think is possible. The opportunities available to you are greater than ever before.
Take your time, you as a student should not be in a hurry. It is only those who try to recrute you who’s pressed for time.
The best jobs are seldom posted anywhere, so try poking around in networks and communities for which companies are doing cool stuff. Figure out what you think is fun and try figure out who matches you best
I think that #2 is perhaps the most important. Especially in Norway where there are few signs of a decline in demand for fresh talent to IT companies you should not rush.
Perhaps the best advice is to not listen to people who try to give you advice, figure it out on your own ;)
A popular mantra the past few years is that “software is a collaborative game”. However in a large organization or project, is this really possible?
When things get big and the number of communications lines exceed what is possible to handle for an individual, is it really possible to collaborate?
A behavior of teams when things get clouded is to construct a world which is tangible and possible to manage. They try to isolate themselves and put up mechanisms to detect breaches of their perimeter.
Architecture in such projects have a characteristic that there are numerous anti corruption layers all preventing a fail fast type approach. Each one added by the team which needs to have control over their domain. The result is that you get an architecture riddled with safety mechanisms you have a really hard time figuring out what went wrong when it does. Failing gracefully is good, but adding these mechanisms all over tour stack spells trouble.
There are of course other issues with teams moving into isolation. Collaboration with teams who’s main focus it to stay independent is challenging. How can you achieve a common understanding with protectionism as the strategy? Should you just accept the fact that teams need to isolate when things get complicated?
Optimizing the whole When everyone tries to create their own walled mansion with safe guards and security systems, how can you achieve a common way of doing things? Can you optimize the whole when everyone that would effect is only focused on their isolation?
When you’re in the phase of building something new I think the most important thing is to have a clear focus on who you’re optimizing for and why.
You could optimize for the creators happiness, future résumé and his or her opinions on what is The Right Way (which usually translates into the authors subjective opinion on The Right Way). Or you could optimize for speed. You can optimize for rewriting the whole thing later on. Or the infamous “doing it right from the start”, which everyone knows never ever works. You could optimize for the ones who are going to be building something using your code. There are also things like building for business value and such things, but that is just smoke clouding the real objectives which I have just mentioned.
I think one important aspect which always applies is to see how the thing you’re building will be used and how those developers prefer to work or are familiar with working. What good is a piece of software if nobody is able to use it to perform the task it was intended for? Or if an architecture is so locked down nothing is possible without major workarounds?
The human factor is important. What mental programming model are the currently using? How would introduction of a new model of programing which should coexist with the current? These questions are often lost to the ones establishing an architecture, framework or library. Searching for The Right Way is in my opinion less important. What is important is that you create something which others can build upon and utilize at their level of expertise.