In 2010 I started this blog.Around the same time I started writing code at Finlays , seems like a long time ago. I am not a big shot blogger of course, I never show up in BAKE but I have maintained daily 4 figure blog hits since 2011, although in the last 1 year they have increased with blog searches to Idd Salim leading here, I am no big shot coder as well,I don’t attend meetings at innovation boards,nor will you find me in any Hub (Ihub,nailab, K street Hub etc) anymore. I have however been the brain child of some of the most amazing software products Kenyans use (Nasiishi Runda Imagine)
I sometimes wonder how different my life would have been had I not taken this road less traveled. One of my philosophies has always been to pick the choice that scares me a little. The status quo, the path of least resistance, the everyday routine — that stuff is easy. Anyone can do that. But the right decisions, the decisions that challenge you, the ones that push you to evolve and grow and learn, are always a little scary. I am thinking this because today marks 5 years of the blog known as endingcampo *insert smiley face* With this memorable stage I thought it best to share what I have learnt over the last 5 years.
When I started code back in the day I was given this–> Teach Yourself Programming in Ten Years post to read by my mentor Idd sallim. It made no sense to me but I followed it religiously none the less, didn’t turn out so bad if I say so myself. In the 5 years I have moved from a Junior dev to a Senior dev. Th distinction here is large and using my personal experience I will try to explain the difference
The Junior Dev Years
This was the stage where I knew it all, PHP,Java,C++ etc….this was the stage where I had more environments setup on my PC that I did porn. Quoting Jonathan Barronville “You know how to write imperative, functional, event-driven, and object-oriented programs. You not only knows how to write fabulous factory methods, sexy singletons, delicious decorators, and prodigious prototypes,you know when to properly use them (or at least you think you do).” This is the stage where I was comfortable with my tools after all I had really straggled to learn them. I remember with great stupidity arguing years ago with @zacckOS about using git. I had learnt to use SVN and I felt mimi ndio kusema. I had barely 3 production system in use and I felt like a code God. I looked at Senior developers and System architects and wondered what the fuss was all about. I remember building the EDS for Crown Berger with a collaboration Team from India and I felt like this guys didn’t know shyt, This was despite the fact that they got paid per hour while I had to wait for a completion cheque. I didn’t not know what experience was. I was a muggle who thought he was pure blood. I was a staple, you know how you eat ugali and Nyama before you drink every single time you order that Pilsner…yes..predictable…that’s what a staple is, I was too attached to my technologies and productions. Spend an extensive amount of time perfecting my code, thinking about all of the design patterns and principles that apply, writing unit tests (often really useless ones)
The Pre Senior Dev Years
I learnt there is a difference between having a ton of knowledge and being experienced. It took me a while to understand that, but the difference is quite interesting I must say.I have worked on Banking Systems, Teleco integrated systems, consumer based Systems, Enterprise systems, Module integration etc…And I slowly became a Senior Dev. After working for people I decided to setup shop on my own and founded Ujuzi <Code/>. I now had junior coders under me..young-lings who thought they were Yoda. As a more experienced coder I learnt how to break the less experienced in order to shape them based on the experience I had gathered.
I had the foolish assumption that the stuff that I was building were well architected…they were far from that. I have gathered lots and I can share just a few things here to benefit someone starting out
– As a Junior dev I was all about opening my IDE and building what the client asked for. But this is as wrong as taking out your dick and straight out over looking that foreplay.All I made sure was that the client was happy and that their requirements were met. As long as the poorly designed code produced the output requested by the client, all was good and everyone was happy. As a pre senior Dev I have learnt to take advantage fully of the design phase. I currently take 2-3 weeks simply doing designs,both system and UI designs. When it comes to UI I always use my designer to build the entire UI and then use simulation tools to present to the client before the actual work begins. On system design I have learnt to account for system architecture,networking and security , monitoring and accounting for emergency Database rollbacks and faulty transaction handling and importantly making sure one bad config on a key module component does not screw everything
Process is usually how to start from point A to Z with at most efficiency.This is where project management, planning, and project management tools come into play. working with great people such as Mbugua Njihia I have learnt the power of tools like Trello on SDLC. An in depth understanding of QA is also key
3. Source Code Management
When it comes to code management nothing can beat Git and or GitHub. This comes in handy when you have to commit code and also do rollbacks in case someone in the team messes with a module if you are collaborating. And also in the event of loss or damage of Hardware then you can easily rollback to your last commit and continue with the work
Writing Tests is always important when it comes to both Production and staging levels. The development should always be test driven TDD instead of final product driven (Does that make sense?? 🙂 ) Test Driven Development.
Learning from Jonathan Barronville:
Many junior developers know folks with “Senior” as a prefix or “Architect” as a suffix of their title whom we feel are less knowledgeable (in terms of programming-related skills) than them. One interesting characteristic of many of these folks though is that they have been around for a long time, worked for many companies (not necessarily), made many mistakes, learned from their mistakes, et cetera. However, unlike junior developers, they might not know every language, environment, and/or technology out there. Instead what they do is they make themselves experts in a few areas (usually one or two, as far as I have seen), and instead of learning every language, environment, and/or technology out there, they pick maybe one or two languages, environments, and/or technologies, and make themselves true experts in those.
What does it mean to be a true expert in a language, environment, and/or technology? In my dictionary, a true expert in anything, is simply someone who is an expert, by not only knowing and understanding their domain at an expert level (inside and out, that is), but through years of experimentation and making use of such expertise. In other words, in my humble opinion, any developer with the time and commitment can become an expert in, say, a language like C# in maybe about a year (keep reading, keep reading), but to become a true expert like the honorable Jon Skeet or Commons Ware, it takes years.